Conform to new README system
This commit is contained in:
parent
c49d4c688b
commit
3af0f2eeb0
20 changed files with 2631 additions and 1106 deletions
|
@ -19,15 +19,17 @@ case, |_array_MT| appended. MT stands for "memory type".
|
|||
@e breadcrumb_request_MT
|
||||
@e c_structure_MT
|
||||
@e chapter_MT
|
||||
@e para_macro_MT
|
||||
@e enumeration_set_MT
|
||||
@e function_MT
|
||||
@e hash_table_entry_MT
|
||||
@e hash_table_entry_usage_MT
|
||||
@e macro_MT
|
||||
@e macro_tokens_MT
|
||||
@e macro_usage_MT
|
||||
@e module_MT
|
||||
@e module_search_MT
|
||||
@e nonterminal_variable_MT
|
||||
@e para_macro_MT
|
||||
@e paragraph_MT
|
||||
@e paragraph_tagging_MT
|
||||
@e preform_nonterminal_MT
|
||||
|
@ -43,6 +45,7 @@ case, |_array_MT| appended. MT stands for "memory type".
|
|||
@e weave_pattern_MT
|
||||
@e weave_target_MT
|
||||
@e web_MT
|
||||
@e writeme_asset_MT
|
||||
|
||||
@ And then expand the following macros, all defined in Foundation. This
|
||||
makes all the necessary constructor functions for creating objects of these
|
||||
|
@ -54,26 +57,29 @@ ALLOCATE_INDIVIDUALLY(bibliographic_datum)
|
|||
ALLOCATE_INDIVIDUALLY(breadcrumb_request)
|
||||
ALLOCATE_INDIVIDUALLY(c_structure)
|
||||
ALLOCATE_INDIVIDUALLY(chapter)
|
||||
ALLOCATE_INDIVIDUALLY(para_macro)
|
||||
ALLOCATE_INDIVIDUALLY(enumeration_set)
|
||||
ALLOCATE_INDIVIDUALLY(function)
|
||||
ALLOCATE_INDIVIDUALLY(hash_table_entry_usage)
|
||||
ALLOCATE_INDIVIDUALLY(hash_table_entry)
|
||||
ALLOCATE_INDIVIDUALLY(macro_tokens)
|
||||
ALLOCATE_INDIVIDUALLY(macro_usage)
|
||||
ALLOCATE_INDIVIDUALLY(module)
|
||||
ALLOCATE_INDIVIDUALLY(macro)
|
||||
ALLOCATE_INDIVIDUALLY(module_search)
|
||||
ALLOCATE_INDIVIDUALLY(module)
|
||||
ALLOCATE_INDIVIDUALLY(nonterminal_variable)
|
||||
ALLOCATE_INDIVIDUALLY(para_macro)
|
||||
ALLOCATE_INDIVIDUALLY(paragraph_tagging)
|
||||
ALLOCATE_INDIVIDUALLY(paragraph)
|
||||
ALLOCATE_INDIVIDUALLY(preform_nonterminal)
|
||||
ALLOCATE_INDIVIDUALLY(programming_language)
|
||||
ALLOCATE_INDIVIDUALLY(tex_results)
|
||||
ALLOCATE_INDIVIDUALLY(section)
|
||||
ALLOCATE_INDIVIDUALLY(structure_element)
|
||||
ALLOCATE_INDIVIDUALLY(tangle_target)
|
||||
ALLOCATE_INDIVIDUALLY(tex_results)
|
||||
ALLOCATE_INDIVIDUALLY(text_literal)
|
||||
ALLOCATE_INDIVIDUALLY(theme_tag)
|
||||
ALLOCATE_INDIVIDUALLY(weave_format)
|
||||
ALLOCATE_INDIVIDUALLY(weave_pattern)
|
||||
ALLOCATE_INDIVIDUALLY(weave_target)
|
||||
ALLOCATE_INDIVIDUALLY(web)
|
||||
ALLOCATE_INDIVIDUALLY(writeme_asset)
|
||||
|
|
|
@ -33,6 +33,7 @@ typedef struct inweb_instructions {
|
|||
struct filename *makefile_setting; /* |-makefile X|: the filename X, if supplied */
|
||||
struct filename *gitignore_setting; /* |-gitignore X|: the filename X, if supplied */
|
||||
struct filename *advance_setting; /* |-advance-build-file X|: advance build file X */
|
||||
struct filename *writeme_setting; /* |-write-me X|: advance build file X */
|
||||
struct filename *prototype_setting; /* |-prototype X|: the pathname X, if supplied */
|
||||
struct filename *navigation_setting; /* |-navigation X|: the filename X, if supplied */
|
||||
struct linked_list *breadcrumb_setting; /* of |breadcrumb_request| */
|
||||
|
@ -91,6 +92,7 @@ inweb_instructions Configuration::read(int argc, char **argv) {
|
|||
args.makefile_setting = NULL;
|
||||
args.gitignore_setting = NULL;
|
||||
args.advance_setting = NULL;
|
||||
args.writeme_setting = NULL;
|
||||
args.prototype_setting = NULL;
|
||||
args.navigation_setting = NULL;
|
||||
args.breadcrumb_setting = NEW_LINKED_LIST(breadcrumb_request);
|
||||
|
@ -113,6 +115,7 @@ provides automatically.
|
|||
@e ADVANCE_CLSW
|
||||
@e GITIGNORE_CLSW
|
||||
@e MAKEFILE_CLSW
|
||||
@e WRITEME_CLSW
|
||||
@e ADVANCE_FILE_CLSW
|
||||
@e PROTOTYPE_CLSW
|
||||
@e SCAN_CLSW
|
||||
|
@ -159,6 +162,8 @@ provides automatically.
|
|||
L"write a .gitignore file for this web and store it in X");
|
||||
CommandLine::declare_switch(ADVANCE_FILE_CLSW, L"advance-build-file", 2,
|
||||
L"increment daily build code in file X");
|
||||
CommandLine::declare_switch(WRITEME_CLSW, L"write-me", 2,
|
||||
L"write a read-me file following instructions in file X");
|
||||
CommandLine::declare_switch(PROTOTYPE_CLSW, L"prototype", 2,
|
||||
L"translate makefile from prototype X");
|
||||
CommandLine::declare_switch(FUNCTIONS_CLSW, L"functions", 1,
|
||||
|
@ -230,6 +235,10 @@ void Configuration::switch(int id, int val, text_stream *arg, void *state) {
|
|||
args->advance_setting = Filenames::from_text(arg);
|
||||
Configuration::set_fundamental_mode(args, TRANSLATE_MODE);
|
||||
break;
|
||||
case WRITEME_CLSW:
|
||||
args->writeme_setting = Filenames::from_text(arg);
|
||||
Configuration::set_fundamental_mode(args, TRANSLATE_MODE);
|
||||
break;
|
||||
case PROTOTYPE_CLSW:
|
||||
args->prototype_setting = Filenames::from_text(arg);
|
||||
Configuration::set_fundamental_mode(args, TRANSLATE_MODE); break;
|
||||
|
|
|
@ -96,7 +96,7 @@ void Main::follow_instructions(inweb_instructions *ins) {
|
|||
if ((ins->chosen_web) || (ins->chosen_file))
|
||||
W = Reader::load_web(ins->chosen_web, ins->chosen_file,
|
||||
Modules::make_search_path(ins->import_setting), ins->verbose_switch,
|
||||
ins->inweb_mode, ins->weave_into_setting);
|
||||
ins->inweb_mode, ins->weave_into_setting, TRUE);
|
||||
if (no_inweb_errors == 0) {
|
||||
if (ins->inweb_mode == TRANSLATE_MODE) @<Translate a makefile@>
|
||||
else if (ins->inweb_mode != NO_MODE) @<Analyse, tangle or weave an existing web@>;
|
||||
|
@ -110,12 +110,16 @@ void Main::follow_instructions(inweb_instructions *ins) {
|
|||
ins->prototype_setting = Filenames::from_text(I"makescript.txt");
|
||||
if ((ins->gitignore_setting) && (ins->prototype_setting == NULL))
|
||||
ins->prototype_setting = Filenames::from_text(I"gitignorescript.txt");
|
||||
if ((ins->writeme_setting) && (ins->prototype_setting == NULL))
|
||||
ins->prototype_setting = Filenames::from_text(I"READMEscript.txt");
|
||||
if (ins->makefile_setting)
|
||||
Makefiles::write(W, ins->prototype_setting, ins->makefile_setting);
|
||||
else if (ins->gitignore_setting)
|
||||
Git::write_gitignore(W, ins->prototype_setting, ins->gitignore_setting);
|
||||
else if (ins->advance_setting)
|
||||
BuildFiles::advance(ins->advance_setting);
|
||||
else if (ins->writeme_setting)
|
||||
Readme::write(ins->prototype_setting, ins->writeme_setting);
|
||||
|
||||
@ But otherwise we do something with the given web:
|
||||
|
||||
|
|
|
@ -50,7 +50,7 @@ typedef struct web {
|
|||
|
||||
@ =
|
||||
web *Reader::load_web(pathname *P, filename *alt_F, module_search *I, int verbosely,
|
||||
int inweb_mode, pathname *redirection) {
|
||||
int inweb_mode, pathname *redirection, int parsing) {
|
||||
web *W = CREATE(web);
|
||||
W->path_to_web = P;
|
||||
W->single_file = alt_F;
|
||||
|
@ -70,7 +70,7 @@ web *Reader::load_web(pathname *P, filename *alt_F, module_search *I, int verbos
|
|||
W->version_number = VersionNumbers::null();
|
||||
Bibliographic::initialise_data(W);
|
||||
Reader::add_tangle_target(W, Languages::default()); /* the bulk of the web is automatically a target */
|
||||
Reader::read_contents_page(W, I, verbosely);
|
||||
Reader::read_contents_page(W, I, verbosely, parsing);
|
||||
BuildFiles::deduce_semver(W);
|
||||
Parser::parse_web(W, inweb_mode);
|
||||
if (W->no_sections == 1) {
|
||||
|
@ -179,8 +179,8 @@ Because a contents page can, by importing a module, cause a further contents
|
|||
page to be read, we set this up as a recursion:
|
||||
|
||||
=
|
||||
void Reader::read_contents_page(web *W, module_search *import_path, int verbosely) {
|
||||
Reader::read_contents_page_from(W, import_path, verbosely, NULL);
|
||||
void Reader::read_contents_page(web *W, module_search *import_path, int verbosely, int parsing) {
|
||||
Reader::read_contents_page_from(W, import_path, verbosely, parsing, NULL);
|
||||
Bibliographic::check_required_data(W);
|
||||
}
|
||||
|
||||
|
@ -203,12 +203,14 @@ typedef struct reader_state {
|
|||
struct pathname *path_to; /* Where web material is being read from */
|
||||
struct module_search *import_from; /* Where imported webs are */
|
||||
int scan_verbosely;
|
||||
int parsing;
|
||||
int main_web_not_module; /* Reading the original web, or an included one? */
|
||||
int halt_at_at; /* Used for reading contents pages of single-file webs */
|
||||
int halted; /* Set when such a halt has occurred */
|
||||
} reader_state;
|
||||
|
||||
void Reader::read_contents_page_from(web *W, module_search *import_path, int verbosely, pathname *path) {
|
||||
void Reader::read_contents_page_from(web *W, module_search *import_path, int verbosely,
|
||||
int parsing, pathname *path) {
|
||||
reader_state RS;
|
||||
@<Initialise the reader state@>;
|
||||
|
||||
|
@ -231,6 +233,7 @@ void Reader::read_contents_page_from(web *W, module_search *import_path, int ver
|
|||
RS.chapter_folder_name = Str::new();
|
||||
RS.titling_line_to_insert = Str::new();
|
||||
RS.scan_verbosely = verbosely;
|
||||
RS.parsing = parsing;
|
||||
RS.path_to = path;
|
||||
RS.import_from = import_path;
|
||||
RS.halted = FALSE;
|
||||
|
@ -435,16 +438,19 @@ we like a spoonful of syntactic sugar on our porridge, that's why.
|
|||
Reader::add_imported_header(RS->current_web, HF);
|
||||
this_is_a_chapter = FALSE;
|
||||
} else if (Regexp::match(&mr, line, L"Import: (%c+)")) {
|
||||
pathname *imported = Modules::find(RS->current_web, RS->import_from, mr.exp[0]);
|
||||
if (imported == NULL) {
|
||||
TEMPORARY_TEXT(err);
|
||||
WRITE_TO(err, "unable to find module: %S", line);
|
||||
Errors::in_text_file_S(err, tfp);
|
||||
DISCARD_TEXT(err);
|
||||
} else {
|
||||
int save_syntax = RS->current_web->default_syntax;
|
||||
Reader::read_contents_page_from(RS->current_web, RS->import_from, RS->scan_verbosely, imported);
|
||||
RS->current_web->default_syntax = save_syntax;
|
||||
if (RS->parsing) {
|
||||
pathname *imported = Modules::find(RS->current_web, RS->import_from, mr.exp[0]);
|
||||
if (imported == NULL) {
|
||||
TEMPORARY_TEXT(err);
|
||||
WRITE_TO(err, "unable to find module: %S", line);
|
||||
Errors::in_text_file_S(err, tfp);
|
||||
DISCARD_TEXT(err);
|
||||
} else {
|
||||
int save_syntax = RS->current_web->default_syntax;
|
||||
Reader::read_contents_page_from(RS->current_web, RS->import_from,
|
||||
RS->scan_verbosely, RS->parsing, imported);
|
||||
RS->current_web->default_syntax = save_syntax;
|
||||
}
|
||||
}
|
||||
this_is_a_chapter = FALSE;
|
||||
} else if (Regexp::match(&mr, line, L"Chapter (%d+): %c+")) {
|
||||
|
@ -520,10 +526,10 @@ we also read in and process its file.
|
|||
|
||||
if (sect->source_file_for_section == NULL)
|
||||
@<Work out the filename of this section file@>;
|
||||
|
||||
Reader::read_file(RS->current_web, sect->source_file_for_section,
|
||||
RS->titling_line_to_insert, sect, RS->scan_verbosely,
|
||||
(filename_of_single_file_web)?TRUE:FALSE);
|
||||
if (RS->parsing)
|
||||
Reader::read_file(RS->current_web, sect->source_file_for_section,
|
||||
RS->titling_line_to_insert, sect, RS->scan_verbosely,
|
||||
(filename_of_single_file_web)?TRUE:FALSE);
|
||||
|
||||
@<Initialise the section structure@> =
|
||||
if (filename_of_single_file_web) {
|
||||
|
|
377
Chapter 6/Readme Writeme.w
Normal file
377
Chapter 6/Readme Writeme.w
Normal file
|
@ -0,0 +1,377 @@
|
|||
[Readme::] Readme Writeme.
|
||||
|
||||
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:
|
||||
|
||||
=
|
||||
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);
|
||||
}
|
||||
|
||||
@ The file consists of definitions of macros, made one at a time, and
|
||||
starting with |@define| and finishing with |@end|, and actual material.
|
||||
|
||||
=
|
||||
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);
|
||||
}
|
||||
|
||||
@ 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;
|
||||
MEMORY_MANAGEMENT
|
||||
} 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;
|
||||
MEMORY_MANAGEMENT
|
||||
} 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(ws, OUT, program, I"Version Number", tfp);
|
||||
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(ws, OUT, program, I"Purpose", tfp);
|
||||
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(ws, OUT, program, bibv, tfp);
|
||||
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
|
||||
range of bibliographic data, just the version and date (and we will not
|
||||
assume that the version complies with any format).
|
||||
|
||||
=
|
||||
typedef struct writeme_asset {
|
||||
struct text_stream *name;
|
||||
struct web *if_web;
|
||||
struct text_stream *date;
|
||||
struct text_stream *version;
|
||||
int next_is_version;
|
||||
MEMORY_MANAGEMENT
|
||||
} writeme_asset;
|
||||
|
||||
void Readme::write_var(write_state *ws, text_stream *OUT,
|
||||
text_stream *program, text_stream *datum, text_file_position *tfp) {
|
||||
writeme_asset *A = Readme::find_asset(program);
|
||||
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);
|
||||
}
|
||||
|
||||
@ That just leaves the business of inspecting assets to obtain their metadata.
|
||||
|
||||
=
|
||||
writeme_asset *Readme::find_asset(text_stream *program) {
|
||||
writeme_asset *A;
|
||||
LOOP_OVER(A, writeme_asset) if (Str::eq(program, A->name)) return A;
|
||||
A = CREATE(writeme_asset);
|
||||
A->name = Str::duplicate(program);
|
||||
A->if_web = NULL;
|
||||
A->date = Str::new();
|
||||
A->version = Str::new();
|
||||
A->next_is_version = FALSE;
|
||||
@<Read in the asset@>;
|
||||
return A;
|
||||
}
|
||||
|
||||
@<Read in the asset@> =
|
||||
if (Str::ends_with_wide_string(program, L".i7x")) {
|
||||
@<Read in the extension file@>;
|
||||
} else {
|
||||
filename *F = Filenames::in_folder(Pathnames::from_text(program), I"Contents.w");
|
||||
if (TextFiles::exists(F)) {
|
||||
A->if_web = Reader::load_web(Pathnames::from_text(program), NULL, NULL, FALSE,
|
||||
V2_SYNTAX, NULL, FALSE);
|
||||
} else {
|
||||
filename *I6_vn = Filenames::in_folder(
|
||||
Pathnames::subfolder(Pathnames::from_text(program), I"inform6"), I"header.h");
|
||||
if (TextFiles::exists(I6_vn)) @<Read in I6 source header file@>;
|
||||
filename *template_vn = Filenames::in_folder(Pathnames::from_text(program), I"(manifest).txt");
|
||||
if (TextFiles::exists(template_vn)) @<Read in template manifest file@>;
|
||||
filename *rmt_vn = Filenames::in_folder(Pathnames::from_text(program), I"README.txt");
|
||||
if (TextFiles::exists(rmt_vn)) @<Read in README file@>;
|
||||
rmt_vn = Filenames::in_folder(Pathnames::from_text(program), I"README.md");
|
||||
if (TextFiles::exists(rmt_vn)) @<Read in README file@>;
|
||||
}
|
||||
}
|
||||
|
||||
@<Read in the extension file@> =
|
||||
TextFiles::read(Filenames::from_text(program), FALSE, "unable to read extension", TRUE,
|
||||
&Readme::extension_harvester, NULL, A);
|
||||
|
||||
@<Read in I6 source header file@> =
|
||||
TextFiles::read(I6_vn, FALSE, "unable to read header file from I6 source", TRUE,
|
||||
&Readme::header_harvester, NULL, A);
|
||||
|
||||
@<Read in template manifest file@> =
|
||||
TextFiles::read(template_vn, FALSE, "unable to read manifest file from website template", TRUE,
|
||||
&Readme::template_harvester, NULL, A);
|
||||
|
||||
@<Read in README file@> =
|
||||
TextFiles::read(rmt_vn, FALSE, "unable to read README file from website template", TRUE,
|
||||
&Readme::readme_harvester, NULL, A);
|
||||
|
||||
@ The format for the contents section of a web is documented in Inweb.
|
||||
|
||||
=
|
||||
void Readme::extension_harvester(text_stream *text, text_file_position *tfp, void *state) {
|
||||
writeme_asset *A = (writeme_asset *) state;
|
||||
match_results mr = Regexp::create_mr();
|
||||
if (Str::len(text) == 0) return;
|
||||
if (Regexp::match(&mr, text, L" *Version (%c*?) of %c*begins here. *"))
|
||||
A->version = Str::duplicate(mr.exp[0]);
|
||||
Regexp::dispose_of(&mr);
|
||||
}
|
||||
|
||||
@ Explicit code to read from |header.h| in the Inform 6 repository.
|
||||
|
||||
=
|
||||
void Readme::header_harvester(text_stream *text, text_file_position *tfp, void *state) {
|
||||
writeme_asset *A = (writeme_asset *) state;
|
||||
match_results mr = Regexp::create_mr();
|
||||
if (Str::len(text) == 0) return;
|
||||
if (Regexp::match(&mr, text, L"#define RELEASE_NUMBER (%c*?) *"))
|
||||
A->version = Str::duplicate(mr.exp[0]);
|
||||
if (Regexp::match(&mr, text, L"#define RELEASE_DATE \"(%c*?)\" *"))
|
||||
A->date = Str::duplicate(mr.exp[0]);
|
||||
Regexp::dispose_of(&mr);
|
||||
}
|
||||
|
||||
@ Explicit code to read from the manifest file of a website template.
|
||||
|
||||
=
|
||||
void Readme::template_harvester(text_stream *text, text_file_position *tfp, void *state) {
|
||||
writeme_asset *A = (writeme_asset *) state;
|
||||
match_results mr = Regexp::create_mr();
|
||||
if (Str::len(text) == 0) return;
|
||||
if (Regexp::match(&mr, text, L"%[INTERPRETERVERSION%]")) {
|
||||
A->next_is_version = TRUE;
|
||||
} else if (A->next_is_version) {
|
||||
A->version = Str::duplicate(text);
|
||||
A->next_is_version = FALSE;
|
||||
}
|
||||
Regexp::dispose_of(&mr);
|
||||
}
|
||||
|
||||
@ And this is needed for |cheapglk| and |glulxe| in the Inform repository.
|
||||
|
||||
=
|
||||
void Readme::readme_harvester(text_stream *text, text_file_position *tfp, void *state) {
|
||||
writeme_asset *A = (writeme_asset *) state;
|
||||
match_results mr = Regexp::create_mr();
|
||||
if (Str::len(text) == 0) return;
|
||||
if ((Regexp::match(&mr, text, L"CheapGlk Library: version (%c*?) *")) ||
|
||||
(Regexp::match(&mr, text, L"- Version (%c*?) *")))
|
||||
A->version = Str::duplicate(mr.exp[0]);
|
||||
Regexp::dispose_of(&mr);
|
||||
}
|
|
@ -68,4 +68,4 @@ Chapter 6: Extras
|
|||
Makefiles
|
||||
Git Support
|
||||
Build Files
|
||||
|
||||
Readme Writeme
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
# Inweb version 7 'Escape to Danger'
|
||||
# Inweb 7
|
||||
|
||||
v7-alpha.1+1A01 'Escape to Danger' (23 March 2020)
|
||||
|
||||
## About Inweb
|
||||
|
||||
|
@ -82,7 +84,6 @@ If you have also built Intest as "work/intest", then you can try these:
|
|||
|
||||
### Colophon
|
||||
|
||||
This README.mk file was generated automatically by Inpolicy (see the
|
||||
[Inform repository](https://github.com/ganelson/inform)), and should not
|
||||
This README.mk file was generated automatically by Inweb, and should not
|
||||
be edited. To make changes, edit scripts/READMEscript.txt and re-generate.
|
||||
|
||||
|
|
2348
Tangled/inweb.c
2348
Tangled/inweb.c
File diff suppressed because it is too large
Load diff
|
@ -48,15 +48,17 @@ case, <code class="display"><span class="extract">_array_MT</span></code> append
|
|||
<span class="definitionkeyword">enum</span> <span class="constant">breadcrumb_request_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">c_structure_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">chapter_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">para_macro_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">enumeration_set_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">function_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">hash_table_entry_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">hash_table_entry_usage_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">macro_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">macro_tokens_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">macro_usage_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">module_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">module_search_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">nonterminal_variable_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">para_macro_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">paragraph_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">paragraph_tagging_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">preform_nonterminal_MT</span>
|
||||
|
@ -72,6 +74,7 @@ case, <code class="display"><span class="extract">_array_MT</span></code> append
|
|||
<span class="definitionkeyword">enum</span> <span class="constant">weave_pattern_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">weave_target_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">web_MT</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">writeme_asset_MT</span>
|
||||
</pre>
|
||||
<p class="inwebparagraph"><a id="SP3"></a><b>§3. </b>And then expand the following macros, all defined in Foundation. This
|
||||
makes all the necessary constructor functions for creating objects of these
|
||||
|
@ -85,29 +88,32 @@ types.
|
|||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">breadcrumb_request</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">c_structure</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">chapter</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">para_macro</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">enumeration_set</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">function</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">hash_table_entry_usage</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">hash_table_entry</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">macro_tokens</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">macro_usage</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">module</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">module_search</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">module</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">nonterminal_variable</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">para_macro</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">paragraph_tagging</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">paragraph</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">preform_nonterminal</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">tex_results</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">section</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">structure_element</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">tangle_target</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">tex_results</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">text_literal</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">theme_tag</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="reserved">(weave_format</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="reserved">(weave_pattern</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">weave_target</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">web</span><span class="plain">)</span>
|
||||
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">writeme_asset</span><span class="plain">)</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
|
|
@ -59,6 +59,7 @@ command line: there will only ever be one of these.
|
|||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">makefile_setting</span><span class="plain">; </span> <span class="comment"><code class="display"><span class="extract">-makefile X</span></code>: the filename X, if supplied</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">gitignore_setting</span><span class="plain">; </span> <span class="comment"><code class="display"><span class="extract">-gitignore X</span></code>: the filename X, if supplied</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">advance_setting</span><span class="plain">; </span> <span class="comment"><code class="display"><span class="extract">-advance-build-file X</span></code>: advance build file X</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">writeme_setting</span><span class="plain">; </span> <span class="comment"><code class="display"><span class="extract">-write-me X</span></code>: advance build file X</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">prototype_setting</span><span class="plain">; </span> <span class="comment"><code class="display"><span class="extract">-prototype X</span></code>: the pathname X, if supplied</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">navigation_setting</span><span class="plain">; </span> <span class="comment"><code class="display"><span class="extract">-navigation X</span></code>: the filename X, if supplied</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">linked_list</span><span class="plain"> *</span><span class="identifier">breadcrumb_setting</span><span class="plain">; </span> <span class="comment">of <code class="display"><span class="extract">breadcrumb_request</span></code></span>
|
||||
|
@ -135,6 +136,7 @@ then declare them.
|
|||
<span class="identifier">args</span><span class="element">.makefile_setting</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="identifier">args</span><span class="element">.gitignore_setting</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="identifier">args</span><span class="element">.advance_setting</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="identifier">args</span><span class="element">.writeme_setting</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="identifier">args</span><span class="element">.prototype_setting</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="identifier">args</span><span class="element">.navigation_setting</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="identifier">args</span><span class="element">.breadcrumb_setting</span><span class="plain"> = </span><span class="identifier">NEW_LINKED_LIST</span><span class="plain">(</span><span class="reserved">breadcrumb_request</span><span class="plain">);</span>
|
||||
|
@ -164,6 +166,7 @@ provides automatically.
|
|||
<span class="definitionkeyword">enum</span> <span class="constant">ADVANCE_CLSW</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">GITIGNORE_CLSW</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">MAKEFILE_CLSW</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">WRITEME_CLSW</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">ADVANCE_FILE_CLSW</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">PROTOTYPE_CLSW</span>
|
||||
<span class="definitionkeyword">enum</span> <span class="constant">SCAN_CLSW</span>
|
||||
|
@ -214,6 +217,8 @@ provides automatically.
|
|||
<span class="identifier">L</span><span class="string">"write a .gitignore file for this web and store it in X"</span><span class="plain">);</span>
|
||||
<span class="functiontext">CommandLine::declare_switch</span><span class="plain">(</span><span class="constant">ADVANCE_FILE_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"advance-build-file"</span><span class="plain">, 2,</span>
|
||||
<span class="identifier">L</span><span class="string">"increment daily build code in file X"</span><span class="plain">);</span>
|
||||
<span class="functiontext">CommandLine::declare_switch</span><span class="plain">(</span><span class="constant">WRITEME_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"write-me"</span><span class="plain">, 2,</span>
|
||||
<span class="identifier">L</span><span class="string">"write a read-me file following instructions in file X"</span><span class="plain">);</span>
|
||||
<span class="functiontext">CommandLine::declare_switch</span><span class="plain">(</span><span class="constant">PROTOTYPE_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"prototype"</span><span class="plain">, 2,</span>
|
||||
<span class="identifier">L</span><span class="string">"translate makefile from prototype X"</span><span class="plain">);</span>
|
||||
<span class="functiontext">CommandLine::declare_switch</span><span class="plain">(</span><span class="constant">FUNCTIONS_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"functions"</span><span class="plain">, 1,</span>
|
||||
|
@ -292,6 +297,10 @@ provides automatically.
|
|||
<span class="identifier">args</span><span class="plain">-</span><span class="element">>advance_setting</span><span class="plain"> = </span><span class="functiontext">Filenames::from_text</span><span class="plain">(</span><span class="identifier">arg</span><span class="plain">);</span>
|
||||
<span class="functiontext">Configuration::set_fundamental_mode</span><span class="plain">(</span><span class="identifier">args</span><span class="plain">, </span><span class="constant">TRANSLATE_MODE</span><span class="plain">);</span>
|
||||
<span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="constant">WRITEME_CLSW</span><span class="plain">:</span>
|
||||
<span class="identifier">args</span><span class="plain">-</span><span class="element">>writeme_setting</span><span class="plain"> = </span><span class="functiontext">Filenames::from_text</span><span class="plain">(</span><span class="identifier">arg</span><span class="plain">);</span>
|
||||
<span class="functiontext">Configuration::set_fundamental_mode</span><span class="plain">(</span><span class="identifier">args</span><span class="plain">, </span><span class="constant">TRANSLATE_MODE</span><span class="plain">);</span>
|
||||
<span class="reserved">break</span><span class="plain">;</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="constant">PROTOTYPE_CLSW</span><span class="plain">:</span>
|
||||
<span class="identifier">args</span><span class="plain">-</span><span class="element">>prototype_setting</span><span class="plain"> = </span><span class="functiontext">Filenames::from_text</span><span class="plain">(</span><span class="identifier">arg</span><span class="plain">);</span>
|
||||
<span class="functiontext">Configuration::set_fundamental_mode</span><span class="plain">(</span><span class="identifier">args</span><span class="plain">, </span><span class="constant">TRANSLATE_MODE</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
|
|
|
@ -176,7 +176,7 @@ program: some input, some thinking, a choice of three forms of output.
|
|||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">ins</span><span class="plain">-</span><span class="element">>chosen_web</span><span class="plain">) || (</span><span class="identifier">ins</span><span class="plain">-</span><span class="element">>chosen_file</span><span class="plain">))</span>
|
||||
<span class="identifier">W</span><span class="plain"> = </span><span class="functiontext">Reader::load_web</span><span class="plain">(</span><span class="identifier">ins</span><span class="plain">-</span><span class="element">>chosen_web</span><span class="plain">, </span><span class="identifier">ins</span><span class="plain">-</span><span class="element">>chosen_file</span><span class="plain">,</span>
|
||||
<span class="functiontext">Modules::make_search_path</span><span class="plain">(</span><span class="identifier">ins</span><span class="plain">-</span><span class="element">>import_setting</span><span class="plain">), </span><span class="identifier">ins</span><span class="plain">-</span><span class="element">>verbose_switch</span><span class="plain">,</span>
|
||||
<span class="identifier">ins</span><span class="plain">-</span><span class="element">>inweb_mode</span><span class="plain">, </span><span class="identifier">ins</span><span class="plain">-</span><span class="element">>weave_into_setting</span><span class="plain">);</span>
|
||||
<span class="identifier">ins</span><span class="plain">-</span><span class="element">>inweb_mode</span><span class="plain">, </span><span class="identifier">ins</span><span class="plain">-</span><span class="element">>weave_into_setting</span><span class="plain">, </span><span class="constant">TRUE</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">no_inweb_errors</span><span class="plain"> == 0) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ins</span><span class="plain">-</span><span class="element">>inweb_mode</span><span class="plain"> == </span><span class="constant">TRANSLATE_MODE</span><span class="plain">) </span><<span class="cwebmacro">Translate a makefile</span> <span class="cwebmacronumber">7.1</span>>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ins</span><span class="plain">-</span><span class="element">>inweb_mode</span><span class="plain"> != </span><span class="constant">NO_MODE</span><span class="plain">) </span><<span class="cwebmacro">Analyse, tangle or weave an existing web</span> <span class="cwebmacronumber">7.2</span>><span class="plain">;</span>
|
||||
|
@ -202,12 +202,16 @@ program: some input, some thinking, a choice of three forms of output.
|
|||
<span class="identifier">ins</span><span class="plain">-</span><span class="element">>prototype_setting</span><span class="plain"> = </span><span class="functiontext">Filenames::from_text</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"makescript.txt"</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">ins</span><span class="plain">-</span><span class="element">>gitignore_setting</span><span class="plain">) && (</span><span class="identifier">ins</span><span class="plain">-</span><span class="element">>prototype_setting</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">))</span>
|
||||
<span class="identifier">ins</span><span class="plain">-</span><span class="element">>prototype_setting</span><span class="plain"> = </span><span class="functiontext">Filenames::from_text</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"gitignorescript.txt"</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">ins</span><span class="plain">-</span><span class="element">>writeme_setting</span><span class="plain">) && (</span><span class="identifier">ins</span><span class="plain">-</span><span class="element">>prototype_setting</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">))</span>
|
||||
<span class="identifier">ins</span><span class="plain">-</span><span class="element">>prototype_setting</span><span class="plain"> = </span><span class="functiontext">Filenames::from_text</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"READMEscript.txt"</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ins</span><span class="plain">-</span><span class="element">>makefile_setting</span><span class="plain">)</span>
|
||||
<span class="functiontext">Makefiles::write</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">ins</span><span class="plain">-</span><span class="element">>prototype_setting</span><span class="plain">, </span><span class="identifier">ins</span><span class="plain">-</span><span class="element">>makefile_setting</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ins</span><span class="plain">-</span><span class="element">>gitignore_setting</span><span class="plain">)</span>
|
||||
<span class="functiontext">Git::write_gitignore</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">ins</span><span class="plain">-</span><span class="element">>prototype_setting</span><span class="plain">, </span><span class="identifier">ins</span><span class="plain">-</span><span class="element">>gitignore_setting</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ins</span><span class="plain">-</span><span class="element">>advance_setting</span><span class="plain">)</span>
|
||||
<span class="functiontext">BuildFiles::advance</span><span class="plain">(</span><span class="identifier">ins</span><span class="plain">-</span><span class="element">>advance_setting</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ins</span><span class="plain">-</span><span class="element">>writeme_setting</span><span class="plain">)</span>
|
||||
<span class="functiontext">Readme::write</span><span class="plain">(</span><span class="identifier">ins</span><span class="plain">-</span><span class="element">>prototype_setting</span><span class="plain">, </span><span class="identifier">ins</span><span class="plain">-</span><span class="element">>writeme_setting</span><span class="plain">);</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
|
|
@ -175,7 +175,7 @@ to check that all the mandatory declarations have indeed been made:
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Bibliographic::get_datum is used in 1/pc (<a href="1-pc.html#SP7_2_2_1">§7.2.2.1</a>, <a href="1-pc.html#SP7_2_3_1">§7.2.3.1</a>), 2/tr (<a href="2-tr.html#SP4">§4</a>, <a href="2-tr.html#SP9_3_1">§9.3.1</a>, <a href="2-tr.html#SP9_3_3_2_1">§9.3.3.2.1</a>, <a href="2-tr.html#SP9_2_2_3_1">§9.2.2.3.1</a>), 3/ti (<a href="3-ti.html#SP2_1_4">§2.1.4</a>, <a href="3-ti.html#SP5_1_8_1">§5.1.8.1</a>), 3/tw (<a href="3-tw.html#SP1_3_3_1_10_4">§1.3.3.1.10.4</a>), 3/tt (<a href="3-tt.html#SP3_2">§3.2</a>), 4/cl (<a href="4-cl.html#SP22">§22</a>), 4/is (<a href="4-is.html#SP13">§13</a>), 5/hf (<a href="5-hf.html#SP9">§9</a>, <a href="5-hf.html#SP27">§27</a>), 6/bf2 (<a href="6-bf2.html#SP6">§6</a>).</p>
|
||||
<p class="endnote">The function Bibliographic::get_datum is used in 1/pc (<a href="1-pc.html#SP7_2_2_1">§7.2.2.1</a>, <a href="1-pc.html#SP7_2_3_1">§7.2.3.1</a>), 2/tr (<a href="2-tr.html#SP4">§4</a>, <a href="2-tr.html#SP9_3_1">§9.3.1</a>, <a href="2-tr.html#SP9_3_3_2_1">§9.3.3.2.1</a>, <a href="2-tr.html#SP9_2_2_3_1">§9.2.2.3.1</a>), 3/ti (<a href="3-ti.html#SP2_1_4">§2.1.4</a>, <a href="3-ti.html#SP5_1_8_1">§5.1.8.1</a>), 3/tw (<a href="3-tw.html#SP1_3_3_1_10_4">§1.3.3.1.10.4</a>), 3/tt (<a href="3-tt.html#SP3_2">§3.2</a>), 4/cl (<a href="4-cl.html#SP22">§22</a>), 4/is (<a href="4-is.html#SP13">§13</a>), 5/hf (<a href="5-hf.html#SP9">§9</a>, <a href="5-hf.html#SP27">§27</a>), 6/bf2 (<a href="6-bf2.html#SP6">§6</a>), 6/rw (<a href="6-rw.html#SP8">§8</a>).</p>
|
||||
|
||||
<p class="endnote">The function Bibliographic::data_exists is used in 1/pc (<a href="1-pc.html#SP7_2_2_1">§7.2.2.1</a>, <a href="1-pc.html#SP7_2_3_1">§7.2.3.1</a>), 1/ptt (<a href="1-ptt.html#SP3_2">§3.2</a>), 3/ts (<a href="3-ts.html#SP3">§3</a>), 3/ti (<a href="3-ti.html#SP2_1">§2.1</a>, <a href="3-ti.html#SP5_1_8">§5.1.8</a>), 3/tw (<a href="3-tw.html#SP1_2">§1.2</a>, <a href="3-tw.html#SP1_4">§1.4</a>), 4/is (<a href="4-is.html#SP13">§13</a>).</p>
|
||||
|
||||
|
|
|
@ -86,7 +86,7 @@ multi-chapter web.
|
|||
|
||||
<pre class="display">
|
||||
<span class="reserved">web</span><span class="plain"> *</span><span class="functiontext">Reader::load_web</span><span class="plain">(</span><span class="reserved">pathname</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">, </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">alt_F</span><span class="plain">, </span><span class="reserved">module_search</span><span class="plain"> *</span><span class="identifier">I</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">verbosely</span><span class="plain">,</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">inweb_mode</span><span class="plain">, </span><span class="reserved">pathname</span><span class="plain"> *</span><span class="identifier">redirection</span><span class="plain">) {</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">inweb_mode</span><span class="plain">, </span><span class="reserved">pathname</span><span class="plain"> *</span><span class="identifier">redirection</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">parsing</span><span class="plain">) {</span>
|
||||
<span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">web</span><span class="plain">);</span>
|
||||
<span class="identifier">W</span><span class="plain">-</span><span class="element">>path_to_web</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">;</span>
|
||||
<span class="identifier">W</span><span class="plain">-</span><span class="element">>single_file</span><span class="plain"> = </span><span class="identifier">alt_F</span><span class="plain">;</span>
|
||||
|
@ -106,7 +106,7 @@ multi-chapter web.
|
|||
<span class="identifier">W</span><span class="plain">-</span><span class="element">>version_number</span><span class="plain"> = </span><span class="functiontext">VersionNumbers::null</span><span class="plain">();</span>
|
||||
<span class="functiontext">Bibliographic::initialise_data</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">);</span>
|
||||
<span class="functiontext">Reader::add_tangle_target</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">, </span><span class="functiontext">Languages::default</span><span class="plain">()); </span> <span class="comment">the bulk of the web is automatically a target</span>
|
||||
<span class="functiontext">Reader::read_contents_page</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">verbosely</span><span class="plain">);</span>
|
||||
<span class="functiontext">Reader::read_contents_page</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">, </span><span class="identifier">verbosely</span><span class="plain">, </span><span class="identifier">parsing</span><span class="plain">);</span>
|
||||
<span class="functiontext">BuildFiles::deduce_semver</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">);</span>
|
||||
<span class="functiontext">Parser::parse_web</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">inweb_mode</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">W</span><span class="plain">-</span><span class="element">>no_sections</span><span class="plain"> == 1) {</span>
|
||||
|
@ -120,7 +120,7 @@ multi-chapter web.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Reader::load_web is used in 1/pc (<a href="1-pc.html#SP7">§7</a>).</p>
|
||||
<p class="endnote">The function Reader::load_web is used in 1/pc (<a href="1-pc.html#SP7">§7</a>), 6/rw (<a href="6-rw.html#SP9_1">§9.1</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP3"></a><b>§3. </b>We abstract these in order to be able to respond well to their not existing:
|
||||
</p>
|
||||
|
@ -251,8 +251,8 @@ page to be read, we set this up as a recursion:
|
|||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Reader::read_contents_page</span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">module_search</span><span class="plain"> *</span><span class="identifier">import_path</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">verbosely</span><span class="plain">) {</span>
|
||||
<span class="functiontext">Reader::read_contents_page_from</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">import_path</span><span class="plain">, </span><span class="identifier">verbosely</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Reader::read_contents_page</span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">module_search</span><span class="plain"> *</span><span class="identifier">import_path</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">verbosely</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">parsing</span><span class="plain">) {</span>
|
||||
<span class="functiontext">Reader::read_contents_page_from</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">import_path</span><span class="plain">, </span><span class="identifier">verbosely</span><span class="plain">, </span><span class="identifier">parsing</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
|
||||
<span class="functiontext">Bibliographic::check_required_data</span><span class="plain">(</span><span class="identifier">W</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
@ -283,12 +283,14 @@ by halting at the junction point.
|
|||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">pathname</span><span class="plain"> *</span><span class="identifier">path_to</span><span class="plain">; </span> <span class="comment">Where web material is being read from</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">module_search</span><span class="plain"> *</span><span class="identifier">import_from</span><span class="plain">; </span> <span class="comment">Where imported webs are</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">scan_verbosely</span><span class="plain">;</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">parsing</span><span class="plain">;</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">main_web_not_module</span><span class="plain">; </span> <span class="comment">Reading the original web, or an included one?</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">halt_at_at</span><span class="plain">; </span> <span class="comment">Used for reading contents pages of single-file webs</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">halted</span><span class="plain">; </span> <span class="comment">Set when such a halt has occurred</span>
|
||||
<span class="plain">} </span><span class="reserved">reader_state</span><span class="plain">;</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Reader::read_contents_page_from</span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">module_search</span><span class="plain"> *</span><span class="identifier">import_path</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">verbosely</span><span class="plain">, </span><span class="reserved">pathname</span><span class="plain"> *</span><span class="identifier">path</span><span class="plain">) {</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Reader::read_contents_page_from</span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">module_search</span><span class="plain"> *</span><span class="identifier">import_path</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">verbosely</span><span class="plain">,</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">parsing</span><span class="plain">, </span><span class="reserved">pathname</span><span class="plain"> *</span><span class="identifier">path</span><span class="plain">) {</span>
|
||||
<span class="reserved">reader_state</span><span class="plain"> </span><span class="identifier">RS</span><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Initialise the reader state</span> <span class="cwebmacronumber">8.1</span>><span class="plain">;</span>
|
||||
|
||||
|
@ -323,6 +325,7 @@ by halting at the junction point.
|
|||
<span class="identifier">RS</span><span class="element">.chapter_folder_name</span><span class="plain"> = </span><span class="functiontext">Str::new</span><span class="plain">();</span>
|
||||
<span class="identifier">RS</span><span class="element">.titling_line_to_insert</span><span class="plain"> = </span><span class="functiontext">Str::new</span><span class="plain">();</span>
|
||||
<span class="identifier">RS</span><span class="element">.scan_verbosely</span><span class="plain"> = </span><span class="identifier">verbosely</span><span class="plain">;</span>
|
||||
<span class="identifier">RS</span><span class="element">.parsing</span><span class="plain"> = </span><span class="identifier">parsing</span><span class="plain">;</span>
|
||||
<span class="identifier">RS</span><span class="element">.path_to</span><span class="plain"> = </span><span class="identifier">path</span><span class="plain">;</span>
|
||||
<span class="identifier">RS</span><span class="element">.import_from</span><span class="plain"> = </span><span class="identifier">import_path</span><span class="plain">;</span>
|
||||
<span class="identifier">RS</span><span class="element">.halted</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
|
||||
|
@ -640,16 +643,19 @@ we like a spoonful of syntactic sugar on our porridge, that's why.
|
|||
<span class="functiontext">Reader::add_imported_header</span><span class="plain">(</span><span class="identifier">RS</span><span class="plain">-</span><span class="element">>current_web</span><span class="plain">, </span><span class="identifier">HF</span><span class="plain">);</span>
|
||||
<span class="identifier">this_is_a_chapter</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Regexp::match</span><span class="plain">(&</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">line</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"Import: (%c+)"</span><span class="plain">)) {</span>
|
||||
<span class="reserved">pathname</span><span class="plain"> *</span><span class="identifier">imported</span><span class="plain"> = </span><span class="functiontext">Modules::find</span><span class="plain">(</span><span class="identifier">RS</span><span class="plain">-</span><span class="element">>current_web</span><span class="plain">, </span><span class="identifier">RS</span><span class="plain">-</span><span class="element">>import_from</span><span class="plain">, </span><span class="identifier">mr</span><span class="element">.exp</span><span class="plain">[0]);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">imported</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">err</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">err</span><span class="plain">, </span><span class="string">"unable to find module: %S"</span><span class="plain">, </span><span class="identifier">line</span><span class="plain">);</span>
|
||||
<span class="functiontext">Errors::in_text_file_S</span><span class="plain">(</span><span class="identifier">err</span><span class="plain">, </span><span class="identifier">tfp</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">err</span><span class="plain">);</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">save_syntax</span><span class="plain"> = </span><span class="identifier">RS</span><span class="plain">-</span><span class="element">>current_web</span><span class="plain">-</span><span class="element">>default_syntax</span><span class="plain">;</span>
|
||||
<span class="functiontext">Reader::read_contents_page_from</span><span class="plain">(</span><span class="identifier">RS</span><span class="plain">-</span><span class="element">>current_web</span><span class="plain">, </span><span class="identifier">RS</span><span class="plain">-</span><span class="element">>import_from</span><span class="plain">, </span><span class="identifier">RS</span><span class="plain">-</span><span class="element">>scan_verbosely</span><span class="plain">, </span><span class="identifier">imported</span><span class="plain">);</span>
|
||||
<span class="identifier">RS</span><span class="plain">-</span><span class="element">>current_web</span><span class="plain">-</span><span class="element">>default_syntax</span><span class="plain"> = </span><span class="identifier">save_syntax</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">RS</span><span class="plain">-</span><span class="element">>parsing</span><span class="plain">) {</span>
|
||||
<span class="reserved">pathname</span><span class="plain"> *</span><span class="identifier">imported</span><span class="plain"> = </span><span class="functiontext">Modules::find</span><span class="plain">(</span><span class="identifier">RS</span><span class="plain">-</span><span class="element">>current_web</span><span class="plain">, </span><span class="identifier">RS</span><span class="plain">-</span><span class="element">>import_from</span><span class="plain">, </span><span class="identifier">mr</span><span class="element">.exp</span><span class="plain">[0]);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">imported</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) {</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">err</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">err</span><span class="plain">, </span><span class="string">"unable to find module: %S"</span><span class="plain">, </span><span class="identifier">line</span><span class="plain">);</span>
|
||||
<span class="functiontext">Errors::in_text_file_S</span><span class="plain">(</span><span class="identifier">err</span><span class="plain">, </span><span class="identifier">tfp</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">err</span><span class="plain">);</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">save_syntax</span><span class="plain"> = </span><span class="identifier">RS</span><span class="plain">-</span><span class="element">>current_web</span><span class="plain">-</span><span class="element">>default_syntax</span><span class="plain">;</span>
|
||||
<span class="functiontext">Reader::read_contents_page_from</span><span class="plain">(</span><span class="identifier">RS</span><span class="plain">-</span><span class="element">>current_web</span><span class="plain">, </span><span class="identifier">RS</span><span class="plain">-</span><span class="element">>import_from</span><span class="plain">,</span>
|
||||
<span class="identifier">RS</span><span class="plain">-</span><span class="element">>scan_verbosely</span><span class="plain">, </span><span class="identifier">RS</span><span class="plain">-</span><span class="element">>parsing</span><span class="plain">, </span><span class="identifier">imported</span><span class="plain">);</span>
|
||||
<span class="identifier">RS</span><span class="plain">-</span><span class="element">>current_web</span><span class="plain">-</span><span class="element">>default_syntax</span><span class="plain"> = </span><span class="identifier">save_syntax</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">this_is_a_chapter</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Regexp::match</span><span class="plain">(&</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">line</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"Chapter (%d+): %c+"</span><span class="plain">)) {</span>
|
||||
|
@ -759,10 +765,10 @@ we also read in and process its file.
|
|||
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sect</span><span class="plain">-</span><span class="element">>source_file_for_section</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)</span>
|
||||
<<span class="cwebmacro">Work out the filename of this section file</span> <span class="cwebmacronumber">9.2.2.4</span>><span class="plain">;</span>
|
||||
|
||||
<span class="functiontext">Reader::read_file</span><span class="plain">(</span><span class="identifier">RS</span><span class="plain">-</span><span class="element">>current_web</span><span class="plain">, </span><span class="identifier">sect</span><span class="plain">-</span><span class="element">>source_file_for_section</span><span class="plain">,</span>
|
||||
<span class="identifier">RS</span><span class="plain">-</span><span class="element">>titling_line_to_insert</span><span class="plain">, </span><span class="identifier">sect</span><span class="plain">, </span><span class="identifier">RS</span><span class="plain">-</span><span class="element">>scan_verbosely</span><span class="plain">,</span>
|
||||
<span class="plain">(</span><span class="identifier">filename_of_single_file_web</span><span class="plain">)?</span><span class="constant">TRUE</span><span class="plain">:</span><span class="constant">FALSE</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">RS</span><span class="plain">-</span><span class="element">>parsing</span><span class="plain">)</span>
|
||||
<span class="functiontext">Reader::read_file</span><span class="plain">(</span><span class="identifier">RS</span><span class="plain">-</span><span class="element">>current_web</span><span class="plain">, </span><span class="identifier">sect</span><span class="plain">-</span><span class="element">>source_file_for_section</span><span class="plain">,</span>
|
||||
<span class="identifier">RS</span><span class="plain">-</span><span class="element">>titling_line_to_insert</span><span class="plain">, </span><span class="identifier">sect</span><span class="plain">, </span><span class="identifier">RS</span><span class="plain">-</span><span class="element">>scan_verbosely</span><span class="plain">,</span>
|
||||
<span class="plain">(</span><span class="identifier">filename_of_single_file_web</span><span class="plain">)?</span><span class="constant">TRUE</span><span class="plain">:</span><span class="constant">FALSE</span><span class="plain">);</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
|
|
@ -1016,13 +1016,13 @@ we also look out for <code class="display"><span class="extract">{}^3\sqrt{N}</s
|
|||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">);</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">);</span>
|
||||
<span class="identifier">i</span><span class="plain">++;</span>
|
||||
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">i</span><span class="plain"> < </span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">)) && (</span><span class="functiontext">Characters::isalpha</span><span class="plain">(</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">))))</span>
|
||||
<span class="identifier">PUT_TO</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">++));</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"not"</span><span class="plain">)) </span><<span class="cwebmacro">Remove the not prefix</span> <span class="cwebmacronumber">28.4.2</span>>
|
||||
<span class="identifier">PUT_TO</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">++));</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"not"</span><span class="plain">)) </span><<span class="cwebmacro">Remove the not prefix</span> <span class="cwebmacronumber">28.4.2</span>>
|
||||
<span class="reserved">else</span><span class="plain"> </span><<span class="cwebmacro">Remove a general macro</span> <span class="cwebmacronumber">28.4.1</span>><span class="plain">;</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">);</span>
|
||||
<span class="identifier">i</span><span class="plain">--;</span>
|
||||
</pre>
|
||||
|
||||
|
@ -1036,103 +1036,103 @@ we also look out for <code class="display"><span class="extract">{}^3\sqrt{N}</s
|
|||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"leq"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<="</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"geq"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">">="</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"sim"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"~"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"hbox"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">""</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"left"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">""</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"right"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">""</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Rightarrow"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"=>"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Leftrightarrow"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<=>"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"to"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"-->"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"rightarrow"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"-->"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"longrightarrow"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"-->"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"leftarrow"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<--"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"longleftarrow"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<--"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"lbrace"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"{"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"mid"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"|"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"rbrace"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"}"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"cdot"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"."</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"cdots"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"..."</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"dots"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"..."</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"times"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"*"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"quad"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" "</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"qquad"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" "</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"TeX"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"TeX"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"neq"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"!="</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"noteq"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"!="</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"ell"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"l"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"log"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"log"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"exp"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"exp"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"sin"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"sin"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"cos"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"cos"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"tan"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"tan"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"top"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"T"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Alpha"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x0391</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Beta"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x0392</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Gamma"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x0393</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Delta"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x0394</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Epsilon"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x0395</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Zeta"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x0396</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Eta"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x0397</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Theta"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x0398</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Iota"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x0399</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Kappa"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x039A</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Lambda"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x039B</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Mu"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x039C</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Nu"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x039D</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Xi"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x039E</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Omicron"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x039F</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Pi"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03A0</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Rho"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03A1</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Varsigma"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03A2</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Sigma"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03A3</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Tau"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03A4</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Upsilon"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03A5</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Phi"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03A6</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Chi"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03A7</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Psi"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03A8</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Omega"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03A9</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"alpha"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03B1</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"beta"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03B2</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"gamma"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03B3</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"delta"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03B4</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"epsilon"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03B5</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"zeta"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03B6</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"eta"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03B7</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"theta"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03B8</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"iota"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03B9</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"kappa"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03BA</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"lambda"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03BB</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"mu"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03BC</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"nu"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03BD</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"xi"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03BE</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"omicron"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03BF</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"pi"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03C0</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"rho"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03C1</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"varsigma"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03C2</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"sigma"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03C3</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"tau"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03C4</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"upsilon"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03C5</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"phi"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03C6</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"chi"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03C7</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"psi"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03C8</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"omega"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03C9</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"exists"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x2203</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"in"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x2208</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"forall"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x2200</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"cap"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x2229</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"emptyset"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x2205</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"subseteq"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x2286</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"land"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x2227</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"lor"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x2228</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"lnot"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x00AC</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"sum"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03A3</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"prod"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03A0</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"leq"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<="</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"geq"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">">="</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"sim"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"~"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"hbox"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">""</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"left"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">""</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"right"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">""</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Rightarrow"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"=>"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Leftrightarrow"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<=>"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"to"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"-->"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"rightarrow"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"-->"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"longrightarrow"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"-->"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"leftarrow"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<--"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"longleftarrow"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<--"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"lbrace"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"{"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"mid"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"|"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"rbrace"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"}"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"cdot"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"."</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"cdots"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"..."</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"dots"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"..."</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"times"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"*"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"quad"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" "</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"qquad"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" "</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"TeX"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"TeX"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"neq"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"!="</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"noteq"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"!="</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"ell"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"l"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"log"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"log"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"exp"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"exp"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"sin"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"sin"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"cos"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"cos"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"tan"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"tan"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"top"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"T"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Alpha"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x0391</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Beta"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x0392</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Gamma"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x0393</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Delta"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x0394</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Epsilon"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x0395</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Zeta"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x0396</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Eta"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x0397</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Theta"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x0398</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Iota"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x0399</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Kappa"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x039A</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Lambda"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x039B</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Mu"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x039C</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Nu"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x039D</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Xi"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x039E</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Omicron"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x039F</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Pi"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03A0</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Rho"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03A1</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Varsigma"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03A2</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Sigma"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03A3</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Tau"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03A4</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Upsilon"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03A5</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Phi"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03A6</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Chi"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03A7</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Psi"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03A8</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Omega"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03A9</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"alpha"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03B1</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"beta"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03B2</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"gamma"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03B3</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"delta"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03B4</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"epsilon"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03B5</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"zeta"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03B6</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"eta"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03B7</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"theta"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03B8</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"iota"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03B9</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"kappa"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03BA</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"lambda"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03BB</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"mu"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03BC</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"nu"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03BD</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"xi"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03BE</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"omicron"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03BF</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"pi"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03C0</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"rho"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03C1</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"varsigma"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03C2</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"sigma"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03C3</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"tau"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03C4</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"upsilon"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03C5</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"phi"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03C6</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"chi"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03C7</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"psi"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03C8</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"omega"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03C9</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"exists"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x2203</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"in"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x2208</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"forall"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x2200</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"cap"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x2229</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"emptyset"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x2205</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"subseteq"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x2286</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"land"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x2227</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"lor"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x2228</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"lnot"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x00AC</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"sum"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03A3</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"prod"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03A0</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">) > 0)</span>
|
||||
<span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"Passing through unknown TeX macro \</span><span class="plain">\</span><span class="string">%S: %S"</span><span class="plain">, </span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\</span><span class="plain">\</span><span class="string">%S"</span><span class="plain">, </span><span class="identifier">macro</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">) > 0)</span>
|
||||
<span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"Passing through unknown TeX macro \</span><span class="plain">\</span><span class="string">%S: %S"</span><span class="plain">, </span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\</span><span class="plain">\</span><span class="string">%S"</span><span class="plain">, </span><span class="reserved">macro</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
|
@ -1151,14 +1151,14 @@ we also look out for <code class="display"><span class="extract">{}^3\sqrt{N}</s
|
|||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">) == </span><span class="character">'\</span><span class="plain">\</span><span class="character">'</span><span class="plain">) {</span>
|
||||
<span class="functiontext">Str::clear</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">);</span>
|
||||
<span class="functiontext">Str::clear</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">);</span>
|
||||
<span class="identifier">i</span><span class="plain">++;</span>
|
||||
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">i</span><span class="plain"> < </span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">)) && (</span><span class="functiontext">Characters::isalpha</span><span class="plain">(</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">))))</span>
|
||||
<span class="identifier">PUT_TO</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">++));</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"exists"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x2204</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"forall"</span><span class="plain">)) { </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x00AC</span><span class="plain">); </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x2200</span><span class="plain">); }</span>
|
||||
<span class="identifier">PUT_TO</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">++));</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"exists"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x2204</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"forall"</span><span class="plain">)) { </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x00AC</span><span class="plain">); </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x2200</span><span class="plain">); }</span>
|
||||
<span class="reserved">else</span><span class="plain"> {</span>
|
||||
<span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"Don't know how to apply '\</span><span class="plain">\</span><span class="string">not' to '\</span><span class="plain">\</span><span class="string">%S'\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">macro</span><span class="plain">);</span>
|
||||
<span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"Don't know how to apply '\</span><span class="plain">\</span><span class="string">not' to '\</span><span class="plain">\</span><span class="string">%S'\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="reserved">macro</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
||||
<span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"Don't know how to apply '\</span><span class="plain">\</span><span class="string">not' here\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
||||
|
|
|
@ -290,7 +290,7 @@ some 58 years.
|
|||
<p class="endnote">The function BuildFiles::increment is used in <a href="#SP7">§7</a>.</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="6-gs.html">Back to 'Git Support'</a></li><li><i>(This section ends Chapter 6: Extras.)</i></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="6-gs.html">Back to 'Git Support'</a></li><li><a href="6-rw.html">Continue with 'Readme Writeme'</a></li></ul><hr class="tocbar">
|
||||
<!--End of weave-->
|
||||
</main>
|
||||
</body>
|
||||
|
|
602
docs/inweb/6-rw.html
Normal file
602
docs/inweb/6-rw.html
Normal file
|
@ -0,0 +1,602 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>6/bf2</title>
|
||||
<meta name="viewport" content="width=device-width initial-scale=1">
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
||||
<meta http-equiv="Content-Language" content="en-gb">
|
||||
<link href="../inweb.css" rel="stylesheet" rev="stylesheet" type="text/css">
|
||||
</head>
|
||||
<body>
|
||||
<nav role="navigation">
|
||||
<h1><a href="../webs.html">Sources</a></h1>
|
||||
<ul>
|
||||
<li><a href="../inweb/index.html">inweb</a></li>
|
||||
</ul>
|
||||
<h2>Foundation</h2>
|
||||
<ul>
|
||||
<li><a href="../foundation-module/index.html">foundation-module</a></li>
|
||||
<li><a href="../foundation-test/index.html">foundation-test</a></li>
|
||||
</ul>
|
||||
|
||||
|
||||
</nav>
|
||||
<main role="main">
|
||||
|
||||
<!--Weave of '6/rw' generated by 7-->
|
||||
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">inweb</a></li><li><a href="index.html#6">Chapter 6: Extras</a></li><li><b>Readme Writeme</b></li></ul><p class="purpose">To construct Readme and similar files.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1"></a><b>§1. </b>This is a very simple generator for <code class="display"><span class="extract">README.md</span></code> 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="inwebparagraph">As we scan through the prototype file, we keep track of this:
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">write_state</span><span class="plain"> {</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">;</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">linked_list</span><span class="plain"> *</span><span class="identifier">known_macros</span><span class="plain">; </span> <span class="comment">of <code class="display"><span class="extract">macro</span></code></span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">macro</span><span class="plain"> *</span><span class="identifier">current_definition</span><span class="plain">;</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">macro_tokens</span><span class="plain"> *</span><span class="identifier">stack_frame</span><span class="plain">;</span>
|
||||
<span class="plain">} </span><span class="reserved">write_state</span><span class="plain">;</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Readme::write</span><span class="plain">(</span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">from</span><span class="plain">, </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">to</span><span class="plain">) {</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="constant">STDOUT</span><span class="plain">, </span><span class="string">"write-me: %f --> %f\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">to</span><span class="plain">);</span>
|
||||
<span class="reserved">write_state</span><span class="plain"> </span><span class="identifier">ws</span><span class="plain">;</span>
|
||||
<span class="identifier">ws</span><span class="element">.current_definition</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="identifier">ws</span><span class="element">.known_macros</span><span class="plain"> = </span><span class="identifier">NEW_LINKED_LIST</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">);</span>
|
||||
<span class="reserved">macro</span><span class="plain"> *</span><span class="identifier">V</span><span class="plain"> = </span><span class="functiontext">Readme::new_macro</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"version"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
|
||||
<span class="identifier">ADD_TO_LINKED_LIST</span><span class="plain">(</span><span class="identifier">V</span><span class="plain">, </span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">ws</span><span class="element">.known_macros</span><span class="plain">);</span>
|
||||
<span class="reserved">macro</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="functiontext">Readme::new_macro</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"purpose"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
|
||||
<span class="identifier">ADD_TO_LINKED_LIST</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">ws</span><span class="element">.known_macros</span><span class="plain">);</span>
|
||||
<span class="reserved">macro</span><span class="plain"> *</span><span class="identifier">A</span><span class="plain"> = </span><span class="functiontext">Readme::new_macro</span><span class="plain">(</span><span class="identifier">I</span><span class="string">"var"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
|
||||
<span class="identifier">ADD_TO_LINKED_LIST</span><span class="plain">(</span><span class="identifier">A</span><span class="plain">, </span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">ws</span><span class="element">.known_macros</span><span class="plain">);</span>
|
||||
<span class="identifier">ws</span><span class="element">.stack_frame</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="reserved">text_stream</span><span class="plain"> </span><span class="identifier">file_to</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Streams::open_to_file</span><span class="plain">(&</span><span class="identifier">file_to</span><span class="plain">, </span><span class="identifier">to</span><span class="plain">, </span><span class="constant">UTF8_ENC</span><span class="plain">) == </span><span class="constant">FALSE</span><span class="plain">)</span>
|
||||
<span class="functiontext">Errors::fatal_with_file</span><span class="plain">(</span><span class="string">"can't write readme file"</span><span class="plain">, </span><span class="identifier">to</span><span class="plain">);</span>
|
||||
<span class="identifier">ws</span><span class="element">.OUT</span><span class="plain"> = &</span><span class="identifier">file_to</span><span class="plain">;</span>
|
||||
<span class="functiontext">TextFiles::read</span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">, </span><span class="string">"unable to read template file"</span><span class="plain">, </span><span class="constant">TRUE</span><span class="plain">,</span>
|
||||
<span class="plain">&</span><span class="functiontext">Readme::write_helper</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, (</span><span class="reserved">void</span><span class="plain"> *) &</span><span class="identifier">ws</span><span class="plain">);</span>
|
||||
<span class="functiontext">Streams::close</span><span class="plain">(&</span><span class="identifier">file_to</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Readme::write is used in 1/pc (<a href="1-pc.html#SP7_1">§7.1</a>).</p>
|
||||
|
||||
<p class="endnote">The structure write_state is private to this section.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b>The file consists of definitions of macros, made one at a time, and
|
||||
starting with <code class="display"><span class="extract">@define</span></code> and finishing with <code class="display"><span class="extract">@end</span></code>, and actual material.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Readme::write_helper</span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text</span><span class="plain">, </span><span class="reserved">text_file_position</span><span class="plain"> *</span><span class="identifier">tfp</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">state</span><span class="plain">) {</span>
|
||||
<span class="reserved">write_state</span><span class="plain"> *</span><span class="identifier">ws</span><span class="plain"> = (</span><span class="reserved">write_state</span><span class="plain"> *) </span><span class="identifier">state</span><span class="plain">;</span>
|
||||
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain"> = </span><span class="identifier">ws</span><span class="plain">-</span><span class="element">>OUT</span><span class="plain">;</span>
|
||||
|
||||
<span class="reserved">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="functiontext">Regexp::create_mr</span><span class="plain">();</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Regexp::match</span><span class="plain">(&</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">L</span><span class="string">" *@end *"</span><span class="plain">)) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ws</span><span class="plain">-</span><span class="element">>current_definition</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">)</span>
|
||||
<span class="functiontext">Errors::in_text_file</span><span class="plain">(</span><span class="string">"@end without @define"</span><span class="plain">, </span><span class="identifier">tfp</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">ws</span><span class="plain">-</span><span class="element">>current_definition</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ws</span><span class="plain">-</span><span class="element">>current_definition</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">ws</span><span class="plain">-</span><span class="element">>current_definition</span><span class="plain">-</span><span class="element">>content</span><span class="plain">) > 0)</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">ws</span><span class="plain">-</span><span class="element">>current_definition</span><span class="plain">-</span><span class="element">>content</span><span class="plain">, </span><span class="string">"\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">ws</span><span class="plain">-</span><span class="element">>current_definition</span><span class="plain">-</span><span class="element">>content</span><span class="plain">, </span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">);</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Regexp::match</span><span class="plain">(&</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">L</span><span class="string">" *@define (%i+)(%c*)"</span><span class="plain">)) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ws</span><span class="plain">-</span><span class="element">>current_definition</span><span class="plain">)</span>
|
||||
<span class="functiontext">Errors::in_text_file</span><span class="plain">(</span><span class="string">"@define without @end"</span><span class="plain">, </span><span class="identifier">tfp</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> {</span>
|
||||
<span class="reserved">macro</span><span class="plain"> *</span><span class="identifier">M</span><span class="plain"> = </span><span class="functiontext">Readme::new_macro</span><span class="plain">(</span><span class="identifier">mr</span><span class="element">.exp</span><span class="plain">[0], </span><span class="identifier">mr</span><span class="element">.exp</span><span class="plain">[1], </span><span class="identifier">tfp</span><span class="plain">);</span>
|
||||
<span class="identifier">ws</span><span class="plain">-</span><span class="element">>current_definition</span><span class="plain"> = </span><span class="identifier">M</span><span class="plain">;</span>
|
||||
<span class="identifier">ADD_TO_LINKED_LIST</span><span class="plain">(</span><span class="identifier">M</span><span class="plain">, </span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">ws</span><span class="plain">-</span><span class="element">>known_macros</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
||||
<span class="functiontext">Readme::expand_material</span><span class="plain">(</span><span class="identifier">ws</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">tfp</span><span class="plain">);</span>
|
||||
<span class="functiontext">Readme::expand_material</span><span class="plain">(</span><span class="identifier">ws</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">tfp</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="functiontext">Regexp::dispose_of</span><span class="plain">(&</span><span class="identifier">mr</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Readme::write_helper is used in <a href="#SP1">§1</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP3"></a><b>§3. </b>The "content" of a macro is its definition, and the tokens are named
|
||||
parameters.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">macro</span><span class="plain"> {</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">;</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">content</span><span class="plain">;</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">macro_tokens</span><span class="plain"> </span><span class="identifier">tokens</span><span class="plain">;</span>
|
||||
<span class="constant">MEMORY_MANAGEMENT</span>
|
||||
<span class="plain">} </span><span class="reserved">macro</span><span class="plain">;</span>
|
||||
|
||||
<span class="reserved">macro</span><span class="plain"> *</span><span class="functiontext">Readme::new_macro</span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">tokens</span><span class="plain">, </span><span class="reserved">text_file_position</span><span class="plain"> *</span><span class="identifier">tfp</span><span class="plain">) {</span>
|
||||
<span class="reserved">macro</span><span class="plain"> *</span><span class="identifier">M</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">macro</span><span class="plain">);</span>
|
||||
<span class="identifier">M</span><span class="plain">-</span><span class="element">>name</span><span class="plain"> = </span><span class="functiontext">Str::duplicate</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
|
||||
<span class="identifier">M</span><span class="plain">-</span><span class="element">>tokens</span><span class="plain"> = </span><span class="functiontext">Readme::parse_token_list</span><span class="plain">(</span><span class="identifier">tokens</span><span class="plain">, </span><span class="identifier">tfp</span><span class="plain">);</span>
|
||||
<span class="identifier">M</span><span class="plain">-</span><span class="element">>content</span><span class="plain"> = </span><span class="functiontext">Str::new</span><span class="plain">();</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">M</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">macro_tokens</span><span class="plain"> {</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">macro</span><span class="plain"> *</span><span class="identifier">bound_to</span><span class="plain">;</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">pars</span><span class="plain">[8];</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">no_pars</span><span class="plain">;</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">macro_tokens</span><span class="plain"> *</span><span class="identifier">down</span><span class="plain">;</span>
|
||||
<span class="constant">MEMORY_MANAGEMENT</span>
|
||||
<span class="plain">} </span><span class="reserved">macro_tokens</span><span class="plain">;</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Readme::new_macro is used in <a href="#SP1">§1</a>, <a href="#SP2">§2</a>.</p>
|
||||
|
||||
<p class="endnote">The structure macro is private to this section.</p>
|
||||
|
||||
<p class="endnote">The structure macro_tokens is private to this section.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP4"></a><b>§4. </b></p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">macro_tokens</span><span class="plain"> </span><span class="functiontext">Readme::parse_token_list</span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">chunk</span><span class="plain">, </span><span class="reserved">text_file_position</span><span class="plain"> *</span><span class="identifier">tfp</span><span class="plain">) {</span>
|
||||
<span class="reserved">macro_tokens</span><span class="plain"> </span><span class="identifier">mt</span><span class="plain">;</span>
|
||||
<span class="identifier">mt</span><span class="element">.no_pars</span><span class="plain"> = 0;</span>
|
||||
<span class="identifier">mt</span><span class="element">.down</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="identifier">mt</span><span class="element">.bound_to</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::get_first_char</span><span class="plain">(</span><span class="identifier">chunk</span><span class="plain">) == </span><span class="character">'('</span><span class="plain">) {</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">x</span><span class="plain"> = 1, </span><span class="identifier">bl</span><span class="plain"> = 1, </span><span class="identifier">from</span><span class="plain"> = 1, </span><span class="identifier">quoted</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
|
||||
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">bl</span><span class="plain"> > 0) && (</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">chunk</span><span class="plain">, </span><span class="identifier">x</span><span class="plain">) != 0)) {</span>
|
||||
<span class="identifier">wchar_t</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> = </span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">chunk</span><span class="plain">, </span><span class="identifier">x</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">'\</span><span class="plain">'</span><span class="character">'</span><span class="plain">) {</span>
|
||||
<span class="identifier">quoted</span><span class="plain"> = </span><span class="identifier">quoted</span><span class="plain">?</span><span class="constant">FALSE</span><span class="plain">:</span><span class="constant">TRUE</span><span class="plain">;</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">quoted</span><span class="plain"> == </span><span class="constant">FALSE</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">'('</span><span class="plain">) </span><span class="identifier">bl</span><span class="plain">++;</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">')'</span><span class="plain">) {</span>
|
||||
<span class="identifier">bl</span><span class="plain">--;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bl</span><span class="plain"> == 0) </span><<span class="cwebmacro">Recognise token</span> <span class="cwebmacronumber">4.1</span>><span class="plain">;</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c</span><span class="plain"> == </span><span class="character">','</span><span class="plain">) && (</span><span class="identifier">bl</span><span class="plain"> == 1)) </span><<span class="cwebmacro">Recognise token</span> <span class="cwebmacronumber">4.1</span>><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">x</span><span class="plain">++;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="functiontext">Str::delete_n_characters</span><span class="plain">(</span><span class="identifier">chunk</span><span class="plain">, </span><span class="identifier">x</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">mt</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Readme::parse_token_list is used in <a href="#SP3">§3</a>, <a href="#SP5">§5</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP4_1"></a><b>§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="macrodefinition"><code class="display">
|
||||
<<span class="cwebmacrodefn">Recognise token</span> <span class="cwebmacronumber">4.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">n</span><span class="plain"> = </span><span class="identifier">mt</span><span class="element">.no_pars</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain"> >= 8) </span><span class="functiontext">Errors::in_text_file</span><span class="plain">(</span><span class="string">"too many parameters"</span><span class="plain">, </span><span class="identifier">tfp</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> {</span>
|
||||
<span class="identifier">mt</span><span class="element">.pars</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">] = </span><span class="functiontext">Str::new</span><span class="plain">();</span>
|
||||
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">j</span><span class="plain">=</span><span class="identifier">from</span><span class="plain">; </span><span class="identifier">j</span><span class="plain"><</span><span class="identifier">x</span><span class="plain">; </span><span class="identifier">j</span><span class="plain">++) </span><span class="identifier">PUT_TO</span><span class="plain">(</span><span class="identifier">mt</span><span class="element">.pars</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">], </span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">chunk</span><span class="plain">, </span><span class="identifier">j</span><span class="plain">));</span>
|
||||
<span class="functiontext">Str::trim_white_space</span><span class="plain">(</span><span class="identifier">mt</span><span class="element">.pars</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]);</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="functiontext">Str::get_first_char</span><span class="plain">(</span><span class="identifier">mt</span><span class="element">.pars</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]) == </span><span class="character">'\</span><span class="plain">'</span><span class="character">'</span><span class="plain">) &&</span>
|
||||
<span class="plain">(</span><span class="functiontext">Str::get_last_char</span><span class="plain">(</span><span class="identifier">mt</span><span class="element">.pars</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]) == </span><span class="character">'\</span><span class="plain">'</span><span class="character">'</span><span class="plain">)) {</span>
|
||||
<span class="functiontext">Str::delete_first_character</span><span class="plain">(</span><span class="identifier">mt</span><span class="element">.pars</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]);</span>
|
||||
<span class="functiontext">Str::delete_last_character</span><span class="plain">(</span><span class="identifier">mt</span><span class="element">.pars</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">]);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">mt</span><span class="element">.no_pars</span><span class="plain">++;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">from</span><span class="plain"> = </span><span class="identifier">x</span><span class="plain">+1;</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP4">§4</a> (twice).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP5"></a><b>§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 <code class="display"><span class="extract">@name</span></code>, possibly followed by a bracketed list of parameters.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Readme::expand_material</span><span class="plain">(</span><span class="reserved">write_state</span><span class="plain"> *</span><span class="identifier">ws</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text</span><span class="plain">,</span>
|
||||
<span class="reserved">text_file_position</span><span class="plain"> *</span><span class="identifier">tfp</span><span class="plain">) {</span>
|
||||
<span class="reserved">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="functiontext">Regexp::create_mr</span><span class="plain">();</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Regexp::match</span><span class="plain">(&</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"(%c*?)@(%i+)(%c*)"</span><span class="plain">)) {</span>
|
||||
<span class="functiontext">Readme::expand_material</span><span class="plain">(</span><span class="identifier">ws</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">mr</span><span class="element">.exp</span><span class="plain">[0], </span><span class="identifier">tfp</span><span class="plain">);</span>
|
||||
<span class="reserved">macro_tokens</span><span class="plain"> </span><span class="identifier">mt</span><span class="plain"> = </span><span class="functiontext">Readme::parse_token_list</span><span class="plain">(</span><span class="identifier">mr</span><span class="element">.exp</span><span class="plain">[2], </span><span class="identifier">tfp</span><span class="plain">);</span>
|
||||
<span class="identifier">mt</span><span class="element">.down</span><span class="plain"> = </span><span class="identifier">ws</span><span class="plain">-</span><span class="element">>stack_frame</span><span class="plain">;</span>
|
||||
<span class="identifier">ws</span><span class="plain">-</span><span class="element">>stack_frame</span><span class="plain"> = &</span><span class="identifier">mt</span><span class="plain">;</span>
|
||||
<span class="functiontext">Readme::expand_at</span><span class="plain">(</span><span class="identifier">ws</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">mr</span><span class="element">.exp</span><span class="plain">[1], </span><span class="identifier">tfp</span><span class="plain">);</span>
|
||||
<span class="identifier">ws</span><span class="plain">-</span><span class="element">>stack_frame</span><span class="plain"> = </span><span class="identifier">mt</span><span class="element">.down</span><span class="plain">;</span>
|
||||
<span class="functiontext">Readme::expand_material</span><span class="plain">(</span><span class="identifier">ws</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">mr</span><span class="element">.exp</span><span class="plain">[2], </span><span class="identifier">tfp</span><span class="plain">);</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="functiontext">Regexp::dispose_of</span><span class="plain">(&</span><span class="identifier">mr</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Readme::expand_material is used in <a href="#SP2">§2</a>, <a href="#SP6">§6</a>, <a href="#SP7">§7</a>, <a href="#SP7_1">§7.1</a>, <a href="#SP7_2">§7.2</a>, <a href="#SP7_3">§7.3</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP6"></a><b>§6. </b>If we run into the notation <code class="display"><span class="extract">@something</span></code>, it's possible that <code class="display"><span class="extract">something</span></code> 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="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Readme::expand_at</span><span class="plain">(</span><span class="reserved">write_state</span><span class="plain"> *</span><span class="identifier">ws</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">macro_name</span><span class="plain">,</span>
|
||||
<span class="reserved">text_file_position</span><span class="plain"> *</span><span class="identifier">tfp</span><span class="plain">) {</span>
|
||||
<span class="reserved">macro_tokens</span><span class="plain"> *</span><span class="identifier">stack</span><span class="plain"> = </span><span class="identifier">ws</span><span class="plain">-</span><span class="element">>stack_frame</span><span class="plain">;</span>
|
||||
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">stack</span><span class="plain">) {</span>
|
||||
<span class="reserved">macro</span><span class="plain"> *</span><span class="identifier">in</span><span class="plain"> = </span><span class="identifier">stack</span><span class="plain">-</span><span class="element">>bound_to</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">in</span><span class="plain">)</span>
|
||||
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">n</span><span class="plain"> = 0; </span><span class="identifier">n</span><span class="plain"> < </span><span class="identifier">in</span><span class="plain">-</span><span class="element">>tokens.no_pars</span><span class="plain">; </span><span class="identifier">n</span><span class="plain">++)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">in</span><span class="plain">-</span><span class="element">>tokens.pars</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">], </span><span class="identifier">macro_name</span><span class="plain">)) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain"> < </span><span class="identifier">stack</span><span class="plain">-</span><span class="element">>no_pars</span><span class="plain">) {</span>
|
||||
<span class="functiontext">Readme::expand_material</span><span class="plain">(</span><span class="identifier">ws</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">stack</span><span class="plain">-</span><span class="element">>pars</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">], </span><span class="identifier">tfp</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">stack</span><span class="plain"> = </span><span class="identifier">stack</span><span class="plain">-</span><span class="element">>down</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
||||
<span class="reserved">macro</span><span class="plain"> *</span><span class="identifier">M</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">M</span><span class="plain">, </span><span class="reserved">macro</span><span class="plain">, </span><span class="identifier">ws</span><span class="plain">-</span><span class="element">>known_macros</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">M</span><span class="plain">-</span><span class="element">>name</span><span class="plain">, </span><span class="identifier">macro_name</span><span class="plain">)) {</span>
|
||||
<span class="identifier">ws</span><span class="plain">-</span><span class="element">>stack_frame</span><span class="plain">-</span><span class="element">>bound_to</span><span class="plain"> = </span><span class="identifier">M</span><span class="plain">;</span>
|
||||
<span class="functiontext">Readme::expand_macro</span><span class="plain">(</span><span class="identifier">ws</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">M</span><span class="plain">, </span><span class="identifier">tfp</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="functiontext">Errors::in_text_file</span><span class="plain">(</span><span class="string">"no such @-command"</span><span class="plain">, </span><span class="identifier">tfp</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="constant">STDERR</span><span class="plain">, </span><span class="string">"(command is '%S')\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">macro_name</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Readme::expand_at is used in <a href="#SP5">§5</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP7"></a><b>§7. </b>So, then: suppose we have to expand <code class="display"><span class="extract">@example(5, gold rings)</span></code>. Then the
|
||||
<code class="display"><span class="extract">macro_name</span></code> below is set to <code class="display"><span class="extract">example</span></code>, and the current stack frame contains the
|
||||
values <code class="display"><span class="extract">5</span></code> and <code class="display"><span class="extract">gold rings</span></code>.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Readme::expand_macro</span><span class="plain">(</span><span class="reserved">write_state</span><span class="plain"> *</span><span class="identifier">ws</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">macro</span><span class="plain"> *</span><span class="identifier">M</span><span class="plain">, </span><span class="reserved">text_file_position</span><span class="plain"> *</span><span class="identifier">tfp</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">M</span><span class="plain">-</span><span class="element">>name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"version"</span><span class="plain">)) </span><<span class="cwebmacro">Perform built-in expansion of version macro</span> <span class="cwebmacronumber">7.1</span>>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">M</span><span class="plain">-</span><span class="element">>name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"purpose"</span><span class="plain">)) </span><<span class="cwebmacro">Perform built-in expansion of purpose macro</span> <span class="cwebmacronumber">7.2</span>>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">M</span><span class="plain">-</span><span class="element">>name</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"var"</span><span class="plain">)) </span><<span class="cwebmacro">Perform built-in expansion of var macro</span> <span class="cwebmacronumber">7.3</span>>
|
||||
<span class="reserved">else</span><span class="plain"> {</span>
|
||||
<span class="identifier">ws</span><span class="plain">-</span><span class="element">>stack_frame</span><span class="plain">-</span><span class="element">>bound_to</span><span class="plain"> = </span><span class="identifier">M</span><span class="plain">;</span>
|
||||
<span class="functiontext">Readme::expand_material</span><span class="plain">(</span><span class="identifier">ws</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">M</span><span class="plain">-</span><span class="element">>content</span><span class="plain">, </span><span class="identifier">tfp</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Readme::expand_macro is used in <a href="#SP6">§6</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP7_1"></a><b>§7.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Perform built-in expansion of version macro</span> <span class="cwebmacronumber">7.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ws</span><span class="plain">-</span><span class="element">>stack_frame</span><span class="plain">-</span><span class="element">>no_pars</span><span class="plain"> != 1)</span>
|
||||
<span class="functiontext">Errors::in_text_file</span><span class="plain">(</span><span class="string">"@version takes 1 parameter"</span><span class="plain">, </span><span class="identifier">tfp</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> {</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">program</span><span class="plain">);</span>
|
||||
<span class="functiontext">Readme::expand_material</span><span class="plain">(</span><span class="identifier">ws</span><span class="plain">, </span><span class="identifier">program</span><span class="plain">, </span><span class="identifier">ws</span><span class="plain">-</span><span class="element">>stack_frame</span><span class="plain">-</span><span class="element">>pars</span><span class="plain">[0], </span><span class="identifier">tfp</span><span class="plain">);</span>
|
||||
<span class="functiontext">Readme::write_var</span><span class="plain">(</span><span class="identifier">ws</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">program</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Version Number"</span><span class="plain">, </span><span class="identifier">tfp</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">program</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP7">§7</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP7_2"></a><b>§7.2. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Perform built-in expansion of purpose macro</span> <span class="cwebmacronumber">7.2</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ws</span><span class="plain">-</span><span class="element">>stack_frame</span><span class="plain">-</span><span class="element">>no_pars</span><span class="plain"> != 1)</span>
|
||||
<span class="functiontext">Errors::in_text_file</span><span class="plain">(</span><span class="string">"@purpose takes 1 parameter"</span><span class="plain">, </span><span class="identifier">tfp</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> {</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">program</span><span class="plain">);</span>
|
||||
<span class="functiontext">Readme::expand_material</span><span class="plain">(</span><span class="identifier">ws</span><span class="plain">, </span><span class="identifier">program</span><span class="plain">, </span><span class="identifier">ws</span><span class="plain">-</span><span class="element">>stack_frame</span><span class="plain">-</span><span class="element">>pars</span><span class="plain">[0], </span><span class="identifier">tfp</span><span class="plain">);</span>
|
||||
<span class="functiontext">Readme::write_var</span><span class="plain">(</span><span class="identifier">ws</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">program</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Purpose"</span><span class="plain">, </span><span class="identifier">tfp</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">program</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP7">§7</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP7_3"></a><b>§7.3. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Perform built-in expansion of var macro</span> <span class="cwebmacronumber">7.3</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ws</span><span class="plain">-</span><span class="element">>stack_frame</span><span class="plain">-</span><span class="element">>no_pars</span><span class="plain"> != 2)</span>
|
||||
<span class="functiontext">Errors::in_text_file</span><span class="plain">(</span><span class="string">"@var takes 2 parameters"</span><span class="plain">, </span><span class="identifier">tfp</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> {</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">program</span><span class="plain">);</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">bibv</span><span class="plain">);</span>
|
||||
<span class="functiontext">Readme::expand_material</span><span class="plain">(</span><span class="identifier">ws</span><span class="plain">, </span><span class="identifier">program</span><span class="plain">, </span><span class="identifier">ws</span><span class="plain">-</span><span class="element">>stack_frame</span><span class="plain">-</span><span class="element">>pars</span><span class="plain">[0], </span><span class="identifier">tfp</span><span class="plain">);</span>
|
||||
<span class="functiontext">Readme::expand_material</span><span class="plain">(</span><span class="identifier">ws</span><span class="plain">, </span><span class="identifier">bibv</span><span class="plain">, </span><span class="identifier">ws</span><span class="plain">-</span><span class="element">>stack_frame</span><span class="plain">-</span><span class="element">>pars</span><span class="plain">[1], </span><span class="identifier">tfp</span><span class="plain">);</span>
|
||||
<span class="functiontext">Readme::write_var</span><span class="plain">(</span><span class="identifier">ws</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">program</span><span class="plain">, </span><span class="identifier">bibv</span><span class="plain">, </span><span class="identifier">tfp</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">program</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">bibv</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP7">§7</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP8"></a><b>§8. </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
|
||||
assume that the version complies with any format).
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">writeme_asset</span><span class="plain"> {</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">;</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">if_web</span><span class="plain">;</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">date</span><span class="plain">;</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">version</span><span class="plain">;</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">next_is_version</span><span class="plain">;</span>
|
||||
<span class="constant">MEMORY_MANAGEMENT</span>
|
||||
<span class="plain">} </span><span class="reserved">writeme_asset</span><span class="plain">;</span>
|
||||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Readme::write_var</span><span class="plain">(</span><span class="reserved">write_state</span><span class="plain"> *</span><span class="identifier">ws</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">,</span>
|
||||
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">program</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">datum</span><span class="plain">, </span><span class="reserved">text_file_position</span><span class="plain"> *</span><span class="identifier">tfp</span><span class="plain">) {</span>
|
||||
<span class="reserved">writeme_asset</span><span class="plain"> *</span><span class="identifier">A</span><span class="plain"> = </span><span class="functiontext">Readme::find_asset</span><span class="plain">(</span><span class="identifier">program</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">A</span><span class="plain">-</span><span class="element">>if_web</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="functiontext">Bibliographic::get_datum</span><span class="plain">(</span><span class="identifier">A</span><span class="plain">-</span><span class="element">>if_web</span><span class="plain">, </span><span class="identifier">datum</span><span class="plain">));</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">datum</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Build Date"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">A</span><span class="plain">-</span><span class="element">>date</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">datum</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Version Number"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">A</span><span class="plain">-</span><span class="element">>version</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Readme::write_var is used in <a href="#SP7_1">§7.1</a>, <a href="#SP7_2">§7.2</a>, <a href="#SP7_3">§7.3</a>.</p>
|
||||
|
||||
<p class="endnote">The structure writeme_asset is private to this section.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP9"></a><b>§9. </b>That just leaves the business of inspecting assets to obtain their metadata.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">writeme_asset</span><span class="plain"> *</span><span class="functiontext">Readme::find_asset</span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">program</span><span class="plain">) {</span>
|
||||
<span class="reserved">writeme_asset</span><span class="plain"> *</span><span class="identifier">A</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">A</span><span class="plain">, </span><span class="reserved">writeme_asset</span><span class="plain">) </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">program</span><span class="plain">, </span><span class="identifier">A</span><span class="plain">-</span><span class="element">>name</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">A</span><span class="plain">;</span>
|
||||
<span class="identifier">A</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">writeme_asset</span><span class="plain">);</span>
|
||||
<span class="identifier">A</span><span class="plain">-</span><span class="element">>name</span><span class="plain"> = </span><span class="functiontext">Str::duplicate</span><span class="plain">(</span><span class="identifier">program</span><span class="plain">);</span>
|
||||
<span class="identifier">A</span><span class="plain">-</span><span class="element">>if_web</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
|
||||
<span class="identifier">A</span><span class="plain">-</span><span class="element">>date</span><span class="plain"> = </span><span class="functiontext">Str::new</span><span class="plain">();</span>
|
||||
<span class="identifier">A</span><span class="plain">-</span><span class="element">>version</span><span class="plain"> = </span><span class="functiontext">Str::new</span><span class="plain">();</span>
|
||||
<span class="identifier">A</span><span class="plain">-</span><span class="element">>next_is_version</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Read in the asset</span> <span class="cwebmacronumber">9.1</span>><span class="plain">;</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">A</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Readme::find_asset is used in <a href="#SP8">§8</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP9_1"></a><b>§9.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Read in the asset</span> <span class="cwebmacronumber">9.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::ends_with_wide_string</span><span class="plain">(</span><span class="identifier">program</span><span class="plain">, </span><span class="identifier">L</span><span class="string">".i7x"</span><span class="plain">)) {</span>
|
||||
<<span class="cwebmacro">Read in the extension file</span> <span class="cwebmacronumber">9.1.1</span>><span class="plain">;</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
||||
<span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain"> = </span><span class="functiontext">Filenames::in_folder</span><span class="plain">(</span><span class="functiontext">Pathnames::from_text</span><span class="plain">(</span><span class="identifier">program</span><span class="plain">), </span><span class="identifier">I</span><span class="string">"Contents.w"</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">TextFiles::exists</span><span class="plain">(</span><span class="identifier">F</span><span class="plain">)) {</span>
|
||||
<span class="identifier">A</span><span class="plain">-</span><span class="element">>if_web</span><span class="plain"> = </span><span class="functiontext">Reader::load_web</span><span class="plain">(</span><span class="functiontext">Pathnames::from_text</span><span class="plain">(</span><span class="identifier">program</span><span class="plain">), </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">,</span>
|
||||
<span class="constant">V2_SYNTAX</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">);</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
||||
<span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">I6_vn</span><span class="plain"> = </span><span class="functiontext">Filenames::in_folder</span><span class="plain">(</span>
|
||||
<span class="functiontext">Pathnames::subfolder</span><span class="plain">(</span><span class="functiontext">Pathnames::from_text</span><span class="plain">(</span><span class="identifier">program</span><span class="plain">), </span><span class="identifier">I</span><span class="string">"inform6"</span><span class="plain">), </span><span class="identifier">I</span><span class="string">"header.h"</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">TextFiles::exists</span><span class="plain">(</span><span class="identifier">I6_vn</span><span class="plain">)) </span><<span class="cwebmacro">Read in I6 source header file</span> <span class="cwebmacronumber">9.1.2</span>><span class="plain">;</span>
|
||||
<span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">template_vn</span><span class="plain"> = </span><span class="functiontext">Filenames::in_folder</span><span class="plain">(</span><span class="functiontext">Pathnames::from_text</span><span class="plain">(</span><span class="identifier">program</span><span class="plain">), </span><span class="identifier">I</span><span class="string">"(manifest).txt"</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">TextFiles::exists</span><span class="plain">(</span><span class="identifier">template_vn</span><span class="plain">)) </span><<span class="cwebmacro">Read in template manifest file</span> <span class="cwebmacronumber">9.1.3</span>><span class="plain">;</span>
|
||||
<span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">rmt_vn</span><span class="plain"> = </span><span class="functiontext">Filenames::in_folder</span><span class="plain">(</span><span class="functiontext">Pathnames::from_text</span><span class="plain">(</span><span class="identifier">program</span><span class="plain">), </span><span class="identifier">I</span><span class="string">"README.txt"</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">TextFiles::exists</span><span class="plain">(</span><span class="identifier">rmt_vn</span><span class="plain">)) </span><<span class="cwebmacro">Read in README file</span> <span class="cwebmacronumber">9.1.4</span>><span class="plain">;</span>
|
||||
<span class="identifier">rmt_vn</span><span class="plain"> = </span><span class="functiontext">Filenames::in_folder</span><span class="plain">(</span><span class="functiontext">Pathnames::from_text</span><span class="plain">(</span><span class="identifier">program</span><span class="plain">), </span><span class="identifier">I</span><span class="string">"README.md"</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">TextFiles::exists</span><span class="plain">(</span><span class="identifier">rmt_vn</span><span class="plain">)) </span><<span class="cwebmacro">Read in README file</span> <span class="cwebmacronumber">9.1.4</span>><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP9">§9</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP9_1_1"></a><b>§9.1.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Read in the extension file</span> <span class="cwebmacronumber">9.1.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="functiontext">TextFiles::read</span><span class="plain">(</span><span class="functiontext">Filenames::from_text</span><span class="plain">(</span><span class="identifier">program</span><span class="plain">), </span><span class="constant">FALSE</span><span class="plain">, </span><span class="string">"unable to read extension"</span><span class="plain">, </span><span class="constant">TRUE</span><span class="plain">,</span>
|
||||
<span class="plain">&</span><span class="functiontext">Readme::extension_harvester</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">A</span><span class="plain">);</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP9_1">§9.1</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP9_1_2"></a><b>§9.1.2. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Read in I6 source header file</span> <span class="cwebmacronumber">9.1.2</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="functiontext">TextFiles::read</span><span class="plain">(</span><span class="identifier">I6_vn</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">, </span><span class="string">"unable to read header file from I6 source"</span><span class="plain">, </span><span class="constant">TRUE</span><span class="plain">,</span>
|
||||
<span class="plain">&</span><span class="functiontext">Readme::header_harvester</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">A</span><span class="plain">);</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP9_1">§9.1</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP9_1_3"></a><b>§9.1.3. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Read in template manifest file</span> <span class="cwebmacronumber">9.1.3</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="functiontext">TextFiles::read</span><span class="plain">(</span><span class="identifier">template_vn</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">, </span><span class="string">"unable to read manifest file from website template"</span><span class="plain">, </span><span class="constant">TRUE</span><span class="plain">,</span>
|
||||
<span class="plain">&</span><span class="functiontext">Readme::template_harvester</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">A</span><span class="plain">);</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP9_1">§9.1</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP9_1_4"></a><b>§9.1.4. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Read in README file</span> <span class="cwebmacronumber">9.1.4</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="functiontext">TextFiles::read</span><span class="plain">(</span><span class="identifier">rmt_vn</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">, </span><span class="string">"unable to read README file from website template"</span><span class="plain">, </span><span class="constant">TRUE</span><span class="plain">,</span>
|
||||
<span class="plain">&</span><span class="functiontext">Readme::readme_harvester</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">A</span><span class="plain">);</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP9_1">§9.1</a> (twice).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP10"></a><b>§10. </b>The format for the contents section of a web is documented in Inweb.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Readme::extension_harvester</span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text</span><span class="plain">, </span><span class="reserved">text_file_position</span><span class="plain"> *</span><span class="identifier">tfp</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">state</span><span class="plain">) {</span>
|
||||
<span class="reserved">writeme_asset</span><span class="plain"> *</span><span class="identifier">A</span><span class="plain"> = (</span><span class="reserved">writeme_asset</span><span class="plain"> *) </span><span class="identifier">state</span><span class="plain">;</span>
|
||||
<span class="reserved">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="functiontext">Regexp::create_mr</span><span class="plain">();</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">) == 0) </span><span class="reserved">return</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Regexp::match</span><span class="plain">(&</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">L</span><span class="string">" *Version (%c*?) of %c*begins here. *"</span><span class="plain">))</span>
|
||||
<span class="identifier">A</span><span class="plain">-</span><span class="element">>version</span><span class="plain"> = </span><span class="functiontext">Str::duplicate</span><span class="plain">(</span><span class="identifier">mr</span><span class="element">.exp</span><span class="plain">[0]);</span>
|
||||
<span class="functiontext">Regexp::dispose_of</span><span class="plain">(&</span><span class="identifier">mr</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Readme::extension_harvester is used in <a href="#SP9_1_1">§9.1.1</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP11"></a><b>§11. </b>Explicit code to read from <code class="display"><span class="extract">header.h</span></code> in the Inform 6 repository.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Readme::header_harvester</span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text</span><span class="plain">, </span><span class="reserved">text_file_position</span><span class="plain"> *</span><span class="identifier">tfp</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">state</span><span class="plain">) {</span>
|
||||
<span class="reserved">writeme_asset</span><span class="plain"> *</span><span class="identifier">A</span><span class="plain"> = (</span><span class="reserved">writeme_asset</span><span class="plain"> *) </span><span class="identifier">state</span><span class="plain">;</span>
|
||||
<span class="reserved">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="functiontext">Regexp::create_mr</span><span class="plain">();</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">) == 0) </span><span class="reserved">return</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Regexp::match</span><span class="plain">(&</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"#define RELEASE_NUMBER (%c*?) *"</span><span class="plain">))</span>
|
||||
<span class="identifier">A</span><span class="plain">-</span><span class="element">>version</span><span class="plain"> = </span><span class="functiontext">Str::duplicate</span><span class="plain">(</span><span class="identifier">mr</span><span class="element">.exp</span><span class="plain">[0]);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Regexp::match</span><span class="plain">(&</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"#define RELEASE_DATE \</span><span class="plain">"</span><span class="string">(%c*?)\</span><span class="plain">"</span><span class="string"> *"</span><span class="plain">))</span>
|
||||
<span class="identifier">A</span><span class="plain">-</span><span class="element">>date</span><span class="plain"> = </span><span class="functiontext">Str::duplicate</span><span class="plain">(</span><span class="identifier">mr</span><span class="element">.exp</span><span class="plain">[0]);</span>
|
||||
<span class="functiontext">Regexp::dispose_of</span><span class="plain">(&</span><span class="identifier">mr</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Readme::header_harvester is used in <a href="#SP9_1_2">§9.1.2</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP12"></a><b>§12. </b>Explicit code to read from the manifest file of a website template.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Readme::template_harvester</span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text</span><span class="plain">, </span><span class="reserved">text_file_position</span><span class="plain"> *</span><span class="identifier">tfp</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">state</span><span class="plain">) {</span>
|
||||
<span class="reserved">writeme_asset</span><span class="plain"> *</span><span class="identifier">A</span><span class="plain"> = (</span><span class="reserved">writeme_asset</span><span class="plain"> *) </span><span class="identifier">state</span><span class="plain">;</span>
|
||||
<span class="reserved">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="functiontext">Regexp::create_mr</span><span class="plain">();</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">) == 0) </span><span class="reserved">return</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Regexp::match</span><span class="plain">(&</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"%[INTERPRETERVERSION%]"</span><span class="plain">)) {</span>
|
||||
<span class="identifier">A</span><span class="plain">-</span><span class="element">>next_is_version</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">A</span><span class="plain">-</span><span class="element">>next_is_version</span><span class="plain">) {</span>
|
||||
<span class="identifier">A</span><span class="plain">-</span><span class="element">>version</span><span class="plain"> = </span><span class="functiontext">Str::duplicate</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">);</span>
|
||||
<span class="identifier">A</span><span class="plain">-</span><span class="element">>next_is_version</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="functiontext">Regexp::dispose_of</span><span class="plain">(&</span><span class="identifier">mr</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Readme::template_harvester is used in <a href="#SP9_1_3">§9.1.3</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP13"></a><b>§13. </b>And this is needed for <code class="display"><span class="extract">cheapglk</span></code> and <code class="display"><span class="extract">glulxe</span></code> in the Inform repository.
|
||||
</p>
|
||||
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Readme::readme_harvester</span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text</span><span class="plain">, </span><span class="reserved">text_file_position</span><span class="plain"> *</span><span class="identifier">tfp</span><span class="plain">, </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">state</span><span class="plain">) {</span>
|
||||
<span class="reserved">writeme_asset</span><span class="plain"> *</span><span class="identifier">A</span><span class="plain"> = (</span><span class="reserved">writeme_asset</span><span class="plain"> *) </span><span class="identifier">state</span><span class="plain">;</span>
|
||||
<span class="reserved">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="functiontext">Regexp::create_mr</span><span class="plain">();</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">) == 0) </span><span class="reserved">return</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="functiontext">Regexp::match</span><span class="plain">(&</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"CheapGlk Library: version (%c*?) *"</span><span class="plain">)) ||</span>
|
||||
<span class="plain">(</span><span class="functiontext">Regexp::match</span><span class="plain">(&</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"- Version (%c*?) *"</span><span class="plain">)))</span>
|
||||
<span class="identifier">A</span><span class="plain">-</span><span class="element">>version</span><span class="plain"> = </span><span class="functiontext">Str::duplicate</span><span class="plain">(</span><span class="identifier">mr</span><span class="element">.exp</span><span class="plain">[0]);</span>
|
||||
<span class="functiontext">Regexp::dispose_of</span><span class="plain">(&</span><span class="identifier">mr</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Readme::readme_harvester is used in <a href="#SP9_1_4">§9.1.4</a>.</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="6-bf2.html">Back to 'Build Files'</a></li><li><i>(This section ends Chapter 6: Extras.)</i></li></ul><hr class="tocbar">
|
||||
<!--End of weave-->
|
||||
</main>
|
||||
</body>
|
||||
</html>
|
||||
|
|
@ -209,6 +209,10 @@
|
|||
<p><a href="6-bf2.html"><spon class="sectiontitle">Build Files</span></a> -
|
||||
<span class="purpose">Manages the build metadata for an inweb project.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p><a href="6-rw.html"><spon class="sectiontitle">Readme Writeme</span></a> -
|
||||
<span class="purpose">To construct Readme and similar files.</span></p>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
|
11
inweb.mk
11
inweb.mk
|
@ -77,19 +77,20 @@ test:
|
|||
.PHONY: commit
|
||||
commit:
|
||||
$(INWEB) -advance-build-file $(ME)/build.txt
|
||||
$(INWEB) -prototype inweb/scripts/READMEscript.txt -write-me inweb/README.md
|
||||
cd $(ME); git commit -a
|
||||
|
||||
.PHONY: pages
|
||||
pages:
|
||||
mkdir -p $(ME)/docs
|
||||
rm $(ME)/docs/*.html
|
||||
inform/inpolicy/Tangled/inpolicy -write-me inweb/scripts/READMEscript.txt
|
||||
rm -f $(ME)/docs/*.html
|
||||
$(INWEB) -prototype inweb/scripts/READMEscript.txt -write-me inweb/README.md
|
||||
mkdir -p $(ME)/docs/inweb
|
||||
rm $(ME)/docs/inweb/*.html
|
||||
rm -f $(ME)/docs/inweb/*.html
|
||||
mkdir -p $(ME)/docs/foundation-module
|
||||
rm $(ME)/docs/foundation-module/*.html
|
||||
rm -f $(ME)/docs/foundation-module/*.html
|
||||
mkdir -p $(ME)/docs/foundation-test
|
||||
rm $(ME)/docs/foundation-test/*.html
|
||||
rm -f $(ME)/docs/foundation-test/*.html
|
||||
$(INWEB) $(ME)/docs/docs-src/webs.inweb -weave-as GitHubCovers -weave-into $(ME)/docs -navigation $(ME)/docs/docs-src/nav-o.html
|
||||
$(INWEB) $(ME) -weave-docs -weave-into $(ME)/docs/inweb -breadcrumb 'Source:../webs.html' -navigation $(ME)/docs/docs-src/nav.html
|
||||
$(INWEB) $(ME)/foundation-module -weave-docs -weave-into $(ME)/docs/foundation-module -breadcrumb 'Source:../webs.html' -navigation $(ME)/docs/docs-src/nav.html
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
@-> ../README.md
|
||||
# Inweb @version(inweb)
|
||||
# Inweb @var(inweb,Version Number)
|
||||
|
||||
v@var(inweb,Semantic Version Number) '@var(inweb,Version Name)' (@var(inweb,Build Date))
|
||||
|
||||
## About Inweb
|
||||
|
||||
|
@ -83,6 +84,5 @@ If you have also built Intest as "work/intest", then you can try these:
|
|||
|
||||
### Colophon
|
||||
|
||||
This README.mk file was generated automatically by Inpolicy (see the
|
||||
[Inform repository](https://github.com/ganelson/inform)), and should not
|
||||
This README.mk file was generated automatically by Inweb, and should not
|
||||
be edited. To make changes, edit scripts/READMEscript.txt and re-generate.
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
# This is a makefile for "inweb". It expects the current working folder to be
|
||||
# the one above the one holding this file (unusually), so it's best called
|
||||
# with e.g. "make -f inweb/make-inweb.mk".
|
||||
# with e.g. "make -f inweb/inweb.mk".
|
||||
#
|
||||
# To generate inweb.mk from its source, use e.g.:
|
||||
# inweb/Tangled/inweb inweb -prototype inweb/scripts/makescript.txt -makefile inweb/inweb.mk
|
||||
|
||||
ME = inweb
|
||||
SAFETYCOPY = $(ME)/Tangled/inweb_dev
|
||||
|
@ -98,6 +101,7 @@ test:
|
|||
.PHONY: commit
|
||||
commit:
|
||||
$(INWEB) -advance-build-file $(ME)/build.txt
|
||||
$(INWEB) -prototype inweb/scripts/READMEscript.txt -write-me inweb/README.md
|
||||
cd $(ME); git commit -a
|
||||
|
||||
# Weaving the web for GitHub Pages:
|
||||
|
@ -105,14 +109,14 @@ commit:
|
|||
.PHONY: pages
|
||||
pages:
|
||||
mkdir -p $(ME)/docs
|
||||
rm $(ME)/docs/*.html
|
||||
inform/inpolicy/Tangled/inpolicy -write-me inweb/scripts/READMEscript.txt
|
||||
rm -f $(ME)/docs/*.html
|
||||
$(INWEB) -prototype inweb/scripts/READMEscript.txt -write-me inweb/README.md
|
||||
mkdir -p $(ME)/docs/inweb
|
||||
rm $(ME)/docs/inweb/*.html
|
||||
rm -f $(ME)/docs/inweb/*.html
|
||||
mkdir -p $(ME)/docs/foundation-module
|
||||
rm $(ME)/docs/foundation-module/*.html
|
||||
rm -f $(ME)/docs/foundation-module/*.html
|
||||
mkdir -p $(ME)/docs/foundation-test
|
||||
rm $(ME)/docs/foundation-test/*.html
|
||||
rm -f $(ME)/docs/foundation-test/*.html
|
||||
$(INWEB) $(ME)/docs/docs-src/webs.inweb -weave-as GitHubCovers -weave-into $(ME)/docs -navigation $(ME)/docs/docs-src/nav-o.html
|
||||
$(INWEB) $(ME) -weave-docs -weave-into $(ME)/docs/inweb -breadcrumb 'Source:../webs.html' -navigation $(ME)/docs/docs-src/nav.html
|
||||
$(INWEB) $(ME)/foundation-module -weave-docs -weave-into $(ME)/docs/foundation-module -breadcrumb 'Source:../webs.html' -navigation $(ME)/docs/docs-src/nav.html
|
||||
|
|
Loading…
Reference in a new issue