Using new-style readme scripts

This commit is contained in:
Graham Nelson 2022-04-23 23:41:01 +01:00
parent 7b90e88dab
commit 0cc1077c47
31 changed files with 619 additions and 1371 deletions

View file

@ -25,8 +25,6 @@ see //foundation: A Brief Guide to Foundation//.
@e hash_table_entry_usage_CLASS
@e language_function_CLASS
@e language_type_CLASS
@e macro_CLASS
@e macro_tokens_CLASS
@e macro_usage_CLASS
@e makefile_specifics_CLASS
@e nonterminal_variable_CLASS
@ -116,9 +114,7 @@ DECLARE_CLASS(hash_table_entry_usage)
DECLARE_CLASS(hash_table_entry)
DECLARE_CLASS(language_function)
DECLARE_CLASS(language_type)
DECLARE_CLASS(macro_tokens)
DECLARE_CLASS(macro_usage)
DECLARE_CLASS(macro)
DECLARE_CLASS(makefile_specifics)
DECLARE_CLASS(nonterminal_variable)
DECLARE_CLASS(para_macro)

View file

@ -113,11 +113,11 @@ void Main::follow_instructions(inweb_instructions *ins) {
@<Translate a makefile@> =
if ((ins->makefile_setting) && (ins->prototype_setting == NULL))
ins->prototype_setting = Filenames::from_text(I"makescript.txt");
ins->prototype_setting = Filenames::from_text(I"script.mkscript");
if ((ins->gitignore_setting) && (ins->prototype_setting == NULL))
ins->prototype_setting = Filenames::from_text(I"gitignorescript.txt");
ins->prototype_setting = Filenames::from_text(I"script.giscript");
if ((ins->writeme_setting) && (ins->prototype_setting == NULL))
ins->prototype_setting = Filenames::from_text(I"READMEscript.txt");
ins->prototype_setting = Filenames::from_text(I"script.rmscript");
if (ins->makefile_setting)
Makefiles::write(W, ins->prototype_setting, ins->makefile_setting,
WebModules::make_search_path(ins->import_setting));

View file

@ -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, '#');
}
@ Our one non-standard macro simply includes a file of standing material which

View file

@ -35,7 +35,8 @@ void Makefiles::write(web *W, filename *prototype, filename *F, module_search *I
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, STORE_POINTER_makefile_specifics(specifics));
Preprocessor::preprocess(prototype, F, header, L,
STORE_POINTER_makefile_specifics(specifics), '#');
}
@ We will allow a makescript to declare "components" (webs, really), so we need

View file

@ -2,248 +2,35 @@
To construct Readme and similar files.
@ This is a very simple generator for |README.md| files, written in Markdown
syntax, but with a few macro expansions of our own. The prototype file, which
uses these extra macros, is expanded to the final file, which does not.
As we scan through the prototype file, we keep track of this:
@ This is a simple use of //foundation: Preprocessor//. Note that we use a
non-standard comment syntax (i.e., |/| at start of line, not |#|) to avoid
colliding with Markdown's heading syntax.
=
typedef struct write_state {
struct text_stream *OUT;
struct linked_list *known_macros; /* of |macro| */
struct macro *current_definition;
struct macro_tokens *stack_frame;
} write_state;
void Readme::write(filename *from, filename *to) {
WRITE_TO(STDOUT, "write-me: %f --> %f\n", from, to);
write_state ws;
ws.current_definition = NULL;
ws.known_macros = NEW_LINKED_LIST(macro);
macro *V = Readme::new_macro(I"version", NULL, NULL);
ADD_TO_LINKED_LIST(V, macro, ws.known_macros);
macro *P = Readme::new_macro(I"purpose", NULL, NULL);
ADD_TO_LINKED_LIST(P, macro, ws.known_macros);
macro *A = Readme::new_macro(I"var", NULL, NULL);
ADD_TO_LINKED_LIST(A, macro, ws.known_macros);
ws.stack_frame = NULL;
text_stream file_to;
if (Streams::open_to_file(&file_to, to, UTF8_ENC) == FALSE)
Errors::fatal_with_file("can't write readme file", to);
ws.OUT = &file_to;
TextFiles::read(from, FALSE, "unable to read template file", TRUE,
&Readme::write_helper, NULL, (void *) &ws);
Streams::close(&file_to);
void Readme::write(filename *prototype, filename *F) {
linked_list *L = NEW_LINKED_LIST(preprocessor_macro);
preprocessor_macro *mm = Preprocessor::new_macro(L,
I"bibliographic", I"datum: DATUM of: ASSET",
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, '/');
}
@ The file consists of definitions of macros, made one at a time, and
starting with |@define| and finishing with |@end|, and actual material.
@ And this is the one domain-specific macro:
=
void Readme::write_helper(text_stream *text, text_file_position *tfp, void *state) {
write_state *ws = (write_state *) state;
text_stream *OUT = ws->OUT;
match_results mr = Regexp::create_mr();
if (Regexp::match(&mr, text, L" *@end *")) {
if (ws->current_definition == NULL)
Errors::in_text_file("@end without @define", tfp);
else ws->current_definition = NULL;
} else if (ws->current_definition) {
if (Str::len(ws->current_definition->content) > 0)
WRITE_TO(ws->current_definition->content, "\n");
WRITE_TO(ws->current_definition->content, "%S", text);
} else if (Regexp::match(&mr, text, L" *@define (%i+)(%c*)")) {
if (ws->current_definition)
Errors::in_text_file("@define without @end", tfp);
else {
macro *M = Readme::new_macro(mr.exp[0], mr.exp[1], tfp);
ws->current_definition = M;
ADD_TO_LINKED_LIST(M, macro, ws->known_macros);
}
} else {
Readme::expand_material(ws, OUT, text, tfp);
Readme::expand_material(ws, OUT, I"\n", tfp);
}
Regexp::dispose_of(&mr);
void Readme::bibliographic_expander(preprocessor_macro *mm, preprocessor_state *PPS,
text_stream **parameter_values, preprocessor_loop *loop, text_file_position *tfp) {
text_stream *datum = parameter_values[0];
text_stream *asset_name = parameter_values[1];
text_stream *OUT = PPS->dest;
writeme_asset *A = Readme::find_asset(asset_name);
if (A->if_web) WRITE("%S", Bibliographic::get_datum(A->if_web, datum));
else if (Str::eq(datum, I"Build Date")) WRITE("%S", A->date);
else if (Str::eq(datum, I"Version Number")) WRITE("%S", A->version);
}
@ The "content" of a macro is its definition, and the tokens are named
parameters.
=
typedef struct macro {
struct text_stream *name;
struct text_stream *content;
struct macro_tokens tokens;
CLASS_DEFINITION
} macro;
macro *Readme::new_macro(text_stream *name, text_stream *tokens, text_file_position *tfp) {
macro *M = CREATE(macro);
M->name = Str::duplicate(name);
M->tokens = Readme::parse_token_list(tokens, tfp);
M->content = Str::new();
return M;
}
typedef struct macro_tokens {
struct macro *bound_to;
struct text_stream *pars[8];
int no_pars;
struct macro_tokens *down;
CLASS_DEFINITION
} macro_tokens;
@ =
macro_tokens Readme::parse_token_list(text_stream *chunk, text_file_position *tfp) {
macro_tokens mt;
mt.no_pars = 0;
mt.down = NULL;
mt.bound_to = NULL;
if (Str::get_first_char(chunk) == '(') {
int x = 1, bl = 1, from = 1, quoted = FALSE;
while ((bl > 0) && (Str::get_at(chunk, x) != 0)) {
wchar_t c = Str::get_at(chunk, x);
if (c == '\'') {
quoted = quoted?FALSE:TRUE;
} else if (quoted == FALSE) {
if (c == '(') bl++;
else if (c == ')') {
bl--;
if (bl == 0) @<Recognise token@>;
} else if ((c == ',') && (bl == 1)) @<Recognise token@>;
}
x++;
}
Str::delete_n_characters(chunk, x);
}
return mt;
}
@ Quotes can be used in token lists so that literal commas and brackets can
be used without breaking the flow.
@<Recognise token@> =
int n = mt.no_pars;
if (n >= 8) Errors::in_text_file("too many parameters", tfp);
else {
mt.pars[n] = Str::new();
for (int j=from; j<x; j++) PUT_TO(mt.pars[n], Str::get_at(chunk, j));
Str::trim_white_space(mt.pars[n]);
if ((Str::get_first_char(mt.pars[n]) == '\'') &&
(Str::get_last_char(mt.pars[n]) == '\'')) {
Str::delete_first_character(mt.pars[n]);
Str::delete_last_character(mt.pars[n]);
}
mt.no_pars++;
}
from = x+1;
@ So much for creating macros. Now we can write the actual expander. As can
be seen, it passes material straight through, except for instances of the
notation |@name|, possibly followed by a bracketed list of parameters.
=
void Readme::expand_material(write_state *ws, text_stream *OUT, text_stream *text,
text_file_position *tfp) {
match_results mr = Regexp::create_mr();
if (Regexp::match(&mr, text, L"(%c*?)@(%i+)(%c*)")) {
Readme::expand_material(ws, OUT, mr.exp[0], tfp);
macro_tokens mt = Readme::parse_token_list(mr.exp[2], tfp);
mt.down = ws->stack_frame;
ws->stack_frame = &mt;
Readme::expand_at(ws, OUT, mr.exp[1], tfp);
ws->stack_frame = mt.down;
Readme::expand_material(ws, OUT, mr.exp[2], tfp);
} else {
WRITE("%S", text);
}
Regexp::dispose_of(&mr);
}
@ If we run into the notation |@something|, it's possible that |something| is
the name of a parameter somewhere in the current stack, either on the top
frame or on frames lower down. The first match wins... and if there are no
matches, then it must be a macro name.
=
void Readme::expand_at(write_state *ws, text_stream *OUT, text_stream *macro_name,
text_file_position *tfp) {
macro_tokens *stack = ws->stack_frame;
while (stack) {
macro *in = stack->bound_to;
if (in)
for (int n = 0; n < in->tokens.no_pars; n++)
if (Str::eq(in->tokens.pars[n], macro_name)) {
if (n < stack->no_pars) {
Readme::expand_material(ws, OUT, stack->pars[n], tfp);
return;
}
}
stack = stack->down;
}
macro *M;
LOOP_OVER_LINKED_LIST(M, macro, ws->known_macros)
if (Str::eq(M->name, macro_name)) {
ws->stack_frame->bound_to = M;
Readme::expand_macro(ws, OUT, M, tfp);
return;
}
Errors::in_text_file("no such @-command", tfp);
WRITE_TO(STDERR, "(command is '%S')\n", macro_name);
}
@ So, then: suppose we have to expand |@example(5, gold rings)|. Then the
|macro_name| below is set to |example|, and the current stack frame contains the
values |5| and |gold rings|.
=
void Readme::expand_macro(write_state *ws, text_stream *OUT, macro *M, text_file_position *tfp) {
if (Str::eq(M->name, I"version")) @<Perform built-in expansion of version macro@>
else if (Str::eq(M->name, I"purpose")) @<Perform built-in expansion of purpose macro@>
else if (Str::eq(M->name, I"var")) @<Perform built-in expansion of var macro@>
else {
ws->stack_frame->bound_to = M;
Readme::expand_material(ws, OUT, M->content, tfp);
}
}
@<Perform built-in expansion of version macro@> =
if (ws->stack_frame->no_pars != 1)
Errors::in_text_file("@version takes 1 parameter", tfp);
else {
TEMPORARY_TEXT(program)
Readme::expand_material(ws, program, ws->stack_frame->pars[0], tfp);
Readme::write_var(OUT, program, I"Version Number");
DISCARD_TEXT(program)
}
@<Perform built-in expansion of purpose macro@> =
if (ws->stack_frame->no_pars != 1)
Errors::in_text_file("@purpose takes 1 parameter", tfp);
else {
TEMPORARY_TEXT(program)
Readme::expand_material(ws, program, ws->stack_frame->pars[0], tfp);
Readme::write_var(OUT, program, I"Purpose");
DISCARD_TEXT(program)
}
@<Perform built-in expansion of var macro@> =
if (ws->stack_frame->no_pars != 2)
Errors::in_text_file("@var takes 2 parameters", tfp);
else {
TEMPORARY_TEXT(program)
TEMPORARY_TEXT(bibv)
Readme::expand_material(ws, program, ws->stack_frame->pars[0], tfp);
Readme::expand_material(ws, bibv, ws->stack_frame->pars[1], tfp);
Readme::write_var(OUT, program, bibv);
DISCARD_TEXT(program)
DISCARD_TEXT(bibv)
}
@ An "asset" here is something for which we might want to write the version
number of, or some similar metadata for. Assets are usually webs, but can
also be a few other rather Inform-specific things; those have a more limited

View file

@ -655,24 +655,6 @@ not |.mkscript|, and:
if the web provided no script of its own; the idea is that you can then list
some additional things to ignore.
@h Ctags.
Each time a web is tangled, Inweb writes a |tags| file to the web's home
directory, containing a list of //Universal ctags -> https://ctags.io//
for any structures, functions or constant definitions found in the web. You
need do nothing to make this happen, and can ignore the file if it's of no
use. If you are editing a web in certain text editors, though, such as
//BBEdit -> https://www.barebones.com/products/bbedit// for MacOS, then this
should make code completion and definition lookup features work.
You can however write the file elsewhere:
= (text as ConsoleText)
$ inweb/Tangled/inweb W -tangle -ctags-to secret_lair/my_nifty.ctags
=
or not at all:
= (text as ConsoleText)
$ inweb/Tangled/inweb W -tangle -no-ctags
=
@h README files.
Repositories at Github customarily have |README.mk| files, in Markdown
syntax, explaining what they are. These of course should probably include
@ -680,55 +662,20 @@ current version numbers, and it's a pain keeping that up to date. For
really complicated repositories, containing multiple webs, some automation
is essential, and once again Inweb can oblige.
= (text as ConsoleText)
$ inweb/Tangled/inweb W -write-me W/README.mk
$ inweb/Tangled/inweb W -prototype W/W.rmscript -write-me W/README.mk
=
expands a script called |READMEscript.txt| into |README.mk|. Alternatively,
the script can be specified explicitly:
= (text as ConsoleText)
$ inweb/Tangled/inweb W -prototype MySpecialThang.txt -write-me W/README.mk
=
@ Everything in the script is copied over verbatim except where the |@| character
is used, which was chosen because it isn't significant in Github's form of
Markdown. |@name(args)| is like a function call (or, in more traditional
language, a macro): it expands out to something depending on the arguments.
|args| is a comma-separated list of fragments of text, which can themselves
contain further uses of |@|. (If these fragments of text need to contain
commas or brackets, they can be put into single quotes: |@thus(4,',')| has
two arguments, |4| and |,|.) Three functions are built in:
The same conventions and notations are used here as for makefiles and gitignores
(see above), except that the comment character is no longer |#|, since a |#|
at the start of a line means a heading in Markdown. Instead, a line is a comment
if its first non-whitespace character is a forward-slash |/|.
(a) |@version(A)| expands to the version number of |A|, which is normally the
path to a web; it then produces the value of the |[[Version Number]]| for
that web. But |A| can also be the filename of an Inform extension, provided
that it ends in |.i7x|, or a few other Inform-specific things for which
Inweb is able to deduce a version number.
(*) The special makefile macros are not available, though |set| and |repeat| are;
(b) |@purpose(A)| is the same, but for the |[[Purpose]]| of a web. It's
blank for everything else.
(c) |@var(A,D)| is more general, and reads the bibliographic datum |D| from
the web indicated by |A|. In fact, |@version(A)| is an abbreviation for
|@var(A,Version Number)| and |@purpose(A)| for |@var(A,Purpose)|, so this
is really the only one needed.
@ It is also possible to define new functions. For example:
= (text)
@define book(title, path, topic)
* @title - @topic. Ebook in Indoc format, stored at path @path.
@end
=
The definition lies between |@define| and |@end| commands. This one takes
three parameters, and inside the definition, their values can be referred
to as |@title|, |@path| and |@topic|. Functions are free to use other
functions:
= (text)
@define primary(program, language)
* @program - @purpose(@program) - __@version(@program)__
@end
=
However, each function needs to have been defined before any line on which
it is actually expanded. A definition of one function |A| can refer to another
function |B| not yet defined; but any actual use of |A| must be made after
both |A| and |B| have been defined. So, basically, declare before use.
(*) The special macro |{bibliographic datum: ... of: ...}| expands to the value
of the named bibliographic datum for the program named. |Version Number| is
especially useful, and is available even for some Inform assets which are not
webs and do not therefore have bibliographic data of their own -- interpreter
templates and Inform 7 extensions, for example.
@h Semantic version numbering and build metadata.
When Inweb reads in a web, it also looks for a file called |build.txt| in
@ -763,3 +710,21 @@ is advanced by one.
Running |-advance-build-file B| does this for a stand-alone build file |B|,
without need of a web.
@h Ctags.
Each time a web is tangled, Inweb writes a |tags| file to the web's home
directory, containing a list of //Universal ctags -> https://ctags.io//
for any structures, functions or constant definitions found in the web. You
need do nothing to make this happen, and can ignore the file if it's of no
use. If you are editing a web in certain text editors, though, such as
//BBEdit -> https://www.barebones.com/products/bbedit// for MacOS, then this
should make code completion and definition lookup features work.
You can however write the file elsewhere:
= (text as ConsoleText)
$ inweb/Tangled/inweb W -tangle -ctags-to secret_lair/my_nifty.ctags
=
or not at all:
= (text as ConsoleText)
$ inweb/Tangled/inweb W -tangle -no-ctags
=

View file

@ -85,5 +85,5 @@ If you have also built Intest as "work/intest", then you can try these:
### Colophon
This README.mk file was generated automatically by Inweb, and should not
be edited. To make changes, edit scripts/READMEscript.txt and re-generate.
be edited. To make changes, edit inweb.rmscript and re-generate.

File diff suppressed because it is too large Load diff

View file

@ -89,7 +89,7 @@ function togglePopup(material_id) {
<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#SP4_1_3">&#167;4.1.3</a><br/>Pattern Matching - <a href="4-pm.html#SP13">&#167;13</a><br/>Web Structure - <a href="8-ws.html#SP7">&#167;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('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">&#167;3.1</a>, <a href="4-prp.html#SP4_1_3">&#167;4.1.3</a><br/>Pattern Matching - <a href="4-pm.html#SP13">&#167;13</a><br/>Web Structure - <a href="8-ws.html#SP7">&#167;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>

View file

@ -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">&#167;14</a><br/>Command Line Arguments - <a href="3-cla.html#SP11">&#167;11</a>, <a href="3-cla.html#SP12">&#167;12</a><br/>Preprocessor - <a href="4-prp.html#SP3">&#167;3</a>, <a href="4-prp.html#SP4_1">&#167;4.1</a>, <a href="4-prp.html#SP4_1_3_1_1">&#167;4.1.3.1.1</a>, <a href="4-prp.html#SP11_2">&#167;11.2</a>, <a href="4-prp.html#SP17">&#167;17</a><br/>Web Structure - <a href="8-ws.html#SP7_3_2">&#167;7.3.2</a>, <a href="8-ws.html#SP7_3_3_2">&#167;7.3.3.2</a>, <a href="8-ws.html#SP7_3_3_2_1">&#167;7.3.3.2.1</a>, <a href="8-ws.html#SP7_2_1">&#167;7.2.1</a>, <a href="8-ws.html#SP7_2_2_1">&#167;7.2.2.1</a>, <a href="8-ws.html#SP7_2_2_3">&#167;7.2.2.3</a><br/>Web Modules - <a href="8-wm.html#SP9">&#167;9</a><br/>Build Files - <a href="8-bf.html#SP3">&#167;3</a><br/>Simple Tangler - <a href="8-st.html#SP7_2_3">&#167;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">&#167;14</a><br/>Command Line Arguments - <a href="3-cla.html#SP11">&#167;11</a>, <a href="3-cla.html#SP12">&#167;12</a><br/>Preprocessor - <a href="4-prp.html#SP3_2">&#167;3.2</a>, <a href="4-prp.html#SP4_1">&#167;4.1</a>, <a href="4-prp.html#SP4_1_3_1_1">&#167;4.1.3.1.1</a>, <a href="4-prp.html#SP11_2">&#167;11.2</a>, <a href="4-prp.html#SP17">&#167;17</a><br/>Web Structure - <a href="8-ws.html#SP7_3_2">&#167;7.3.2</a>, <a href="8-ws.html#SP7_3_3_2">&#167;7.3.3.2</a>, <a href="8-ws.html#SP7_3_3_2_1">&#167;7.3.3.2.1</a>, <a href="8-ws.html#SP7_2_1">&#167;7.2.1</a>, <a href="8-ws.html#SP7_2_2_1">&#167;7.2.2.1</a>, <a href="8-ws.html#SP7_2_2_3">&#167;7.2.2.3</a><br/>Web Modules - <a href="8-wm.html#SP9">&#167;9</a><br/>Build Files - <a href="8-bf.html#SP3">&#167;3</a><br/>Simple Tangler - <a href="8-st.html#SP7_2_3">&#167;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">&lt;</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">&#167;10</a>, <a href="4-pm.html#SP14">&#167;14</a><br/>Command Line Arguments - <a href="3-cla.html#SP11">&#167;11</a><br/>Preprocessor - <a href="4-prp.html#SP3_1">&#167;3.1</a>, <a href="4-prp.html#SP3_2">&#167;3.2</a>, <a href="4-prp.html#SP3_2_1">&#167;3.2.1</a>, <a href="4-prp.html#SP3_2_2">&#167;3.2.2</a>, <a href="4-prp.html#SP3_2_3">&#167;3.2.3</a>, <a href="4-prp.html#SP4_1">&#167;4.1</a>, <a href="4-prp.html#SP4_1_3_1_1">&#167;4.1.3.1.1</a>, <a href="4-prp.html#SP11_2">&#167;11.2</a>, <a href="4-prp.html#SP17">&#167;17</a><br/>Web Structure - <a href="8-ws.html#SP7_3_2">&#167;7.3.2</a>, <a href="8-ws.html#SP7_3_3_2">&#167;7.3.3.2</a>, <a href="8-ws.html#SP7_3_3_2_1">&#167;7.3.3.2.1</a>, <a href="8-ws.html#SP7_2_1">&#167;7.2.1</a>, <a href="8-ws.html#SP7_2_2_1">&#167;7.2.2.1</a>, <a href="8-ws.html#SP7_2_2_3">&#167;7.2.2.3</a><br/>Web Modules - <a href="8-wm.html#SP9">&#167;9</a><br/>Build Files - <a href="8-bf.html#SP3">&#167;3</a><br/>Simple Tangler - <a href="8-st.html#SP7_2_3">&#167;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">&#167;10</a>, <a href="4-pm.html#SP14">&#167;14</a><br/>Command Line Arguments - <a href="3-cla.html#SP11">&#167;11</a><br/>Preprocessor - <a href="4-prp.html#SP3_2">&#167;3.2</a>, <a href="4-prp.html#SP3_2_1">&#167;3.2.1</a>, <a href="4-prp.html#SP3_2_2">&#167;3.2.2</a>, <a href="4-prp.html#SP3_2_3">&#167;3.2.3</a>, <a href="4-prp.html#SP4_1">&#167;4.1</a>, <a href="4-prp.html#SP4_1_3_1_1">&#167;4.1.3.1.1</a>, <a href="4-prp.html#SP11_2">&#167;11.2</a>, <a href="4-prp.html#SP17">&#167;17</a><br/>Web Structure - <a href="8-ws.html#SP7_3_2">&#167;7.3.2</a>, <a href="8-ws.html#SP7_3_3_2">&#167;7.3.3.2</a>, <a href="8-ws.html#SP7_3_3_2_1">&#167;7.3.3.2.1</a>, <a href="8-ws.html#SP7_2_1">&#167;7.2.1</a>, <a href="8-ws.html#SP7_2_2_1">&#167;7.2.2.1</a>, <a href="8-ws.html#SP7_2_2_3">&#167;7.2.2.3</a><br/>Web Modules - <a href="8-wm.html#SP9">&#167;9</a><br/>Build Files - <a href="8-bf.html#SP3">&#167;3</a><br/>Simple Tangler - <a href="8-st.html#SP7_2_3">&#167;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">&lt;</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">-&gt;</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">&#167;11</a>, <a href="3-cla.html#SP12">&#167;12</a><br/>Preprocessor - <a href="4-prp.html#SP3_1">&#167;3.1</a>, <a href="4-prp.html#SP3_2">&#167;3.2</a>, <a href="4-prp.html#SP4_1">&#167;4.1</a>, <a href="4-prp.html#SP4_1_3_1_1">&#167;4.1.3.1.1</a>, <a href="4-prp.html#SP11_2">&#167;11.2</a>, <a href="4-prp.html#SP17">&#167;17</a><br/>Web Structure - <a href="8-ws.html#SP7_3_2">&#167;7.3.2</a>, <a href="8-ws.html#SP7_3_3_2">&#167;7.3.3.2</a>, <a href="8-ws.html#SP7_3_3_2_1">&#167;7.3.3.2.1</a>, <a href="8-ws.html#SP7_2_1">&#167;7.2.1</a>, <a href="8-ws.html#SP7_2_2_1">&#167;7.2.2.1</a>, <a href="8-ws.html#SP7_2_2_3">&#167;7.2.2.3</a><br/>Web Modules - <a href="8-wm.html#SP9">&#167;9</a><br/>Build Files - <a href="8-bf.html#SP3">&#167;3</a><br/>Simple Tangler - <a href="8-st.html#SP7_2_3">&#167;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">&#167;11</a>, <a href="3-cla.html#SP12">&#167;12</a><br/>Preprocessor - <a href="4-prp.html#SP3_2">&#167;3.2</a>, <a href="4-prp.html#SP4_1">&#167;4.1</a>, <a href="4-prp.html#SP4_1_3_1_1">&#167;4.1.3.1.1</a>, <a href="4-prp.html#SP11_2">&#167;11.2</a>, <a href="4-prp.html#SP17">&#167;17</a><br/>Web Structure - <a href="8-ws.html#SP7_3_2">&#167;7.3.2</a>, <a href="8-ws.html#SP7_3_3_2">&#167;7.3.3.2</a>, <a href="8-ws.html#SP7_3_3_2_1">&#167;7.3.3.2.1</a>, <a href="8-ws.html#SP7_2_1">&#167;7.2.1</a>, <a href="8-ws.html#SP7_2_2_1">&#167;7.2.2.1</a>, <a href="8-ws.html#SP7_2_2_3">&#167;7.2.2.3</a><br/>Web Modules - <a href="8-wm.html#SP9">&#167;9</a><br/>Build Files - <a href="8-bf.html#SP3">&#167;3</a><br/>Simple Tangler - <a href="8-st.html#SP7_2_3">&#167;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">) &gt;= </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">) &amp;&amp; (</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>

View file

@ -74,7 +74,7 @@ pointer to any data those special meanings need to use.
<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="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">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">(&amp;</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><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>
@ -107,6 +107,7 @@ the prototype file line-by-line:
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">preprocessor_variable_set</span><span class="plain-syntax"> *</span><span class="identifier-syntax">stack_frame</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">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">known_macros</span><span class="plain-syntax">; </span><span class="comment-syntax"> of </span><span class="extract"><span class="extract-syntax">preprocessor_macro</span></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</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="plain-syntax"> </span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">comment_character</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="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">preprocessor_loop</span><span class="plain-syntax"> {</span>
@ -131,6 +132,7 @@ the prototype file line-by-line:
<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="identifier-syntax">PPS</span><span class="plain-syntax">.</span><span class="element-syntax">global_variables</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">known_macros</span><span class="plain-syntax"> = </span><a href="4-prp.html#SP13" class="function-link"><span class="function-syntax">Preprocessor::list_of_reserved_macros</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">special_macros</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">specifics</span><span class="plain-syntax"> = </span><span class="identifier-syntax">specifics</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">comment_character</span><span class="plain-syntax"> = </span><span class="identifier-syntax">comment_char</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="4-prp.html#SP1">&#167;1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>Conceptually, each loop runs a variable with a given name through a series
@ -157,24 +159,32 @@ parametrised names: but then, nor should you.
<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::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">&#167;1</a>, <a href="4-prp.html#SP15">&#167;15</a>, <a href="4-prp.html#SP18_1">&#167;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="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="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><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>
</pre>
<p class="commentary firstcommentary"><a id="SP3_1" class="paragraph-anchor"></a><b>&#167;3.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Skip comments</span><span class="named-paragraph-number">3.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP3_1" class="paragraph-anchor"></a><b>&#167;3.1. </b>A line is a comment to the preprocessor if its first non-whitespace character
is the special comment character: often <span class="extract"><span class="extract-syntax">#</span></span>, but not necessarily.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Skip comments</span><span class="named-paragraph-number">3.1</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">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">(&amp;</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">" *#%c*"</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">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">); </span><span class="reserved-syntax">return</span><span class="plain-syntax">; }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">, </span><span class="identifier-syntax">line</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">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</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pos</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="identifier-syntax">PPS</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">comment_character</span><span class="plain-syntax">) </span><span class="reserved-syntax">return</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#SP2" class="function-link"><span class="function-syntax">Characters::is_whitespace</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">c</span><span class="plain-syntax">) == </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">) </span><span class="reserved-syntax">break</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">&#167;3</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP3_2" class="paragraph-anchor"></a><b>&#167;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>
<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">(&amp;</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_1" class="named-paragraph-link"><span class="named-paragraph">Begin a 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">(&amp;</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_3" class="named-paragraph-link"><span class="named-paragraph">End 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><span class="identifier-syntax">PPS</span><span class="plain-syntax">-&gt;</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_2" class="named-paragraph-link"><span class="named-paragraph">Continue a definition</span><span class="named-paragraph-number">3.2.2</span></a></span><span class="plain-syntax">;</span>
@ -790,6 +800,11 @@ built in here and therefore work in every domain:
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">L</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">Preprocessor::do_not_suppress_whitespace</span><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="plain-syntax"> </span><span class="identifier-syntax">mm</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">suppress_newline_after_expanding</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">mm</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">suppress_whitespace_when_expanding</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">void</span><span class="plain-syntax"> </span><span class="function-syntax">Preprocessor::new_loop_macro</span><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>
@ -812,18 +827,16 @@ built in here and therefore work in every domain:
<span class="plain-syntax"> </span><span class="identifier-syntax">mm</span><span class="plain-syntax"> = </span><a href="4-prp.html#SP11" class="function-link"><span class="function-syntax">Preprocessor::new_macro</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="plain-syntax">, </span><span class="identifier-syntax">subname</span><span class="plain-syntax">, </span><span class="identifier-syntax">parameter_specification</span><span class="plain-syntax">, </span><span class="identifier-syntax">expander</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">mm</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">begins_loop</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">mm</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">loop_name</span><span class="plain-syntax"> = </span><a href="4-sm.html#SP3" class="function-link"><span class="function-syntax">Str::duplicate</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">mm</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">suppress_newline_after_expanding</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">mm</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">suppress_whitespace_when_expanding</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">mm</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">span</span><span class="plain-syntax"> = </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="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><a href="4-sm.html#SP15" class="function-link"><span class="function-syntax">Str::clear</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">subname</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">subname</span><span class="plain-syntax">, </span><span class="string-syntax">"end-%S-span"</span><span class="plain-syntax">, </span><span class="identifier-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">mm</span><span class="plain-syntax"> = </span><a href="4-prp.html#SP11" class="function-link"><span class="function-syntax">Preprocessor::new_macro</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">L</span><span class="plain-syntax">, </span><span class="identifier-syntax">subname</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><a href="4-prp.html#SP18" class="function-link"><span class="function-syntax">Preprocessor::end_loop_expander</span></a><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">mm</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">ends_loop</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">mm</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">loop_name</span><span class="plain-syntax"> = </span><a href="4-sm.html#SP3" class="function-link"><span class="function-syntax">Str::duplicate</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">mm</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">suppress_newline_after_expanding</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">mm</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">suppress_whitespace_when_expanding</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">mm</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">span</span><span class="plain-syntax"> = </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="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">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">subname</span><span class="plain-syntax">)</span>
<span class="plain-syntax">}</span>

View file

@ -277,7 +277,7 @@ at those positions may well not be, of course.)
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="function-syntax">Str::get</span><button class="popup" onclick="togglePopup('usagePopup15')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup15">Usage of <span class="code-font"><span class="function-syntax">Str::get</span></span>:<br/><a href="4-sm.html#SP7">&#167;7</a>, <a href="4-sm.html#SP17">&#167;17</a>, <a href="4-sm.html#SP20">&#167;20</a>, <a href="4-sm.html#SP22">&#167;22</a>, <a href="4-sm.html#SP23">&#167;23</a>, <a href="4-sm.html#SP24">&#167;24</a>, <a href="4-sm.html#SP25">&#167;25</a>, <a href="4-sm.html#SP26">&#167;26</a><br/>Dictionaries - <a href="2-dct.html#SP4">&#167;4</a><br/>Pathnames - <a href="3-pth.html#SP4">&#167;4</a>, <a href="3-pth.html#SP5">&#167;5</a><br/>Filenames - <a href="3-fln.html#SP2">&#167;2</a>, <a href="3-fln.html#SP3">&#167;3</a>, <a href="3-fln.html#SP7">&#167;7</a>, <a href="3-fln.html#SP8">&#167;8</a>, <a href="3-fln.html#SP9">&#167;9</a><br/>Shell - <a href="3-shl.html#SP1">&#167;1</a><br/>Preprocessor - <a href="4-prp.html#SP5">&#167;5</a>, <a href="4-prp.html#SP18_1">&#167;18.1</a><br/>Pattern Matching - <a href="4-pm.html#SP5">&#167;5</a><br/>HTML - <a href="5-htm.html#SP26">&#167;26</a><br/>Epub Ebooks - <a href="5-ee.html#SP5">&#167;5</a><br/>Version Numbers - <a href="7-vn.html#SP7">&#167;7</a>, <a href="7-vn.html#SP10">&#167;10</a><br/>Bibliographic Data for Webs - <a href="8-bdfw.html#SP7_2">&#167;7.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">string_position</span><span class="plain-syntax"> </span><span class="identifier-syntax">P</span><span class="plain-syntax">) {</span>
<span class="identifier-syntax">wchar_t</span><span class="plain-syntax"> </span><span class="function-syntax">Str::get</span><button class="popup" onclick="togglePopup('usagePopup15')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup15">Usage of <span class="code-font"><span class="function-syntax">Str::get</span></span>:<br/><a href="4-sm.html#SP7">&#167;7</a>, <a href="4-sm.html#SP17">&#167;17</a>, <a href="4-sm.html#SP20">&#167;20</a>, <a href="4-sm.html#SP22">&#167;22</a>, <a href="4-sm.html#SP23">&#167;23</a>, <a href="4-sm.html#SP24">&#167;24</a>, <a href="4-sm.html#SP25">&#167;25</a>, <a href="4-sm.html#SP26">&#167;26</a><br/>Dictionaries - <a href="2-dct.html#SP4">&#167;4</a><br/>Pathnames - <a href="3-pth.html#SP4">&#167;4</a>, <a href="3-pth.html#SP5">&#167;5</a><br/>Filenames - <a href="3-fln.html#SP2">&#167;2</a>, <a href="3-fln.html#SP3">&#167;3</a>, <a href="3-fln.html#SP7">&#167;7</a>, <a href="3-fln.html#SP8">&#167;8</a>, <a href="3-fln.html#SP9">&#167;9</a><br/>Shell - <a href="3-shl.html#SP1">&#167;1</a><br/>Preprocessor - <a href="4-prp.html#SP3_1">&#167;3.1</a>, <a href="4-prp.html#SP5">&#167;5</a>, <a href="4-prp.html#SP18_1">&#167;18.1</a><br/>Pattern Matching - <a href="4-pm.html#SP5">&#167;5</a><br/>HTML - <a href="5-htm.html#SP26">&#167;26</a><br/>Epub Ebooks - <a href="5-ee.html#SP5">&#167;5</a><br/>Version Numbers - <a href="7-vn.html#SP7">&#167;7</a>, <a href="7-vn.html#SP10">&#167;10</a><br/>Bibliographic Data for Webs - <a href="8-bdfw.html#SP7_2">&#167;7.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">string_position</span><span class="plain-syntax"> </span><span class="identifier-syntax">P</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">P</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">P</span><span class="plain-syntax">.</span><span class="element-syntax">index</span><span class="plain-syntax"> &lt; </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">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>

Binary file not shown.

View file

@ -472,7 +472,7 @@ the style names for colouring, say, COBOL source code from, e.g.,
<span class="plain-syntax"> </span><a href="../foundation-module/4-pm.html#SP9" class="function-link"><span class="function-syntax">Regexp::dispose_of</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>The structure css_file_transformation is accessed in 5/ptf, 5/tf, 5/hf, 5/df, 6/rw and here.</li></ul>
<ul class="endnotetexts"><li>The structure css_file_transformation is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.</li></ul>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="1-ptt.html">&#10094;</a></li><li class="progresschapter"><a href="M-iti.html">M</a></li><li class="progresschapter"><a href="P-htpw.html">P</a></li><li class="progresscurrentchapter">1</li><li class="progresssection"><a href="1-bsc.html">bsc</a></li><li class="progresssection"><a href="1-pc.html">pc</a></li><li class="progresssection"><a href="1-cnf.html">cnf</a></li><li class="progresssection"><a href="1-ts.html">ts</a></li><li class="progresssection"><a href="1-ptt.html">ptt</a></li><li class="progresscurrent">apacs</li><li class="progresschapter"><a href="2-tr.html">2</a></li><li class="progresschapter"><a href="3-ta.html">3</a></li><li class="progresschapter"><a href="4-pl.html">4</a></li><li class="progresschapter"><a href="5-wt.html">5</a></li><li class="progresschapter"><a href="6-mkf.html">6</a></li><li class="progressnext"><a href="2-tr.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->

View file

@ -66,8 +66,6 @@ see <a href="../foundation-module/P-abgtf.html" class="internal">A Brief Guide t
<span class="definition-keyword">enum</span> <span class="constant-syntax">hash_table_entry_usage_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">language_function_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">language_type_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">macro_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">macro_tokens_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">macro_usage_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">makefile_specifics_CLASS</span>
<span class="definition-keyword">enum</span> <span class="constant-syntax">nonterminal_variable_CLASS</span>
@ -157,9 +155,7 @@ see <a href="../foundation-module/P-abgtf.html" class="internal">A Brief Guide t
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">hash_table_entry</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">language_function</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">language_type</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">macro_tokens</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">macro_usage</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">makefile_specifics</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">nonterminal_variable</span><span class="plain-syntax">)</span>
<span class="identifier-syntax">DECLARE_CLASS</span><span class="plain-syntax">(</span><span class="reserved-syntax">para_macro</span><span class="plain-syntax">)</span>

View file

@ -180,11 +180,11 @@ program: some input, some thinking, a choice of three forms of output.
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">ins</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">makefile_setting</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">ins</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">prototype_setting</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ins</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">prototype_setting</span><span class="plain-syntax"> = </span><a href="../foundation-module/3-fln.html#SP3" class="function-link"><span class="function-syntax">Filenames::from_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"makescript.txt"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ins</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">prototype_setting</span><span class="plain-syntax"> = </span><a href="../foundation-module/3-fln.html#SP3" class="function-link"><span class="function-syntax">Filenames::from_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"script.mkscript"</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">ins</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">gitignore_setting</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">ins</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">prototype_setting</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ins</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">prototype_setting</span><span class="plain-syntax"> = </span><a href="../foundation-module/3-fln.html#SP3" class="function-link"><span class="function-syntax">Filenames::from_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"gitignorescript.txt"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ins</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">prototype_setting</span><span class="plain-syntax"> = </span><a href="../foundation-module/3-fln.html#SP3" class="function-link"><span class="function-syntax">Filenames::from_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"script.giscript"</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">ins</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">writeme_setting</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">ins</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">prototype_setting</span><span class="plain-syntax"> == </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">))</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ins</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">prototype_setting</span><span class="plain-syntax"> = </span><a href="../foundation-module/3-fln.html#SP3" class="function-link"><span class="function-syntax">Filenames::from_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"READMEscript.txt"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ins</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">prototype_setting</span><span class="plain-syntax"> = </span><a href="../foundation-module/3-fln.html#SP3" class="function-link"><span class="function-syntax">Filenames::from_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"script.rmscript"</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">ins</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">makefile_setting</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="6-mkf.html#SP1" class="function-link"><span class="function-syntax">Makefiles::write</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">W</span><span class="plain-syntax">, </span><span class="identifier-syntax">ins</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">prototype_setting</span><span class="plain-syntax">, </span><span class="identifier-syntax">ins</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">makefile_setting</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> </span><a href="../foundation-module/8-wm.html#SP6" class="function-link"><span class="function-syntax">WebModules::make_search_path</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ins</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">import_setting</span><span class="plain-syntax">));</span>

View file

@ -313,7 +313,7 @@ chapter as its value during the sole iteration.
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">url</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">purpose</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">url</span><span class="plain-syntax">, </span><span class="string-syntax">"%p"</span><span class="plain-syntax">, </span><span class="identifier-syntax">M</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">module_location</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="6-rw.html#SP8" class="function-link"><span class="function-syntax">Readme::write_var</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">purpose</span><span class="plain-syntax">, </span><span class="identifier-syntax">url</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Purpose"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="6-rw.html#SP3" class="function-link"><span class="function-syntax">Readme::write_var</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">purpose</span><span class="plain-syntax">, </span><span class="identifier-syntax">url</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Purpose"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../foundation-module/4-sm.html#SP8" class="function-link"><span class="function-syntax">Str::len</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">purpose</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="identifier-syntax">level</span><span class="plain-syntax"> = </span><span class="constant-syntax">IF_TRUE_LEVEL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">url</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">purpose</span><span class="plain-syntax">)</span>
@ -766,7 +766,7 @@ this will recursively call The Collater, in fact.
<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><a href="../foundation-module/4-sm.html#SP22" class="function-link"><span class="function-syntax">Str::eq_wide_string</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">detail</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">"Purpose"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">url</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">url</span><span class="plain-syntax">, </span><span class="string-syntax">"%p"</span><span class="plain-syntax">, </span><span class="identifier-syntax">M</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">module_location</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="6-rw.html#SP8" class="function-link"><span class="function-syntax">Readme::write_var</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">substituted</span><span class="plain-syntax">, </span><span class="identifier-syntax">url</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Purpose"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="6-rw.html#SP3" class="function-link"><span class="function-syntax">Readme::write_var</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">substituted</span><span class="plain-syntax">, </span><span class="identifier-syntax">url</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Purpose"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">url</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</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">substituted</span><span class="plain-syntax">, </span><span class="string-syntax">"%S for %S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">varname</span><span class="plain-syntax">, </span><span class="identifier-syntax">M</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">module_name</span><span class="plain-syntax">);</span>

View file

@ -132,7 +132,7 @@ function togglePopup(material_id) {
<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>
</pre>
<ul class="endnotetexts"><li>The structure debugging_render_state is accessed in 1/apacs, 3/tc, 3/twot, 5/wt, 5/fm, 5/ptf, 5/tf, 5/hf, 6/rw and here.</li></ul>
<ul class="endnotetexts"><li>The structure debugging_render_state is accessed in 1/apacs, 3/tc, 3/twot, 5/wt, 5/fm, 5/ptf, 5/tf, 5/hf and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_1" class="paragraph-anchor"></a><b>&#167;2.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Render document</span><span class="named-paragraph-number">2.1</span></span><span class="comment-syntax"> =</span>
</p>

View file

@ -97,7 +97,7 @@ instance of this:
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">asset_rule</span><span class="plain-syntax"> *</span><span class="identifier-syntax">copy_rule</span><span class="plain-syntax">;</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">HTML_render_state</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure HTML_render_state is accessed in 1/apacs, 3/tc, 3/twot, 5/wt, 5/fm, 5/ptf, 5/tf, 5/df, 6/rw and here.</li></ul>
<ul class="endnotetexts"><li>The structure HTML_render_state is accessed in 1/apacs, 3/tc, 3/twot, 5/wt, 5/fm, 5/ptf, 5/tf, 5/df and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>The initial state is as follows:
</p>

View file

@ -131,7 +131,7 @@ function togglePopup(material_id) {
<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>
</pre>
<ul class="endnotetexts"><li>The structure PlainText_render_state is accessed in 1/apacs, 3/tc, 3/twot, 5/wt, 5/fm, 5/tf, 5/hf, 5/df, 6/rw and here.</li></ul>
<ul class="endnotetexts"><li>The structure PlainText_render_state is accessed in 1/apacs, 3/tc, 3/twot, 5/wt, 5/fm, 5/tf, 5/hf, 5/df and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2_1" class="paragraph-anchor"></a><b>&#167;2.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Render chapter header</span><span class="named-paragraph-number">2.1</span></span><span class="comment-syntax"> =</span>
</p>

View file

@ -95,7 +95,7 @@ generic as possible, but with special features depending on <span class="extract
<span class="plain-syntax"> </span><a href="../foundation-module/2-trs.html#SP13" class="function-link"><span class="function-syntax">Trees::traverse_from</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">tree</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">root</span><span class="plain-syntax">, &amp;</span><a href="5-tf.html#SP4" class="function-link"><span class="function-syntax">TeX::render_visit</span></a><span class="plain-syntax">, (</span><span class="reserved-syntax">void</span><span class="plain-syntax"> *) &amp;</span><span class="identifier-syntax">trs</span><span class="plain-syntax">, </span><span class="constant-syntax">0</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>The structure TeX_render_state is accessed in 1/apacs, 3/tc, 3/twot, 5/wt, 5/fm, 5/ptf, 5/hf, 5/df, 6/rw and here.</li></ul>
<ul class="endnotetexts"><li>The structure TeX_render_state is accessed in 1/apacs, 3/tc, 3/twot, 5/wt, 5/fm, 5/ptf, 5/hf, 5/df and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b>For the reason why footnotes are omitted, see below: they aren't really.
</p>

View file

@ -315,13 +315,13 @@ we also look out for <span class="extract"><span class="extract-syntax">{}^3\sqr
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">macro</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="reserved-syntax">while</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">i</span><span class="plain-syntax"> &lt; </span><a href="../foundation-module/4-sm.html#SP8" class="function-link"><span class="function-syntax">Str::len</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">text</span><span class="plain-syntax">)) &amp;&amp; (</span><a href="../foundation-module/4-chr.html#SP1" class="function-link"><span class="function-syntax">Characters::isalpha</span></a><span class="plain-syntax">(</span><a href="../foundation-module/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">text</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">PUT_TO</span><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><a href="../foundation-module/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">text</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"not"</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="5-tu.html#SP7_4_2" class="named-paragraph-link"><span class="named-paragraph">Remove the not prefix</span><span class="named-paragraph-number">7.4.2</span></a></span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><a href="../foundation-module/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">text</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"not"</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="5-tu.html#SP7_4_2" class="named-paragraph-link"><span class="named-paragraph">Remove the not prefix</span><span class="named-paragraph-number">7.4.2</span></a></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="5-tu.html#SP7_4_1" class="named-paragraph-link"><span class="named-paragraph">Remove a general macro</span><span class="named-paragraph-number">7.4.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">i</span><span class="plain-syntax">--;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-tu.html#SP7">&#167;7</a>.</li></ul>
@ -329,114 +329,114 @@ we also look out for <span class="extract"><span class="extract-syntax">{}^3\sqr
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"leq"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&lt;="</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"geq"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&gt;="</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"sim"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"hbox"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"left"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"right"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Rightarrow"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"=&gt;"</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Leftrightarrow"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&lt;=&gt;"</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"to"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"--&gt;"</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"rightarrow"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"--&gt;"</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"longrightarrow"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"--&gt;"</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"leftarrow"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&lt;--"</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"longleftarrow"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&lt;--"</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"lbrace"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"mid"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"rbrace"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"cdot"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"cdots"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"dots"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"times"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"quad"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"qquad"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"TeX"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"TeX"</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"neq"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"noteq"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"ell"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"l"</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"log"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"log"</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"exp"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"exp"</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"sin"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"sin"</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"cos"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"cos"</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"tan"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"tan"</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"top"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"T"</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Alpha"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x0391</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Beta"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x0392</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Gamma"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x0393</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Delta"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x0394</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Epsilon"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x0395</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Zeta"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x0396</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Eta"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x0397</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Theta"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x0398</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Iota"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x0399</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Kappa"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x039A</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Lambda"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x039B</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Mu"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x039C</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Nu"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x039D</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Xi"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x039E</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Omicron"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x039F</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Pi"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03A0</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Rho"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03A1</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Varsigma"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03A2</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Sigma"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03A3</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Tau"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03A4</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Upsilon"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03A5</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Phi"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03A6</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Chi"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03A7</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Psi"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03A8</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Omega"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03A9</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"alpha"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03B1</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"beta"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03B2</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"gamma"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03B3</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"delta"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03B4</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"epsilon"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03B5</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"zeta"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03B6</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"eta"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03B7</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"theta"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03B8</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"iota"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03B9</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"kappa"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03BA</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"lambda"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03BB</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"mu"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03BC</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"nu"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03BD</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"xi"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03BE</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"omicron"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03BF</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"pi"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03C0</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"rho"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03C1</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"varsigma"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03C2</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"sigma"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03C3</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"tau"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03C4</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"upsilon"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03C5</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"phi"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03C6</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"chi"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03C7</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"psi"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03C8</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"omega"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03C9</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"exists"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x2203</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"in"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x2208</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"forall"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x2200</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"cap"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x2229</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"emptyset"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x2205</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"subseteq"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x2286</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"land"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x2227</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"lor"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x2228</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"lnot"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x00AC</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"sum"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03A3</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"prod"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03A0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"leq"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&lt;="</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"geq"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&gt;="</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"sim"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"hbox"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"left"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"right"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Rightarrow"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"=&gt;"</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Leftrightarrow"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&lt;=&gt;"</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"to"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"--&gt;"</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"rightarrow"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"--&gt;"</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"longrightarrow"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"--&gt;"</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"leftarrow"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&lt;--"</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"longleftarrow"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"&lt;--"</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"lbrace"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"mid"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"rbrace"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"cdot"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"cdots"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"dots"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"times"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"quad"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"qquad"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"TeX"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"TeX"</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"neq"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"noteq"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"ell"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"l"</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"log"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"log"</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"exp"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"exp"</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"sin"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"sin"</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"cos"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"cos"</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"tan"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"tan"</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"top"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">WRITE</span><span class="plain-syntax">(</span><span class="string-syntax">"T"</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Alpha"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x0391</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Beta"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x0392</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Gamma"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x0393</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Delta"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x0394</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Epsilon"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x0395</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Zeta"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x0396</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Eta"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x0397</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Theta"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x0398</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Iota"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x0399</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Kappa"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x039A</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Lambda"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x039B</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Mu"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x039C</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Nu"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x039D</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Xi"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x039E</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Omicron"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x039F</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Pi"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03A0</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Rho"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03A1</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Varsigma"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03A2</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Sigma"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03A3</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Tau"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03A4</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Upsilon"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03A5</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Phi"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03A6</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Chi"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03A7</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Psi"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03A8</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Omega"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03A9</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"alpha"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03B1</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"beta"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03B2</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"gamma"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03B3</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"delta"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03B4</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"epsilon"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03B5</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"zeta"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03B6</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"eta"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03B7</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"theta"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03B8</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"iota"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03B9</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"kappa"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03BA</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"lambda"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03BB</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"mu"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03BC</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"nu"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03BD</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"xi"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03BE</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"omicron"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03BF</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"pi"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03C0</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"rho"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03C1</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"varsigma"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03C2</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"sigma"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03C3</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"tau"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03C4</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"upsilon"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03C5</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"phi"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03C6</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"chi"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03C7</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"psi"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03C8</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"omega"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03C9</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"exists"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x2203</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"in"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x2208</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"forall"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x2200</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"cap"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x2229</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"emptyset"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x2205</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"subseteq"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x2286</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"land"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x2227</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"lor"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x2228</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"lnot"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x00AC</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"sum"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03A3</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"prod"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x03A0</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../foundation-module/4-sm.html#SP8" class="function-link"><span class="function-syntax">Str::len</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../foundation-module/4-sm.html#SP8" class="function-link"><span class="function-syntax">Str::len</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">) &gt; </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">suspect</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">LOOP_THROUGH_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">, </span><span class="reserved-syntax">macro</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_THROUGH_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">pos</span><span class="plain-syntax">, </span><span class="identifier-syntax">macro</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="../foundation-module/4-sm.html#SP13" class="function-link"><span class="function-syntax">Str::get</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">pos</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"> &gt;= </span><span class="character-syntax">'A'</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> &lt;= </span><span class="character-syntax">'Z'</span><span class="plain-syntax">)) </span><span class="reserved-syntax">continue</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"> &gt;= </span><span class="character-syntax">'a'</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">c</span><span class="plain-syntax"> &lt;= </span><span class="character-syntax">'z'</span><span class="plain-syntax">)) </span><span class="reserved-syntax">continue</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">suspect</span><span class="plain-syntax"> = </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"n"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">suspect</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"t"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">suspect</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"n"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">suspect</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"t"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">suspect</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">suspect</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PRINT</span><span class="plain-syntax">(</span><span class="string-syntax">"[Passing through unknown TeX macro \\%S:\n %S\n"</span><span class="plain-syntax">, </span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">text</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PRINT</span><span class="plain-syntax">(</span><span class="string-syntax">"[Passing through unknown TeX macro \\%S:\n %S\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">text</span><span class="plain-syntax">);</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="reserved-syntax">macro</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">macro</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="5-tu.html#SP7_4">&#167;7.4</a>.</li></ul>
@ -448,14 +448,14 @@ we also look out for <span class="extract"><span class="extract-syntax">{}^3\sqr
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../foundation-module/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">text</span><span class="plain-syntax">, </span><span class="identifier-syntax">i</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-sm.html#SP15" class="function-link"><span class="function-syntax">Str::clear</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../foundation-module/4-sm.html#SP15" class="function-link"><span class="function-syntax">Str::clear</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</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="reserved-syntax">while</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">i</span><span class="plain-syntax"> &lt; </span><a href="../foundation-module/4-sm.html#SP8" class="function-link"><span class="function-syntax">Str::len</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">text</span><span class="plain-syntax">)) &amp;&amp; (</span><a href="../foundation-module/4-chr.html#SP1" class="function-link"><span class="function-syntax">Characters::isalpha</span></a><span class="plain-syntax">(</span><a href="../foundation-module/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">text</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">PUT_TO</span><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><a href="../foundation-module/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">text</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"exists"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x2204</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"forall"</span><span class="plain-syntax">)) { </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x00AC</span><span class="plain-syntax">); </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x2200</span><span class="plain-syntax">); }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><a href="../foundation-module/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">text</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"exists"</span><span class="plain-syntax">)) </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x2204</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"forall"</span><span class="plain-syntax">)) { </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x00AC</span><span class="plain-syntax">); </span><span class="identifier-syntax">PUT</span><span class="plain-syntax">((</span><span class="identifier-syntax">wchar_t</span><span class="plain-syntax">) </span><span class="constant-syntax">0x2200</span><span class="plain-syntax">); }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PRINT</span><span class="plain-syntax">(</span><span class="string-syntax">"Don't know how to apply '\\not' to '\\%S'\n"</span><span class="plain-syntax">, </span><span class="reserved-syntax">macro</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">PRINT</span><span class="plain-syntax">(</span><span class="string-syntax">"Don't know how to apply '\\not' to '\\%S'\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">macro</span><span class="plain-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="plain-syntax"> </span><span class="identifier-syntax">PRINT</span><span class="plain-syntax">(</span><span class="string-syntax">"Don't know how to apply '\\not' here\n"</span><span class="plain-syntax">);</span>

View file

@ -299,7 +299,7 @@ function togglePopup(material_id) {
<span class="plain-syntax"> </span><span class="constant-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">weave_verbatim_node</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure weave_document_node is accessed in 3/tc, 3/twot, 5/fm, 5/ptf, 5/tf, 5/hf, 5/df and here.</li><li>The structure weave_head_node is accessed in 5/tf, 5/hf, 5/df and here.</li><li>The structure weave_body_node is private to this section.</li><li>The structure weave_tail_node is accessed in 5/tf, 5/hf, 5/df and here.</li><li>The structure weave_chapter_header_node is accessed in 5/ptf, 5/tf, 5/df and here.</li><li>The structure weave_chapter_footer_node is accessed in 5/ptf, 5/tf, 5/df and here.</li><li>The structure weave_section_header_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.</li><li>The structure weave_section_footer_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.</li><li>The structure weave_section_purpose_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.</li><li>The structure weave_subheading_node is accessed in 1/pc, 2/lc, 2/tp, 2/pn, 3/ta, 3/tw, 3/tt, 4/as, 4/cl, 4/is, 5/ptf, 5/tf, 5/hf, 5/df, 6/cs and here.</li><li>The structure weave_bar_node is private to this section.</li><li>The structure weave_pagebreak_node is private to this section.</li><li>The structure weave_linebreak_node is private to this section.</li><li>The structure weave_paragraph_heading_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.</li><li>The structure weave_endnote_node is private to this section.</li><li>The structure weave_figure_node is accessed in 1/fm, 1/pp, 1/wp, 8/ws, 4/cl, 5/tf, 5/hf, 5/df, 6/rw and here.</li><li>The structure weave_extract_node is accessed in 5/hf and here.</li><li>The structure weave_audio_node is accessed in 8/ws, 5/tf, 5/hf, 5/df and here.</li><li>The structure weave_video_node is accessed in 1/fm, 1/pp, 1/wp, 8/ws, 4/cl, 5/tf, 5/hf, 5/df, 6/rw and here.</li><li>The structure weave_download_node is accessed in 5/hf, 5/df and here.</li><li>The structure weave_material_node is accessed in 5/tf, 5/hf, 5/df and here.</li><li>The structure weave_embed_node is accessed in 1/fm, 1/pp, 1/wp, 8/ws, 4/cl, 5/ptf, 5/tf, 5/hf, 5/df, 6/rw and here.</li><li>The structure weave_pmac_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.</li><li>The structure weave_vskip_node is accessed in 5/tf, 5/df and here.</li><li>The structure weave_chapter_node is accessed in 5/ptf, 5/tf, 5/df and here.</li><li>The structure weave_section_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.</li><li>The structure weave_code_line_node is private to this section.</li><li>The structure weave_function_usage_node is accessed in 1/wp, 5/ptf, 5/tf, 5/hf, 5/df and here.</li><li>The structure weave_commentary_node is accessed in 1/pc, 2/lc, 2/tp, 2/pn, 3/ta, 3/tw, 3/tt, 4/as, 4/cl, 4/is, 5/ptf, 5/tf, 5/hf, 5/df, 6/cs and here.</li><li>The structure weave_carousel_slide_node is accessed in 2/tgs, 5/hf, 5/df and here.</li><li>The structure weave_toc_node is accessed in 5/tf, 5/df and here.</li><li>The structure weave_toc_line_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.</li><li>The structure weave_chapter_title_page_node is private to this section.</li><li>The structure weave_defn_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.</li><li>The structure weave_inline_node is private to this section.</li><li>The structure weave_locale_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.</li><li>The structure weave_source_code_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.</li><li>The structure weave_url_node is accessed in 2/trs, 3/twot, 5/fm, 5/ptf, 5/tf, 5/hf, 5/df, 6/rw and here.</li><li>The structure weave_footnote_cue_node is accessed in 2/tp, 3/tw, 3/twot, 5/ptf, 5/tf, 5/hf, 5/df and here.</li><li>The structure weave_begin_footnote_text_node is accessed in 2/tp, 3/tw, 3/twot, 5/ptf, 5/tf, 5/hf, 5/df and here.</li><li>The structure weave_display_line_node is accessed in 1/pc, 2/lc, 2/tp, 2/pn, 3/ta, 3/tw, 3/tt, 4/as, 4/cl, 4/is, 5/ptf, 5/tf, 5/hf, 5/df, 6/cs and here.</li><li>The structure weave_function_defn_node is accessed in 1/wp, 5/ptf, 5/tf, 5/hf, 5/df and here.</li><li>The structure weave_item_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.</li><li>The structure weave_grammar_index_node is private to this section.</li><li>The structure weave_maths_node is accessed in 2/trs, 3/twot, 5/fm, 5/ptf, 5/tf, 5/hf, 5/df, 6/rw and here.</li><li>The structure weave_verbatim_node is accessed in 2/trs, 3/twot, 5/fm, 5/ptf, 5/tf, 5/hf, 5/df, 6/rw and here.</li></ul>
<ul class="endnotetexts"><li>The structure weave_document_node is accessed in 3/tc, 3/twot, 5/fm, 5/ptf, 5/tf, 5/hf, 5/df and here.</li><li>The structure weave_head_node is accessed in 5/tf, 5/hf, 5/df and here.</li><li>The structure weave_body_node is private to this section.</li><li>The structure weave_tail_node is accessed in 5/tf, 5/hf, 5/df and here.</li><li>The structure weave_chapter_header_node is accessed in 5/ptf, 5/tf, 5/df and here.</li><li>The structure weave_chapter_footer_node is accessed in 5/ptf, 5/tf, 5/df and here.</li><li>The structure weave_section_header_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.</li><li>The structure weave_section_footer_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.</li><li>The structure weave_section_purpose_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.</li><li>The structure weave_subheading_node is accessed in 1/pc, 2/lc, 2/tp, 2/pn, 3/ta, 3/tw, 3/tt, 4/as, 4/cl, 4/is, 5/ptf, 5/tf, 5/hf, 5/df, 6/cs and here.</li><li>The structure weave_bar_node is private to this section.</li><li>The structure weave_pagebreak_node is private to this section.</li><li>The structure weave_linebreak_node is private to this section.</li><li>The structure weave_paragraph_heading_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.</li><li>The structure weave_endnote_node is private to this section.</li><li>The structure weave_figure_node is accessed in 1/fm, 1/pp, 1/wp, 8/ws, 4/cl, 5/tf, 5/hf, 5/df, 6/rw and here.</li><li>The structure weave_extract_node is accessed in 5/hf and here.</li><li>The structure weave_audio_node is accessed in 8/ws, 5/tf, 5/hf, 5/df and here.</li><li>The structure weave_video_node is accessed in 1/fm, 1/pp, 1/wp, 8/ws, 4/cl, 5/tf, 5/hf, 5/df, 6/rw and here.</li><li>The structure weave_download_node is accessed in 5/hf, 5/df and here.</li><li>The structure weave_material_node is accessed in 5/tf, 5/hf, 5/df and here.</li><li>The structure weave_embed_node is accessed in 1/fm, 1/pp, 1/wp, 8/ws, 4/cl, 5/ptf, 5/tf, 5/hf, 5/df, 6/rw and here.</li><li>The structure weave_pmac_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.</li><li>The structure weave_vskip_node is accessed in 5/tf, 5/df and here.</li><li>The structure weave_chapter_node is accessed in 5/ptf, 5/tf, 5/df and here.</li><li>The structure weave_section_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.</li><li>The structure weave_code_line_node is private to this section.</li><li>The structure weave_function_usage_node is accessed in 1/wp, 5/ptf, 5/tf, 5/hf, 5/df and here.</li><li>The structure weave_commentary_node is accessed in 1/pc, 2/lc, 2/tp, 2/pn, 3/ta, 3/tw, 3/tt, 4/as, 4/cl, 4/is, 5/ptf, 5/tf, 5/hf, 5/df, 6/cs and here.</li><li>The structure weave_carousel_slide_node is accessed in 2/tgs, 5/hf, 5/df and here.</li><li>The structure weave_toc_node is accessed in 5/tf, 5/df and here.</li><li>The structure weave_toc_line_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.</li><li>The structure weave_chapter_title_page_node is private to this section.</li><li>The structure weave_defn_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.</li><li>The structure weave_inline_node is private to this section.</li><li>The structure weave_locale_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.</li><li>The structure weave_source_code_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.</li><li>The structure weave_url_node is accessed in 2/trs, 3/twot, 5/fm, 5/ptf, 5/tf, 5/hf, 5/df and here.</li><li>The structure weave_footnote_cue_node is accessed in 2/tp, 3/tw, 3/twot, 5/ptf, 5/tf, 5/hf, 5/df and here.</li><li>The structure weave_begin_footnote_text_node is accessed in 2/tp, 3/tw, 3/twot, 5/ptf, 5/tf, 5/hf, 5/df and here.</li><li>The structure weave_display_line_node is accessed in 1/pc, 2/lc, 2/tp, 2/pn, 3/ta, 3/tw, 3/tt, 4/as, 4/cl, 4/is, 5/ptf, 5/tf, 5/hf, 5/df, 6/cs and here.</li><li>The structure weave_function_defn_node is accessed in 1/wp, 5/ptf, 5/tf, 5/hf, 5/df and here.</li><li>The structure weave_item_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.</li><li>The structure weave_grammar_index_node is private to this section.</li><li>The structure weave_maths_node is accessed in 2/trs, 3/twot, 5/fm, 5/ptf, 5/tf, 5/hf, 5/df and here.</li><li>The structure weave_verbatim_node is accessed in 2/trs, 3/twot, 5/fm, 5/ptf, 5/tf, 5/hf, 5/df and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b></p>
<pre class="displayed-code all-displayed-code code-font">

View file

@ -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="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>
</pre>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>Our one non-standard macro simply includes a file of standing material which

View file

@ -86,7 +86,8 @@ special loop construct.
<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="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="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>
</pre>
<p class="commentary firstcommentary"><a id="SP1_1" class="paragraph-anchor"></a><b>&#167;1.1. </b>We will allow a makescript to declare "components" (webs, really), so we need

View file

@ -50,277 +50,38 @@ function togglePopup(material_id) {
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="index.html">inweb</a></li><li><a href="index.html#6">Chapter 6: Extras</a></li><li><b>Readme Writeme</b></li></ul></div>
<p class="purpose">To construct Readme and similar files.</p>
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. </b>This is a very simple generator for <span class="extract"><span class="extract-syntax">README.md</span></span> files, written in Markdown
syntax, but with a few macro expansions of our own. The prototype file, which
uses these extra macros, is expanded to the final file, which does not.
</p>
<p class="commentary">As we scan through the prototype file, we keep track of this:
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. </b>This is a simple use of <a href="../foundation-module/4-prp.html" class="internal">Preprocessor (in foundation)</a>. Note that we use a
non-standard comment syntax (i.e., <span class="extract"><span class="extract-syntax">/</span></span> at start of line, not <span class="extract"><span class="extract-syntax">#</span></span>) to avoid
colliding with Markdown's heading syntax.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">write_state</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">OUT</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">linked_list</span><span class="plain-syntax"> *</span><span class="identifier-syntax">known_macros</span><span class="plain-syntax">; </span><span class="comment-syntax"> of </span><span class="extract"><span class="extract-syntax">macro</span></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">macro</span><span class="plain-syntax"> *</span><span class="identifier-syntax">current_definition</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">macro_tokens</span><span class="plain-syntax"> *</span><span class="identifier-syntax">stack_frame</span><span class="plain-syntax">;</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">write_state</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Readme::write</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">Readme::write</span></span>:<br/>Program Control - <a href="1-pc.html#SP7_1">&#167;7.1</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">from</span><span class="plain-syntax">, </span><span class="reserved-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">to</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">"write-me: %f --&gt; %f\n"</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="plain-syntax"> </span><span class="reserved-syntax">write_state</span><span class="plain-syntax"> </span><span class="identifier-syntax">ws</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ws</span><span class="plain-syntax">.</span><span class="element-syntax">current_definition</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ws</span><span class="plain-syntax">.</span><span class="element-syntax">known_macros</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">macro</span><span class="plain-syntax"> *</span><span class="identifier-syntax">V</span><span class="plain-syntax"> = </span><a href="6-rw.html#SP3" class="function-link"><span class="function-syntax">Readme::new_macro</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"version"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">V</span><span class="plain-syntax">, </span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">ws</span><span class="plain-syntax">.</span><span class="element-syntax">known_macros</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">macro</span><span class="plain-syntax"> *</span><span class="identifier-syntax">P</span><span class="plain-syntax"> = </span><a href="6-rw.html#SP3" class="function-link"><span class="function-syntax">Readme::new_macro</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"purpose"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">P</span><span class="plain-syntax">, </span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">ws</span><span class="plain-syntax">.</span><span class="element-syntax">known_macros</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">macro</span><span class="plain-syntax"> *</span><span class="identifier-syntax">A</span><span class="plain-syntax"> = </span><a href="6-rw.html#SP3" class="function-link"><span class="function-syntax">Readme::new_macro</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I</span><span class="string-syntax">"var"</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">A</span><span class="plain-syntax">, </span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">ws</span><span class="plain-syntax">.</span><span class="element-syntax">known_macros</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ws</span><span class="plain-syntax">.</span><span class="element-syntax">stack_frame</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">text_stream</span><span class="plain-syntax"> </span><span class="identifier-syntax">file_to</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../foundation-module/2-str.html#SP24" class="function-link"><span class="function-syntax">Streams::open_to_file</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">file_to</span><span class="plain-syntax">, </span><span class="identifier-syntax">to</span><span class="plain-syntax">, </span><span class="constant-syntax">UTF8_ENC</span><span class="plain-syntax">) == </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="../foundation-module/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">"can't write readme file"</span><span class="plain-syntax">, </span><span class="identifier-syntax">to</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ws</span><span class="plain-syntax">.</span><span class="element-syntax">OUT</span><span class="plain-syntax"> = &amp;</span><span class="identifier-syntax">file_to</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="../foundation-module/4-tf.html#SP5" class="function-link"><span class="function-syntax">TextFiles::read</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">from</span><span class="plain-syntax">, </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"unable to read template file"</span><span class="plain-syntax">, </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> &amp;</span><a href="6-rw.html#SP2" class="function-link"><span class="function-syntax">Readme::write_helper</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, (</span><span class="reserved-syntax">void</span><span class="plain-syntax"> *) &amp;</span><span class="identifier-syntax">ws</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="../foundation-module/2-str.html#SP34" class="function-link"><span class="function-syntax">Streams::close</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">file_to</span><span class="plain-syntax">);</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Readme::write</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">Readme::write</span></span>:<br/>Program Control - <a href="1-pc.html#SP7_1">&#167;7.1</a></span></button><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="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="identifier-syntax">NEW_LINKED_LIST</span><span class="plain-syntax">(</span><span class="reserved-syntax">preprocessor_macro</span><span class="plain-syntax">);</span>
<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><a href="../foundation-module/4-prp.html#SP11" class="function-link"><span class="function-syntax">Preprocessor::new_macro</span></a><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">I</span><span class="string-syntax">"bibliographic"</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"datum: DATUM of: ASSET"</span><span class="plain-syntax">,</span>
<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>
</pre>
<ul class="endnotetexts"><li>The structure write_state is accessed in 4/prp, 1/apacs, 5/ptf, 5/tf, 5/hf, 5/df and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>The file consists of definitions of macros, made one at a time, and
starting with <span class="extract"><span class="extract-syntax">@define</span></span> and finishing with <span class="extract"><span class="extract-syntax">@end</span></span>, and actual material.
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>And this is the one domain-specific macro:
</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">Readme::write_helper</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Readme::write_helper</span></span>:<br/><a href="6-rw.html#SP1">&#167;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">text</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">state</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">write_state</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ws</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">write_state</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">state</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">ws</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">OUT</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><a href="../foundation-module/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="../foundation-module/4-pm.html#SP10" class="function-link"><span class="function-syntax">Regexp::match</span></a><span class="plain-syntax">(&amp;</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">L</span><span class="string-syntax">" *@end *"</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">ws</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">current_definition</span><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/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">"@end without @define"</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">else</span><span class="plain-syntax"> </span><span class="identifier-syntax">ws</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">current_definition</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">else</span><span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ws</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">current_definition</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../foundation-module/4-sm.html#SP8" class="function-link"><span class="function-syntax">Str::len</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ws</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">current_definition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">) &gt; </span><span class="constant-syntax">0</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">ws</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">current_definition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">, </span><span class="string-syntax">"\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">ws</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">current_definition</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">, </span><span class="string-syntax">"%S"</span><span class="plain-syntax">, </span><span class="identifier-syntax">text</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><a href="../foundation-module/4-pm.html#SP10" class="function-link"><span class="function-syntax">Regexp::match</span></a><span class="plain-syntax">(&amp;</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">L</span><span class="string-syntax">" *@define (%i+)(%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">ws</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">current_definition</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="../foundation-module/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">"@define without @end"</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">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">macro</span><span class="plain-syntax"> *</span><span class="identifier-syntax">M</span><span class="plain-syntax"> = </span><a href="6-rw.html#SP3" class="function-link"><span class="function-syntax">Readme::new_macro</span></a><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">[0], </span><span class="identifier-syntax">mr</span><span class="plain-syntax">.</span><span class="element-syntax">exp</span><span class="plain-syntax">[1], </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ws</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">current_definition</span><span class="plain-syntax"> = </span><span class="identifier-syntax">M</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ADD_TO_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">M</span><span class="plain-syntax">, </span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">ws</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">known_macros</span><span class="plain-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="plain-syntax"> </span><a href="6-rw.html#SP5" class="function-link"><span class="function-syntax">Readme::expand_material</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ws</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">text</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="6-rw.html#SP5" class="function-link"><span class="function-syntax">Readme::expand_material</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ws</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><a href="../foundation-module/4-pm.html#SP9" class="function-link"><span class="function-syntax">Regexp::dispose_of</span></a><span class="plain-syntax">(&amp;</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">Readme::bibliographic_expander</span><button class="popup" onclick="togglePopup('usagePopup2')"><span class="comment-syntax">?</span><span class="popuptext" id="usagePopup2">Usage of <span class="code-font"><span class="function-syntax">Readme::bibliographic_expander</span></span>:<br/><a href="6-rw.html#SP1">&#167;1</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="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">datum</span><span class="plain-syntax"> = </span><span class="identifier-syntax">parameter_values</span><span class="plain-syntax">[0];</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">asset_name</span><span class="plain-syntax"> = </span><span class="identifier-syntax">parameter_values</span><span class="plain-syntax">[1];</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">PPS</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">dest</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">writeme_asset</span><span class="plain-syntax"> *</span><span class="identifier-syntax">A</span><span class="plain-syntax"> = </span><a href="6-rw.html#SP4" class="function-link"><span class="function-syntax">Readme::find_asset</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">asset_name</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">A</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">if_web</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><a href="../foundation-module/8-bdfw.html#SP6" class="function-link"><span class="function-syntax">Bibliographic::get_datum</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">A</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">if_web</span><span class="plain-syntax">, </span><span class="identifier-syntax">datum</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">datum</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Build Date"</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">A</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">date</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">datum</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Version Number"</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">A</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">version</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>The "content" of a macro is its definition, and the tokens are named
parameters.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">macro</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">name</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">content</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">macro_tokens</span><span class="plain-syntax"> </span><span class="identifier-syntax">tokens</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="constant-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">macro</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">macro</span><span class="plain-syntax"> *</span><span class="function-syntax">Readme::new_macro</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">Readme::new_macro</span></span>:<br/><a href="6-rw.html#SP1">&#167;1</a>, <a href="6-rw.html#SP2">&#167;2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">name</span><span class="plain-syntax">, </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">tokens</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">macro</span><span class="plain-syntax"> *</span><span class="identifier-syntax">M</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">macro</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">M</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">name</span><span class="plain-syntax"> = </span><a href="../foundation-module/4-sm.html#SP3" class="function-link"><span class="function-syntax">Str::duplicate</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">name</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">M</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tokens</span><span class="plain-syntax"> = </span><a href="6-rw.html#SP4" class="function-link"><span class="function-syntax">Readme::parse_token_list</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">tokens</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">M</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax"> = </span><a href="../foundation-module/4-sm.html#SP2" class="function-link"><span class="function-syntax">Str::new</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">M</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
<span class="reserved-syntax">typedef</span><span class="plain-syntax"> </span><span class="reserved-syntax">struct</span><span class="plain-syntax"> </span><span class="reserved-syntax">macro_tokens</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">macro</span><span class="plain-syntax"> *</span><span class="identifier-syntax">bound_to</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">pars</span><span class="plain-syntax">[8];</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">no_pars</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">macro_tokens</span><span class="plain-syntax"> *</span><span class="identifier-syntax">down</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="constant-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">macro_tokens</span><span class="plain-syntax">;</span>
</pre>
<ul class="endnotetexts"><li>The structure macro is accessed in 2/trs, 4/prp, 3/twot, 5/wt, 5/fm, 5/ptf, 5/tf, 5/hf, 5/df, 6/cs, 6/cln and here.</li><li>The structure macro_tokens is private to this section.</li></ul>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b></p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">macro_tokens</span><span class="plain-syntax"> </span><span class="function-syntax">Readme::parse_token_list</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">Readme::parse_token_list</span></span>:<br/><a href="6-rw.html#SP3">&#167;3</a>, <a href="6-rw.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">chunk</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">macro_tokens</span><span class="plain-syntax"> </span><span class="identifier-syntax">mt</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">mt</span><span class="plain-syntax">.</span><span class="element-syntax">no_pars</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">mt</span><span class="plain-syntax">.</span><span class="element-syntax">down</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">mt</span><span class="plain-syntax">.</span><span class="element-syntax">bound_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../foundation-module/4-sm.html#SP13" class="function-link"><span class="function-syntax">Str::get_first_char</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">chunk</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">x</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">, </span><span class="identifier-syntax">bl</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</span><span class="plain-syntax">, </span><span class="identifier-syntax">from</span><span class="plain-syntax"> = </span><span class="constant-syntax">1</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="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> ((</span><span class="identifier-syntax">bl</span><span class="plain-syntax"> &gt; </span><span class="constant-syntax">0</span><span class="plain-syntax">) &amp;&amp; (</span><a href="../foundation-module/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">chunk</span><span class="plain-syntax">, </span><span class="identifier-syntax">x</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">wchar_t</span><span class="plain-syntax"> </span><span class="identifier-syntax">c</span><span class="plain-syntax"> = </span><a href="../foundation-module/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">chunk</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">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">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="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">quoted</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">c</span><span class="plain-syntax"> == </span><span class="character-syntax">'('</span><span class="plain-syntax">) </span><span class="identifier-syntax">bl</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="character-syntax">')'</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">bl</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">bl</span><span class="plain-syntax"> == </span><span class="constant-syntax">0</span><span class="plain-syntax">) </span><span class="named-paragraph-container code-font"><a href="6-rw.html#SP4_1" class="named-paragraph-link"><span class="named-paragraph">Recognise token</span><span class="named-paragraph-number">4.1</span></a></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="character-syntax">','</span><span class="plain-syntax">) &amp;&amp; (</span><span class="identifier-syntax">bl</span><span class="plain-syntax"> == </span><span class="constant-syntax">1</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="6-rw.html#SP4_1" class="named-paragraph-link"><span class="named-paragraph">Recognise token</span><span class="named-paragraph-number">4.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">x</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><a href="../foundation-module/4-sm.html#SP25" class="function-link"><span class="function-syntax">Str::delete_n_characters</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">chunk</span><span class="plain-syntax">, </span><span class="identifier-syntax">x</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">mt</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4_1" class="paragraph-anchor"></a><b>&#167;4.1. </b>Quotes can be used in token lists so that literal commas and brackets can
be used without breaking the flow.
</p>
<p class="commentary"><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Recognise token</span><span class="named-paragraph-number">4.1</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">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">n</span><span class="plain-syntax"> = </span><span class="identifier-syntax">mt</span><span class="plain-syntax">.</span><span class="element-syntax">no_pars</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">n</span><span class="plain-syntax"> &gt;= </span><span class="constant-syntax">8</span><span class="plain-syntax">) </span><a href="../foundation-module/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 parameters"</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">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">mt</span><span class="plain-syntax">.</span><span class="identifier-syntax">pars</span><span class="plain-syntax">[</span><span class="identifier-syntax">n</span><span class="plain-syntax">] = </span><a href="../foundation-module/4-sm.html#SP2" class="function-link"><span class="function-syntax">Str::new</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">for</span><span class="plain-syntax"> (</span><span class="reserved-syntax">int</span><span class="plain-syntax"> </span><span class="identifier-syntax">j</span><span class="plain-syntax">=</span><span class="identifier-syntax">from</span><span class="plain-syntax">; </span><span class="identifier-syntax">j</span><span class="plain-syntax">&lt;</span><span class="identifier-syntax">x</span><span class="plain-syntax">; </span><span class="identifier-syntax">j</span><span class="plain-syntax">++) </span><span class="identifier-syntax">PUT_TO</span><span class="plain-syntax">(</span><span class="identifier-syntax">mt</span><span class="plain-syntax">.</span><span class="element-syntax">pars</span><span class="plain-syntax">[</span><span class="identifier-syntax">n</span><span class="plain-syntax">], </span><a href="../foundation-module/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">chunk</span><span class="plain-syntax">, </span><span class="identifier-syntax">j</span><span class="plain-syntax">));</span>
<span class="plain-syntax"> </span><a href="../foundation-module/4-sm.html#SP24" class="function-link"><span class="function-syntax">Str::trim_white_space</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">mt</span><span class="plain-syntax">.</span><span class="identifier-syntax">pars</span><span class="plain-syntax">[</span><span class="identifier-syntax">n</span><span class="plain-syntax">]);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> ((</span><a href="../foundation-module/4-sm.html#SP13" class="function-link"><span class="function-syntax">Str::get_first_char</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">mt</span><span class="plain-syntax">.</span><span class="element-syntax">pars</span><span class="plain-syntax">[</span><span class="identifier-syntax">n</span><span class="plain-syntax">]) == </span><span class="character-syntax">'\''</span><span class="plain-syntax">) &amp;&amp;</span>
<span class="plain-syntax"> (</span><a href="../foundation-module/4-sm.html#SP13" class="function-link"><span class="function-syntax">Str::get_last_char</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">mt</span><span class="plain-syntax">.</span><span class="element-syntax">pars</span><span class="plain-syntax">[</span><span class="identifier-syntax">n</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-sm.html#SP25" class="function-link"><span class="function-syntax">Str::delete_first_character</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">mt</span><span class="plain-syntax">.</span><span class="element-syntax">pars</span><span class="plain-syntax">[</span><span class="identifier-syntax">n</span><span class="plain-syntax">]);</span>
<span class="plain-syntax"> </span><a href="../foundation-module/4-sm.html#SP25" class="function-link"><span class="function-syntax">Str::delete_last_character</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">mt</span><span class="plain-syntax">.</span><span class="element-syntax">pars</span><span class="plain-syntax">[</span><span class="identifier-syntax">n</span><span class="plain-syntax">]);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">mt</span><span class="plain-syntax">.</span><span class="identifier-syntax">no_pars</span><span class="plain-syntax">++;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">from</span><span class="plain-syntax"> = </span><span class="identifier-syntax">x</span><span class="plain-syntax">+1;</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="6-rw.html#SP4">&#167;4</a> (twice).</li></ul>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b>So much for creating macros. Now we can write the actual expander. As can
be seen, it passes material straight through, except for instances of the
notation <span class="extract"><span class="extract-syntax">@name</span></span>, possibly followed by a bracketed list of parameters.
</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">Readme::expand_material</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">Readme::expand_material</span></span>:<br/><a href="6-rw.html#SP2">&#167;2</a>, <a href="6-rw.html#SP6">&#167;6</a>, <a href="6-rw.html#SP7">&#167;7</a>, <a href="6-rw.html#SP7_1">&#167;7.1</a>, <a href="6-rw.html#SP7_2">&#167;7.2</a>, <a href="6-rw.html#SP7_3">&#167;7.3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">write_state</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ws</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="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text</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">match_results</span><span class="plain-syntax"> </span><span class="identifier-syntax">mr</span><span class="plain-syntax"> = </span><a href="../foundation-module/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="../foundation-module/4-pm.html#SP10" class="function-link"><span class="function-syntax">Regexp::match</span></a><span class="plain-syntax">(&amp;</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">L</span><span class="string-syntax">"(%c*?)@(%i+)(%c*)"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><a href="6-rw.html#SP5" class="function-link"><span class="function-syntax">Readme::expand_material</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ws</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</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">[0], </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">macro_tokens</span><span class="plain-syntax"> </span><span class="identifier-syntax">mt</span><span class="plain-syntax"> = </span><a href="6-rw.html#SP4" class="function-link"><span class="function-syntax">Readme::parse_token_list</span></a><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">[2], </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">mt</span><span class="plain-syntax">.</span><span class="identifier-syntax">down</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ws</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">stack_frame</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ws</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">stack_frame</span><span class="plain-syntax"> = &amp;</span><span class="identifier-syntax">mt</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="6-rw.html#SP6" class="function-link"><span class="function-syntax">Readme::expand_at</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ws</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</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">[1], </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ws</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">stack_frame</span><span class="plain-syntax"> = </span><span class="identifier-syntax">mt</span><span class="plain-syntax">.</span><span class="element-syntax">down</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="6-rw.html#SP5" class="function-link"><span class="function-syntax">Readme::expand_material</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ws</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</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">[2], </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</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">text</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><a href="../foundation-module/4-pm.html#SP9" class="function-link"><span class="function-syntax">Regexp::dispose_of</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b>If we run into the notation <span class="extract"><span class="extract-syntax">@something</span></span>, it's possible that <span class="extract"><span class="extract-syntax">something</span></span> is
the name of a parameter somewhere in the current stack, either on the top
frame or on frames lower down. The first match wins... and if there are no
matches, then it must be a macro name.
</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">Readme::expand_at</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">Readme::expand_at</span></span>:<br/><a href="6-rw.html#SP5">&#167;5</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">write_state</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ws</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="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">macro_name</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">macro_tokens</span><span class="plain-syntax"> *</span><span class="identifier-syntax">stack</span><span class="plain-syntax"> = </span><span class="identifier-syntax">ws</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">stack_frame</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">while</span><span class="plain-syntax"> (</span><span class="identifier-syntax">stack</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">macro</span><span class="plain-syntax"> *</span><span class="identifier-syntax">in</span><span class="plain-syntax"> = </span><span class="identifier-syntax">stack</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">bound_to</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">in</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">n</span><span class="plain-syntax"> = </span><span class="constant-syntax">0</span><span class="plain-syntax">; </span><span class="identifier-syntax">n</span><span class="plain-syntax"> &lt; </span><span class="identifier-syntax">in</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tokens</span><span class="plain-syntax">.</span><span class="element-syntax">no_pars</span><span class="plain-syntax">; </span><span class="identifier-syntax">n</span><span class="plain-syntax">++)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">in</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">tokens</span><span class="plain-syntax">.</span><span class="element-syntax">pars</span><span class="plain-syntax">[</span><span class="identifier-syntax">n</span><span class="plain-syntax">], </span><span class="identifier-syntax">macro_name</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">n</span><span class="plain-syntax"> &lt; </span><span class="identifier-syntax">stack</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">no_pars</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><a href="6-rw.html#SP5" class="function-link"><span class="function-syntax">Readme::expand_material</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ws</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">stack</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">pars</span><span class="plain-syntax">[</span><span class="identifier-syntax">n</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">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">stack</span><span class="plain-syntax"> = </span><span class="identifier-syntax">stack</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">down</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">macro</span><span class="plain-syntax"> *</span><span class="identifier-syntax">M</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER_LINKED_LIST</span><span class="plain-syntax">(</span><span class="identifier-syntax">M</span><span class="plain-syntax">, </span><span class="reserved-syntax">macro</span><span class="plain-syntax">, </span><span class="identifier-syntax">ws</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">known_macros</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">M</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">macro_name</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ws</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">stack_frame</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">bound_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">M</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="6-rw.html#SP7" class="function-link"><span class="function-syntax">Readme::expand_macro</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ws</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">M</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">return</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax"> </span><a href="../foundation-module/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">"no such @-command"</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">WRITE_TO</span><span class="plain-syntax">(</span><span class="constant-syntax">STDERR</span><span class="plain-syntax">, </span><span class="string-syntax">"(command is '%S')\n"</span><span class="plain-syntax">, </span><span class="identifier-syntax">macro_name</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b>So, then: suppose we have to expand <span class="extract"><span class="extract-syntax">@example(5, gold rings)</span></span>. Then the
<span class="extract"><span class="extract-syntax">macro_name</span></span> below is set to <span class="extract"><span class="extract-syntax">example</span></span>, and the current stack frame contains the
values <span class="extract"><span class="extract-syntax">5</span></span> and <span class="extract"><span class="extract-syntax">gold rings</span></span>.
</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">Readme::expand_macro</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">Readme::expand_macro</span></span>:<br/><a href="6-rw.html#SP6">&#167;6</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">write_state</span><span class="plain-syntax"> *</span><span class="identifier-syntax">ws</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="reserved-syntax">macro</span><span class="plain-syntax"> *</span><span class="identifier-syntax">M</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">M</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"version"</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="6-rw.html#SP7_1" class="named-paragraph-link"><span class="named-paragraph">Perform built-in expansion of version macro</span><span class="named-paragraph-number">7.1</span></a></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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">M</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"purpose"</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="6-rw.html#SP7_2" class="named-paragraph-link"><span class="named-paragraph">Perform built-in expansion of purpose macro</span><span class="named-paragraph-number">7.2</span></a></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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">M</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">name</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"var"</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="6-rw.html#SP7_3" class="named-paragraph-link"><span class="named-paragraph">Perform built-in expansion of var macro</span><span class="named-paragraph-number">7.3</span></a></span>
<span class="plain-syntax"> </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">ws</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">stack_frame</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">bound_to</span><span class="plain-syntax"> = </span><span class="identifier-syntax">M</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><a href="6-rw.html#SP5" class="function-link"><span class="function-syntax">Readme::expand_material</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ws</span><span class="plain-syntax">, </span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">M</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">content</span><span class="plain-syntax">, </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> }</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP7_1" class="paragraph-anchor"></a><b>&#167;7.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Perform built-in expansion of version macro</span><span class="named-paragraph-number">7.1</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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ws</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">stack_frame</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">no_pars</span><span class="plain-syntax"> != </span><span class="constant-syntax">1</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="../foundation-module/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">"@version takes 1 parameter"</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">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">program</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="6-rw.html#SP5" class="function-link"><span class="function-syntax">Readme::expand_material</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ws</span><span class="plain-syntax">, </span><span class="identifier-syntax">program</span><span class="plain-syntax">, </span><span class="identifier-syntax">ws</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">stack_frame</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">pars</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="6-rw.html#SP8" class="function-link"><span class="function-syntax">Readme::write_var</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">program</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Version Number"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">program</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="6-rw.html#SP7">&#167;7</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7_2" class="paragraph-anchor"></a><b>&#167;7.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Perform built-in expansion of purpose macro</span><span class="named-paragraph-number">7.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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ws</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">stack_frame</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">no_pars</span><span class="plain-syntax"> != </span><span class="constant-syntax">1</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="../foundation-module/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">"@purpose takes 1 parameter"</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">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">program</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="6-rw.html#SP5" class="function-link"><span class="function-syntax">Readme::expand_material</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ws</span><span class="plain-syntax">, </span><span class="identifier-syntax">program</span><span class="plain-syntax">, </span><span class="identifier-syntax">ws</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">stack_frame</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">pars</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="6-rw.html#SP8" class="function-link"><span class="function-syntax">Readme::write_var</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">program</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Purpose"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">program</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="6-rw.html#SP7">&#167;7</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP7_3" class="paragraph-anchor"></a><b>&#167;7.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Perform built-in expansion of var macro</span><span class="named-paragraph-number">7.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">if</span><span class="plain-syntax"> (</span><span class="identifier-syntax">ws</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">stack_frame</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">no_pars</span><span class="plain-syntax"> != </span><span class="constant-syntax">2</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="../foundation-module/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">"@var takes 2 parameters"</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">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">program</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">TEMPORARY_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">bibv</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><a href="6-rw.html#SP5" class="function-link"><span class="function-syntax">Readme::expand_material</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ws</span><span class="plain-syntax">, </span><span class="identifier-syntax">program</span><span class="plain-syntax">, </span><span class="identifier-syntax">ws</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">stack_frame</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">pars</span><span class="plain-syntax">[0], </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="6-rw.html#SP5" class="function-link"><span class="function-syntax">Readme::expand_material</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">ws</span><span class="plain-syntax">, </span><span class="identifier-syntax">bibv</span><span class="plain-syntax">, </span><span class="identifier-syntax">ws</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">stack_frame</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">pars</span><span class="plain-syntax">[1], </span><span class="identifier-syntax">tfp</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><a href="6-rw.html#SP8" class="function-link"><span class="function-syntax">Readme::write_var</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">OUT</span><span class="plain-syntax">, </span><span class="identifier-syntax">program</span><span class="plain-syntax">, </span><span class="identifier-syntax">bibv</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">program</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">DISCARD_TEXT</span><span class="plain-syntax">(</span><span class="identifier-syntax">bibv</span><span class="plain-syntax">)</span>
<span class="plain-syntax"> }</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="6-rw.html#SP7">&#167;7</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. </b>An "asset" here is something for which we might want to write the version
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>An "asset" here is something for which we might want to write the version
number of, or some similar metadata for. Assets are usually webs, but can
also be a few other rather Inform-specific things; those have a more limited
range of bibliographic data, just the version and date (and we will not
@ -337,19 +98,19 @@ assume that the version complies with any format).
<span class="plain-syntax"> </span><span class="constant-syntax">CLASS_DEFINITION</span>
<span class="plain-syntax">} </span><span class="reserved-syntax">writeme_asset</span><span class="plain-syntax">;</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Readme::write_var</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">Readme::write_var</span></span>:<br/><a href="6-rw.html#SP7_1">&#167;7.1</a>, <a href="6-rw.html#SP7_2">&#167;7.2</a>, <a href="6-rw.html#SP7_3">&#167;7.3</a><br/>The Collater - <a href="3-tc.html#SP5_1_3">&#167;5.1.3</a>, <a href="3-tc.html#SP5_1_11_6_1">&#167;5.1.11.6.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">OUT</span><span class="plain-syntax">, </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">program</span><span class="plain-syntax">, </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">datum</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">writeme_asset</span><span class="plain-syntax"> *</span><span class="identifier-syntax">A</span><span class="plain-syntax"> = </span><a href="6-rw.html#SP9" class="function-link"><span class="function-syntax">Readme::find_asset</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">program</span><span class="plain-syntax">);</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Readme::write_var</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">Readme::write_var</span></span>:<br/>The Collater - <a href="3-tc.html#SP5_1_3">&#167;5.1.3</a>, <a href="3-tc.html#SP5_1_11_6_1">&#167;5.1.11.6.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">OUT</span><span class="plain-syntax">, </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">program</span><span class="plain-syntax">, </span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">datum</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">writeme_asset</span><span class="plain-syntax"> *</span><span class="identifier-syntax">A</span><span class="plain-syntax"> = </span><a href="6-rw.html#SP4" class="function-link"><span class="function-syntax">Readme::find_asset</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">program</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">A</span><span class="plain-syntax">-&gt;</span><span class="identifier-syntax">if_web</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><a href="../foundation-module/8-bdfw.html#SP6" class="function-link"><span class="function-syntax">Bibliographic::get_datum</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">A</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">if_web</span><span class="plain-syntax">, </span><span class="identifier-syntax">datum</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">datum</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Build Date"</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">A</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">date</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><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">datum</span><span class="plain-syntax">, </span><span class="identifier-syntax">I</span><span class="string-syntax">"Version Number"</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">A</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">version</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<ul class="endnotetexts"><li>The structure writeme_asset is accessed in 2/trs, 4/prp, 5/wt, 6/cs, 6/cln and here.</li></ul>
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>&#167;9. </b>That just leaves the business of inspecting assets to obtain their metadata.
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b>That just leaves the business of inspecting assets to obtain their metadata.
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="reserved-syntax">writeme_asset</span><span class="plain-syntax"> *</span><span class="function-syntax">Readme::find_asset</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">Readme::find_asset</span></span>:<br/><a href="6-rw.html#SP8">&#167;8</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">program</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">writeme_asset</span><span class="plain-syntax"> *</span><span class="function-syntax">Readme::find_asset</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">Readme::find_asset</span></span>:<br/><a href="6-rw.html#SP2">&#167;2</a>, <a href="6-rw.html#SP3">&#167;3</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">program</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">writeme_asset</span><span class="plain-syntax"> *</span><span class="identifier-syntax">A</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">LOOP_OVER</span><span class="plain-syntax">(</span><span class="identifier-syntax">A</span><span class="plain-syntax">, </span><span class="reserved-syntax">writeme_asset</span><span class="plain-syntax">) </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../foundation-module/4-sm.html#SP19" class="function-link"><span class="function-syntax">Str::eq</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">program</span><span class="plain-syntax">, </span><span class="identifier-syntax">A</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">name</span><span class="plain-syntax">)) </span><span class="reserved-syntax">return</span><span class="plain-syntax"> </span><span class="identifier-syntax">A</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">A</span><span class="plain-syntax"> = </span><span class="identifier-syntax">CREATE</span><span class="plain-syntax">(</span><span class="reserved-syntax">writeme_asset</span><span class="plain-syntax">);</span>
@ -358,70 +119,70 @@ assume that the version complies with any format).
<span class="plain-syntax"> </span><span class="identifier-syntax">A</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">date</span><span class="plain-syntax"> = </span><a href="../foundation-module/4-sm.html#SP2" class="function-link"><span class="function-syntax">Str::new</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">A</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">version</span><span class="plain-syntax"> = </span><a href="../foundation-module/4-sm.html#SP2" class="function-link"><span class="function-syntax">Str::new</span></a><span class="plain-syntax">();</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">A</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">next_is_version</span><span class="plain-syntax"> = </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="6-rw.html#SP9_1" class="named-paragraph-link"><span class="named-paragraph">Read in the asset</span><span class="named-paragraph-number">9.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="6-rw.html#SP4_1" class="named-paragraph-link"><span class="named-paragraph">Read in the asset</span><span class="named-paragraph-number">4.1</span></a></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">A</span><span class="plain-syntax">;</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP9_1" class="paragraph-anchor"></a><b>&#167;9.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Read in the asset</span><span class="named-paragraph-number">9.1</span></span><span class="comment-syntax"> =</span>
<p class="commentary firstcommentary"><a id="SP4_1" class="paragraph-anchor"></a><b>&#167;4.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Read in the asset</span><span class="named-paragraph-number">4.1</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">if</span><span class="plain-syntax"> (</span><a href="../foundation-module/4-sm.html#SP21" class="function-link"><span class="function-syntax">Str::ends_with_wide_string</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">program</span><span class="plain-syntax">, </span><span class="identifier-syntax">L</span><span class="string-syntax">".i7x"</span><span class="plain-syntax">)) {</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="6-rw.html#SP9_1_1" class="named-paragraph-link"><span class="named-paragraph">Read in the extension file</span><span class="named-paragraph-number">9.1.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="named-paragraph-container code-font"><a href="6-rw.html#SP4_1_1" class="named-paragraph-link"><span class="named-paragraph">Read in the extension file</span><span class="named-paragraph-number">4.1.1</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> } </span><span class="reserved-syntax">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../foundation-module/8-ws.html#SP8" class="function-link"><span class="function-syntax">WebMetadata::directory_looks_like_a_web</span></a><span class="plain-syntax">(</span><a href="../foundation-module/3-pth.html#SP5" class="function-link"><span class="function-syntax">Pathnames::from_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">program</span><span class="plain-syntax">))) {</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">A</span><span class="plain-syntax">-&gt;</span><span class="element-syntax">if_web</span><span class="plain-syntax"> = </span><a href="../foundation-module/8-ws.html#SP5" class="function-link"><span class="function-syntax">WebMetadata::get_without_modules</span></a><span class="plain-syntax">(</span><a href="../foundation-module/3-pth.html#SP5" class="function-link"><span class="function-syntax">Pathnames::from_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">program</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">else</span><span class="plain-syntax"> {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">I6_vn</span><span class="plain-syntax"> = </span><a href="../foundation-module/3-fln.html#SP2" class="function-link"><span class="function-syntax">Filenames::in</span></a><span class="plain-syntax">(</span>
<span class="plain-syntax"> </span><a href="../foundation-module/3-pth.html#SP4" class="function-link"><span class="function-syntax">Pathnames::down</span></a><span class="plain-syntax">(</span><a href="../foundation-module/3-pth.html#SP5" class="function-link"><span class="function-syntax">Pathnames::from_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">program</span><span class="plain-syntax">), </span><span class="identifier-syntax">I</span><span class="string-syntax">"inform6"</span><span class="plain-syntax">), </span><span class="identifier-syntax">I</span><span class="string-syntax">"header.h"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../foundation-module/4-tf.html#SP1" class="function-link"><span class="function-syntax">TextFiles::exists</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I6_vn</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="6-rw.html#SP9_1_2" class="named-paragraph-link"><span class="named-paragraph">Read in I6 source header file</span><span class="named-paragraph-number">9.1.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="../foundation-module/4-tf.html#SP1" class="function-link"><span class="function-syntax">TextFiles::exists</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I6_vn</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="6-rw.html#SP4_1_2" class="named-paragraph-link"><span class="named-paragraph">Read in I6 source header file</span><span class="named-paragraph-number">4.1.2</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">template_vn</span><span class="plain-syntax"> = </span><a href="../foundation-module/3-fln.html#SP2" class="function-link"><span class="function-syntax">Filenames::in</span></a><span class="plain-syntax">(</span><a href="../foundation-module/3-pth.html#SP5" class="function-link"><span class="function-syntax">Pathnames::from_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">program</span><span class="plain-syntax">), </span><span class="identifier-syntax">I</span><span class="string-syntax">"(manifest).txt"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../foundation-module/4-tf.html#SP1" class="function-link"><span class="function-syntax">TextFiles::exists</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">template_vn</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="6-rw.html#SP9_1_3" class="named-paragraph-link"><span class="named-paragraph">Read in template manifest file</span><span class="named-paragraph-number">9.1.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="../foundation-module/4-tf.html#SP1" class="function-link"><span class="function-syntax">TextFiles::exists</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">template_vn</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="6-rw.html#SP4_1_3" class="named-paragraph-link"><span class="named-paragraph">Read in template manifest file</span><span class="named-paragraph-number">4.1.3</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">filename</span><span class="plain-syntax"> *</span><span class="identifier-syntax">rmt_vn</span><span class="plain-syntax"> = </span><a href="../foundation-module/3-fln.html#SP2" class="function-link"><span class="function-syntax">Filenames::in</span></a><span class="plain-syntax">(</span><a href="../foundation-module/3-pth.html#SP5" class="function-link"><span class="function-syntax">Pathnames::from_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">program</span><span class="plain-syntax">), </span><span class="identifier-syntax">I</span><span class="string-syntax">"README.txt"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../foundation-module/4-tf.html#SP1" class="function-link"><span class="function-syntax">TextFiles::exists</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">rmt_vn</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="6-rw.html#SP9_1_4" class="named-paragraph-link"><span class="named-paragraph">Read in README file</span><span class="named-paragraph-number">9.1.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><a href="../foundation-module/4-tf.html#SP1" class="function-link"><span class="function-syntax">TextFiles::exists</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">rmt_vn</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="6-rw.html#SP4_1_4" class="named-paragraph-link"><span class="named-paragraph">Read in README file</span><span class="named-paragraph-number">4.1.4</span></a></span><span class="plain-syntax">;</span>
<span class="plain-syntax"> </span><span class="identifier-syntax">rmt_vn</span><span class="plain-syntax"> = </span><a href="../foundation-module/3-fln.html#SP2" class="function-link"><span class="function-syntax">Filenames::in</span></a><span class="plain-syntax">(</span><a href="../foundation-module/3-pth.html#SP5" class="function-link"><span class="function-syntax">Pathnames::from_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">program</span><span class="plain-syntax">), </span><span class="identifier-syntax">I</span><span class="string-syntax">"README.md"</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">if</span><span class="plain-syntax"> (</span><a href="../foundation-module/4-tf.html#SP1" class="function-link"><span class="function-syntax">TextFiles::exists</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">rmt_vn</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="6-rw.html#SP9_1_4" class="named-paragraph-link"><span class="named-paragraph">Read in README file</span><span class="named-paragraph-number">9.1.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><a href="../foundation-module/4-tf.html#SP1" class="function-link"><span class="function-syntax">TextFiles::exists</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">rmt_vn</span><span class="plain-syntax">)) </span><span class="named-paragraph-container code-font"><a href="6-rw.html#SP4_1_4" class="named-paragraph-link"><span class="named-paragraph">Read in README file</span><span class="named-paragraph-number">4.1.4</span></a></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="6-rw.html#SP9">&#167;9</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP9_1_1" class="paragraph-anchor"></a><b>&#167;9.1.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Read in the extension file</span><span class="named-paragraph-number">9.1.1</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="6-rw.html#SP4">&#167;4</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_1_1" class="paragraph-anchor"></a><b>&#167;4.1.1. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Read in the extension file</span><span class="named-paragraph-number">4.1.1</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><a href="../foundation-module/4-tf.html#SP5" class="function-link"><span class="function-syntax">TextFiles::read</span></a><span class="plain-syntax">(</span><a href="../foundation-module/3-fln.html#SP3" class="function-link"><span class="function-syntax">Filenames::from_text</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">program</span><span class="plain-syntax">), </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"unable to read extension"</span><span class="plain-syntax">, </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> &amp;</span><a href="6-rw.html#SP10" class="function-link"><span class="function-syntax">Readme::extension_harvester</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">A</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> &amp;</span><a href="6-rw.html#SP5" class="function-link"><span class="function-syntax">Readme::extension_harvester</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">A</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="6-rw.html#SP9_1">&#167;9.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP9_1_2" class="paragraph-anchor"></a><b>&#167;9.1.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Read in I6 source header file</span><span class="named-paragraph-number">9.1.2</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="6-rw.html#SP4_1">&#167;4.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_1_2" class="paragraph-anchor"></a><b>&#167;4.1.2. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Read in I6 source header file</span><span class="named-paragraph-number">4.1.2</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><a href="../foundation-module/4-tf.html#SP5" class="function-link"><span class="function-syntax">TextFiles::read</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">I6_vn</span><span class="plain-syntax">, </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"unable to read header file from I6 source"</span><span class="plain-syntax">, </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> &amp;</span><a href="6-rw.html#SP11" class="function-link"><span class="function-syntax">Readme::header_harvester</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">A</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> &amp;</span><a href="6-rw.html#SP6" class="function-link"><span class="function-syntax">Readme::header_harvester</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">A</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="6-rw.html#SP9_1">&#167;9.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP9_1_3" class="paragraph-anchor"></a><b>&#167;9.1.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Read in template manifest file</span><span class="named-paragraph-number">9.1.3</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="6-rw.html#SP4_1">&#167;4.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_1_3" class="paragraph-anchor"></a><b>&#167;4.1.3. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Read in template manifest file</span><span class="named-paragraph-number">4.1.3</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><a href="../foundation-module/4-tf.html#SP5" class="function-link"><span class="function-syntax">TextFiles::read</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">template_vn</span><span class="plain-syntax">, </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"unable to read manifest file from website template"</span><span class="plain-syntax">, </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> &amp;</span><a href="6-rw.html#SP12" class="function-link"><span class="function-syntax">Readme::template_harvester</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">A</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> &amp;</span><a href="6-rw.html#SP7" class="function-link"><span class="function-syntax">Readme::template_harvester</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">A</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="6-rw.html#SP9_1">&#167;9.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP9_1_4" class="paragraph-anchor"></a><b>&#167;9.1.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Read in README file</span><span class="named-paragraph-number">9.1.4</span></span><span class="comment-syntax"> =</span>
<ul class="endnotetexts"><li>This code is used in <a href="6-rw.html#SP4_1">&#167;4.1</a>.</li></ul>
<p class="commentary firstcommentary"><a id="SP4_1_4" class="paragraph-anchor"></a><b>&#167;4.1.4. </b><span class="named-paragraph-container code-font"><span class="named-paragraph-defn">Read in README file</span><span class="named-paragraph-number">4.1.4</span></span><span class="comment-syntax"> =</span>
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><a href="../foundation-module/4-tf.html#SP5" class="function-link"><span class="function-syntax">TextFiles::read</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">rmt_vn</span><span class="plain-syntax">, </span><span class="constant-syntax">FALSE</span><span class="plain-syntax">, </span><span class="string-syntax">"unable to read README file from website template"</span><span class="plain-syntax">, </span><span class="constant-syntax">TRUE</span><span class="plain-syntax">,</span>
<span class="plain-syntax"> &amp;</span><a href="6-rw.html#SP13" class="function-link"><span class="function-syntax">Readme::readme_harvester</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">A</span><span class="plain-syntax">);</span>
<span class="plain-syntax"> &amp;</span><a href="6-rw.html#SP8" class="function-link"><span class="function-syntax">Readme::readme_harvester</span></a><span class="plain-syntax">, </span><span class="identifier-syntax">NULL</span><span class="plain-syntax">, </span><span class="identifier-syntax">A</span><span class="plain-syntax">);</span>
</pre>
<ul class="endnotetexts"><li>This code is used in <a href="6-rw.html#SP9_1">&#167;9.1</a> (twice).</li></ul>
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. </b>The format for the contents section of a web is documented in Inweb.
<ul class="endnotetexts"><li>This code is used in <a href="6-rw.html#SP4_1">&#167;4.1</a> (twice).</li></ul>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b>The format for the contents section of a web is documented in Inweb.
</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">Readme::extension_harvester</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">Readme::extension_harvester</span></span>:<br/><a href="6-rw.html#SP9_1_1">&#167;9.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">text</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">state</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Readme::extension_harvester</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">Readme::extension_harvester</span></span>:<br/><a href="6-rw.html#SP4_1_1">&#167;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">text</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">state</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">writeme_asset</span><span class="plain-syntax"> *</span><span class="identifier-syntax">A</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">writeme_asset</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">state</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><a href="../foundation-module/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="../foundation-module/4-sm.html#SP8" class="function-link"><span class="function-syntax">Str::len</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">text</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>
@ -430,11 +191,11 @@ assume that the version complies with any format).
<span class="plain-syntax"> </span><a href="../foundation-module/4-pm.html#SP9" class="function-link"><span class="function-syntax">Regexp::dispose_of</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>&#167;11. </b>Explicit code to read from <span class="extract"><span class="extract-syntax">header.h</span></span> in the Inform 6 repository.
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b>Explicit code to read from <span class="extract"><span class="extract-syntax">header.h</span></span> in the Inform 6 repository.
</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">Readme::header_harvester</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">Readme::header_harvester</span></span>:<br/><a href="6-rw.html#SP9_1_2">&#167;9.1.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text</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">state</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Readme::header_harvester</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">Readme::header_harvester</span></span>:<br/><a href="6-rw.html#SP4_1_2">&#167;4.1.2</a></span></button><span class="plain-syntax">(</span><span class="reserved-syntax">text_stream</span><span class="plain-syntax"> *</span><span class="identifier-syntax">text</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">state</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">writeme_asset</span><span class="plain-syntax"> *</span><span class="identifier-syntax">A</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">writeme_asset</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">state</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><a href="../foundation-module/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="../foundation-module/4-sm.html#SP8" class="function-link"><span class="function-syntax">Str::len</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">text</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>
@ -445,11 +206,11 @@ assume that the version complies with any format).
<span class="plain-syntax"> </span><a href="../foundation-module/4-pm.html#SP9" class="function-link"><span class="function-syntax">Regexp::dispose_of</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP12" class="paragraph-anchor"></a><b>&#167;12. </b>Explicit code to read from the manifest file of a website template.
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b>Explicit code to read from the manifest file of a website template.
</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">Readme::template_harvester</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">Readme::template_harvester</span></span>:<br/><a href="6-rw.html#SP9_1_3">&#167;9.1.3</a></span></button><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="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">state</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Readme::template_harvester</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">Readme::template_harvester</span></span>:<br/><a href="6-rw.html#SP4_1_3">&#167;4.1.3</a></span></button><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="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">state</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">writeme_asset</span><span class="plain-syntax"> *</span><span class="identifier-syntax">A</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">writeme_asset</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">state</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><a href="../foundation-module/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="../foundation-module/4-sm.html#SP8" class="function-link"><span class="function-syntax">Str::len</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">text</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>
@ -462,11 +223,11 @@ assume that the version complies with any format).
<span class="plain-syntax"> </span><a href="../foundation-module/4-pm.html#SP9" class="function-link"><span class="function-syntax">Regexp::dispose_of</span></a><span class="plain-syntax">(&amp;</span><span class="identifier-syntax">mr</span><span class="plain-syntax">);</span>
<span class="plain-syntax">}</span>
</pre>
<p class="commentary firstcommentary"><a id="SP13" class="paragraph-anchor"></a><b>&#167;13. </b>And this is needed for <span class="extract"><span class="extract-syntax">cheapglk</span></span> and <span class="extract"><span class="extract-syntax">glulxe</span></span> in the Inform repository.
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. </b>And this is needed for <span class="extract"><span class="extract-syntax">cheapglk</span></span> and <span class="extract"><span class="extract-syntax">glulxe</span></span> in the Inform repository.
</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">Readme::readme_harvester</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">Readme::readme_harvester</span></span>:<br/><a href="6-rw.html#SP9_1_4">&#167;9.1.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">text</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">state</span><span class="plain-syntax">) {</span>
<span class="reserved-syntax">void</span><span class="plain-syntax"> </span><span class="function-syntax">Readme::readme_harvester</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">Readme::readme_harvester</span></span>:<br/><a href="6-rw.html#SP4_1_4">&#167;4.1.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">text</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">state</span><span class="plain-syntax">) {</span>
<span class="plain-syntax"> </span><span class="reserved-syntax">writeme_asset</span><span class="plain-syntax"> *</span><span class="identifier-syntax">A</span><span class="plain-syntax"> = (</span><span class="reserved-syntax">writeme_asset</span><span class="plain-syntax"> *) </span><span class="identifier-syntax">state</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><a href="../foundation-module/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="../foundation-module/4-sm.html#SP8" class="function-link"><span class="function-syntax">Str::len</span></a><span class="plain-syntax">(</span><span class="identifier-syntax">text</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>

View file

@ -48,7 +48,7 @@
<ul class="crumbs"><li><a href="../index.html">Home</a></li><li><a href="index.html">inweb</a></li><li><a href="index.html#M">Manual</a></li><li><b>Webs, Tangling and Weaving</b></li></ul></div>
<p class="purpose">How to use Inweb to weave or tangle a web already written.</p>
<ul class="toc"><li><a href="M-wtaw.html#SP1">&#167;1. All-in-one webs</a></li><li><a href="M-wtaw.html#SP4">&#167;4. Multi-section webs</a></li><li><a href="M-wtaw.html#SP7">&#167;7. Tangling</a></li><li><a href="M-wtaw.html#SP10">&#167;10. Weaving</a></li><li><a href="M-wtaw.html#SP13">&#167;13. Weave tags</a></li><li><a href="M-wtaw.html#SP14">&#167;14. Modules</a></li><li><a href="M-wtaw.html#SP17">&#167;17. The section catalogue</a></li><li><a href="M-wtaw.html#SP18">&#167;18. Makefile</a></li><li><a href="M-wtaw.html#SP25">&#167;25. Gitignore</a></li><li><a href="M-wtaw.html#SP26">&#167;26. Ctags</a></li><li><a href="M-wtaw.html#SP27">&#167;27. README files</a></li><li><a href="M-wtaw.html#SP30">&#167;30. Semantic version numbering and build metadata</a></li></ul><hr class="tocbar">
<ul class="toc"><li><a href="M-wtaw.html#SP1">&#167;1. All-in-one webs</a></li><li><a href="M-wtaw.html#SP4">&#167;4. Multi-section webs</a></li><li><a href="M-wtaw.html#SP7">&#167;7. Tangling</a></li><li><a href="M-wtaw.html#SP10">&#167;10. Weaving</a></li><li><a href="M-wtaw.html#SP13">&#167;13. Weave tags</a></li><li><a href="M-wtaw.html#SP14">&#167;14. Modules</a></li><li><a href="M-wtaw.html#SP17">&#167;17. The section catalogue</a></li><li><a href="M-wtaw.html#SP18">&#167;18. Makefile</a></li><li><a href="M-wtaw.html#SP25">&#167;25. Gitignore</a></li><li><a href="M-wtaw.html#SP26">&#167;26. README files</a></li><li><a href="M-wtaw.html#SP27">&#167;27. Semantic version numbering and build metadata</a></li><li><a href="M-wtaw.html#SP29">&#167;29. Ctags</a></li></ul><hr class="tocbar">
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. All-in-one webs. </b>A program written for use with Inweb is called a "web". Inweb was primarily
designed for large, multisection webs, but it can also be used in a much
@ -811,28 +811,7 @@ not <span class="extract"><span class="ConsoleText-extract-syntax">.mkscript</sp
if the web provided no script of its own; the idea is that you can then list
some additional things to ignore.
</li></ul>
<p class="commentary firstcommentary"><a id="SP26" class="paragraph-anchor"></a><b>&#167;26. Ctags. </b>Each time a web is tangled, Inweb writes a <span class="extract"><span class="ConsoleText-extract-syntax">tags</span></span> file to the web's home
directory, containing a list of <a href="https://ctags.io" class="external">Universal ctags</a>
for any structures, functions or constant definitions found in the web. You
need do nothing to make this happen, and can ignore the file if it's of no
use. If you are editing a web in certain text editors, though, such as
<a href="https://www.barebones.com/products/bbedit" class="external">BBEdit</a> for MacOS, then this
should make code completion and definition lookup features work.
</p>
<p class="commentary">You can however write the file elsewhere:
</p>
<pre class="ConsoleText-displayed-code all-displayed-code code-font">
<span class="ConsoleText-plain-syntax"> </span><span class="ConsoleText-element-syntax">$</span><span class="ConsoleText-plain-syntax"> </span><span class="ConsoleText-function-syntax">inweb/Tangled/inweb</span><span class="ConsoleText-plain-syntax"> W</span><span class="ConsoleText-identifier-syntax"> -tangle -ctags-to</span><span class="ConsoleText-plain-syntax"> secret_lair/my_nifty.ctags</span>
</pre>
<p class="commentary">or not at all:
</p>
<pre class="ConsoleText-displayed-code all-displayed-code code-font">
<span class="ConsoleText-plain-syntax"> </span><span class="ConsoleText-element-syntax">$</span><span class="ConsoleText-plain-syntax"> </span><span class="ConsoleText-function-syntax">inweb/Tangled/inweb</span><span class="ConsoleText-plain-syntax"> W</span><span class="ConsoleText-identifier-syntax"> -tangle -no-ctags</span>
</pre>
<p class="commentary firstcommentary"><a id="SP27" class="paragraph-anchor"></a><b>&#167;27. README files. </b>Repositories at Github customarily have <span class="extract"><span class="ConsoleText-extract-syntax">README.mk</span></span> files, in Markdown
<p class="commentary firstcommentary"><a id="SP26" class="paragraph-anchor"></a><b>&#167;26. README files. </b>Repositories at Github customarily have <span class="extract"><span class="ConsoleText-extract-syntax">README.mk</span></span> files, in Markdown
syntax, explaining what they are. These of course should probably include
current version numbers, and it's a pain keeping that up to date. For
really complicated repositories, containing multiple webs, some automation
@ -840,63 +819,22 @@ is essential, and once again Inweb can oblige.
</p>
<pre class="ConsoleText-displayed-code all-displayed-code code-font">
<span class="ConsoleText-plain-syntax"> </span><span class="ConsoleText-element-syntax">$</span><span class="ConsoleText-plain-syntax"> </span><span class="ConsoleText-function-syntax">inweb/Tangled/inweb</span><span class="ConsoleText-plain-syntax"> W</span><span class="ConsoleText-identifier-syntax"> -write-me</span><span class="ConsoleText-plain-syntax"> W/README.mk</span>
<span class="ConsoleText-plain-syntax"> </span><span class="ConsoleText-element-syntax">$</span><span class="ConsoleText-plain-syntax"> </span><span class="ConsoleText-function-syntax">inweb/Tangled/inweb</span><span class="ConsoleText-plain-syntax"> W</span><span class="ConsoleText-identifier-syntax"> -prototype</span><span class="ConsoleText-plain-syntax"> W/W.rmscript</span><span class="ConsoleText-identifier-syntax"> -write-me</span><span class="ConsoleText-plain-syntax"> W/README.mk</span>
</pre>
<p class="commentary">expands a script called <span class="extract"><span class="ConsoleText-extract-syntax">READMEscript.txt</span></span> into <span class="extract"><span class="ConsoleText-extract-syntax">README.mk</span></span>. Alternatively,
the script can be specified explicitly:
<p class="commentary">The same conventions and notations are used here as for makefiles and gitignores
(see above), except that the comment character is no longer <span class="extract"><span class="ConsoleText-extract-syntax">#</span></span>, since a <span class="extract"><span class="ConsoleText-extract-syntax">#</span></span>
at the start of a line means a heading in Markdown. Instead, a line is a comment
if its first non-whitespace character is a forward-slash <span class="extract"><span class="ConsoleText-extract-syntax">/</span></span>.
</p>
<pre class="ConsoleText-displayed-code all-displayed-code code-font">
<span class="ConsoleText-plain-syntax"> </span><span class="ConsoleText-element-syntax">$</span><span class="ConsoleText-plain-syntax"> </span><span class="ConsoleText-function-syntax">inweb/Tangled/inweb</span><span class="ConsoleText-plain-syntax"> W</span><span class="ConsoleText-identifier-syntax"> -prototype</span><span class="ConsoleText-plain-syntax"> MySpecialThang.txt</span><span class="ConsoleText-identifier-syntax"> -write-me</span><span class="ConsoleText-plain-syntax"> W/README.mk</span>
</pre>
<p class="commentary firstcommentary"><a id="SP28" class="paragraph-anchor"></a><b>&#167;28. </b>Everything in the script is copied over verbatim except where the <span class="extract"><span class="ConsoleText-extract-syntax">@</span></span> character
is used, which was chosen because it isn't significant in Github's form of
Markdown. <span class="extract"><span class="ConsoleText-extract-syntax">@name(args)</span></span> is like a function call (or, in more traditional
language, a macro): it expands out to something depending on the arguments.
<span class="extract"><span class="ConsoleText-extract-syntax">args</span></span> is a comma-separated list of fragments of text, which can themselves
contain further uses of <span class="extract"><span class="ConsoleText-extract-syntax">@</span></span>. (If these fragments of text need to contain
commas or brackets, they can be put into single quotes: <span class="extract"><span class="ConsoleText-extract-syntax">@thus(4,',')</span></span> has
two arguments, <span class="extract"><span class="ConsoleText-extract-syntax">4</span></span> and <span class="extract"><span class="ConsoleText-extract-syntax">,</span></span>.) Three functions are built in:
</p>
<ul class="items"><li>(a) <span class="extract"><span class="ConsoleText-extract-syntax">@version(A)</span></span> expands to the version number of <span class="extract"><span class="ConsoleText-extract-syntax">A</span></span>, which is normally the
path to a web; it then produces the value of the <span class="extract"><span class="ConsoleText-extract-syntax">[[Version Number]]</span></span> for
that web. But <span class="extract"><span class="ConsoleText-extract-syntax">A</span></span> can also be the filename of an Inform extension, provided
that it ends in <span class="extract"><span class="ConsoleText-extract-syntax">.i7x</span></span>, or a few other Inform-specific things for which
Inweb is able to deduce a version number.
</li><li>(b) <span class="extract"><span class="ConsoleText-extract-syntax">@purpose(A)</span></span> is the same, but for the <span class="extract"><span class="ConsoleText-extract-syntax">[[Purpose]]</span></span> of a web. It's
blank for everything else.
</li><li>(c) <span class="extract"><span class="ConsoleText-extract-syntax">@var(A,D)</span></span> is more general, and reads the bibliographic datum <span class="extract"><span class="ConsoleText-extract-syntax">D</span></span> from
the web indicated by <span class="extract"><span class="ConsoleText-extract-syntax">A</span></span>. In fact, <span class="extract"><span class="ConsoleText-extract-syntax">@version(A)</span></span> is an abbreviation for
<span class="extract"><span class="ConsoleText-extract-syntax">@var(A,Version Number)</span></span> and <span class="extract"><span class="ConsoleText-extract-syntax">@purpose(A)</span></span> for <span class="extract"><span class="ConsoleText-extract-syntax">@var(A,Purpose)</span></span>, so this
is really the only one needed.
<ul class="items"><li>&#9679; The special makefile macros are not available, though <span class="extract"><span class="ConsoleText-extract-syntax">set</span></span> and <span class="extract"><span class="ConsoleText-extract-syntax">repeat</span></span> are;
</li><li>&#9679; The special macro <span class="extract"><span class="ConsoleText-extract-syntax">{bibliographic datum: ... of: ...}</span></span> expands to the value
of the named bibliographic datum for the program named. <span class="extract"><span class="ConsoleText-extract-syntax">Version Number</span></span> is
especially useful, and is available even for some Inform assets which are not
webs and do not therefore have bibliographic data of their own &mdash; interpreter
templates and Inform 7 extensions, for example.
</li></ul>
<p class="commentary firstcommentary"><a id="SP29" class="paragraph-anchor"></a><b>&#167;29. </b>It is also possible to define new functions. For example:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> @define book(title, path, topic)</span>
<span class="plain-syntax"> * @title - @topic. Ebook in Indoc format, stored at path @path.</span>
<span class="plain-syntax"> @end</span>
</pre>
<p class="commentary">The definition lies between <span class="extract"><span class="extract-syntax">@define</span></span> and <span class="extract"><span class="extract-syntax">@end</span></span> commands. This one takes
three parameters, and inside the definition, their values can be referred
to as <span class="extract"><span class="extract-syntax">@title</span></span>, <span class="extract"><span class="extract-syntax">@path</span></span> and <span class="extract"><span class="extract-syntax">@topic</span></span>. Functions are free to use other
functions:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> @define primary(program, language)</span>
<span class="plain-syntax"> * @program - @purpose(@program) - __@version(@program)__</span>
<span class="plain-syntax"> @end</span>
</pre>
<p class="commentary">However, each function needs to have been defined before any line on which
it is actually expanded. A definition of one function <span class="extract"><span class="extract-syntax">A</span></span> can refer to another
function <span class="extract"><span class="extract-syntax">B</span></span> not yet defined; but any actual use of <span class="extract"><span class="extract-syntax">A</span></span> must be made after
both <span class="extract"><span class="extract-syntax">A</span></span> and <span class="extract"><span class="extract-syntax">B</span></span> have been defined. So, basically, declare before use.
</p>
<p class="commentary firstcommentary"><a id="SP30" class="paragraph-anchor"></a><b>&#167;30. Semantic version numbering and build metadata. </b>When Inweb reads in a web, it also looks for a file called <span class="extract"><span class="extract-syntax">build.txt</span></span> in
<p class="commentary firstcommentary"><a id="SP27" class="paragraph-anchor"></a><b>&#167;27. Semantic version numbering and build metadata. </b>When Inweb reads in a web, it also looks for a file called <span class="extract"><span class="ConsoleText-extract-syntax">build.txt</span></span> in
the web's directory; if that isn't there, it looks for the same file in the
current working directory; if that's not there either, never mind.
</p>
@ -929,7 +867,7 @@ the web as the variable <span class="extract"><span class="extract-syntax">Seman
<p class="commentary">For more on semvers, see: <a href="https://semver.org" class="external">https://semver.org</a>
</p>
<p class="commentary firstcommentary"><a id="SP31" class="paragraph-anchor"></a><b>&#167;31. </b>A special advancing mechanism exists to update build numbers and dates.
<p class="commentary firstcommentary"><a id="SP28" class="paragraph-anchor"></a><b>&#167;28. </b>A special advancing mechanism exists to update build numbers and dates.
Running Inweb with <span class="extract"><span class="extract-syntax">-advance-build W</span></span> checks the build date for web <span class="extract"><span class="extract-syntax">W</span></span>:
if it differs from today, then it is changed to today, and the build code
is advanced by one.
@ -939,6 +877,27 @@ is advanced by one.
without need of a web.
</p>
<p class="commentary firstcommentary"><a id="SP29" class="paragraph-anchor"></a><b>&#167;29. Ctags. </b>Each time a web is tangled, Inweb writes a <span class="extract"><span class="extract-syntax">tags</span></span> file to the web's home
directory, containing a list of <a href="https://ctags.io" class="external">Universal ctags</a>
for any structures, functions or constant definitions found in the web. You
need do nothing to make this happen, and can ignore the file if it's of no
use. If you are editing a web in certain text editors, though, such as
<a href="https://www.barebones.com/products/bbedit" class="external">BBEdit</a> for MacOS, then this
should make code completion and definition lookup features work.
</p>
<p class="commentary">You can however write the file elsewhere:
</p>
<pre class="ConsoleText-displayed-code all-displayed-code code-font">
<span class="ConsoleText-plain-syntax"> </span><span class="ConsoleText-element-syntax">$</span><span class="ConsoleText-plain-syntax"> </span><span class="ConsoleText-function-syntax">inweb/Tangled/inweb</span><span class="ConsoleText-plain-syntax"> W</span><span class="ConsoleText-identifier-syntax"> -tangle -ctags-to</span><span class="ConsoleText-plain-syntax"> secret_lair/my_nifty.ctags</span>
</pre>
<p class="commentary">or not at all:
</p>
<pre class="ConsoleText-displayed-code all-displayed-code code-font">
<span class="ConsoleText-plain-syntax"> </span><span class="ConsoleText-element-syntax">$</span><span class="ConsoleText-plain-syntax"> </span><span class="ConsoleText-function-syntax">inweb/Tangled/inweb</span><span class="ConsoleText-plain-syntax"> W</span><span class="ConsoleText-identifier-syntax"> -tangle -no-ctags</span>
</pre>
<nav role="progress"><div class="progresscontainer">
<ul class="progressbar"><li class="progressprev"><a href="M-iti.html">&#10094;</a></li><li class="progresscurrentchapter">M</li><li class="progresssection"><a href="M-iti.html">iti</a></li><li class="progresscurrent">wtaw</li><li class="progresssection"><a href="M-htwaw.html">htwaw</a></li><li class="progresssection"><a href="M-mwiw.html">mwiw</a></li><li class="progresssection"><a href="M-awwp.html">awwp</a></li><li class="progresssection"><a href="M-spl.html">spl</a></li><li class="progresssection"><a href="M-tid.html">tid</a></li><li class="progresssection"><a href="M-rc.html">rc</a></li><li class="progresschapter"><a href="P-htpw.html">P</a></li><li class="progresschapter"><a href="1-bsc.html">1</a></li><li class="progresschapter"><a href="2-tr.html">2</a></li><li class="progresschapter"><a href="3-ta.html">3</a></li><li class="progresschapter"><a href="4-pl.html">4</a></li><li class="progresschapter"><a href="5-wt.html">5</a></li><li class="progresschapter"><a href="6-mkf.html">6</a></li><li class="progressnext"><a href="M-htwaw.html">&#10095;</a></li></ul></div>
</nav><!--End of weave-->

View file

@ -21,7 +21,7 @@ pointer to any data those special meanings need to use.
=
void Preprocessor::preprocess(filename *prototype, filename *F, text_stream *header,
linked_list *special_macros, general_pointer specifics) {
linked_list *special_macros, general_pointer specifics, wchar_t comment_char) {
struct text_stream processed_file;
if (STREAM_OPEN_TO_FILE(&processed_file, F, ISO_ENC) == FALSE)
Errors::fatal_with_file("unable to write tangled file", F);
@ -53,6 +53,7 @@ typedef struct preprocessor_state {
struct preprocessor_variable_set *stack_frame;
struct linked_list *known_macros; /* of |preprocessor_macro| */
struct general_pointer specifics;
wchar_t comment_character;
} preprocessor_state;
typedef struct preprocessor_loop {
@ -73,6 +74,7 @@ typedef struct preprocessor_loop {
PPS.stack_frame = PPS.global_variables;
PPS.known_macros = Preprocessor::list_of_reserved_macros(special_macros);
PPS.specifics = specifics;
PPS.comment_character = comment_char;
@ Conceptually, each loop runs a variable with a given name through a series
of textual values in sequence, and we store that data here:
@ -95,17 +97,24 @@ 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;
match_results mr = Regexp::create_mr();
@<Skip comments@>;
@<Deal with textual definitions of new macros@>;
Preprocessor::expand(line, tfp, PPS);
@<Sometimes, but only sometimes, output a newline@>;
}
@ A line is a comment to the preprocessor if its first non-whitespace character
is the special comment character: often |#|, but not necessarily.
@<Skip comments@> =
if (Regexp::match(&mr, line, L" *#%c*")) { Regexp::dispose_of(&mr); return; }
LOOP_THROUGH_TEXT(pos, line) {
wchar_t c = Str::get(pos);
if (c == PPS->comment_character) return;
if (Characters::is_whitespace(c) == FALSE) break;
}
@<Deal with textual definitions of new macros@> =
match_results mr = Regexp::create_mr();
if (Regexp::match(&mr, line, L" *{define: *(%C+) (%c*)} *")) @<Begin a definition@>;
if (Regexp::match(&mr, line, L" *{end-define} *")) @<End a definition@>;
if (PPS->defining) @<Continue a definition@>;
@ -635,6 +644,11 @@ linked_list *Preprocessor::list_of_reserved_macros(linked_list *special_macros)
return L;
}
void Preprocessor::do_not_suppress_whitespace(preprocessor_macro *mm) {
mm->suppress_newline_after_expanding = FALSE;
mm->suppress_whitespace_when_expanding = FALSE;
}
void Preprocessor::new_loop_macro(linked_list *L, text_stream *name,
text_stream *parameter_specification,
void (*expander)(preprocessor_macro *, preprocessor_state *, text_stream **, preprocessor_loop *, text_file_position *),
@ -657,18 +671,16 @@ void Preprocessor::new_loop_macro(linked_list *L, text_stream *name,
mm = Preprocessor::new_macro(L, subname, parameter_specification, expander, tfp);
mm->begins_loop = TRUE;
mm->loop_name = Str::duplicate(name);
mm->suppress_newline_after_expanding = FALSE;
mm->suppress_whitespace_when_expanding = FALSE;
mm->span = TRUE;
Preprocessor::do_not_suppress_whitespace(mm);
Str::clear(subname);
WRITE_TO(subname, "end-%S-span", name);
mm = Preprocessor::new_macro(L, subname, NULL, Preprocessor::end_loop_expander, tfp);
mm->ends_loop = TRUE;
mm->loop_name = Str::duplicate(name);
mm->suppress_newline_after_expanding = FALSE;
mm->suppress_whitespace_when_expanding = FALSE;
mm->span = TRUE;
Preprocessor::do_not_suppress_whitespace(mm);
DISCARD_TEXT(subname)
}

View file

@ -111,7 +111,7 @@ test:
.PHONY: commit
commit:
$(INWEB) -advance-build-file $(ME)/build.txt
$(INWEB) -prototype inweb/scripts/READMEscript.txt -write-me inweb/README.md
$(INWEB) -prototype inweb/scripts/inweb.rmscript -write-me inweb/README.md
cd $(ME); git commit -a
.PHONY: pages
@ -130,7 +130,7 @@ pages:
rm -f $(ME)/docs/docs-assets/*.png
rm -f $(ME)/docs/docs-assets/*.gif
cp -f $(ME)/docs-src/Octagram.png $(ME)/docs/docs-assets/Octagram.png
$(INWEB) -prototype inweb/scripts/READMEscript.txt -write-me inweb/README.md
$(INWEB) -prototype inweb/scripts/inweb.rmscript -write-me inweb/README.md
mkdir -p $(ME)/docs/inweb
rm -f $(ME)/docs/inweb/*.html
mkdir -p $(ME)/docs/goldbach

View file

@ -131,7 +131,7 @@ test:
.PHONY: commit
commit:
$(INWEB) -advance-build-file $(ME)/build.txt
$(INWEB) -prototype inweb/scripts/READMEscript.txt -write-me inweb/README.md
$(INWEB) -prototype inweb/scripts/inweb.rmscript -write-me inweb/README.md
cd $(ME); git commit -a
# Weaving the web for GitHub Pages:
@ -152,7 +152,7 @@ pages:
rm -f $(ME)/docs/docs-assets/*.png
rm -f $(ME)/docs/docs-assets/*.gif
cp -f $(ME)/docs-src/Octagram.png $(ME)/docs/docs-assets/Octagram.png
$(INWEB) -prototype inweb/scripts/READMEscript.txt -write-me inweb/README.md
$(INWEB) -prototype inweb/scripts/inweb.rmscript -write-me inweb/README.md
mkdir -p $(ME)/docs/inweb
rm -f $(ME)/docs/inweb/*.html
mkdir -p $(ME)/docs/goldbach

View file

@ -1,6 +1,6 @@
# Inweb @var(inweb,Version Number)
# Inweb {bibliographic datum: Version Number of: inweb}
v@var(inweb,Semantic Version Number) '@var(inweb,Version Name)' (@var(inweb,Build Date))
v{bibliographic datum: Semantic Version Number of: inweb} '{bibliographic datum: Version Name of: inweb}' ({bibliographic datum: Build Date of: inweb})
## About Inweb
@ -85,4 +85,4 @@ If you have also built Intest as "work/intest", then you can try these:
### Colophon
This README.mk file was generated automatically by Inweb, and should not
be edited. To make changes, edit scripts/READMEscript.txt and re-generate.
be edited. To make changes, edit inweb.rmscript and re-generate.