Rudimentary colonies

This commit is contained in:
Graham Nelson 2020-04-12 17:24:23 +01:00
parent 512adb22a9
commit ae9df5f137
125 changed files with 5105 additions and 2758 deletions

View file

@ -17,6 +17,8 @@ case, |_array_MT| appended. MT stands for "memory type".
@e breadcrumb_request_MT
@e chapter_MT
@e colony_MT
@e colony_member_MT
@e colouring_language_block_MT
@e colouring_rule_MT
@e enumeration_set_MT
@ -56,6 +58,8 @@ types.
ALLOCATE_IN_ARRAYS(source_line, 1000)
ALLOCATE_INDIVIDUALLY(breadcrumb_request)
ALLOCATE_INDIVIDUALLY(chapter)
ALLOCATE_INDIVIDUALLY(colony)
ALLOCATE_INDIVIDUALLY(colony_member)
ALLOCATE_INDIVIDUALLY(colouring_language_block)
ALLOCATE_INDIVIDUALLY(colouring_rule)
ALLOCATE_INDIVIDUALLY(enumeration_set)

View file

@ -38,6 +38,7 @@ typedef struct inweb_instructions {
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 filename *colony_setting; /* |-colony X|: the filename X, if supplied */
struct linked_list *breadcrumb_setting; /* of |breadcrumb_request| */
int verbose_switch; /* |-verbose|: print names of files read to stdout */
int targets; /* used only for parsing */
@ -102,6 +103,7 @@ inweb_instructions Configuration::read(int argc, char **argv) {
args.writeme_setting = NULL;
args.prototype_setting = NULL;
args.navigation_setting = NULL;
args.colony_setting = NULL;
args.breadcrumb_setting = NEW_LINKED_LIST(breadcrumb_request);
args.tag_setting = Str::new();
args.weave_pattern = Str::new_from_wide_string(L"HTML");
@ -151,6 +153,7 @@ provides automatically.
@e WEAVE_DOCS_CLSW
@e BREADCRUMB_CLSW
@e NAVIGATION_CLSW
@e COLONY_CLSW
@e TANGLING_CLSG
@ -234,6 +237,8 @@ provides automatically.
L"use the text X as a breadcrumb in overhead navigation");
CommandLine::declare_switch(NAVIGATION_CLSW, L"navigation", 2,
L"use the file X as a column of navigation links");
CommandLine::declare_switch(COLONY_CLSW, L"colony", 2,
L"use the file X as a list of webs in this colony");
CommandLine::end_group();
CommandLine::begin_group(TANGLING_CLSG,
@ -341,6 +346,9 @@ void Configuration::switch(int id, int val, text_stream *arg, void *state) {
case NAVIGATION_CLSW:
args->navigation_setting = Filenames::from_text(arg);
Configuration::set_fundamental_mode(args, WEAVE_MODE); break;
case COLONY_CLSW:
args->colony_setting = Filenames::from_text(arg);
Configuration::set_fundamental_mode(args, WEAVE_MODE); break;
/* Tangle-related */
case TANGLE_CLSW:

View file

@ -242,6 +242,8 @@ which for many small webs will be the entire thing.
if ((ins->chosen_range_actually_chosen == FALSE) && (ins->chosen_file == NULL))
Configuration::set_range(ins, pattern->default_range);
if (ins->colony_setting) Colonies::load(ins->colony_setting);
int r = Formats::begin_weaving(W, pattern);
if (r != SWARM_OFF_SWM) ins->swarm_mode = r;
@<Assign section numbers for printing purposes@>;
@ -286,7 +288,7 @@ which for many small webs will be the entire thing.
@<Assign section numbers for printing purposes@> =
section *S; int k = 1;
LOOP_OVER(S, section)
if (Reader::range_within(S->sect_range, ins->chosen_range))
if (Reader::range_within(S->md->sect_range, ins->chosen_range))
S->printed_number = k++;
@h Error messages.

View file

@ -42,7 +42,8 @@ typedef struct source_line {
} source_line;
@ =
source_line *Lines::new_source_line(text_stream *line, text_file_position *tfp) {
source_line *Lines::new_source_line_in(text_stream *line, text_file_position *tfp,
section *S) {
source_line *sl = CREATE(source_line);
sl->text = Str::duplicate(line);
sl->text_operand = Str::new();
@ -62,7 +63,10 @@ source_line *Lines::new_source_line(text_stream *line, text_file_position *tfp)
if (tfp) sl->source = *tfp; else sl->source = TextFiles::nowhere();
sl->owning_section = NULL;
sl->owning_section = S;
sl->owning_section->sect_extent++;
sl->owning_section->owning_chapter->owning_web->web_extent++;
sl->next_line = NULL;
sl->owning_paragraph = NULL;
return sl;

View file

@ -17,13 +17,9 @@ for it to do anything.
void Parser::parse_web(web *W, int inweb_mode, int sequential) {
chapter *C;
section *S;
LOOP_OVER_LINKED_LIST(C, chapter, W->chapters) {
int section_counter = 1;
LOOP_OVER_LINKED_LIST(S, section, C->sections) {
LOOP_OVER_LINKED_LIST(C, chapter, W->chapters)
LOOP_OVER_LINKED_LIST(S, section, C->sections)
@<Parse a section@>;
section_counter++;
}
}
LanguageMethods::parse_types(W, W->main_language);
LanguageMethods::parse_functions(W, W->main_language);
LanguageMethods::further_parsing(W, W->main_language);
@ -130,7 +126,7 @@ immediately adjacent on the same line.
reparsing from there.
@<Insert an implied paragraph break@> =
source_line *NL = Lines::new_source_line(I"@", &(L->source));
source_line *NL = Lines::new_source_line_in(I"@", &(L->source), S);
PL->next_line = NL;
NL->next_line = L;
L = PL;
@ -174,110 +170,40 @@ come literally from the source web.
L->category = CHAPTER_HEADING_LCAT;
}
@ The top line of a section gives its title and range; in InC, it can
also give the namespace for its functions.
@ The top line of a section gives its title; in InC, it can also give the
namespace for its functions.
@<Parse the line as a probable section heading@> =
match_results mr = Regexp::create_mr();
if (Regexp::match(&mr, L->text, L"%[(%C+)%] (%C+/%C+): (%c+).")) {
if (S->md->using_syntax >= V2_SYNTAX)
Parser::wrong_version(S->md->using_syntax, L,
"section range in header line", V1_SYNTAX);
S->sect_namespace = Str::duplicate(mr.exp[0]);
S->sect_range = Str::duplicate(mr.exp[1]);
S->md->sect_range = Str::duplicate(mr.exp[1]);
S->md->sect_title = Str::duplicate(mr.exp[2]);
L->text_operand = Str::duplicate(mr.exp[2]);
L->category = SECTION_HEADING_LCAT;
} else if (Regexp::match(&mr, L->text, L"(%C+/%C+): (%c+).")) {
S->sect_range = Str::duplicate(mr.exp[0]);
if (S->md->using_syntax >= V2_SYNTAX)
Parser::wrong_version(S->md->using_syntax, L,
"section range in header line", V1_SYNTAX);
S->md->sect_range = Str::duplicate(mr.exp[0]);
S->md->sect_title = Str::duplicate(mr.exp[1]);
L->text_operand = Str::duplicate(mr.exp[1]);
L->category = SECTION_HEADING_LCAT;
} else if (Regexp::match(&mr, L->text, L"%[(%C+::)%] (%c+).")) {
S->sect_namespace = Str::duplicate(mr.exp[0]);
S->md->sect_title = Str::duplicate(mr.exp[1]);
@<Set the range to an automatic abbreviation of the relative pathname@>;
L->text_operand = Str::duplicate(mr.exp[1]);
L->category = SECTION_HEADING_LCAT;
} else if (Regexp::match(&mr, L->text, L"(%c+).")) {
S->md->sect_title = Str::duplicate(mr.exp[0]);
@<Set the range to an automatic abbreviation of the relative pathname@>;
L->text_operand = Str::duplicate(mr.exp[0]);
L->category = SECTION_HEADING_LCAT;
}
Regexp::dispose_of(&mr);
@ If no range is supplied, we make one ourselves.
@<Set the range to an automatic abbreviation of the relative pathname@> =
if (Str::len(S->sect_range) == 0) {
if (sequential) {
WRITE_TO(S->sect_range, "%S/", C->md->ch_range);
WRITE_TO(S->sect_range, "s%d", section_counter);
} else {
text_stream *from = S->md->sect_title;
int letters_from_each_word = 5;
do {
Str::clear(S->sect_range);
WRITE_TO(S->sect_range, "%S/", C->md->ch_range);
@<Make the tail using this many consonants from each word@>;
if (--letters_from_each_word == 0) break;
} while (Str::len(S->sect_range) > 5);
@<Terminate with disambiguating numbers in case of collisions@>;
}
}
@ We collapse words to an initial letter plus consonants: thus "electricity"
would be "elctrcty", since we don't count "y" as a vowel here.
@<Make the tail using this many consonants from each word@> =
int sn = 0, sw = Str::len(S->sect_range);
if (Str::get_at(from, sn) == FOLDER_SEPARATOR) sn++;
int letters_from_current_word = 0;
while ((Str::get_at(from, sn)) && (Str::get_at(from, sn) != '.')) {
if (Str::get_at(from, sn) == ' ') letters_from_current_word = 0;
else {
if (letters_from_current_word < letters_from_each_word) {
if (Str::get_at(from, sn) != '-') {
int l = tolower(Str::get_at(from, sn));
if ((letters_from_current_word == 0) ||
((l != 'a') && (l != 'e') && (l != 'i') && (l != 'o') && (l != 'u'))) {
Str::put_at(S->sect_range, sw++, l); Str::put_at(S->sect_range, sw, 0);
letters_from_current_word++;
}
}
}
}
sn++;
}
@ We never want two sections to have the same range.
@<Terminate with disambiguating numbers in case of collisions@> =
TEMPORARY_TEXT(original_range);
Str::copy(original_range, S->sect_range);
int disnum = 0, collision = FALSE;
do {
if (disnum++ > 0) {
int ldn = 4;
if (disnum >= 1000) ldn = 3;
else if (disnum >= 100) ldn = 2;
else if (disnum >= 10) ldn = 1;
else ldn = 0;
Str::clear(S->sect_range);
WRITE_TO(S->sect_range, "%S", original_range);
Str::truncate(S->sect_range, Str::len(S->sect_range) - ldn);
WRITE_TO(S->sect_range, "%d", disnum);
}
collision = FALSE;
chapter *C;
section *S2;
LOOP_OVER_LINKED_LIST(C, chapter, W->chapters)
LOOP_OVER_LINKED_LIST(S2, section, C->sections)
if ((S2 != S) && (Str::eq(S2->sect_range, S->sect_range))) {
collision = TRUE; break;
}
} while (collision);
DISCARD_TEXT(original_range);
@ Version 1 syntax was cluttered up with a number of hardly-used markup
syntaxes called "commands", written in double squared brackets |[[Thus]]|.
In version 2, this notation is never used.
@ -471,13 +397,13 @@ division in the current section.
text_stream *T;
source_line *latest = L;
LOOP_OVER_LINKED_LIST(T, text_stream, lines) {
source_line *TL = Lines::new_source_line(T, &(L->source));
source_line *TL = Lines::new_source_line_in(T, &(L->source), S);
TL->next_line = latest->next_line;
TL->plainer = L->plainer;
latest->next_line = TL;
latest = TL;
}
source_line *EEL = Lines::new_source_line(I"=", &(L->source));
source_line *EEL = Lines::new_source_line_in(I"=", &(L->source), S);
EEL->next_line = latest->next_line;
latest->next_line = EEL;
code_lcat_for_body = TEXT_EXTRACT_LCAT;

View file

@ -29,7 +29,7 @@ typedef struct web {
struct web_md *md;
struct linked_list *chapters; /* of |chapter| (including Sections, Preliminaries, etc.) */
int no_lines; /* total lines in literate source, excluding contents */
int web_extent; /* total lines in literate source, excluding contents */
int no_paragraphs; /* this will be at least 1 */
struct programming_language *main_language; /* in which most of the sections are written */
@ -69,7 +69,6 @@ typedef struct section {
struct text_stream *sect_namespace; /* e.g., "Text::Languages::" */
struct text_stream *sect_purpose; /* e.g., "To manage the zoo, and feed all penguins" */
struct text_stream *sect_range; /* e.g., "9/tfto" */
int barred; /* if version 1 syntax, contains a dividing bar? */
struct programming_language *sect_language; /* in which this section is written */
struct tangle_target *sect_target; /* |NULL| unless this section produces a tangle of its own */
@ -147,7 +146,7 @@ web *Reader::load_web(pathname *P, filename *alt_F, module_search *I, int verbos
W->as_ebook = NULL;
W->redirect_weaves_to = NULL;
W->main_language = Languages::default(W);
W->no_lines = 0; W->no_paragraphs = 0;
W->web_extent = 0; W->no_paragraphs = 0;
text_stream *language_name = Bibliographic::get_datum(W->md, I"Language");
if (Str::len(language_name) > 0)
W->main_language = Languages::find_by_name(language_name, W);
@ -188,7 +187,6 @@ web *Reader::load_web(pathname *P, filename *alt_F, module_search *I, int verbos
S->tag_with = NULL;
if (Str::len(Sm->tag_name) > 0)
S->tag_with = Tags::add_by_name(NULL, Sm->tag_name);
S->sect_range = Str::new();
@<Add the imported headers@> =
filename *HF;
@ -274,10 +272,9 @@ void Reader::scan_source_line(text_stream *line, text_file_position *tfp, void *
}
@<Accept this as a line belonging to this section and chapter@> =
source_line *sl = Lines::new_source_line(line, tfp);
source_line *sl = Lines::new_source_line_in(line, tfp, S);
/* enter this in its section's linked list of lines: */
sl->owning_section = S;
if (S->first_line == NULL) S->first_line = sl;
else S->last_line->next_line = sl;
S->last_line = sl;
@ -285,10 +282,6 @@ void Reader::scan_source_line(text_stream *line, text_file_position *tfp, void *
/* we haven't detected paragraph boundaries yet, so: */
sl->owning_paragraph = NULL;
/* and keep count: */
sl->owning_section->sect_extent++;
sl->owning_section->owning_chapter->owning_web->no_lines++;
@h Woven and Tangled folders.
We abstract these in order to be able to respond well to their not existing:
@ -329,7 +322,7 @@ section *Reader::get_section_for_range(web *W, text_stream *range) {
if (W)
LOOP_OVER_LINKED_LIST(C, chapter, W->chapters)
LOOP_OVER_LINKED_LIST(S, section, C->sections)
if (Str::eq(S->sect_range, range))
if (Str::eq(S->md->sect_range, range))
return S;
return NULL;
}
@ -436,7 +429,7 @@ void Reader::print_web_statistics(web *W) {
PRINT("%d section%s : %d paragraph%s : %d line%s\n",
s, (s == 1)?"":"s",
W->no_paragraphs, (W->no_paragraphs == 1)?"":"s",
W->no_lines, (W->no_lines == 1)?"":"s");
W->web_extent, (W->web_extent == 1)?"":"s");
}

View file

@ -55,7 +55,7 @@ void Analyser::catalogue_the_sections(web *W, text_stream *range, int form) {
section *S;
LOOP_OVER_LINKED_LIST(C, chapter, W->chapters)
LOOP_OVER_LINKED_LIST(S, section, C->sections) {
if (max_range_width < Str::len(S->sect_range)) max_range_width = Str::len(S->sect_range);
if (max_range_width < Str::len(S->md->sect_range)) max_range_width = Str::len(S->md->sect_range);
TEMPORARY_TEXT(main_title);
WRITE_TO(main_title, "%S/%S", C->md->ch_basic_title, S->md->sect_title);
if (max_width < Str::len(main_title)) max_width = Str::len(main_title);
@ -67,8 +67,8 @@ void Analyser::catalogue_the_sections(web *W, text_stream *range, int form) {
LOOP_OVER_LINKED_LIST(S, section, C->sections) {
TEMPORARY_TEXT(main_title);
WRITE_TO(main_title, "%S/%S", C->md->ch_basic_title, S->md->sect_title);
PRINT("%4d %S", S->sect_extent, S->sect_range);
for (int i = Str::len(S->sect_range); i<max_range_width+2; i++) PRINT(" ");
PRINT("%4d %S", S->sect_extent, S->md->sect_range);
for (int i = Str::len(S->md->sect_range); i<max_range_width+2; i++) PRINT(" ");
PRINT("%S", main_title);
for (int i = Str::len(main_title); i<max_width+2; i++) PRINT(" ");
if (form != BASIC_SECTIONCAT)

View file

@ -303,8 +303,8 @@ void Indexer::save_template_line(text_stream *line, text_file_position *tfp, voi
((chapter *) CONTENT_IN_ITEM(cp->repeat_stack_threshold[j], chapter))->md->ch_range);
else if (cp->repeat_stack_level[j] == SECTION_LEVEL)
PRINT(" %d: %S/%S",
j, ((section *) CONTENT_IN_ITEM(cp->repeat_stack_variable[j], section))->sect_range,
((section *) CONTENT_IN_ITEM(cp->repeat_stack_threshold[j], section))->sect_range);
j, ((section *) CONTENT_IN_ITEM(cp->repeat_stack_variable[j], section))->md->sect_range,
((section *) CONTENT_IN_ITEM(cp->repeat_stack_threshold[j], section))->md->sect_range);
}
PRINT("\n");
@ -319,7 +319,7 @@ chapter as its value during the sole iteration.
section *S;
LOOP_OVER_LINKED_LIST(C, chapter, W->chapters)
LOOP_OVER_LINKED_LIST(S, section, C->sections)
if (Str::eq(S->sect_range, mr.exp[0])) {
if (Str::eq(S->md->sect_range, mr.exp[0])) {
Indexer::start_CI_loop(cp, SECTION_LEVEL, S_item, S_item, lpos);
Regexp::dispose_of(&mr);
goto CYCLE;
@ -475,6 +475,10 @@ its square-bracketed parts.
cp->restrict_to_range, cp->nav_pattern, cp->nav_file, cp->leafname);
} else if (Regexp::match(&mr, varname, L"Breadcrumbs")) {
HTMLFormat::drop_initial_breadcrumbs(substituted, cp->crumbs, cp->docs_mode);
} else if (Str::eq_wide_string(varname, L"Plugins")) {
weave_plugin *wp;
LOOP_OVER_LINKED_LIST(wp, weave_plugin, cp->nav_pattern->plugins)
WeavePlugins::include(OUT, cp->nav_web, wp, cp->nav_pattern);
} else if (Regexp::match(&mr, varname, L"Modules")) {
@<Substitute the list of imported modules@>;
} else if (Regexp::match(&mr, varname, L"Chapter (%c+)")) {
@ -543,14 +547,14 @@ its square-bracketed parts.
} else if (Str::eq_wide_string(detail, L"Purpose")) {
Str::copy(substituted, S->sect_purpose);
} else if (Str::eq_wide_string(detail, L"Code")) {
Str::copy(substituted, S->sect_range);
Str::copy(substituted, S->md->sect_range);
} else if (Str::eq_wide_string(detail, L"Lines")) {
WRITE_TO(substituted, "%d", S->sect_extent);
} else if (Str::eq_wide_string(detail, L"Source")) {
WRITE_TO(substituted, "%f", S->md->source_file_for_section);
} else if (Str::eq_wide_string(detail, L"Page")) {
TEMPORARY_TEXT(linkto);
Str::copy(linkto, S->sect_range);
Str::copy(linkto, S->md->sect_range);
LOOP_THROUGH_TEXT(P, linkto)
if ((Str::get(P) == '/') || (Str::get(P) == ' '))
Str::put(P, '-');

View file

@ -34,9 +34,9 @@ void Swarm::weave(web *W, text_stream *range, int swarm_mode, theme_tag *tag,
}
if (swarm_mode == SWARM_SECTIONS_SWM)
LOOP_OVER_LINKED_LIST(S, section, C->sections)
if (Reader::range_within(S->sect_range, range))
if (Reader::range_within(S->md->sect_range, range))
S->sect_weave = Swarm::weave_subset(W,
S->sect_range, FALSE, tag, pattern, to, into, docs_mode,
S->md->sect_range, FALSE, tag, pattern, to, into, docs_mode,
breadcrumbs, navigation);
}
@ -119,7 +119,7 @@ typedef struct weave_target {
section *S;
LOOP_OVER_LINKED_LIST(C, chapter, W->chapters)
LOOP_OVER_LINKED_LIST(S, section, C->sections)
if (Reader::range_within(S->sect_range, wt->weave_range))
if (Reader::range_within(S->md->sect_range, wt->weave_range))
has_content = TRUE;
if (has_content == FALSE)
Errors::fatal("no sections match that range");

View file

@ -53,7 +53,7 @@ int Weaver::weave_source(web *W, weave_target *wv) {
if (C->md->imported == FALSE) {
Str::clear(state->chaptermark);
LOOP_OVER_LINKED_LIST(S, section, C->sections)
if (Reader::range_within(S->sect_range, wv->weave_range)) {
if (Reader::range_within(S->md->sect_range, wv->weave_range)) {
latest_section = S;
@<Wipe the slate clean of footnotes@>;
LanguageMethods::begin_weave(S, wv);
@ -423,8 +423,7 @@ and macro usage is rendered differently.
W, C, S, L, matter, concluding_comment)) continue;
TEMPORARY_TEXT(colouring);
LanguageMethods::syntax_colour(OUT, S->sect_language, wv, W, C, S, L,
matter, colouring);
LanguageMethods::syntax_colour(OUT, S->sect_language, wv, L, matter, colouring);
int found = 0;
@<Find macro usages and adjust syntax colouring accordingly@>;
@ -623,7 +622,7 @@ in TeX's deeply peculiar font encoding system.
if (weight == 2) {
Str::copy(state->sectionmark, L->text_operand);
if (wv->pattern->show_abbrevs == FALSE) Str::clear(state->chaptermark);
else if (Str::len(S->sect_range) > 0) Str::copy(state->chaptermark, S->sect_range);
else if (Str::len(S->md->sect_range) > 0) Str::copy(state->chaptermark, S->md->sect_range);
if (Str::len(state->chaptermark) > 0) {
Str::clear(state->sectionmark);
WRITE_TO(state->sectionmark, " - %S", L->text_operand);
@ -829,7 +828,7 @@ void Weaver::show_endnotes_on_previous_paragraph(OUTPUT_STREAM,
LOOP_OVER(S, section)
if ((S->scratch_flag) && (S != P->under_section)) {
if (c++ > 0) Formats::text(OUT, wv, I", ");
Formats::text(OUT, wv, S->sect_range);
Formats::text(OUT, wv, S->md->sect_range);
}
if (P->under_section->scratch_flag) Formats::text(OUT, wv, I" and here");
}
@ -910,7 +909,7 @@ int Weaver::weave_table_of_contents(OUTPUT_STREAM, weave_target *wv, section *S)
noteworthy++;
if (noteworthy == 0) return FALSE;
Formats::toc(OUT, wv, 1, S->sect_range, I"", NULL);
Formats::toc(OUT, wv, 1, S->md->sect_range, I"", NULL);
noteworthy = 0;
LOOP_OVER_LINKED_LIST(P, paragraph, S->paragraphs)
if ((P->weight > 0) && ((S->barred == FALSE) || (P->above_bar == FALSE))) {

View file

@ -276,9 +276,9 @@ void ACMESupport::reset_syntax_colouring(programming_language *pl) {
Painter::reset_syntax_colouring(pl);
}
int ACMESupport::syntax_colour(programming_language *pl, text_stream *OUT, weave_target *wv,
web *W, chapter *C, section *S, source_line *L, text_stream *matter,
text_stream *colouring) {
int ACMESupport::syntax_colour(programming_language *pl, text_stream *OUT,
weave_target *wv, source_line *L, text_stream *matter, text_stream *colouring) {
section *S = L->owning_section;
hash_table *ht = &(S->sect_target->symbols);
if ((L->category == TEXT_EXTRACT_LCAT) && (pl != S->sect_language))
ht = &(pl->built_in_keywords);

View file

@ -853,7 +853,7 @@ void InCSupport::weave_grammar_index(OUTPUT_STREAM) {
"\\leaders\\hbox to 1em{\\hss.\\hss}\\hfill {\\xreffont %S}}\n",
pnt->unangled_name,
(pnt->as_function)?" (internal)":"",
pnt->where_defined->owning_section->sect_range);
pnt->where_defined->owning_section->md->sect_range);
int said_something = FALSE;
@<List where the nonterminal appears in other Preform declarations@>;
@<List where the nonterminal is called from Inform code@>;
@ -885,7 +885,7 @@ void InCSupport::weave_grammar_index(OUTPUT_STREAM) {
LOOP_OVER(S, section)
if (S->scratch_flag) {
if (c++ > 0) WRITE(", ");
WRITE("{\\xreffont %S}", S->sect_range);
WRITE("{\\xreffont %S}", S->md->sect_range);
}
WRITE("\n\n");
}
@ -910,7 +910,7 @@ void InCSupport::weave_grammar_index(OUTPUT_STREAM) {
LOOP_OVER(S, section)
if (S->scratch_flag) {
if (c++ > 0) WRITE(", ");
WRITE("{\\xreffont %S}", S->sect_range);
WRITE("{\\xreffont %S}", S->md->sect_range);
}
WRITE("\n\n");
}

View file

@ -366,17 +366,17 @@ void LanguageMethods::reset_syntax_colouring(programming_language *pl) {
=
int colouring_state = PLAIN_COLOUR;
IMETHOD_TYPE(SYNTAX_COLOUR_WEA_MTID, programming_language *pl, text_stream *OUT, weave_target *wv, web *W,
chapter *C, section *S, source_line *L, text_stream *matter, text_stream *colouring)
int LanguageMethods::syntax_colour(OUTPUT_STREAM, programming_language *pl, weave_target *wv,
web *W, chapter *C, section *S, source_line *L, text_stream *matter, text_stream *colouring) {
Str::copy(colouring, matter);
IMETHOD_TYPE(SYNTAX_COLOUR_WEA_MTID, programming_language *pl, text_stream *OUT,
weave_target *wv, source_line *L, text_stream *matter, text_stream *colouring)
int LanguageMethods::syntax_colour(OUTPUT_STREAM, programming_language *pl,
weave_target *wv, source_line *L, text_stream *matter, text_stream *colouring) {
for (int i=0; i < Str::len(matter); i++) Str::put_at(colouring, i, PLAIN_COLOUR);
int rv = FALSE;
programming_language *colour_as = pl;
if (L->category == TEXT_EXTRACT_LCAT) colour_as = L->colour_as;
if (colour_as)
IMETHOD_CALL(rv, colour_as, SYNTAX_COLOUR_WEA_MTID, OUT, wv, W, C, S, L, matter, colouring);
IMETHOD_CALL(rv, colour_as, SYNTAX_COLOUR_WEA_MTID, OUT, wv, L,
matter, colouring);
return rv;
}

View file

@ -148,6 +148,9 @@ part of the function structure. We'll need it when predeclaring the function.
fn->call_freely = FALSE;
fn->function_header_at = L;
fn->usage_described = FALSE;
if ((Str::eq_wide_string(fname, L"main")) &&
(L->owning_section->sect_language->C_like))
fn->usage_described = TRUE;
fn->no_conditionals = 0;
@<Add the function to its paragraph and line@> =

View file

@ -563,8 +563,8 @@ void Formats::text_r(OUTPUT_STREAM, weave_target *wv, text_stream *id,
@<Attempt to resolve the cross-reference@> =
TEMPORARY_TEXT(url);
TEMPORARY_TEXT(title);
if (Formats::resolve_reference_in_weave(url, title, wv, reference,
wv->current_weave_line)) {
if (Colonies::resolve_reference_in_weave(url, title, wv, reference,
wv->weave_web->md, wv->current_weave_line)) {
Formats::text_r(OUT, wv, before, within, comments);
Formats::url(OUT, wv, url, title, FALSE);
Formats::text_r(OUT, wv, after, within, comments);
@ -573,67 +573,6 @@ void Formats::text_r(OUTPUT_STREAM, weave_target *wv, text_stream *id,
DISCARD_TEXT(url);
DISCARD_TEXT(title);
@ The following must decide what a reference like "Chapter 3" should refer
to: that is, whether it makes unamgiguous sense, and if so, what URL we should
link to, and what the full text of the link might be.
=
int Formats::resolve_reference_in_weave(text_stream *url, text_stream *title,
weave_target *wv, text_stream *text, source_line *L) {
module *found_M = NULL;
section_md *found_Sm = NULL;
int named_as_module = FALSE;
int N = WebModules::named_reference(&found_M, &found_Sm, &named_as_module,
title, wv->weave_web->md->as_module, text, FALSE);
if (N == 0) {
if (L) @<Try references to non-sections@>;
Main::error_in_web(I"No section has this name", L);
return FALSE;
} else if (N > 1) {
Main::error_in_web(I"Multiple sections might be meant here", L);
WebModules::named_reference(&found_M, &found_Sm, &named_as_module,
title, wv->weave_web->md->as_module, text, TRUE);
return FALSE;
} else {
chapter *C;
section *S, *found_S = NULL;
LOOP_OVER_LINKED_LIST(C, chapter, wv->weave_web->chapters)
LOOP_OVER_LINKED_LIST(S, section, C->sections)
if (S->md == found_Sm) found_S = S;
if (found_S == NULL) internal_error("could not locate S");
if (found_M == NULL) internal_error("could not locate M");
if (found_M != wv->weave_web->md->as_module) {
WRITE_TO(url, "../%S-module/", found_M->module_name);
}
HTMLFormat::section_URL(url, wv, found_S);
if ((named_as_module == FALSE) && (found_M != wv->weave_web->md->as_module)) {
WRITE_TO(title, " (in %S)", found_M->module_name);
}
return TRUE;
}
}
@<Try references to non-sections@> =
language_function *fn;
LOOP_OVER(fn, language_function) {
if (Str::eq_insensitive(fn->function_name, text)) {
HTMLFormat::xref(url, wv, fn->function_header_at->owning_paragraph,
L->owning_section, TRUE);
WRITE_TO(title, "%S", fn->function_name);
return TRUE;
}
}
language_type *str;
LOOP_OVER(str, language_type) {
if (Str::eq_insensitive(str->structure_name, text)) {
HTMLFormat::xref(url, wv, str->structure_header_at->owning_paragraph,
L->owning_section, TRUE);
WRITE_TO(title, "%S", str->structure_name);
return TRUE;
}
}
@ |COMMENTARY_TEXT_FOR_MTID| straightforwardly weaves out a run of contiguous
text. Ordinarily, any formulae written in TeX notation (i.e., in dollar signs
used as brackets) will be transmogrified into a plain text paraphrase, but

View file

@ -404,8 +404,8 @@ void HTMLFormat::source_code(weave_format *self, text_stream *OUT, weave_target
@<Attempt to resolve the cross-reference@> =
TEMPORARY_TEXT(url);
TEMPORARY_TEXT(title);
if (Formats::resolve_reference_in_weave(url, title, wv, reference,
wv->current_weave_line)) {
if (Colonies::resolve_reference_in_weave(url, title, wv, reference,
wv->weave_web->md, wv->current_weave_line)) {
Formats::url(OUT, wv, url, title, FALSE);
i = j + N;
}
@ -430,7 +430,7 @@ void HTMLFormat::source_code(weave_format *self, text_stream *OUT, weave_target
if (wv->current_weave_line == defn_line) {
language_function *fn = Analyser::get_function(
wv->current_weave_line->owning_section, fname, FUNCTION_COLOUR);
if ((defn_line) && (fn)) {
if ((defn_line) && (fn) && (fn->usage_described == FALSE)) {
Swarm::ensure_plugin(wv, I"Popups");
WRITE("%S", fname);
WRITE("<button class=\"popup\" onclick=\"togglePopup('usagePopup%d')\">", popup_counter);
@ -762,7 +762,7 @@ void HTMLFormat::locale(weave_format *self, text_stream *OUT, weave_target *wv,
}
@ =
void HTMLFormat::section_URL(OUTPUT_STREAM, weave_target *wv, section *from) {
void HTMLFormat::section_URL(OUTPUT_STREAM, weave_target *wv, section_md *from) {
TEMPORARY_TEXT(linkto);
Str::copy(linkto, from->sect_range);
LOOP_THROUGH_TEXT(pos, linkto)
@ -771,11 +771,12 @@ void HTMLFormat::section_URL(OUTPUT_STREAM, weave_target *wv, section *from) {
WRITE_TO(linkto, ".html");
WRITE("%S", linkto);
}
void HTMLFormat::xref(OUTPUT_STREAM, weave_target *wv, paragraph *P, section *from,
int a_link) {
TEMPORARY_TEXT(linkto);
if ((from) && (P->under_section != from)) {
Str::copy(linkto, P->under_section->sect_range);
Str::copy(linkto, P->under_section->md->sect_range);
LOOP_THROUGH_TEXT(pos, linkto)
if ((Str::get(pos) == '/') || (Str::get(pos) == ' '))
Str::put(pos, '-');
@ -844,7 +845,7 @@ void HTMLFormat::tail(weave_format *self, text_stream *OUT, weave_target *wv,
@ =
void HTMLFormat::sref(OUTPUT_STREAM, weave_target *wv, section *S) {
if (S == NULL) internal_error("unwoven section");
LOOP_THROUGH_TEXT(pos, S->sect_range)
LOOP_THROUGH_TEXT(pos, S->md->sect_range)
if (Str::get(pos) == '/')
PUT('-');
else

View file

@ -59,7 +59,7 @@ void PlainText::chapter_title_page(weave_format *self, text_stream *OUT,
section *S;
LOOP_OVER_LINKED_LIST(S, section, C->sections)
WRITE(" %S: %S\n %S\n",
S->sect_range, S->md->sect_title, S->sect_purpose);
S->md->sect_range, S->md->sect_title, S->sect_purpose);
}
@ =

View file

@ -143,7 +143,7 @@ void TeX::chapter_title_page(weave_format *self, text_stream *OUT, weave_target
LOOP_OVER_LINKED_LIST(S, section, C->sections) {
WRITE("\\smallskip\\noindent ");
if (wv->pattern->number_sections) WRITE("%d. ", S->printed_number);
if (wv->pattern->show_abbrevs) WRITE("|%S|: ", S->sect_range);
if (wv->pattern->show_abbrevs) WRITE("|%S|: ", S->md->sect_range);
WRITE("{\\it %S}\\qquad\n%S", S->md->sect_title, S->sect_purpose);
}
}
@ -170,7 +170,7 @@ void TeX::paragraph_heading(weave_format *self, text_stream *OUT, weave_target *
TeX_macro, N, modified, mark, orn, NULL);
else
WRITE("\\%S{%S}{%S}{%S}{\\%S}{%S}%%\n",
TeX_macro, N, modified, mark, orn, S->sect_range);
TeX_macro, N, modified, mark, orn, S->md->sect_range);
DISCARD_TEXT(mark);
DISCARD_TEXT(modified);
Regexp::dispose_of(&mr);

228
Chapter 6/Colonies.w Normal file
View file

@ -0,0 +1,228 @@
[Colonies::] Colonies.
Cross-referencing multiple webs gathered together.
@
=
typedef struct colony {
struct linked_list *members; /* of |colony_member| */
MEMORY_MANAGEMENT
} colony;
typedef struct colony_member {
int web_rather_than_module;
struct text_stream *name;
struct text_stream *path;
struct pathname *weave_path;
struct web_md *loaded;
MEMORY_MANAGEMENT
} colony_member;
@ =
void Colonies::load(filename *F) {
colony *C = CREATE(colony);
C->members = NEW_LINKED_LIST(colony_member);
TextFiles::read(F, FALSE, "can't open colony file",
TRUE, Colonies::read_line, NULL, (void *) C);
}
void Colonies::read_line(text_stream *line, text_file_position *tfp, void *v_C) {
colony *C = (colony *) v_C;
Str::trim_white_space(line); /* ignore trailing space */
if (Str::len(line) == 0) return; /* ignore blank lines */
if (Str::get_first_char(line) == '#') return; /* lines opening with |#| are comments */
match_results mr = Regexp::create_mr();
if (Regexp::match(&mr, line, L"(%c*?): \"*(%C+)\" at \"(%c*)\" in \"(%c*)\"")) {
colony_member *CM = CREATE(colony_member);
if (Str::eq(mr.exp[0], I"web")) CM->web_rather_than_module = TRUE;
else if (Str::eq(mr.exp[0], I"module")) CM->web_rather_than_module = FALSE;
else {
CM->web_rather_than_module = FALSE;
Errors::in_text_file("text before ':' must be 'web' or 'module'", tfp);
}
CM->name = Str::duplicate(mr.exp[1]);
CM->path = Str::duplicate(mr.exp[2]);
CM->weave_path = Pathnames::from_text(mr.exp[3]);
CM->loaded = NULL;
ADD_TO_LINKED_LIST(CM, colony_member, C->members);
} else {
Errors::in_text_file("unable to read colony member", tfp);
}
Regexp::dispose_of(&mr);
}
@ =
colony_member *Colonies::member(text_stream *T) {
colony *C;
LOOP_OVER(C, colony) {
colony_member *CM;
LOOP_OVER_LINKED_LIST(CM, colony_member, C->members)
if (Str::eq_insensitive(T, CM->name))
return CM;
}
return NULL;
}
@ =
module *Colonies::as_module(colony_member *CM, source_line *L, web_md *Wm) {
if (CM->loaded == NULL) {
if ((Wm) && (Str::eq_insensitive(Wm->as_module->module_name, CM->name)))
CM->loaded = Wm;
}
if (CM->loaded == NULL) {
if (Wm) {
module *M;
LOOP_OVER_LINKED_LIST(M, module, Wm->as_module->dependencies)
if (Str::eq_insensitive(M->module_name, CM->name))
CM->loaded = Wm;
}
}
if (CM->loaded == NULL) {
filename *F = NULL;
pathname *P = NULL;
if (Str::suffix_eq(CM->path, I".inweb", 6))
F = Filenames::from_text(CM->path);
else
P = Pathnames::from_text(CM->path);
PRINT("So %f and %p\n", F, P);
CM->loaded = WebMetadata::get_without_modules(P, F);
}
if (CM->loaded == NULL) {
TEMPORARY_TEXT(err);
WRITE_TO(err, "unable to load '%S'", CM->name);
Main::error_in_web(err, L);
return NULL;
}
return CM->loaded->as_module;
}
@ The following must decide what a reference like "Chapter 3" should refer
to: that is, whether it makes unamgiguous sense, and if so, what URL we should
link to, and what the full text of the link might be.
=
int Colonies::resolve_reference_in_weave(text_stream *url, text_stream *title,
weave_target *wv, text_stream *text, web_md *Wm, source_line *L) {
module *from_M = (Wm)?(Wm->as_module):NULL;
module *search_M = from_M;
colony_member *search_CM = NULL;
match_results mr = Regexp::create_mr();
int external = FALSE;
search_CM = Colonies::member(text);
if (search_CM) {
module *found_M = Colonies::as_module(search_CM, L, Wm);
section_md *found_Sm = FIRST_IN_LINKED_LIST(section_md, found_M->sections_md);
int bare_module_name = TRUE;
@<Resolved@>;
return TRUE;
}
if (Regexp::match(&mr, text, L"(%c*?): (%c*)")) {
search_M = NULL;
external = TRUE;
if (search_M == NULL) {
search_CM = Colonies::member(mr.exp[0]);
if (search_CM) search_M = Colonies::as_module(search_CM, L, Wm);
}
if (search_M == NULL) {
TEMPORARY_TEXT(err);
WRITE_TO(err, "unrecognised web/module '%S' - use -colony?", mr.exp[0]);
Main::error_in_web(err, L);
Regexp::dispose_of(&mr);
return FALSE;
}
text = Str::duplicate(mr.exp[1]);
}
Regexp::dispose_of(&mr);
if (search_M == NULL) internal_error("no search module");
module *found_M = NULL;
section_md *found_Sm = NULL;
int bare_module_name = FALSE;
int N = WebModules::named_reference(&found_M, &found_Sm, &bare_module_name,
title, search_M, text, FALSE);
if (N == 0) {
if ((L) && (external == FALSE)) @<Try references to non-sections@>;
Main::error_in_web(I"Can't find this cross-reference", L);
return FALSE;
} else if (N > 1) {
Main::error_in_web(I"Multiple cross-references might be meant here", L);
WebModules::named_reference(&found_M, &found_Sm, &bare_module_name,
title, search_M, text, TRUE);
return FALSE;
} else {
@<Resolved@>;
return TRUE;
}
}
@<Try references to non-sections@> =
language_function *fn;
LOOP_OVER(fn, language_function) {
if (Str::eq_insensitive(fn->function_name, text)) {
HTMLFormat::xref(url, wv, fn->function_header_at->owning_paragraph,
L->owning_section, TRUE);
WRITE_TO(title, "%S", fn->function_name);
return TRUE;
}
}
language_type *str;
LOOP_OVER(str, language_type) {
if (Str::eq_insensitive(str->structure_name, text)) {
HTMLFormat::xref(url, wv, str->structure_header_at->owning_paragraph,
L->owning_section, TRUE);
WRITE_TO(title, "%S", str->structure_name);
return TRUE;
}
}
@<Resolved@> =
if (found_M == NULL) internal_error("could not locate M");
if (search_CM) {
pathname *from = Filenames::get_path_to(wv->weave_to);
pathname *to = search_CM->weave_path;
int found = FALSE;
for (pathname *P = to; P && (found == FALSE); P = Pathnames::up(P)) {
TEMPORARY_TEXT(PT);
WRITE_TO(PT, "%p", P);
int q_up_count = 0;
for (pathname *Q = from; Q && (found == FALSE); Q = Pathnames::up(Q)) {
TEMPORARY_TEXT(QT);
WRITE_TO(QT, "%p", Q);
if (Str::eq(PT, QT)) {
for (int i=0; i<q_up_count; i++)
WRITE_TO(url, "../");
TEMPORARY_TEXT(FPT);
WRITE_TO(FPT, "%p", to);
Str::substr(url, Str::at(FPT, Str::len(PT) + 1), Str::end(FPT));
found = TRUE;
}
DISCARD_TEXT(QT);
q_up_count++;
}
DISCARD_TEXT(PT);
}
if (found == FALSE) internal_error("no relation made");
if (Str::len(url) > 0) WRITE_TO(url, "/");
if (bare_module_name)
WRITE_TO(url, "index.html");
else if (found_Sm)
HTMLFormat::section_URL(url, wv, found_Sm);
WRITE_TO(title, "%S", search_CM->name);
if (bare_module_name == FALSE)
WRITE_TO(title, " (in %S)", search_CM->name);
} else {
if (found_M != from_M) {
WRITE_TO(url, "../%S-module/", found_M->module_name);
}
HTMLFormat::section_URL(url, wv, found_Sm);
if ((bare_module_name == FALSE) && (found_M != from_M)) {
WRITE_TO(title, " (in %S)", found_M->module_name);
}
}
return TRUE;

View file

@ -18,6 +18,9 @@ Manual
Supporting Programming Languages
Reference Card
Preliminaries
How This Program Works
Chapter 1: Top Level
"Dealing with the user, and deciding what is to be done."
Basics
@ -71,3 +74,5 @@ Chapter 6: Extras
Makefiles
Git Support
Readme Writeme
Colonies

View file

@ -8,10 +8,18 @@ It is widely believed that there are an infinite number of twin primes, that
is, prime numbers occurring in pairs different by 2. Twins are known to exist
at least as far out as $10^{388,342}$ (as of 2016), and there are infinitely
many pairs of primes closer together than about 250 (Zhang, 2013; Tao, Maynard,
and many others, 2014). This program finds a few small pairs of twins, by the
simplest method possible.
and many others, 2014).
@d RANGE 100
This program finds a few small pairs of twins, by the simplest method possible,
and should print output like so:
= (text)
3 and 5
5 and 7
11 and 13
...
=
@d RANGE 100 /* the upper limit to the numbers we will consider */
=
#include <stdio.h>
@ -25,16 +33,13 @@ int main(int argc, char *argv[]) {
if ((isprime(i)) && (isprime(i+2)))
printf("%d and %d\n", i, i+2);
@ This ought to print:
= (text)
3 and 5
5 and 7
11 and 13
...
@h Primality.
This simple and slow test tries to divide by every whole number at least
2 and up to the square root: if none divide exactly, the number is prime.
A common error with this algorithm is to check where $m^2 < n$, rather
than $m^2 \leq n$, thus wrongly considering 4, 9, 25, 49, ... as prime:
Cambridge folklore has it that this bug occurred on the first computation
of the EDSAC computer on 6 May 1949.
@d TRUE 1
@d FALSE 0

View file

@ -40,6 +40,7 @@ for analysing a web:
for weaving a web:
-breadcrumb X use the text X as a breadcrumb in overhead navigation
-colony X use the file X as a list of webs in this colony
-navigation X use the file X as a column of navigation links
-open weave then open woven file
-sequential name woven leaves with sequential numbering (default is -no-sequential)

View file

@ -6,8 +6,6 @@ What Inweb is, and why it is not CWEB.
Inweb is a modern system for literate programming written for the Inform
programming language project.
//Patterns//
This means that it is a preprocessor and organiser of source code. It reads in
a "web", an expression of a program which mixes code with heavy quantities of
commentary. Inweb can do two basic things: "weave" the web into a booklet or

View file

@ -0,0 +1,56 @@
How This Program Works.
An overview of how Inweb works, with links to all of its important functions.
@h How to read this web.
Inweb is a program for weaving and tangling literate programs, or "webs",
and it is a web itself. Webs are easy to read, which is really the point
of them, but they take getting used to, and it may be easiest to begin by
skimming the two (deliberately minimal) examples here, //goldbach// and
//twinprimes//.
Inweb is a command-line program written in a modest extension of C. See
//The InC Dialect// for full details, but essentially: it's C without
function predeclarations or header files, and where functions are organised
into namespaces, having names like |Parser::begin()| rather than just |begin()|.
Programs like Inweb are divided into "modules", each of which is a web in its
own right. Inweb has two: the main part of the program, and a library of
utility functions called Foundation.
@h Basics of using Foundation.
Foundation provides Unicode text, lists, memory management, file handling,
regular expression matching, dictionaries of key-value pairs, and so on.
See //foundation// to read it as a web, but you shouldn't need to.
To a limited extent, Foundation enables C programs like Inweb to have "objects"
and "methods". For example, Inweb has a concept of "weave plugins", and these
are identified (by reference) using values of type |weave_plugin *|. The
relevant section of the Inweb source defines the type //weave_plugin// and
gives a constructor function for making new ones, //WeavePlugins::new//.
This is then returned as a |weave_plugin *| pointer which has an infinite
lifespan: though Foundation can also delete objects, Inweb never asks it to.
Foundation itself contains many useful types, and the most ubiquitous is
//text_stream//. This unifies text files and memory-managed strings of Unicode
text. A typical function writing to this might be:
= (text as InC)
void Hypothetical::writer(text_stream *OUT, text_stream *authority, int N) {
WRITE("According to %S, the square of %d is %d.\n", authority, N, N*N);
}
=
Here |WRITE| is a variadic macro rather like |printf|, and note the use of
the escape |%S| to write a text stream. It writes formatted output into the
stream |OUT|, and is actually an abbreviation for this:
= (text as InC)
void Hypothetical::writer(text_stream *OUT, text_stream *authority, int N) {
WRITE_TO(OUT, "According to %S, the square of %d is %d.\n", authority, N, N*N);
}
=
The function |Hypothetical::writer| can write equally to a text file or to a
string, whichever it's given, and doesn't need to worry about memory management
or text encodings.
The standard output and standard error "files" are written |STDOUT| and |STDERR|
as streams; |PRINT("...")| is an abbreviation for |WRITE_TO(STDOUT, "...")|.
All of these capitalised macros are defined in //Streams//.

View file

@ -1,6 +1,6 @@
# Inweb 7
v7-alpha.1+1A17 'Escape to Danger' (11 April 2020)
v7-alpha.1+1A18 'Escape to Danger' (12 April 2020)
## About Inweb

File diff suppressed because it is too large Load diff

View file

@ -1,3 +1,3 @@
Prerelease: alpha.1
Build Date: 11 April 2020
Build Number: 1A17
Build Date: 12 April 2020
Build Number: 1A18

5
docs/docs-src/colony.txt Normal file
View file

@ -0,0 +1,5 @@
web: "inweb" at "inweb" in "inweb/docs/inweb"
module: "foundation" at "inweb/foundation-module" in "inweb/docs/foundation-module"
web: "foundation-test" at "inweb/foundation-test" in "inweb/docs/foundation-test"
web: "goldbach" at "inweb/Examples/goldbach" in "inweb/docs/goldbach"
web: "twinprimes" at "inweb/Examples/twinprimes.inweb" in "inweb/docs/twinprimes"

View file

@ -1,4 +1,4 @@
<h1><a href="webs.html">Sources</a></h1>
<h1><a href="webs.html">Inweb Source</a></h1>
<ul>
<li><a href="inweb/index.html">inweb</a></li>
</ul>
@ -7,3 +7,8 @@
<li><a href="foundation-module/index.html">foundation-module</a></li>
<li><a href="foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="goldbach/index.html">goldbach</a></li>
<li><a href="twinprimes/twinprimes.html">twinprimes</a></li>
</ul>

View file

@ -1,4 +1,4 @@
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -7,3 +7,8 @@
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>

View file

@ -12,10 +12,12 @@ hood, to see how it works.
@ The Inform software uses literate programming, a doctrine invented by Donald
Knuth. Under LP, a single program is called a "web", and can either be
"woven" for humans to read or "tangled" for computers to compile. You are
reading the woven form. There are three webs accessible from this page:
reading the woven form. There are five webs accessible from this page:
(a) The |inweb| tool.
(b) The |foundation| module, which is not a stand-alone program, but is
instead a library of utility functions needed by |inweb| and also by some
of the programs tangled by it (such as the Inform compiler).
(c) A modest unit test tool, which simply exercises some of the functions
of |foundation|.
(d) Two small example webs: |twinprimes|, which is just a single section,
and |goldbach|, which has two sections.

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Foundation Module' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#1">Chapter 1: Setting Up</a></li><li><b>Foundation Module</b></li></ul><p class="purpose">Starting up and shutting down.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#1">Chapter 1: Setting Up</a></li><li><b>Foundation Module</b></li></ul><p class="purpose">Starting up and shutting down.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Introduction</a></li><li><a href="#SP2">&#167;2. Basic definitions</a></li><li><a href="#SP8">&#167;8. The beginning and the end</a></li></ul><hr class="tocbar">

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'POSIX Platforms' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#1">Chapter 1: Setting Up</a></li><li><b>POSIX Platforms</b></li></ul><p class="purpose">A version of our operating system interface suitable for POSIX-compliant operating systems.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#1">Chapter 1: Setting Up</a></li><li><b>POSIX Platforms</b></li></ul><p class="purpose">A version of our operating system interface suitable for POSIX-compliant operating systems.</p>
<ul class="toc"><li><a href="#SP3">&#167;3. Mac OS X</a></li><li><a href="#SP4">&#167;4. Generic Unix</a></li><li><a href="#SP5">&#167;5. Linux</a></li><li><a href="#SP6">&#167;6. Android</a></li><li><a href="#SP7">&#167;7. Locale</a></li><li><a href="#SP8">&#167;8. Environment variables</a></li><li><a href="#SP9">&#167;9. Executable location</a></li><li><a href="#SP10">&#167;10. Shell commands</a></li><li><a href="#SP12">&#167;12. Directory handling</a></li><li><a href="#SP13">&#167;13. Timestamp</a></li><li><a href="#SP14">&#167;14. Sync</a></li><li><a href="#SP15">&#167;15. Sleep</a></li><li><a href="#SP16">&#167;16. Notifications</a></li><li><a href="#SP18">&#167;18. Concurrency</a></li><li><a href="#SP20">&#167;20. Mutexes</a></li></ul><hr class="tocbar">

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Windows Platform' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#1">Chapter 1: Setting Up</a></li><li><b>Windows Platform</b></li></ul><p class="purpose">A version of our operating system interface suitable for Microsoft Windows.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#1">Chapter 1: Setting Up</a></li><li><b>Windows Platform</b></li></ul><p class="purpose">A version of our operating system interface suitable for Microsoft Windows.</p>
<ul class="toc"><li><a href="#SP2">&#167;2. Microsoft Windows</a></li><li><a href="#SP4">&#167;4. Environment variables</a></li><li><a href="#SP5">&#167;5. Executable location</a></li><li><a href="#SP6">&#167;6. Shell commands</a></li><li><a href="#SP7">&#167;7. Directory handling</a></li><li><a href="#SP8">&#167;8. Sleep</a></li><li><a href="#SP9">&#167;9. Notifications</a></li><li><a href="#SP10">&#167;10. Concurrency</a></li><li><a href="#SP12">&#167;12. Timestamp</a></li><li><a href="#SP13">&#167;13. Mutexes</a></li></ul><hr class="tocbar">

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Dictionaries' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#2">Chapter 2: Memory, Streams and Collections</a></li><li><b>Dictionaries</b></li></ul><p class="purpose">A simple implementation for a flexible-sized dictionary of key-value pairs.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#2">Chapter 2: Memory, Streams and Collections</a></li><li><b>Dictionaries</b></li></ul><p class="purpose">A simple implementation for a flexible-sized dictionary of key-value pairs.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Storage</a></li><li><a href="#SP2">&#167;2. Creation</a></li><li><a href="#SP3">&#167;3. Logging</a></li><li><a href="#SP4">&#167;4. Hashing</a></li><li><a href="#SP5">&#167;5. Create, find, destroy</a></li><li><a href="#SP8">&#167;8. Accessing entries</a></li><li><a href="#SP11">&#167;11. Disposal</a></li></ul><hr class="tocbar">

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Debugging Log' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#2">Chapter 2: Memory, Streams and Collections</a></li><li><b>Debugging Log</b></li></ul><p class="purpose">To write to the debugging log, a plain text file which traces what we're doing, in order to assist those lost souls debugging it.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#2">Chapter 2: Memory, Streams and Collections</a></li><li><b>Debugging Log</b></li></ul><p class="purpose">To write to the debugging log, a plain text file which traces what we're doing, in order to assist those lost souls debugging it.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. The DL stream</a></li><li><a href="#SP2">&#167;2. Macros</a></li><li><a href="#SP3">&#167;3. Debugging aspects</a></li><li><a href="#SP6">&#167;6. Subheadings</a></li><li><a href="#SP7">&#167;7. Aspects</a></li><li><a href="#SP10">&#167;10. The starred trace</a></li><li><a href="#SP11">&#167;11. Wrapping up</a></li></ul><hr class="tocbar">

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Linked Lists and Stacks' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#2">Chapter 2: Memory, Streams and Collections</a></li><li><b>Linked Lists and Stacks</b></li></ul><p class="purpose">A simple implementation for single-linked lists of objects allocated by Foundation's memory manager, and for last-in-first-out stacks of same.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#2">Chapter 2: Memory, Streams and Collections</a></li><li><b>Linked Lists and Stacks</b></li></ul><p class="purpose">A simple implementation for single-linked lists of objects allocated by Foundation's memory manager, and for last-in-first-out stacks of same.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Implementation</a></li><li><a href="#SP6">&#167;6. A function call API</a></li><li><a href="#SP7">&#167;7. A macro-ized API</a></li><li><a href="#SP9">&#167;9. LIFO stacks</a></li></ul><hr class="tocbar">

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Memory' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#2">Chapter 2: Memory, Streams and Collections</a></li><li><b>Memory</b></li></ul><p class="purpose">To allocate memory suitable for the dynamic creation of objects of different sizes, placing some larger objects automatically into doubly linked lists and assigning each a unique allocation ID number.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#2">Chapter 2: Memory, Streams and Collections</a></li><li><b>Memory</b></li></ul><p class="purpose">To allocate memory suitable for the dynamic creation of objects of different sizes, placing some larger objects automatically into doubly linked lists and assigning each a unique allocation ID number.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Memory manager</a></li><li><a href="#SP6">&#167;6. Architecture</a></li><li><a href="#SP7">&#167;7. Level 1: memory blocks</a></li><li><a href="#SP13">&#167;13. Level 2: memory frames and integrity checking</a></li><li><a href="#SP17">&#167;17. Level 3: managing linked lists of allocated objects</a></li><li><a href="#SP19">&#167;19. Allocator functions created by macros</a></li><li><a href="#SP21">&#167;21. Expanding many macros</a></li><li><a href="#SP22">&#167;22. Simple memory allocations</a></li><li><a href="#SP28">&#167;28. Text storage</a></li><li><a href="#SP32">&#167;32. Memory usage report</a></li><li><a href="#SP36">&#167;36. Run-time pointer type checking</a></li></ul><hr class="tocbar">

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Methods' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#2">Chapter 2: Memory, Streams and Collections</a></li><li><b>Methods</b></li></ul><p class="purpose">General support for something approximating method calls.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#2">Chapter 2: Memory, Streams and Collections</a></li><li><b>Methods</b></li></ul><p class="purpose">General support for something approximating method calls.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Method sets</a></li><li><a href="#SP4">&#167;4. Declaring methods</a></li><li><a href="#SP6">&#167;6. Adding methods</a></li><li><a href="#SP7">&#167;7. Calling methods</a></li></ul><hr class="tocbar">

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Streams' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#2">Chapter 2: Memory, Streams and Collections</a></li><li><b>Streams</b></li></ul><p class="purpose">Support for writing structured textual output, perhaps to the screen, to a file, or to a flexible-sized wide string.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#2">Chapter 2: Memory, Streams and Collections</a></li><li><b>Streams</b></li></ul><p class="purpose">Support for writing structured textual output, perhaps to the screen, to a file, or to a flexible-sized wide string.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. About streams</a></li><li><a href="#SP19">&#167;19. Initialising the stream structure</a></li><li><a href="#SP21">&#167;21. Logging</a></li><li><a href="#SP22">&#167;22. Standard I/O wrappers</a></li><li><a href="#SP24">&#167;24. Creating file streams</a></li><li><a href="#SP26">&#167;26. Creating memory streams</a></li><li><a href="#SP28">&#167;28. Converting from C strings</a></li><li><a href="#SP29">&#167;29. Converting to C strings</a></li><li><a href="#SP32">&#167;32. Locale versions</a></li><li><a href="#SP33">&#167;33. Flush and close</a></li><li><a href="#SP35">&#167;35. Writing</a></li><li><a href="#SP39">&#167;39. Memory-stream-only functions</a></li><li><a href="#SP43">&#167;43. Writer</a></li></ul><hr class="tocbar">

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Writers and Loggers' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#2">Chapter 2: Memory, Streams and Collections</a></li><li><b>Writers and Loggers</b></li></ul><p class="purpose">Formatted text output to streams.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#2">Chapter 2: Memory, Streams and Collections</a></li><li><b>Writers and Loggers</b></li></ul><p class="purpose">Formatted text output to streams.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Registration</a></li><li><a href="#SP6">&#167;6. Writing</a></li></ul><hr class="tocbar">

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Case-Insensitive Filenames' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#3">Chapter 3: The Operating System</a></li><li><b>Case-Insensitive Filenames</b></li></ul><p class="purpose">On some of the Unix-derived file systems on which Inform runs, filenames are case-sensitive, so that FISH and fish might be different files. This makes extension files, installed by the user, prone to being missed. The code in this section provides a routine to carry out file opening as if filenames are case-insensitive, and is used only for extensions.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#3">Chapter 3: The Operating System</a></li><li><b>Case-Insensitive Filenames</b></li></ul><p class="purpose">On some of the Unix-derived file systems on which Inform runs, filenames are case-sensitive, so that FISH and fish might be different files. This makes extension files, installed by the user, prone to being missed. The code in this section provides a routine to carry out file opening as if filenames are case-insensitive, and is used only for extensions.</p>
<ul class="toc"><li><a href="#SP3">&#167;3. The routine</a></li><li><a href="#SP3_1">&#167;3.1. Looking for case-insensitive matches instead</a></li><li><a href="#SP3_3">&#167;3.3. Allocation and deallocation</a></li><li><a href="#SP3_6">&#167;3.6. Pathname hacking</a></li><li><a href="#SP4">&#167;4. Counting matches</a></li><li><a href="#SP5">&#167;5. Non-POSIX tail</a></li></ul><hr class="tocbar">

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Command Line Arguments' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#3">Chapter 3: The Operating System</a></li><li><b>Command Line Arguments</b></li></ul><p class="purpose">To parse the command line arguments with which inweb was called, and to handle any errors it needs to issue.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#3">Chapter 3: The Operating System</a></li><li><b>Command Line Arguments</b></li></ul><p class="purpose">To parse the command line arguments with which inweb was called, and to handle any errors it needs to issue.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Model</a></li><li><a href="#SP2">&#167;2. Switches</a></li><li><a href="#SP7">&#167;7. Reading the command line</a></li><li><a href="#SP14">&#167;14. Help text</a></li></ul><hr class="tocbar">

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Directories' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#3">Chapter 3: The Operating System</a></li><li><b>Directories</b></li></ul><p class="purpose">Scanning directories on the host filing system.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#3">Chapter 3: The Operating System</a></li><li><b>Directories</b></li></ul><p class="purpose">Scanning directories on the host filing system.</p>
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. </b>All of this abstracts the code already found in the platform definitions.
</p>

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Error Messages' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#3">Chapter 3: The Operating System</a></li><li><b>Error Messages</b></li></ul><p class="purpose">A basic system for command-line tool error messages.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#3">Chapter 3: The Operating System</a></li><li><b>Error Messages</b></li></ul><p class="purpose">A basic system for command-line tool error messages.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Errors handler</a></li><li><a href="#SP2">&#167;2. Error messages</a></li><li><a href="#SP4">&#167;4. Deliberately crashing</a></li><li><a href="#SP5">&#167;5. Survivable errors</a></li></ul><hr class="tocbar">

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Filenames' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#3">Chapter 3: The Operating System</a></li><li><b>Filenames</b></li></ul><p class="purpose">Given the different environments in which we might be running, and the large range of files we may need from within a project folder, it's useful to have a section of code simply to deduce filenames.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#3">Chapter 3: The Operating System</a></li><li><b>Filenames</b></li></ul><p class="purpose">Given the different environments in which we might be running, and the large range of files we may need from within a project folder, it's useful to have a section of code simply to deduce filenames.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Storage</a></li><li><a href="#SP2">&#167;2. Creation</a></li><li><a href="#SP3">&#167;3. Strings to filenames</a></li><li><a href="#SP4">&#167;4. The writer</a></li><li><a href="#SP6">&#167;6. Reading off the folder</a></li><li><a href="#SP7">&#167;7. Reading off the leafname</a></li><li><a href="#SP8">&#167;8. Filename extensions</a></li><li><a href="#SP9">&#167;9. Guessing file formats</a></li><li><a href="#SP10">&#167;10. Opening</a></li><li><a href="#SP11">&#167;11. Comparing</a></li><li><a href="#SP12">&#167;12. Timestamps</a></li></ul><hr class="tocbar">

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Pathnames' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#3">Chapter 3: The Operating System</a></li><li><b>Pathnames</b></li></ul><p class="purpose">To manage references to locations in the host computer's file system.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#3">Chapter 3: The Operating System</a></li><li><b>Pathnames</b></li></ul><p class="purpose">To manage references to locations in the host computer's file system.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. About pathnames</a></li><li><a href="#SP2">&#167;2. Home folder</a></li><li><a href="#SP3">&#167;3. Installation folder</a></li><li><a href="#SP4">&#167;4. Creation</a></li><li><a href="#SP5">&#167;5. Text to pathnames</a></li><li><a href="#SP6">&#167;6. Writer</a></li><li><a href="#SP7">&#167;7. Relative pathnames</a></li><li><a href="#SP8">&#167;8. Existence in the file system</a></li><li><a href="#SP9">&#167;9. Directory synchronisation</a></li></ul><hr class="tocbar">

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Shell' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#3">Chapter 3: The Operating System</a></li><li><b>Shell</b></li></ul><p class="purpose">Sending commands to the shell, on Unix-like platforms, or simulating this on Windows.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#3">Chapter 3: The Operating System</a></li><li><b>Shell</b></li></ul><p class="purpose">Sending commands to the shell, on Unix-like platforms, or simulating this on Windows.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Operating system interface</a></li><li><a href="#SP5">&#167;5. Actual commands</a></li></ul><hr class="tocbar">

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Time' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#3">Chapter 3: The Operating System</a></li><li><b>Time</b></li></ul><p class="purpose">Managing how we record and use the current time and date.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#3">Chapter 3: The Operating System</a></li><li><b>Time</b></li></ul><p class="purpose">Managing how we record and use the current time and date.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Clock</a></li><li><a href="#SP3">&#167;3. Calendrical</a></li></ul><hr class="tocbar">

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Characters' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#4">Chapter 4: Text Handling</a></li><li><b>Characters</b></li></ul><p class="purpose">Individual characters.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#4">Chapter 4: Text Handling</a></li><li><b>Characters</b></li></ul><p class="purpose">Individual characters.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Character classes</a></li><li><a href="#SP4">&#167;4. Unicode composition</a></li><li><a href="#SP5">&#167;5. Accent stripping</a></li></ul><hr class="tocbar">

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'C Strings' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#4">Chapter 4: Text Handling</a></li><li><b>C Strings</b></li></ul><p class="purpose">A minimal library for handling C-style strings.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#4">Chapter 4: Text Handling</a></li><li><b>C Strings</b></li></ul><p class="purpose">A minimal library for handling C-style strings.</p>
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. </b>Programs using Foundation store text in <code class="display"><span class="extract">text_stream</span></code> structures almost all
of the time, but old-style, null-terminated <code class="display"><span class="extract">char *</span></code> array strings are

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Pattern Matching' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#4">Chapter 4: Text Handling</a></li><li><b>Pattern Matching</b></li></ul><p class="purpose">To provide a limited regular-expression parser.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#4">Chapter 4: Text Handling</a></li><li><b>Pattern Matching</b></li></ul><p class="purpose">To provide a limited regular-expression parser.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Character types</a></li><li><a href="#SP3">&#167;3. Simple parsing</a></li><li><a href="#SP6">&#167;6. A Worse PCRE</a></li><li><a href="#SP14">&#167;14. Replacement</a></li></ul><hr class="tocbar">

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'String Manipulation' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#4">Chapter 4: Text Handling</a></li><li><b>String Manipulation</b></li></ul><p class="purpose">Convenient routines for manipulating strings of text.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#4">Chapter 4: Text Handling</a></li><li><b>String Manipulation</b></li></ul><p class="purpose">Convenient routines for manipulating strings of text.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Strings are streams</a></li><li><a href="#SP2">&#167;2. New strings</a></li><li><a href="#SP4">&#167;4. Converting from C strings</a></li><li><a href="#SP6">&#167;6. Converting to C strings</a></li><li><a href="#SP7">&#167;7. Converting to integers</a></li><li><a href="#SP8">&#167;8. Length</a></li><li><a href="#SP9">&#167;9. Position markers</a></li><li><a href="#SP13">&#167;13. Character operations</a></li><li><a href="#SP15">&#167;15. Truncation</a></li><li><a href="#SP16">&#167;16. Copying</a></li><li><a href="#SP18">&#167;18. Comparisons</a></li><li><a href="#SP22">&#167;22. White space</a></li><li><a href="#SP24">&#167;24. Deleting characters</a></li><li><a href="#SP25">&#167;25. Substrings</a></li><li><a href="#SP26">&#167;26. Shim for literal storage</a></li></ul><hr class="tocbar">
@ -65,7 +70,7 @@ access.
</p>
<pre class="display">
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="functiontext">Str::new<button class="popup" onclick="togglePopup('usagePopup266')">...<span class="popuptext" id="usagePopup266">Usage of <b>Str::new</b>:<br><a href="#SP3">&#167;3</a>, Debugging Log - <a href="2-dl.html#SP4_1">&#167;4.1</a><br>Dictionaries - <a href="2-dct.html#SP7_3_1">&#167;7.3.1</a><br>Command Line Arguments - <a href="3-cla.html#SP6">&#167;6</a>, <a href="3-cla.html#SP11">&#167;11</a><br>Epub Ebooks - <a href="5-ee.html#SP5">&#167;5</a><br>Version Numbers - <a href="7-vn.html#SP7">&#167;7</a><br>Web Structure - <a href="8-ws.html#SP5_2">&#167;5.2</a>, <a href="8-ws.html#SP6_1">&#167;6.1</a>, <a href="8-ws.html#SP7_2_1">&#167;7.2.1</a><br>Build Files - <a href="8-bf.html#SP3">&#167;3</a></span></button></span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="functiontext">Str::new<button class="popup" onclick="togglePopup('usagePopup266')">...<span class="popuptext" id="usagePopup266">Usage of <b>Str::new</b>:<br><a href="#SP3">&#167;3</a>, Debugging Log - <a href="2-dl.html#SP4_1">&#167;4.1</a><br>Dictionaries - <a href="2-dct.html#SP7_3_1">&#167;7.3.1</a><br>Command Line Arguments - <a href="3-cla.html#SP6">&#167;6</a>, <a href="3-cla.html#SP11">&#167;11</a><br>Epub Ebooks - <a href="5-ee.html#SP5">&#167;5</a><br>Version Numbers - <a href="7-vn.html#SP7">&#167;7</a><br>Web Structure - <a href="8-ws.html#SP5_2">&#167;5.2</a>, <a href="8-ws.html#SP6_1">&#167;6.1</a>, <a href="8-ws.html#SP7_2_1">&#167;7.2.1</a>, <a href="8-ws.html#SP7_2_2_1">&#167;7.2.2.1</a><br>Build Files - <a href="8-bf.html#SP3">&#167;3</a></span></button></span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext"><a href="#SP2">Str::new_with_capacity</a></span><span class="plain">(32);</span>
<span class="plain">}</span>
@ -193,7 +198,7 @@ thing plus a little extra, for efficiency's sake.
</p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Str::len<button class="popup" onclick="togglePopup('usagePopup281')">...<span class="popuptext" id="usagePopup281">Usage of <b>Str::len</b>:<br><a href="#SP3">&#167;3</a>, <a href="#SP7">&#167;7</a>, <a href="#SP10">&#167;10</a>, <a href="#SP11">&#167;11</a>, <a href="#SP12">&#167;12</a>, <a href="#SP13">&#167;13</a>, <a href="#SP14">&#167;14</a>, <a href="#SP15">&#167;15</a>, <a href="#SP16">&#167;16</a>, <a href="#SP18">&#167;18</a>, <a href="#SP19">&#167;19</a>, <a href="#SP20">&#167;20</a>, <a href="#SP21">&#167;21</a>, <a href="#SP23">&#167;23</a>, <a href="#SP24">&#167;24</a>, <a href="#SP25">&#167;25</a>, Debugging Log - <a href="2-dl.html#SP9">&#167;9</a><br>Command Line Arguments - <a href="3-cla.html#SP13">&#167;13</a>, <a href="3-cla.html#SP14">&#167;14</a>, <a href="3-cla.html#SP14_1">&#167;14.1</a><br>Pathnames - <a href="3-pth.html#SP4">&#167;4</a>, <a href="3-pth.html#SP5">&#167;5</a>, <a href="3-pth.html#SP7">&#167;7</a><br>Filenames - <a href="3-fln.html#SP2">&#167;2</a>, <a href="3-fln.html#SP3">&#167;3</a>, <a href="3-fln.html#SP5">&#167;5</a>, <a href="3-fln.html#SP9">&#167;9</a><br>Tries and Avinues - <a href="4-taa.html#SP2_1">&#167;2.1</a><br>Pattern Matching - <a href="4-pm.html#SP3">&#167;3</a>, <a href="4-pm.html#SP4">&#167;4</a>, <a href="4-pm.html#SP10">&#167;10</a>, <a href="4-pm.html#SP11_3">&#167;11.3</a>, <a href="4-pm.html#SP14">&#167;14</a><br>HTML - <a href="5-htm.html#SP7">&#167;7</a>, <a href="5-htm.html#SP15">&#167;15</a><br>Epub Ebooks - <a href="5-ee.html#SP7_1">&#167;7.1</a>, <a href="5-ee.html#SP7_2_3">&#167;7.2.3</a>, <a href="5-ee.html#SP7_2_4">&#167;7.2.4</a><br>Version Numbers - <a href="7-vn.html#SP7">&#167;7</a>, <a href="7-vn.html#SP7_1">&#167;7.1</a>, <a href="7-vn.html#SP10">&#167;10</a><br>Web Structure - <a href="8-ws.html#SP7_3">&#167;7.3</a>, <a href="8-ws.html#SP7_3_3_1">&#167;7.3.3.1</a>, <a href="8-ws.html#SP7_2_2_3_1">&#167;7.2.2.3.1</a>, <a href="8-ws.html#SP7_2_2_4">&#167;7.2.2.4</a><br>Bibliographic Data for Webs - <a href="8-bdfw.html#SP5">&#167;5</a>, <a href="8-bdfw.html#SP6">&#167;6</a><br>Build Files - <a href="8-bf.html#SP3">&#167;3</a>, <a href="8-bf.html#SP4">&#167;4</a>, <a href="8-bf.html#SP5">&#167;5</a>, <a href="8-bf.html#SP6">&#167;6</a>, <a href="8-bf.html#SP9">&#167;9</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Str::len<button class="popup" onclick="togglePopup('usagePopup281')">...<span class="popuptext" id="usagePopup281">Usage of <b>Str::len</b>:<br><a href="#SP3">&#167;3</a>, <a href="#SP7">&#167;7</a>, <a href="#SP10">&#167;10</a>, <a href="#SP11">&#167;11</a>, <a href="#SP12">&#167;12</a>, <a href="#SP13">&#167;13</a>, <a href="#SP14">&#167;14</a>, <a href="#SP15">&#167;15</a>, <a href="#SP16">&#167;16</a>, <a href="#SP18">&#167;18</a>, <a href="#SP19">&#167;19</a>, <a href="#SP20">&#167;20</a>, <a href="#SP21">&#167;21</a>, <a href="#SP23">&#167;23</a>, <a href="#SP24">&#167;24</a>, <a href="#SP25">&#167;25</a>, Debugging Log - <a href="2-dl.html#SP9">&#167;9</a><br>Command Line Arguments - <a href="3-cla.html#SP13">&#167;13</a>, <a href="3-cla.html#SP14">&#167;14</a>, <a href="3-cla.html#SP14_1">&#167;14.1</a><br>Pathnames - <a href="3-pth.html#SP4">&#167;4</a>, <a href="3-pth.html#SP5">&#167;5</a>, <a href="3-pth.html#SP7">&#167;7</a><br>Filenames - <a href="3-fln.html#SP2">&#167;2</a>, <a href="3-fln.html#SP3">&#167;3</a>, <a href="3-fln.html#SP5">&#167;5</a>, <a href="3-fln.html#SP9">&#167;9</a><br>Tries and Avinues - <a href="4-taa.html#SP2_1">&#167;2.1</a><br>Pattern Matching - <a href="4-pm.html#SP3">&#167;3</a>, <a href="4-pm.html#SP4">&#167;4</a>, <a href="4-pm.html#SP10">&#167;10</a>, <a href="4-pm.html#SP11_3">&#167;11.3</a>, <a href="4-pm.html#SP14">&#167;14</a><br>HTML - <a href="5-htm.html#SP7">&#167;7</a>, <a href="5-htm.html#SP15">&#167;15</a><br>Epub Ebooks - <a href="5-ee.html#SP7_1">&#167;7.1</a>, <a href="5-ee.html#SP7_2_3">&#167;7.2.3</a>, <a href="5-ee.html#SP7_2_4">&#167;7.2.4</a><br>Version Numbers - <a href="7-vn.html#SP7">&#167;7</a>, <a href="7-vn.html#SP7_1">&#167;7.1</a>, <a href="7-vn.html#SP10">&#167;10</a><br>Web Structure - <a href="8-ws.html#SP5_4">&#167;5.4</a>, <a href="8-ws.html#SP5_4_1">&#167;5.4.1</a>, <a href="8-ws.html#SP5_4_1_1">&#167;5.4.1.1</a>, <a href="8-ws.html#SP5_4_1_2">&#167;5.4.1.2</a>, <a href="8-ws.html#SP7_3">&#167;7.3</a>, <a href="8-ws.html#SP7_3_3_1">&#167;7.3.3.1</a>, <a href="8-ws.html#SP7_2_2_3_1">&#167;7.2.2.3.1</a>, <a href="8-ws.html#SP7_2_2_4">&#167;7.2.2.4</a><br>Bibliographic Data for Webs - <a href="8-bdfw.html#SP5">&#167;5</a>, <a href="8-bdfw.html#SP6">&#167;6</a><br>Build Files - <a href="8-bf.html#SP3">&#167;3</a>, <a href="8-bf.html#SP4">&#167;4</a>, <a href="8-bf.html#SP5">&#167;5</a>, <a href="8-bf.html#SP6">&#167;6</a>, <a href="8-bf.html#SP9">&#167;9</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext"><a href="2-str.html#SP38">Streams::get_position</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
@ -292,7 +297,7 @@ at those positions may well not be, of course.)
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext"><a href="2-str.html#SP40">Streams::get_char_at_index</a></span><span class="plain">(</span><span class="identifier">P</span><span class="plain">.</span><span class="element">S</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">.</span><span class="element">index</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">wchar_t</span><span class="plain"> </span><span class="functiontext">Str::get_at<button class="popup" onclick="togglePopup('usagePopup292')">...<span class="popuptext" id="usagePopup292">Usage of <b>Str::get_at</b>:<br><a href="#SP20">&#167;20</a>, <a href="#SP23">&#167;23</a>, <a href="#SP25">&#167;25</a>, Pathnames - <a href="3-pth.html#SP7">&#167;7</a><br>Filenames - <a href="3-fln.html#SP5">&#167;5</a><br>Tries and Avinues - <a href="4-taa.html#SP2">&#167;2</a><br>Pattern Matching - <a href="4-pm.html#SP3">&#167;3</a>, <a href="4-pm.html#SP4">&#167;4</a>, <a href="4-pm.html#SP11">&#167;11</a>, <a href="4-pm.html#SP11_4">&#167;11.4</a>, <a href="4-pm.html#SP11_6">&#167;11.6</a>, <a href="4-pm.html#SP14">&#167;14</a>, <a href="4-pm.html#SP14_1">&#167;14.1</a><br>Web Structure - <a href="8-ws.html#SP7">&#167;7</a><br>Build Files - <a href="8-bf.html#SP9">&#167;9</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">index</span><span class="plain">) {</span>
<span class="identifier">wchar_t</span><span class="plain"> </span><span class="functiontext">Str::get_at<button class="popup" onclick="togglePopup('usagePopup292')">...<span class="popuptext" id="usagePopup292">Usage of <b>Str::get_at</b>:<br><a href="#SP20">&#167;20</a>, <a href="#SP23">&#167;23</a>, <a href="#SP25">&#167;25</a>, Pathnames - <a href="3-pth.html#SP7">&#167;7</a><br>Filenames - <a href="3-fln.html#SP5">&#167;5</a><br>Tries and Avinues - <a href="4-taa.html#SP2">&#167;2</a><br>Pattern Matching - <a href="4-pm.html#SP3">&#167;3</a>, <a href="4-pm.html#SP4">&#167;4</a>, <a href="4-pm.html#SP11">&#167;11</a>, <a href="4-pm.html#SP11_4">&#167;11.4</a>, <a href="4-pm.html#SP11_6">&#167;11.6</a>, <a href="4-pm.html#SP14">&#167;14</a>, <a href="4-pm.html#SP14_1">&#167;14.1</a><br>Web Structure - <a href="8-ws.html#SP5_4_1_1">&#167;5.4.1.1</a>, <a href="8-ws.html#SP7">&#167;7</a><br>Build Files - <a href="8-bf.html#SP9">&#167;9</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">index</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">S</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) || (</span><span class="identifier">index</span><span class="plain"> &lt; </span><span class="constant">0</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext"><a href="2-str.html#SP40">Streams::get_char_at_index</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">index</span><span class="plain">);</span>
<span class="plain">}</span>
@ -325,7 +330,7 @@ at those positions may well not be, of course.)
<span class="functiontext"><a href="2-str.html#SP40">Streams::put_char_at_index</a></span><span class="plain">(</span><span class="identifier">P</span><span class="plain">.</span><span class="element">S</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">.</span><span class="element">index</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Str::put_at<button class="popup" onclick="togglePopup('usagePopup296')">...<span class="popuptext" id="usagePopup296">Usage of <b>Str::put_at</b>:<br>Text Files - <a href="4-tf.html#SP5_3">&#167;5.3</a>, <a href="4-tf.html#SP6">&#167;6</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">index</span><span class="plain">, </span><span class="identifier">wchar_t</span><span class="plain"> </span><span class="identifier">C</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Str::put_at<button class="popup" onclick="togglePopup('usagePopup296')">...<span class="popuptext" id="usagePopup296">Usage of <b>Str::put_at</b>:<br>Text Files - <a href="4-tf.html#SP5_3">&#167;5.3</a>, <a href="4-tf.html#SP6">&#167;6</a><br>Web Structure - <a href="8-ws.html#SP5_4_1_1">&#167;5.4.1.1</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">index</span><span class="plain">, </span><span class="identifier">wchar_t</span><span class="plain"> </span><span class="identifier">C</span><span class="plain">) {</span>
<span class="functiontext"><a href="#SP14">Str::put</a></span><span class="plain">(</span><span class="functiontext"><a href="#SP10">Str::at</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">index</span><span class="plain">), </span><span class="identifier">C</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
@ -335,11 +340,11 @@ at those positions may well not be, of course.)
<p class="inwebparagraph"><a id="SP15"></a><b>&#167;15. Truncation. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Str::clear<button class="popup" onclick="togglePopup('usagePopup297')">...<span class="popuptext" id="usagePopup297">Usage of <b>Str::clear</b>:<br><a href="#SP16">&#167;16</a>, <a href="#SP17">&#167;17</a>, <a href="#SP24">&#167;24</a>, Directories - <a href="3-drc.html#SP2">&#167;2</a><br>Text Files - <a href="4-tf.html#SP6">&#167;6</a><br>Pattern Matching - <a href="4-pm.html#SP11_6">&#167;11.6</a><br>Version Numbers - <a href="7-vn.html#SP7_1">&#167;7.1</a><br>Web Structure - <a href="8-ws.html#SP7_3_2_1">&#167;7.3.2.1</a>, <a href="8-ws.html#SP7_3_3_2">&#167;7.3.3.2</a>, <a href="8-ws.html#SP7_2_2_1">&#167;7.2.2.1</a>, <a href="8-ws.html#SP7_2_2_4">&#167;7.2.2.4</a><br>Build Files - <a href="8-bf.html#SP8">&#167;8</a>, <a href="8-bf.html#SP9">&#167;9</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Str::clear<button class="popup" onclick="togglePopup('usagePopup297')">...<span class="popuptext" id="usagePopup297">Usage of <b>Str::clear</b>:<br><a href="#SP16">&#167;16</a>, <a href="#SP17">&#167;17</a>, <a href="#SP24">&#167;24</a>, Directories - <a href="3-drc.html#SP2">&#167;2</a><br>Text Files - <a href="4-tf.html#SP6">&#167;6</a><br>Pattern Matching - <a href="4-pm.html#SP11_6">&#167;11.6</a><br>Version Numbers - <a href="7-vn.html#SP7_1">&#167;7.1</a><br>Web Structure - <a href="8-ws.html#SP5_4_1">&#167;5.4.1</a>, <a href="8-ws.html#SP5_4_1_2">&#167;5.4.1.2</a>, <a href="8-ws.html#SP7_3_2_1">&#167;7.3.2.1</a>, <a href="8-ws.html#SP7_3_3_2">&#167;7.3.3.2</a>, <a href="8-ws.html#SP7_2_2_1">&#167;7.2.2.1</a>, <a href="8-ws.html#SP7_2_2_4">&#167;7.2.2.4</a><br>Build Files - <a href="8-bf.html#SP8">&#167;8</a>, <a href="8-bf.html#SP9">&#167;9</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">) {</span>
<span class="functiontext"><a href="#SP15">Str::truncate</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="constant">0</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Str::truncate<button class="popup" onclick="togglePopup('usagePopup298')">...<span class="popuptext" id="usagePopup298">Usage of <b>Str::truncate</b>:<br><a href="#SP23">&#167;23</a>, <a href="#SP24">&#167;24</a>, Web Structure - <a href="8-ws.html#SP7_3_3_1">&#167;7.3.3.1</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">len</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Str::truncate<button class="popup" onclick="togglePopup('usagePopup298')">...<span class="popuptext" id="usagePopup298">Usage of <b>Str::truncate</b>:<br><a href="#SP23">&#167;23</a>, <a href="#SP24">&#167;24</a>, Web Structure - <a href="8-ws.html#SP5_4_1_2">&#167;5.4.1.2</a>, <a href="8-ws.html#SP7_3_3_1">&#167;7.3.3.1</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">len</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">len</span><span class="plain"> &lt; </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">len</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">len</span><span class="plain"> &lt; </span><span class="functiontext"><a href="#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">)) </span><span class="functiontext"><a href="#SP14">Str::put</a></span><span class="plain">(</span><span class="functiontext"><a href="#SP10">Str::at</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">len</span><span class="plain">), </span><span class="constant">0</span><span class="plain">);</span>
<span class="plain">}</span>
@ -354,7 +359,7 @@ at those positions may well not be, of course.)
<span class="functiontext"><a href="2-str.html#SP42">Streams::copy</a></span><span class="plain">(</span><span class="identifier">S1</span><span class="plain">, </span><span class="identifier">S2</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Str::copy<button class="popup" onclick="togglePopup('usagePopup300')">...<span class="popuptext" id="usagePopup300">Usage of <b>Str::copy</b>:<br>Command Line Arguments - <a href="3-cla.html#SP12">&#167;12</a><br>Pattern Matching - <a href="4-pm.html#SP14">&#167;14</a><br>Epub Ebooks - <a href="5-ee.html#SP5">&#167;5</a>, <a href="5-ee.html#SP7_1">&#167;7.1</a><br>Web Structure - <a href="8-ws.html#SP7_3_2">&#167;7.3.2</a>, <a href="8-ws.html#SP7_3_3_2">&#167;7.3.3.2</a>, <a href="8-ws.html#SP7_2_2_3">&#167;7.2.2.3</a><br>Bibliographic Data for Webs - <a href="8-bdfw.html#SP7">&#167;7</a>, <a href="8-bdfw.html#SP7_2">&#167;7.2</a><br>Build Files - <a href="8-bf.html#SP8">&#167;8</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">S1</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">S2</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Str::copy<button class="popup" onclick="togglePopup('usagePopup300')">...<span class="popuptext" id="usagePopup300">Usage of <b>Str::copy</b>:<br>Command Line Arguments - <a href="3-cla.html#SP12">&#167;12</a><br>Pattern Matching - <a href="4-pm.html#SP14">&#167;14</a><br>Epub Ebooks - <a href="5-ee.html#SP5">&#167;5</a>, <a href="5-ee.html#SP7_1">&#167;7.1</a><br>Web Structure - <a href="8-ws.html#SP5_4_1_2">&#167;5.4.1.2</a>, <a href="8-ws.html#SP7_3_2">&#167;7.3.2</a>, <a href="8-ws.html#SP7_3_3_2">&#167;7.3.3.2</a>, <a href="8-ws.html#SP7_2_2_3">&#167;7.2.2.3</a><br>Bibliographic Data for Webs - <a href="8-bdfw.html#SP7">&#167;7</a>, <a href="8-bdfw.html#SP7_2">&#167;7.2</a><br>Build Files - <a href="8-bf.html#SP8">&#167;8</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">S1</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">S2</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">S1</span><span class="plain"> == </span><span class="identifier">S2</span><span class="plain">) </span><span class="reserved">return</span><span class="plain">;</span>
<span class="functiontext"><a href="#SP15">Str::clear</a></span><span class="plain">(</span><span class="identifier">S1</span><span class="plain">);</span>
<span class="functiontext"><a href="2-str.html#SP42">Streams::copy</a></span><span class="plain">(</span><span class="identifier">S1</span><span class="plain">, </span><span class="identifier">S2</span><span class="plain">);</span>
@ -397,7 +402,7 @@ at those positions may well not be, of course.)
</p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Str::eq<button class="popup" onclick="togglePopup('usagePopup305')">...<span class="popuptext" id="usagePopup305">Usage of <b>Str::eq</b>:<br>Debugging Log - <a href="2-dl.html#SP9">&#167;9</a><br>Dictionaries - <a href="2-dct.html#SP7_3">&#167;7.3</a><br>Pathnames - <a href="3-pth.html#SP3">&#167;3</a><br>Filenames - <a href="3-fln.html#SP11">&#167;11</a><br>Web Structure - <a href="8-ws.html#SP7_1">&#167;7.1</a><br>Bibliographic Data for Webs - <a href="8-bdfw.html#SP6">&#167;6</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">S1</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">S2</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Str::eq<button class="popup" onclick="togglePopup('usagePopup305')">...<span class="popuptext" id="usagePopup305">Usage of <b>Str::eq</b>:<br>Debugging Log - <a href="2-dl.html#SP9">&#167;9</a><br>Dictionaries - <a href="2-dct.html#SP7_3">&#167;7.3</a><br>Pathnames - <a href="3-pth.html#SP3">&#167;3</a><br>Filenames - <a href="3-fln.html#SP11">&#167;11</a><br>Web Structure - <a href="8-ws.html#SP5_4">&#167;5.4</a>, <a href="8-ws.html#SP5_4_1_2">&#167;5.4.1.2</a>, <a href="8-ws.html#SP7_1">&#167;7.1</a><br>Bibliographic Data for Webs - <a href="8-bdfw.html#SP6">&#167;6</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">S1</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">S2</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="functiontext"><a href="#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">S1</span><span class="plain">) == </span><span class="functiontext"><a href="#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">S2</span><span class="plain">)) &amp;&amp; (</span><span class="functiontext"><a href="#SP19">Str::cmp</a></span><span class="plain">(</span><span class="identifier">S1</span><span class="plain">, </span><span class="identifier">S2</span><span class="plain">) == </span><span class="constant">0</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Tries and Avinues' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#4">Chapter 4: Text Handling</a></li><li><b>Tries and Avinues</b></li></ul><p class="purpose">To examine heads and tails of text, to see how it may inflect.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#4">Chapter 4: Text Handling</a></li><li><b>Tries and Avinues</b></li></ul><p class="purpose">To examine heads and tails of text, to see how it may inflect.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Tries</a></li><li><a href="#SP5">&#167;5. Avinues</a></li><li><a href="#SP9">&#167;9. Logging</a></li></ul><hr class="tocbar">

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Text Files' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#4">Chapter 4: Text Handling</a></li><li><b>Text Files</b></li></ul><p class="purpose">To read text files of whatever flavour, one line at a time.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#4">Chapter 4: Text Handling</a></li><li><b>Text Files</b></li></ul><p class="purpose">To read text files of whatever flavour, one line at a time.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Text files</a></li><li><a href="#SP2">&#167;2. Text file positions</a></li><li><a href="#SP5">&#167;5. Text file scanner</a></li><li><a href="#SP8">&#167;8. Reading UTF-8 files</a></li></ul><hr class="tocbar">

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Wide Strings' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#4">Chapter 4: Text Handling</a></li><li><b>Wide Strings</b></li></ul><p class="purpose">A minimal library for handling wide C strings.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#4">Chapter 4: Text Handling</a></li><li><b>Wide Strings</b></li></ul><p class="purpose">A minimal library for handling wide C strings.</p>
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. </b>By "wide string", we mean an array of <code class="display"><span class="extract">wchar_t</span></code>. A pointer to this type
is what is returned by an L-literal in ANSI C, such as <code class="display"><span class="extract">L"look, I'm wide"</span></code>.

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Epub Ebooks' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#5">Chapter 5: Generating Websites</a></li><li><b>Epub Ebooks</b></li></ul><p class="purpose">To provide for wrapping up sets of HTML files into ePub ebooks.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#5">Chapter 5: Generating Websites</a></li><li><b>Epub Ebooks</b></li></ul><p class="purpose">To provide for wrapping up sets of HTML files into ePub ebooks.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Ebooks</a></li><li><a href="#SP5">&#167;5. Creation</a></li><li><a href="#SP6">&#167;6. Construction</a></li></ul><hr class="tocbar">

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'HTML' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#5">Chapter 5: Generating Websites</a></li><li><b>HTML</b></li></ul><p class="purpose">Utility functions for writing HTML.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#5">Chapter 5: Generating Websites</a></li><li><b>HTML</b></li></ul><p class="purpose">Utility functions for writing HTML.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Abstraction</a></li><li><a href="#SP8">&#167;8. Head</a></li><li><a href="#SP10">&#167;10. Scripts and styles</a></li><li><a href="#SP12">&#167;12. Body</a></li><li><a href="#SP13">&#167;13. Divisions</a></li><li><a href="#SP14">&#167;14. Images</a></li><li><a href="#SP15">&#167;15. Links</a></li><li><a href="#SP16">&#167;16. Tables</a></li><li><a href="#SP18">&#167;18. Round-rects</a></li><li><a href="#SP19">&#167;19. Miscellaneous</a></li><li><a href="#SP20">&#167;20. HTML colours</a></li></ul><hr class="tocbar">

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Binary Files' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#6">Chapter 6: Media</a></li><li><b>Binary Files</b></li></ul><p class="purpose">Routines for reading raw data from binary files.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#6">Chapter 6: Media</a></li><li><b>Binary Files</b></li></ul><p class="purpose">Routines for reading raw data from binary files.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Reading binary data</a></li><li><a href="#SP7">&#167;7. Size</a></li><li><a href="#SP8">&#167;8. Opening</a></li><li><a href="#SP9">&#167;9. Copying</a></li></ul><hr class="tocbar">

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Image Dimensions' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#6">Chapter 6: Media</a></li><li><b>Image Dimensions</b></li></ul><p class="purpose">These utility routines look at the headers of JPEG and PNG files to find the pixel dimensions of any images supplied by the user for cover art and figures.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#6">Chapter 6: Media</a></li><li><b>Image Dimensions</b></li></ul><p class="purpose">These utility routines look at the headers of JPEG and PNG files to find the pixel dimensions of any images supplied by the user for cover art and figures.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. JPEG files</a></li><li><a href="#SP2">&#167;2. PNG files</a></li></ul><hr class="tocbar">

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Sound Durations' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#6">Chapter 6: Media</a></li><li><b>Sound Durations</b></li></ul><p class="purpose">These utility routines look at the headers of AIFF, OGG Vorbis or MIDI files to find the durations, and verify that they are what they purport to be.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#6">Chapter 6: Media</a></li><li><b>Sound Durations</b></li></ul><p class="purpose">These utility routines look at the headers of AIFF, OGG Vorbis or MIDI files to find the durations, and verify that they are what they purport to be.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. AIFF files</a></li><li><a href="#SP2">&#167;2. OGG Vorbis files</a></li><li><a href="#SP3">&#167;3. MIDI files</a></li></ul><hr class="tocbar">

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Version Numbers' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#7">Chapter 7: Semantic Versioning</a></li><li><b>Version Numbers</b></li></ul><p class="purpose">Semantic version numbers such as 3.7.1.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#7">Chapter 7: Semantic Versioning</a></li><li><b>Version Numbers</b></li></ul><p class="purpose">Semantic version numbers such as 3.7.1.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Standard adoption</a></li><li><a href="#SP5">&#167;5. Printing and parsing</a></li><li><a href="#SP8">&#167;8. Precendence</a></li><li><a href="#SP11">&#167;11. Trichotomy</a></li></ul><hr class="tocbar">

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Version Number Ranges' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#7">Chapter 7: Semantic Versioning</a></li><li><b>Version Number Ranges</b></li></ul><p class="purpose">Ranges of acceptable version numbers.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#7">Chapter 7: Semantic Versioning</a></li><li><b>Version Number Ranges</b></li></ul><p class="purpose">Ranges of acceptable version numbers.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Ranges</a></li></ul><hr class="tocbar">

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Bibliographic Data for Webs' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#8">Chapter 8: Literate Programming</a></li><li><b>Bibliographic Data for Webs</b></li></ul><p class="purpose">To manage key-value pairs of bibliographic data, metadata if you like, associated with a given web.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#8">Chapter 8: Literate Programming</a></li><li><b>Bibliographic Data for Webs</b></li></ul><p class="purpose">To manage key-value pairs of bibliographic data, metadata if you like, associated with a given web.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Storing data</a></li><li><a href="#SP4">&#167;4. Initialising a web</a></li><li><a href="#SP6">&#167;6. Reading bibliographic data</a></li><li><a href="#SP7">&#167;7. Writing bibliographic data</a></li></ul><hr class="tocbar">
@ -104,6 +109,7 @@ convenient to store them directly here than to use a dictionary.
<span class="identifier">bd</span><span class="plain"> = </span><span class="functiontext"><a href="#SP7">Bibliographic::set_datum</a></span><span class="plain">(</span><span class="identifier">Wm</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Declare Section Usage"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Off"</span><span class="plain">); </span><span class="identifier">bd</span><span class="plain">-&gt;</span><span class="element">on_or_off</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="identifier">bd</span><span class="plain"> = </span><span class="functiontext"><a href="#SP7">Bibliographic::set_datum</a></span><span class="plain">(</span><span class="identifier">Wm</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Namespaces"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Off"</span><span class="plain">); </span><span class="identifier">bd</span><span class="plain">-&gt;</span><span class="element">on_or_off</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="identifier">bd</span><span class="plain"> = </span><span class="functiontext"><a href="#SP7">Bibliographic::set_datum</a></span><span class="plain">(</span><span class="identifier">Wm</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Sequential Section Ranges"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Off"</span><span class="plain">); </span><span class="identifier">bd</span><span class="plain">-&gt;</span><span class="element">on_or_off</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="identifier">bd</span><span class="plain"> = </span><span class="functiontext"><a href="#SP7">Bibliographic::set_datum</a></span><span class="plain">(</span><span class="identifier">Wm</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Strict Usage Rules"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Off"</span><span class="plain">); </span><span class="identifier">bd</span><span class="plain">-&gt;</span><span class="element">on_or_off</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="identifier">bd</span><span class="plain"> = </span><span class="functiontext"><a href="#SP7">Bibliographic::set_datum</a></span><span class="plain">(</span><span class="identifier">Wm</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"TeX Mathematics Notation"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"On"</span><span class="plain">); </span><span class="identifier">bd</span><span class="plain">-&gt;</span><span class="element">on_or_off</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="identifier">bd</span><span class="plain"> = </span><span class="functiontext"><a href="#SP7">Bibliographic::set_datum</a></span><span class="plain">(</span><span class="identifier">Wm</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"TeX Mathematics Plugin"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"MathJax3"</span><span class="plain">);</span>
@ -140,7 +146,7 @@ to check that all the mandatory declarations have indeed been made:
</p>
<pre class="display">
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="functiontext">Bibliographic::get_datum<button class="popup" onclick="togglePopup('usagePopup502')">...<span class="popuptext" id="usagePopup502">Usage of <b>Bibliographic::get_datum</b>:<br>Web Structure - <a href="8-ws.html#SP7_3_3_2_1">&#167;7.3.3.2.1</a>, <a href="8-ws.html#SP7_2_2_3_1">&#167;7.2.2.3.1</a><br>Build Files - <a href="8-bf.html#SP6">&#167;6</a></span></button></span><span class="plain">(</span><span class="reserved">web_md</span><span class="plain"> *</span><span class="identifier">Wm</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">key</span><span class="plain">) {</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="functiontext">Bibliographic::get_datum<button class="popup" onclick="togglePopup('usagePopup502')">...<span class="popuptext" id="usagePopup502">Usage of <b>Bibliographic::get_datum</b>:<br>Web Structure - <a href="8-ws.html#SP5_4">&#167;5.4</a>, <a href="8-ws.html#SP7_3_3_2_1">&#167;7.3.3.2.1</a>, <a href="8-ws.html#SP7_2_2_3_1">&#167;7.2.2.3.1</a><br>Build Files - <a href="8-bf.html#SP6">&#167;6</a></span></button></span><span class="plain">(</span><span class="reserved">web_md</span><span class="plain"> *</span><span class="identifier">Wm</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">key</span><span class="plain">) {</span>
<span class="reserved">web_bibliographic_datum</span><span class="plain"> *</span><span class="identifier">bd</span><span class="plain"> = </span><span class="functiontext"><a href="#SP6">Bibliographic::look_up_datum</a></span><span class="plain">(</span><span class="identifier">Wm</span><span class="plain">, </span><span class="identifier">key</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bd</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">bd</span><span class="plain">-&gt;</span><span class="element">value</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Build Files' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#8">Chapter 8: Literate Programming</a></li><li><b>Build Files</b></li></ul><p class="purpose">Manages the build metadata for an inweb project.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#8">Chapter 8: Literate Programming</a></li><li><b>Build Files</b></li></ul><p class="purpose">Manages the build metadata for an inweb project.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. About build files</a></li><li><a href="#SP5">&#167;5. Bibliographic implications</a></li><li><a href="#SP7">&#167;7. Advancing</a></li></ul><hr class="tocbar">

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Web Modules' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#8">Chapter 8: Literate Programming</a></li><li><b>Web Modules</b></li></ul><p class="purpose">To search for included modules, and track dependencies between them.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#8">Chapter 8: Literate Programming</a></li><li><b>Web Modules</b></li></ul><p class="purpose">To search for included modules, and track dependencies between them.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Creation</a></li><li><a href="#SP4">&#167;4. Dependencies</a></li><li><a href="#SP5">&#167;5. Searching</a></li><li><a href="#SP9">&#167;9. Resolving cross-reference names</a></li></ul><hr class="tocbar">

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Web Structure' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#8">Chapter 8: Literate Programming</a></li><li><b>Web Structure</b></li></ul><p class="purpose">To read the structure of a literate programming web from a path in the file system.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">foundation</a></li><li><a href="index.html#8">Chapter 8: Literate Programming</a></li><li><b>Web Structure</b></li></ul><p class="purpose">To read the structure of a literate programming web from a path in the file system.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Introduction</a></li><li><a href="#SP2">&#167;2. Web MD</a></li><li><a href="#SP5">&#167;5. Reading from the file system</a></li><li><a href="#SP6">&#167;6. Reading the contents page</a></li><li><a href="#SP8">&#167;8. Relative pathnames or filenames</a></li><li><a href="#SP9">&#167;9. Statistics</a></li></ul><hr class="tocbar">
@ -115,6 +120,7 @@ produce the following metadata structure.
<pre class="display">
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">section_md</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">sect_title</span><span class="plain">; </span><span class="comment"> e.g., "Program Control"</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">sect_range</span><span class="plain">; </span><span class="comment"> e.g., "2/ct"</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">using_syntax</span><span class="plain">; </span><span class="comment"> which syntax the web is written in</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">is_a_singleton</span><span class="plain">; </span><span class="comment"> is this the only section in its entire web?</span>
@ -152,6 +158,7 @@ case a filename <code class="display"><span class="extract">alt_F</span></code>
<span class="functiontext"><a href="#SP6">WebMetadata::read_contents_page</a></span><span class="plain">(</span><span class="identifier">Wm</span><span class="plain">, </span><span class="identifier">Wm</span><span class="plain">-&gt;</span><span class="element">as_module</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">including_modules</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">path_to_inweb</span><span class="plain">);</span>
&lt;<span class="cwebmacro">Consolidate the bibliographic data</span> <span class="cwebmacronumber">5.3</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Work out the section ranges</span> <span class="cwebmacronumber">5.4</span>&gt;<span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">Wm</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
@ -217,6 +224,141 @@ case a filename <code class="display"><span class="extract">alt_F</span></code>
<p class="endnote">This code is used in <a href="#SP5">&#167;5</a>.</p>
<p class="inwebparagraph"><a id="SP5_4"></a><b>&#167;5.4. </b>If no range is supplied, we make one ourselves.
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Work out the section ranges</span> <span class="cwebmacronumber">5.4</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">sequential</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">; </span><span class="comment"> are we numbering sections sequentially?</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP18">Str::eq</a></span><span class="plain">(</span><span class="functiontext"><a href="8-bdfw.html#SP6">Bibliographic::get_datum</a></span><span class="plain">(</span><span class="identifier">Wm</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Sequential Section Ranges"</span><span class="plain">), </span><span class="identifier">I</span><span class="string">"On"</span><span class="plain">))</span>
<span class="identifier">sequential</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="reserved">chapter_md</span><span class="plain"> *</span><span class="identifier">Cm</span><span class="plain">;</span>
<span class="reserved">section_md</span><span class="plain"> *</span><span class="identifier">Sm</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">Cm</span><span class="plain">, </span><span class="reserved">chapter_md</span><span class="plain">, </span><span class="identifier">Wm</span><span class="plain">-&gt;</span><span class="element">chapters_md</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">section_counter</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">Sm</span><span class="plain">, </span><span class="reserved">section_md</span><span class="plain">, </span><span class="identifier">Cm</span><span class="plain">-&gt;</span><span class="element">sections_md</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">Sm</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">) == </span><span class="constant">0</span><span class="plain">)</span>
&lt;<span class="cwebmacro">Concoct a range for section Sm in chapter Cm in web Wm</span> <span class="cwebmacronumber">5.4.1</span>&gt;<span class="plain">;</span>
<span class="identifier">section_counter</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="#SP5">&#167;5</a>.</p>
<p class="inwebparagraph"><a id="SP5_4_1"></a><b>&#167;5.4.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Concoct a range for section Sm in chapter Cm in web Wm</span> <span class="cwebmacronumber">5.4.1</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sequential</span><span class="plain">) {</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">Sm</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">, </span><span class="string">"%S/"</span><span class="plain">, </span><span class="identifier">Cm</span><span class="plain">-&gt;</span><span class="element">ch_range</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">Sm</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">, </span><span class="string">"s%d"</span><span class="plain">, </span><span class="identifier">section_counter</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">from</span><span class="plain"> = </span><span class="identifier">Sm</span><span class="plain">-&gt;</span><span class="element">sect_title</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">letters_from_each_word</span><span class="plain"> = </span><span class="constant">5</span><span class="plain">;</span>
<span class="reserved">do</span><span class="plain"> {</span>
<span class="functiontext"><a href="4-sm.html#SP15">Str::clear</a></span><span class="plain">(</span><span class="identifier">Sm</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">Sm</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">, </span><span class="string">"%S/"</span><span class="plain">, </span><span class="identifier">Cm</span><span class="plain">-&gt;</span><span class="element">ch_range</span><span class="plain">);</span>
&lt;<span class="cwebmacro">Make the tail using this many consonants from each word</span> <span class="cwebmacronumber">5.4.1.1</span>&gt;<span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (--</span><span class="identifier">letters_from_each_word</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) </span><span class="reserved">break</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">while</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">Sm</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">) &gt; </span><span class="constant">5</span><span class="plain">);</span>
&lt;<span class="cwebmacro">Terminate with disambiguating numbers in case of collisions</span> <span class="cwebmacronumber">5.4.1.2</span>&gt;<span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP5_4">&#167;5.4</a>.</p>
<p class="inwebparagraph"><a id="SP5_4_1_1"></a><b>&#167;5.4.1.1. </b>We collapse words to an initial letter plus consonants: thus "electricity"
would be "elctrcty", since we don't count "y" as a vowel here.
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Make the tail using this many consonants from each word</span> <span class="cwebmacronumber">5.4.1.1</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">sn</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">sw</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">Sm</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP13">Str::get_at</a></span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">sn</span><span class="plain">) == </span><span class="constant">FOLDER_SEPARATOR</span><span class="plain">) </span><span class="identifier">sn</span><span class="plain">++;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">letters_from_current_word</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="functiontext"><a href="4-sm.html#SP13">Str::get_at</a></span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">sn</span><span class="plain">)) &amp;&amp; (</span><span class="functiontext"><a href="4-sm.html#SP13">Str::get_at</a></span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">sn</span><span class="plain">) != </span><span class="character">'.'</span><span class="plain">)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP13">Str::get_at</a></span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">sn</span><span class="plain">) == </span><span class="character">' '</span><span class="plain">) </span><span class="identifier">letters_from_current_word</span><span class="plain"> = </span><span class="constant">0</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">letters_from_current_word</span><span class="plain"> &lt; </span><span class="identifier">letters_from_each_word</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP13">Str::get_at</a></span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">sn</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">l</span><span class="plain"> = </span><span class="identifier">tolower</span><span class="plain">(</span><span class="functiontext"><a href="4-sm.html#SP13">Str::get_at</a></span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">sn</span><span class="plain">));</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">letters_from_current_word</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) ||</span>
<span class="plain">((</span><span class="identifier">l</span><span class="plain"> != </span><span class="character">'a'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">l</span><span class="plain"> != </span><span class="character">'e'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">l</span><span class="plain"> != </span><span class="character">'i'</span><span class="plain">) &amp;&amp;</span>
<span class="plain">(</span><span class="identifier">l</span><span class="plain"> != </span><span class="character">'o'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">l</span><span class="plain"> != </span><span class="character">'u'</span><span class="plain">))) {</span>
<span class="functiontext"><a href="4-sm.html#SP14">Str::put_at</a></span><span class="plain">(</span><span class="identifier">Sm</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">, </span><span class="identifier">sw</span><span class="plain">++, </span><span class="identifier">l</span><span class="plain">);</span>
<span class="functiontext"><a href="4-sm.html#SP14">Str::put_at</a></span><span class="plain">(</span><span class="identifier">Sm</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">, </span><span class="identifier">sw</span><span class="plain">, </span><span class="constant">0</span><span class="plain">);</span>
<span class="identifier">letters_from_current_word</span><span class="plain">++;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="identifier">sn</span><span class="plain">++;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP5_4_1">&#167;5.4.1</a>.</p>
<p class="inwebparagraph"><a id="SP5_4_1_2"></a><b>&#167;5.4.1.2. </b>We never want two sections to have the same range.
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Terminate with disambiguating numbers in case of collisions</span> <span class="cwebmacronumber">5.4.1.2</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">original_range</span><span class="plain">);</span>
<span class="functiontext"><a href="4-sm.html#SP16">Str::copy</a></span><span class="plain">(</span><span class="identifier">original_range</span><span class="plain">, </span><span class="identifier">Sm</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">disnum</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">collision</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="reserved">do</span><span class="plain"> {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">disnum</span><span class="plain">++ &gt; </span><span class="constant">0</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">ldn</span><span class="plain"> = </span><span class="constant">4</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">disnum</span><span class="plain"> &gt;= </span><span class="constant">1000</span><span class="plain">) </span><span class="identifier">ldn</span><span class="plain"> = </span><span class="constant">3</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">disnum</span><span class="plain"> &gt;= </span><span class="constant">100</span><span class="plain">) </span><span class="identifier">ldn</span><span class="plain"> = </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">disnum</span><span class="plain"> &gt;= </span><span class="constant">10</span><span class="plain">) </span><span class="identifier">ldn</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">ldn</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="functiontext"><a href="4-sm.html#SP15">Str::clear</a></span><span class="plain">(</span><span class="identifier">Sm</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">Sm</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">, </span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">original_range</span><span class="plain">);</span>
<span class="functiontext"><a href="4-sm.html#SP15">Str::truncate</a></span><span class="plain">(</span><span class="identifier">Sm</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">, </span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">Sm</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">) - </span><span class="identifier">ldn</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">Sm</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">, </span><span class="string">"%d"</span><span class="plain">, </span><span class="identifier">disnum</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">collision</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="reserved">chapter_md</span><span class="plain"> *</span><span class="identifier">Cm2</span><span class="plain">;</span>
<span class="reserved">section_md</span><span class="plain"> *</span><span class="identifier">Sm2</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">Cm2</span><span class="plain">, </span><span class="reserved">chapter_md</span><span class="plain">, </span><span class="identifier">Wm</span><span class="plain">-&gt;</span><span class="element">chapters_md</span><span class="plain">)</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">Sm2</span><span class="plain">, </span><span class="reserved">section_md</span><span class="plain">, </span><span class="identifier">Cm2</span><span class="plain">-&gt;</span><span class="element">sections_md</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Sm2</span><span class="plain"> != </span><span class="identifier">Sm</span><span class="plain">) &amp;&amp; (</span><span class="functiontext"><a href="4-sm.html#SP18">Str::eq</a></span><span class="plain">(</span><span class="identifier">Sm2</span><span class="plain">-&gt;</span><span class="identifier">sect_range</span><span class="plain">, </span><span class="identifier">Sm</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">))) {</span>
<span class="identifier">collision</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">} </span><span class="reserved">while</span><span class="plain"> (</span><span class="identifier">collision</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">original_range</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP5_4_1">&#167;5.4.1</a>.</p>
<p class="inwebparagraph"><a id="SP6"></a><b>&#167;6. Reading the contents page. </b>Making the web begins by reading the contents section, which really isn't a
section at all (and perhaps we shouldn't pretend that it is by the use of the
<code class="display"><span class="extract">.w</span></code> file extension, but we probably want it to have the same file extension,
@ -756,6 +898,7 @@ we also read in and process its file.
<span class="identifier">Sm</span><span class="plain">-&gt;</span><span class="element">using_syntax</span><span class="plain"> = </span><span class="identifier">syntax</span><span class="plain">;</span>
<span class="identifier">Sm</span><span class="plain">-&gt;</span><span class="element">is_a_singleton</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="identifier">Sm</span><span class="plain">-&gt;</span><span class="element">titling_line_to_insert</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP3">Str::duplicate</a></span><span class="plain">(</span><span class="identifier">RS</span><span class="plain">-&gt;</span><span class="element">titling_line_to_insert</span><span class="plain">);</span>
<span class="identifier">Sm</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP2">Str::new</a></span><span class="plain">();</span>
<span class="functiontext"><a href="4-sm.html#SP15">Str::clear</a></span><span class="plain">(</span><span class="identifier">RS</span><span class="plain">-&gt;</span><span class="element">titling_line_to_insert</span><span class="plain">);</span>
<span class="reserved">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="functiontext"><a href="4-pm.html#SP9">Regexp::create_mr</a></span><span class="plain">();</span>

View file

@ -5,11 +5,11 @@
<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">
<b>Plugins</b>
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -17,12 +17,17 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
</nav>
<main role="main">
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><b>foundation</b></li></ul>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><b>foundation</b></li></ul>
<p class="purpose">A library of common code used by all of the Inform tools. This is version 1.</p>
<hr>
<ul class="chapterlist">

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Program Control' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">foundation-test</a></li><li><b>Program Control</b></li></ul><p class="purpose">Choosing which unit test to run on the basis of the command-line arguments.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">foundation-test</a></li><li><b>Program Control</b></li></ul><p class="purpose">Choosing which unit test to run on the basis of the command-line arguments.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Main routine</a></li></ul><hr class="tocbar">
@ -45,7 +50,7 @@
</pre>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">main<button class="popup" onclick="togglePopup('usagePopup0')">...<span class="popuptext" id="usagePopup0">Usage of <b>main</b>:<br>Web Modules - <a href="8-wm.html#SP3">&#167;3</a></span></button></span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">argc</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> **</span><span class="identifier">argv</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">main</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">argc</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> **</span><span class="identifier">argv</span><span class="plain">) {</span>
<span class="functiontext"><a href="1-fm.html#SP8">Foundation::start</a></span><span class="plain">();</span>
<span class="functiontext"><a href="3-cla.html#SP14">CommandLine::declare_heading</a></span><span class="plain">(</span><span class="identifier">L</span><span class="string">"inexample: a tool for testing foundation facilities\n"</span><span class="plain">);</span>
@ -71,7 +76,7 @@
<span class="reserved">return</span><span class="plain"> </span><span class="constant">0</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Main::respond<button class="popup" onclick="togglePopup('usagePopup1')">...<span class="popuptext" id="usagePopup1">Usage of <b>Main::respond</b>:<br>none</span></button></span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">id</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">val</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">arg</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">void</span><span class="plain"> </span><span class="functiontext">Main::respond<button class="popup" onclick="togglePopup('usagePopup0')">...<span class="popuptext" id="usagePopup0">Usage of <b>Main::respond</b>:<br>none</span></button></span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">id</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">val</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">arg</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">switch</span><span class="plain"> (</span><span class="identifier">id</span><span class="plain">) {</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">TEST_STRINGS_CLSW:</span><span class="plain"> </span><span class="functiontext"><a href="S-ut.html#SP1">Unit::test_strings</a></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="identifier">TEST_RE_CLSW:</span><span class="plain"> </span><span class="functiontext"><a href="S-ut.html#SP4">Unit::test_regexp</a></span><span class="plain">(</span><span class="identifier">arg</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
@ -84,7 +89,7 @@
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Main::ignore<button class="popup" onclick="togglePopup('usagePopup2')">...<span class="popuptext" id="usagePopup2">Usage of <b>Main::ignore</b>:<br>none</span></button></span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">id</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">arg</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">void</span><span class="plain"> </span><span class="functiontext">Main::ignore<button class="popup" onclick="togglePopup('usagePopup1')">...<span class="popuptext" id="usagePopup1">Usage of <b>Main::ignore</b>:<br>none</span></button></span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">id</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">arg</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="functiontext"><a href="3-em.html#SP2">Errors::fatal</a></span><span class="plain">(</span><span class="string">"only switches may be used at the command line"</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,14 +30,14 @@
<main role="main">
<!--Weave of 'Unit Tests' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">foundation-test</a></li><li><b>Unit Tests</b></li></ul><p class="purpose">A selection of tests for, or demonstrations of, foundation features.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">foundation-test</a></li><li><b>Unit Tests</b></li></ul><p class="purpose">A selection of tests for, or demonstrations of, foundation features.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Strings</a></li><li><a href="#SP2">&#167;2. Literals</a></li><li><a href="#SP3">&#167;3. Dictionaries</a></li><li><a href="#SP4">&#167;4. Regexp</a></li><li><a href="#SP5">&#167;5. Replacements</a></li><li><a href="#SP6">&#167;6. Linked lists</a></li><li><a href="#SP7">&#167;7. Stacks</a></li><li><a href="#SP8">&#167;8. Semantic versions</a></li></ul><hr class="tocbar">
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. Strings. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Unit::test_strings<button class="popup" onclick="togglePopup('usagePopup3')">...<span class="popuptext" id="usagePopup3">Usage of <b>Unit::test_strings</b>:<br>Program Control - <a href="S-pc.html#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Unit::test_strings<button class="popup" onclick="togglePopup('usagePopup2')">...<span class="popuptext" id="usagePopup2">Usage of <b>Unit::test_strings</b>:<br>Program Control - <a href="S-pc.html#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP4">Str::new_from_wide_string</a></span><span class="plain">(</span><span class="identifier">L</span><span class="string">"Jack and Jill"</span><span class="plain">);</span>
<span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"Setup: %S\n"</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">);</span>
@ -69,7 +74,7 @@
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. Literals. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Unit::test_literals<button class="popup" onclick="togglePopup('usagePopup4')">...<span class="popuptext" id="usagePopup4">Usage of <b>Unit::test_literals</b>:<br>Program Control - <a href="S-pc.html#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Unit::test_literals<button class="popup" onclick="togglePopup('usagePopup3')">...<span class="popuptext" id="usagePopup3">Usage of <b>Unit::test_literals</b>:<br>Program Control - <a href="S-pc.html#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="identifier">LOG</span><span class="plain">(</span><span class="string">"This is \"tricky"</span><span class="plain">); </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"bananas"</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">z</span><span class="plain"> = </span><span class="character">'"'</span><span class="plain">; </span><span class="identifier">LOG</span><span class="plain">(</span><span class="string">"%S%d"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"peaches"</span><span class="plain">, </span><span class="identifier">z</span><span class="plain">);</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">A</span><span class="plain"> = </span><span class="identifier">I</span><span class="string">"Jackdaws love my big sphinx of quartz"</span><span class="plain">;</span>
@ -88,7 +93,7 @@
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. Dictionaries. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Unit::test_dictionaries<button class="popup" onclick="togglePopup('usagePopup5')">...<span class="popuptext" id="usagePopup5">Usage of <b>Unit::test_dictionaries</b>:<br>Program Control - <a href="S-pc.html#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">arg</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Unit::test_dictionaries<button class="popup" onclick="togglePopup('usagePopup4')">...<span class="popuptext" id="usagePopup4">Usage of <b>Unit::test_dictionaries</b>:<br>Program Control - <a href="S-pc.html#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">arg</span><span class="plain">) {</span>
<span class="reserved">dictionary</span><span class="plain"> *</span><span class="identifier">D</span><span class="plain"> = </span><span class="functiontext"><a href="2-dct.html#SP2">Dictionaries::new</a></span><span class="plain">(2, </span><span class="constant">TRUE</span><span class="plain">);</span>
<span class="functiontext"><a href="2-dct.html#SP3">Dictionaries::log</a></span><span class="plain">(</span><span class="constant">STDOUT</span><span class="plain">, </span><span class="identifier">D</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"><a href="3-fln.html#SP3">Filenames::from_text</a></span><span class="plain">(</span><span class="identifier">arg</span><span class="plain">);</span>
@ -100,7 +105,7 @@
<span class="functiontext"><a href="2-dct.html#SP3">Dictionaries::log</a></span><span class="plain">(</span><span class="constant">STDOUT</span><span class="plain">, </span><span class="identifier">D</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Unit::test_dictionaries_helper1<button class="popup" onclick="togglePopup('usagePopup6')">...<span class="popuptext" id="usagePopup6">Usage of <b>Unit::test_dictionaries_helper1</b>:<br>none</span></button></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">vD</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Unit::test_dictionaries_helper1<button class="popup" onclick="togglePopup('usagePopup5')">...<span class="popuptext" id="usagePopup5">Usage of <b>Unit::test_dictionaries_helper1</b>:<br>none</span></button></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">vD</span><span class="plain">) {</span>
<span class="reserved">dictionary</span><span class="plain"> *</span><span class="identifier">D</span><span class="plain"> = (</span><span class="reserved">dictionary</span><span class="plain"> *) </span><span class="identifier">vD</span><span class="plain">;</span>
<span class="reserved">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="functiontext"><a href="4-pm.html#SP9">Regexp::create_mr</a></span><span class="plain">();</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-pm.html#SP10">Regexp::match</a></span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">L</span><span class="string">" *"</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain">;</span>
@ -119,7 +124,7 @@
<span class="functiontext"><a href="3-em.html#SP5">Errors::in_text_file</a></span><span class="plain">(</span><span class="string">"test case won't parse"</span><span class="plain">, </span><span class="identifier">tfp</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Unit::test_dictionaries_helper2<button class="popup" onclick="togglePopup('usagePopup7')">...<span class="popuptext" id="usagePopup7">Usage of <b>Unit::test_dictionaries_helper2</b>:<br>none</span></button></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">vD</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Unit::test_dictionaries_helper2<button class="popup" onclick="togglePopup('usagePopup6')">...<span class="popuptext" id="usagePopup6">Usage of <b>Unit::test_dictionaries_helper2</b>:<br>none</span></button></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">vD</span><span class="plain">) {</span>
<span class="reserved">dictionary</span><span class="plain"> *</span><span class="identifier">D</span><span class="plain"> = (</span><span class="reserved">dictionary</span><span class="plain"> *) </span><span class="identifier">vD</span><span class="plain">;</span>
<span class="reserved">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="functiontext"><a href="4-pm.html#SP9">Regexp::create_mr</a></span><span class="plain">();</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-pm.html#SP10">Regexp::match</a></span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">L</span><span class="string">" *"</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain">;</span>
@ -142,13 +147,13 @@
<p class="inwebparagraph"><a id="SP4"></a><b>&#167;4. Regexp. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Unit::test_regexp<button class="popup" onclick="togglePopup('usagePopup8')">...<span class="popuptext" id="usagePopup8">Usage of <b>Unit::test_regexp</b>:<br>Program Control - <a href="S-pc.html#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">arg</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Unit::test_regexp<button class="popup" onclick="togglePopup('usagePopup7')">...<span class="popuptext" id="usagePopup7">Usage of <b>Unit::test_regexp</b>:<br>Program Control - <a href="S-pc.html#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">arg</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"><a href="3-fln.html#SP3">Filenames::from_text</a></span><span class="plain">(</span><span class="identifier">arg</span><span class="plain">);</span>
<span class="functiontext"><a href="4-tf.html#SP5">TextFiles::read</a></span><span class="plain">(</span><span class="identifier">F</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">, </span><span class="string">"unable to read file of test cases"</span><span class="plain">, </span><span class="constant">TRUE</span><span class="plain">,</span>
<span class="plain">&amp;</span><span class="functiontext"><a href="#SP4">Unit::test_regexp_helper</a></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="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Unit::test_regexp_helper<button class="popup" onclick="togglePopup('usagePopup9')">...<span class="popuptext" id="usagePopup9">Usage of <b>Unit::test_regexp_helper</b>:<br>none</span></button></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">void</span><span class="plain"> </span><span class="functiontext">Unit::test_regexp_helper<button class="popup" onclick="togglePopup('usagePopup8')">...<span class="popuptext" id="usagePopup8">Usage of <b>Unit::test_regexp_helper</b>:<br>none</span></button></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">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="functiontext"><a href="4-pm.html#SP9">Regexp::create_mr</a></span><span class="plain">();</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-pm.html#SP10">Regexp::match</a></span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">L</span><span class="string">" *"</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-pm.html#SP10">Regexp::match</a></span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"%'(%c*?)%' %'(%c*)%'"</span><span class="plain">)) {</span>
@ -177,13 +182,13 @@
<p class="inwebparagraph"><a id="SP5"></a><b>&#167;5. Replacements. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Unit::test_replacement<button class="popup" onclick="togglePopup('usagePopup10')">...<span class="popuptext" id="usagePopup10">Usage of <b>Unit::test_replacement</b>:<br>Program Control - <a href="S-pc.html#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">arg</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Unit::test_replacement<button class="popup" onclick="togglePopup('usagePopup9')">...<span class="popuptext" id="usagePopup9">Usage of <b>Unit::test_replacement</b>:<br>Program Control - <a href="S-pc.html#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">arg</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"><a href="3-fln.html#SP3">Filenames::from_text</a></span><span class="plain">(</span><span class="identifier">arg</span><span class="plain">);</span>
<span class="functiontext"><a href="4-tf.html#SP5">TextFiles::read</a></span><span class="plain">(</span><span class="identifier">F</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">, </span><span class="string">"unable to read file of test cases"</span><span class="plain">, </span><span class="constant">TRUE</span><span class="plain">,</span>
<span class="plain">&amp;</span><span class="functiontext"><a href="#SP5">Unit::test_replacement_helper</a></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="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Unit::test_replacement_helper<button class="popup" onclick="togglePopup('usagePopup11')">...<span class="popuptext" id="usagePopup11">Usage of <b>Unit::test_replacement_helper</b>:<br>none</span></button></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">void</span><span class="plain"> </span><span class="functiontext">Unit::test_replacement_helper<button class="popup" onclick="togglePopup('usagePopup10')">...<span class="popuptext" id="usagePopup10">Usage of <b>Unit::test_replacement_helper</b>:<br>none</span></button></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">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="functiontext"><a href="4-pm.html#SP9">Regexp::create_mr</a></span><span class="plain">();</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-pm.html#SP10">Regexp::match</a></span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">L</span><span class="string">" *"</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-pm.html#SP10">Regexp::match</a></span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"%'(%c*?)%' %'(%c*?)%' %'(%c*)%'"</span><span class="plain">)) {</span>
@ -206,7 +211,7 @@
<p class="inwebparagraph"><a id="SP6"></a><b>&#167;6. Linked lists. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Unit::test_linked_lists<button class="popup" onclick="togglePopup('usagePopup12')">...<span class="popuptext" id="usagePopup12">Usage of <b>Unit::test_linked_lists</b>:<br>Program Control - <a href="S-pc.html#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Unit::test_linked_lists<button class="popup" onclick="togglePopup('usagePopup11')">...<span class="popuptext" id="usagePopup11">Usage of <b>Unit::test_linked_lists</b>:<br>Program Control - <a href="S-pc.html#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="reserved">linked_list</span><span class="plain"> *</span><span class="identifier">test_list</span><span class="plain"> = </span><span class="identifier">NEW_LINKED_LIST</span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain">);</span>
<span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"List (which should be empty) contains:\n"</span><span class="plain">);</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text</span><span class="plain">;</span>
@ -234,7 +239,7 @@
<p class="inwebparagraph"><a id="SP7"></a><b>&#167;7. Stacks. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Unit::test_stacks<button class="popup" onclick="togglePopup('usagePopup13')">...<span class="popuptext" id="usagePopup13">Usage of <b>Unit::test_stacks</b>:<br>Program Control - <a href="S-pc.html#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Unit::test_stacks<button class="popup" onclick="togglePopup('usagePopup12')">...<span class="popuptext" id="usagePopup12">Usage of <b>Unit::test_stacks</b>:<br>Program Control - <a href="S-pc.html#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="constant">lifo_stack</span><span class="plain"> *</span><span class="identifier">test_stack</span><span class="plain"> = </span><span class="identifier">NEW_LIFO_STACK</span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain">);</span>
<span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"Top of stack is: %S\n"</span><span class="plain">, </span><span class="identifier">TOP_OF_LIFO_STACK</span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain">, </span><span class="identifier">test_stack</span><span class="plain">));</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">LIFO_STACK_EMPTY</span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain">, </span><span class="identifier">test_stack</span><span class="plain">)) </span><span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"Stack is empty\n"</span><span class="plain">);</span>
@ -264,7 +269,7 @@
<p class="inwebparagraph"><a id="SP8"></a><b>&#167;8. Semantic versions. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Unit::test_range<button class="popup" onclick="togglePopup('usagePopup14')">...<span class="popuptext" id="usagePopup14">Usage of <b>Unit::test_range</b>:<br>none</span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Unit::test_range<button class="popup" onclick="togglePopup('usagePopup13')">...<span class="popuptext" id="usagePopup13">Usage of <b>Unit::test_range</b>:<br>none</span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text</span><span class="plain">) {</span>
<span class="reserved">semantic_version_number</span><span class="plain"> </span><span class="identifier">V</span><span class="plain"> = </span><span class="functiontext"><a href="7-vn.html#SP7">VersionNumbers::from_text</a></span><span class="plain">(</span><span class="identifier">text</span><span class="plain">);</span>
<span class="reserved">semver_range</span><span class="plain"> *</span><span class="identifier">R</span><span class="plain"> = </span><span class="functiontext"><a href="7-vnr.html#SP4">VersionNumberRanges::compatibility_range</a></span><span class="plain">(</span><span class="identifier">V</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"Compatibility range of %v = "</span><span class="plain">, &amp;</span><span class="identifier">V</span><span class="plain">);</span>
@ -280,7 +285,7 @@
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\n"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Unit::test_intersect<button class="popup" onclick="togglePopup('usagePopup15')">...<span class="popuptext" id="usagePopup15">Usage of <b>Unit::test_intersect</b>:<br>none</span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">,</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Unit::test_intersect<button class="popup" onclick="togglePopup('usagePopup14')">...<span class="popuptext" id="usagePopup14">Usage of <b>Unit::test_intersect</b>:<br>none</span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text1</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">r1</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text2</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">r2</span><span class="plain">) {</span>
<span class="reserved">semantic_version_number</span><span class="plain"> </span><span class="identifier">V1</span><span class="plain"> = </span><span class="functiontext"><a href="7-vn.html#SP7">VersionNumbers::from_text</a></span><span class="plain">(</span><span class="identifier">text1</span><span class="plain">);</span>
<span class="reserved">semver_range</span><span class="plain"> *</span><span class="identifier">R1</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
@ -302,12 +307,12 @@
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\n"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Unit::test_read_write<button class="popup" onclick="togglePopup('usagePopup16')">...<span class="popuptext" id="usagePopup16">Usage of <b>Unit::test_read_write</b>:<br>none</span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Unit::test_read_write<button class="popup" onclick="togglePopup('usagePopup15')">...<span class="popuptext" id="usagePopup15">Usage of <b>Unit::test_read_write</b>:<br>none</span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text</span><span class="plain">) {</span>
<span class="reserved">semantic_version_number</span><span class="plain"> </span><span class="identifier">V</span><span class="plain"> = </span><span class="functiontext"><a href="7-vn.html#SP7">VersionNumbers::from_text</a></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">"'%S' --&gt; %v\n"</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">, &amp;</span><span class="identifier">V</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Unit::test_precedence<button class="popup" onclick="togglePopup('usagePopup17')">...<span class="popuptext" id="usagePopup17">Usage of <b>Unit::test_precedence</b>:<br>none</span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text1</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text2</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Unit::test_precedence<button class="popup" onclick="togglePopup('usagePopup16')">...<span class="popuptext" id="usagePopup16">Usage of <b>Unit::test_precedence</b>:<br>none</span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text1</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text2</span><span class="plain">) {</span>
<span class="reserved">semantic_version_number</span><span class="plain"> </span><span class="identifier">V1</span><span class="plain"> = </span><span class="functiontext"><a href="7-vn.html#SP7">VersionNumbers::from_text</a></span><span class="plain">(</span><span class="identifier">text1</span><span class="plain">);</span>
<span class="reserved">semantic_version_number</span><span class="plain"> </span><span class="identifier">V2</span><span class="plain"> = </span><span class="functiontext"><a href="7-vn.html#SP7">VersionNumbers::from_text</a></span><span class="plain">(</span><span class="identifier">text2</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">gt</span><span class="plain"> = </span><span class="functiontext"><a href="7-vn.html#SP11">VersionNumbers::gt</a></span><span class="plain">(</span><span class="identifier">V1</span><span class="plain">, </span><span class="identifier">V2</span><span class="plain">);</span>
@ -319,7 +324,7 @@
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\n"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Unit::test_semver<button class="popup" onclick="togglePopup('usagePopup18')">...<span class="popuptext" id="usagePopup18">Usage of <b>Unit::test_semver</b>:<br>Program Control - <a href="S-pc.html#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Unit::test_semver<button class="popup" onclick="togglePopup('usagePopup17')">...<span class="popuptext" id="usagePopup17">Usage of <b>Unit::test_semver</b>:<br>Program Control - <a href="S-pc.html#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="functiontext"><a href="#SP8">Unit::test_read_write</a></span><span class="plain">(</span><span class="constant">STDOUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"1"</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP8">Unit::test_read_write</a></span><span class="plain">(</span><span class="constant">STDOUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"1.2"</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP8">Unit::test_read_write</a></span><span class="plain">(</span><span class="constant">STDOUT</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"1.2.3"</span><span class="plain">);</span>

View file

@ -5,11 +5,11 @@
<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">
<b>Plugins</b>
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -17,12 +17,17 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
</nav>
<main role="main">
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><b>foundation-test</b></li></ul>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><b>foundation-test</b></li></ul>
<p class="purpose">Unit tests for the foundation module. This is version 1.</p>
<hr>
<ul class="sectionlist">

BIN
docs/goldbach/Letter.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 107 KiB

71
docs/goldbach/Popups.css Normal file
View file

@ -0,0 +1,71 @@
/* Popup container - can be anything you want */
.popup {
position: relative;
display: inline-block;
cursor: pointer;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
/* The actual popup */
.popup .popuptext {
visibility: hidden;
width: 500px;
background-color: #eaeaea;
border: 1px solid #c3c3c3
color: #000;
text-align: center;
border-radius: 6px;
padding: 8px 0;
position: absolute;
z-index: 1;
bottom: 125%;
left: 50%;
margin-left: -250px;
font-size: 12pt;
box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.3);
}
/* Popup arrow */
.popup .popuptext::after {
content: "";
position: absolute;
top: 100%;
left: 50%;
margin-left: -5px;
border-width: 5px;
border-style: solid;
border-color: #555 transparent transparent transparent;
}
/* Toggle this class - hide and show the popup */
.popup .show {
visibility: visible;
-webkit-animation: fadeIn 1s;
animation: fadeIn 1s;
}
/* Add animation (fade in the popup) */
@-webkit-keyframes fadeIn {
from {opacity: 0;}
to {opacity: 1;}
}
@keyframes fadeIn {
from {opacity: 0;}
to {opacity:1 ;}
}
.popupCircle {
display: inline-block;
width: 0.25em;
height: 0.25em;
margin-right: 0.25em;
float: left;
}
.popupCircle:last-child {
margin-right: 0;
}

121
docs/goldbach/S-tgc.html Normal file
View file

@ -0,0 +1,121 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>The Goldbach Conjecture</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">Inweb Source</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>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
</nav>
<main role="main">
<!--Weave of 'The Goldbach Conjecture' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">goldbach</a></li><li><b>The Goldbach Conjecture</b></li></ul><p class="purpose">Here we verify the conjecture for small numbers.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. The conjecture</a></li></ul><hr class="tocbar">
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. The conjecture. </b>So, this is a program to see if even numbers from 4 to 100 can all be written
as a sum of two primes. Christian Goldbach asked Euler in 1742 if every even
number greater than 2 can be written this way. This remains open, though
every even number is a sum of at most six primes (Ramaré, 1995) and every
odd number is a sum of at most five (Tao, 2012).
</p>
<center><img src="Letter.jpg"></center>
<p class="inwebparagraph">Computer verification has been made up to around \(10^{18}\), but by rather better
methods.
</p>
<pre class="definitions">
<span class="definitionkeyword">define</span> <span class="constant">RANGE</span><span class="plain"> </span><span class="constant">100</span>
</pre>
<pre class="display">
<span class="plain">#</span><span class="identifier">include</span><span class="plain"> &lt;</span><span class="identifier">stdio</span><span class="plain">.</span><span class="identifier">h</span><span class="plain">&gt;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">main</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">argc</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">argv</span><span class="plain">[]) {</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=4; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="constant">RANGE</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">=</span><span class="identifier">i</span><span class="plain">+2)</span>
&lt;<span class="cwebmacro">Solve Goldbach's conjecture for i</span> <span class="cwebmacronumber">1.1</span>&gt;<span class="character">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP1_1"></a><b>&#167;1.1. </b>This ought to print:
</p>
<pre class="display">
<span class="plain">4 = 2+2</span>
<span class="plain">6 = 3+3</span>
<span class="plain">8 = 3+5</span>
<span class="plain">10 = 3+7 5+5</span>
<span class="plain">12 = 5+7</span>
<span class="plain">14 = 3+11 7+7</span>
<span class="plain">...</span>
</pre>
<p class="inwebparagraph">We'll print each different pair of primes adding up to i. We
only check in the range \(2 \leq j \leq i/2\) to avoid counting pairs
twice over (thus \(8 = 3+5 = 5+3\), but that's hardly two different ways).
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Solve Goldbach's conjecture for i</span> <span class="cwebmacronumber">1.1</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">printf</span><span class="plain">(</span><span class="string">"%d ="</span><span class="plain">, </span><span class="identifier">i</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">=2; </span><span class="identifier">j</span><span class="plain">&lt;=</span><span class="identifier">i</span><span class="plain">/2; </span><span class="identifier">j</span><span class="plain">++)</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="functiontext"><a href="S-tsoe.html#SP2">isprime</a></span><span class="plain">(</span><span class="identifier">j</span><span class="plain">)) &amp;&amp; (</span><span class="functiontext"><a href="S-tsoe.html#SP2">isprime</a></span><span class="plain">(</span><span class="identifier">i</span><span class="plain">-</span><span class="identifier">j</span><span class="plain">)))</span>
<span class="identifier">printf</span><span class="plain">(</span><span class="string">" %d+%d"</span><span class="plain">, </span><span class="identifier">j</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">-</span><span class="identifier">j</span><span class="plain">);</span>
<span class="identifier">printf</span><span class="plain">(</span><span class="string">"\n"</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP1">&#167;1</a>.</p>
<hr class="tocbar">
<ul class="toc"><li><i>(This section begins Sections.)</i></li><li><a href="S-tsoe.html">Continue with 'The Sieve of Eratosthenes'</a></li></ul><hr class="tocbar">
<!--End of weave-->
<script>
MathJax = {
tex: {
inlineMath: <b>'$', '$'], ['\\(', '\\)'</b>
},
svg: {
fontCache: 'global'
}
};
</script>
<script type="text/javascript" id="MathJax-script" async
src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js">
</script>
</main>
</body>
</html>

142
docs/goldbach/S-tsoe.html Normal file
View file

@ -0,0 +1,142 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>The Sieve of Eratosthenes</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">Inweb Source</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>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
</nav>
<main role="main">
<!--Weave of 'The Sieve of Eratosthenes' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">goldbach</a></li><li><b>The Sieve of Eratosthenes</b></li></ul><p class="purpose">A fairly fast way to determine if small numbers are prime, given storage.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Storage</a></li><li><a href="#SP2">&#167;2. Primality</a></li></ul><hr class="tocbar">
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. Storage. </b>This technique, still essentially the best sieve for finding prime
numbers, is attributed to Eratosthenes of Cyrene and dates from the 200s BC.
Since composite numbers are exactly those numbers which are multiples of
something, the idea is to remove everything which is a multiple: whatever
is left, must be prime.
</p>
<p class="inwebparagraph">This is very fast (and can be done more quickly than the implementation
below), but (a) uses storage to hold the sieve, and (b) has to start right
back at 2 - so it can't efficiently test just, say, the eight-digit numbers
for primality.
</p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">still_in_sieve</span><span class="plain">[</span><span class="constant">RANGE</span><span class="plain"> + </span><span class="constant">1</span><span class="plain">];</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">sieve_performed</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. Primality. </b>We provide this as a function which determines whether a number is prime:
</p>
<pre class="definitions">
<span class="definitionkeyword">define</span> <span class="constant">TRUE</span><span class="plain"> </span><span class="constant">1</span>
<span class="definitionkeyword">define</span> <span class="constant">FALSE</span><span class="plain"> </span><span class="constant">0</span>
</pre>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">isprime<button class="popup" onclick="togglePopup('usagePopup0')">...<span class="popuptext" id="usagePopup0">Usage of <b>isprime</b>:<br>The Goldbach Conjecture - <a href="S-tgc.html#SP1_1">&#167;1.1</a></span></button></span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">n</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain"> &lt;= </span><span class="constant">1</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">n</span><span class="plain"> &gt; </span><span class="constant">RANGE</span><span class="plain">) { </span><span class="identifier">printf</span><span class="plain">(</span><span class="string">"Out of range!\n"</span><span class="plain">); </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">FALSE</span><span class="plain">; }</span>
<span class="reserved">if</span><span class="plain"> (!</span><span class="identifier">sieve_performed</span><span class="plain">) </span>&lt;<span class="cwebmacro">Perform the sieve</span> <span class="cwebmacronumber">2.1</span>&gt;<span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">still_in_sieve</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">];</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP2_1"></a><b>&#167;2.1. </b>We save a little time by noting that if a number up to <code class="display"><span class="extract">RANGE</span></code> is composite
then one of its factors must be smaller than the square root of <code class="display"><span class="extract">RANGE</span></code>. Thus,
in a sieve of size 10000, one only needs to remove multiples of 2 up to 100,
for example.
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Perform the sieve</span> <span class="cwebmacronumber">2.1</span>&gt; =
</code></p>
<pre class="displaydefn">
&lt;<span class="cwebmacro">Start with all numbers from 2 upwards in the sieve</span> <span class="cwebmacronumber">2.1.1</span>&gt;<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">=2; </span><span class="identifier">n</span><span class="plain">*</span><span class="identifier">n</span><span class="plain"> &lt;= </span><span class="constant">RANGE</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="identifier">still_in_sieve</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">])</span>
&lt;<span class="cwebmacro">Shake out multiples of n</span> <span class="cwebmacronumber">2.1.2</span>&gt;<span class="plain">;</span>
<span class="identifier">sieve_performed</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP2">&#167;2</a>.</p>
<p class="inwebparagraph"><a id="SP2_1_1"></a><b>&#167;2.1.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Start with all numbers from 2 upwards in the sieve</span> <span class="cwebmacronumber">2.1.1</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">still_in_sieve</span><span class="plain">[1] = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">n</span><span class="plain">=2; </span><span class="identifier">n</span><span class="plain"> &lt;= </span><span class="constant">RANGE</span><span class="plain">; </span><span class="identifier">n</span><span class="plain">++) </span><span class="identifier">still_in_sieve</span><span class="plain">[</span><span class="identifier">n</span><span class="plain">] = </span><span class="constant">TRUE</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP2_1">&#167;2.1</a>.</p>
<p class="inwebparagraph"><a id="SP2_1_2"></a><b>&#167;2.1.2. </b><code class="display">
&lt;<span class="cwebmacrodefn">Shake out multiples of n</span> <span class="cwebmacronumber">2.1.2</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">m</span><span class="plain">= </span><span class="identifier">n</span><span class="plain">+</span><span class="identifier">n</span><span class="plain">; </span><span class="identifier">m</span><span class="plain"> &lt;= </span><span class="constant">RANGE</span><span class="plain">; </span><span class="identifier">m</span><span class="plain"> += </span><span class="identifier">n</span><span class="plain">) </span><span class="identifier">still_in_sieve</span><span class="plain">[</span><span class="identifier">m</span><span class="plain">] = </span><span class="constant">FALSE</span><span class="plain">;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP2_1">&#167;2.1</a>.</p>
<hr class="tocbar">
<ul class="toc"><li><a href="S-tgc.html">Back to 'The Goldbach Conjecture'</a></li><li><i>(This section ends Sections.)</i></li></ul><hr class="tocbar">
<!--End of weave-->
<script>
function togglePopup(material_id) {
var popup = document.getElementById(material_id);
popup.classList.toggle("show");
}
</script>
<link href="Popups.css" rel="stylesheet" rev="stylesheet" type="text/css">
</main>
</body>
</html>

48
docs/goldbach/index.html Normal file
View file

@ -0,0 +1,48 @@
<html>
<head>
<title>goldbach</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">Inweb Source</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>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
</nav>
<main role="main">
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><b>goldbach</b></li></ul>
<p class="purpose">A simple test web for inweb. This is version 1.</p>
<hr>
<ul class="sectionlist">
<li>
<p><a href="S-tgc.html"><spon class="sectiontitle">The Goldbach Conjecture</span></a> -
<span class="purpose">Here we verify the conjecture for small numbers.</span></p>
</li>
<li>
<p><a href="S-tsoe.html"><spon class="sectiontitle">The Sieve of Eratosthenes</span></a> -
<span class="purpose">A fairly fast way to determine if small numbers are prime, given storage.</span></p>
</li>
</ul>
<hr>
</body>
</html>

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Basics' 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#1">Chapter 1: Top Level</a></li><li><b>Basics</b></li></ul><p class="purpose">Some fundamental definitions, mostly setting up for the Foundation module to manage memory for us.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">inweb</a></li><li><a href="index.html#1">Chapter 1: Top Level</a></li><li><b>Basics</b></li></ul><p class="purpose">Some fundamental definitions, mostly setting up for the Foundation module to manage memory for us.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Build identity</a></li><li><a href="#SP2">&#167;2. Setting up the memory manager</a></li></ul><hr class="tocbar">
@ -47,6 +52,8 @@ case, <code class="display"><span class="extract">_array_MT</span></code> append
<pre class="definitions">
<span class="definitionkeyword">enum</span> <span class="constant">breadcrumb_request_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">chapter_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">colony_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">colony_member_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">colouring_language_block_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">colouring_rule_MT</span>
<span class="definitionkeyword">enum</span> <span class="constant">enumeration_set_MT</span>
@ -87,6 +94,8 @@ types.
<span class="identifier">ALLOCATE_IN_ARRAYS</span><span class="plain">(</span><span class="reserved">source_line</span><span class="plain">, </span><span class="constant">1000</span><span class="plain">)</span>
<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">chapter</span><span class="plain">)</span>
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">colony</span><span class="plain">)</span>
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">colony_member</span><span class="plain">)</span>
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">colouring_language_block</span><span class="plain">)</span>
<span class="identifier">ALLOCATE_INDIVIDUALLY</span><span class="plain">(</span><span class="reserved">colouring_rule</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>

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Configuration' 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#1">Chapter 1: Top Level</a></li><li><b>Configuration</b></li></ul><p class="purpose">To parse the command line arguments with which inweb was called, and to handle any errors it needs to issue.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">inweb</a></li><li><a href="index.html#1">Chapter 1: Top Level</a></li><li><b>Configuration</b></li></ul><p class="purpose">To parse the command line arguments with which inweb was called, and to handle any errors it needs to issue.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Instructions</a></li><li><a href="#SP2">&#167;2. Reading the command line</a></li></ul><hr class="tocbar">
@ -64,6 +69,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">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">filename</span><span class="plain"> *</span><span class="identifier">colony_setting</span><span class="plain">; </span><span class="comment"> <code class="display"><span class="extract">-colony 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>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">verbose_switch</span><span class="plain">; </span><span class="comment"> <code class="display"><span class="extract">-verbose</span></code>: print names of files read to stdout</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">targets</span><span class="plain">; </span><span class="comment"> used only for parsing</span>
@ -93,7 +99,7 @@ then declare them.
</p>
<pre class="display">
<span class="reserved">inweb_instructions</span><span class="plain"> </span><span class="functiontext">Configuration::read<button class="popup" onclick="togglePopup('usagePopup3')">...<span class="popuptext" id="usagePopup3">Usage of <b>Configuration::read</b>:<br>Program Control - <a href="1-pc.html#SP6">&#167;6</a></span></button></span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">argc</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> **</span><span class="identifier">argv</span><span class="plain">) {</span>
<span class="reserved">inweb_instructions</span><span class="plain"> </span><span class="functiontext">Configuration::read<button class="popup" onclick="togglePopup('usagePopup2')">...<span class="popuptext" id="usagePopup2">Usage of <b>Configuration::read</b>:<br>Program Control - <a href="1-pc.html#SP6">&#167;6</a></span></button></span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">argc</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> **</span><span class="identifier">argv</span><span class="plain">) {</span>
<span class="reserved">inweb_instructions</span><span class="plain"> </span><span class="identifier">args</span><span class="plain">;</span>
&lt;<span class="cwebmacro">Initialise the args</span> <span class="cwebmacronumber">2.1</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Declare the command-line switches specific to Inweb</span> <span class="cwebmacronumber">2.3</span>&gt;<span class="plain">;</span>
@ -143,6 +149,7 @@ then declare them.
<span class="identifier">args</span><span class="plain">.</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="plain">.</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="plain">.</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="plain">.</span><span class="element">colony_setting</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">args</span><span class="plain">.</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>
<span class="identifier">args</span><span class="plain">.</span><span class="element">tag_setting</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP2">Str::new</a></span><span class="plain">();</span>
<span class="identifier">args</span><span class="plain">.</span><span class="element">weave_pattern</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP4">Str::new_from_wide_string</a></span><span class="plain">(</span><span class="identifier">L</span><span class="string">"HTML"</span><span class="plain">);</span>
@ -194,6 +201,7 @@ provides automatically.
<span class="definitionkeyword">enum</span> <span class="constant">WEAVE_DOCS_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">BREADCRUMB_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">NAVIGATION_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">COLONY_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">TANGLING_CLSG</span>
<span class="definitionkeyword">enum</span> <span class="constant">TANGLE_CLSW</span>
<span class="definitionkeyword">enum</span> <span class="constant">TANGLE_TO_CLSW</span>
@ -280,6 +288,8 @@ provides automatically.
<span class="identifier">L</span><span class="string">"use the text X as a breadcrumb in overhead navigation"</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cla.html#SP5">CommandLine::declare_switch</a></span><span class="plain">(</span><span class="constant">NAVIGATION_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"navigation"</span><span class="plain">, </span><span class="constant">2</span><span class="plain">,</span>
<span class="identifier">L</span><span class="string">"use the file X as a column of navigation links"</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cla.html#SP5">CommandLine::declare_switch</a></span><span class="plain">(</span><span class="constant">COLONY_CLSW</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"colony"</span><span class="plain">, </span><span class="constant">2</span><span class="plain">,</span>
<span class="identifier">L</span><span class="string">"use the file X as a list of webs in this colony"</span><span class="plain">);</span>
<span class="functiontext"><a href="3-cla.html#SP5">CommandLine::end_group</a></span><span class="plain">();</span>
<span class="functiontext"><a href="3-cla.html#SP5">CommandLine::begin_group</a></span><span class="plain">(</span><span class="constant">TANGLING_CLSG</span><span class="plain">,</span>
@ -304,7 +314,7 @@ provides automatically.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Configuration::switch<button class="popup" onclick="togglePopup('usagePopup4')">...<span class="popuptext" id="usagePopup4">Usage of <b>Configuration::switch</b>:<br><a href="#SP2">&#167;2</a></span></button></span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">id</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">val</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">arg</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">void</span><span class="plain"> </span><span class="functiontext">Configuration::switch<button class="popup" onclick="togglePopup('usagePopup3')">...<span class="popuptext" id="usagePopup3">Usage of <b>Configuration::switch</b>:<br><a href="#SP2">&#167;2</a></span></button></span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">id</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">val</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">arg</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">inweb_instructions</span><span class="plain"> *</span><span class="identifier">args</span><span class="plain"> = (</span><span class="reserved">inweb_instructions</span><span class="plain"> *) </span><span class="identifier">state</span><span class="plain">;</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">id</span><span class="plain">) {</span>
<span class="comment"> Miscellaneous</span>
@ -393,6 +403,9 @@ provides automatically.
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">NAVIGATION_CLSW:</span>
<span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">navigation_setting</span><span class="plain"> = </span><span class="functiontext"><a href="3-fln.html#SP3">Filenames::from_text</a></span><span class="plain">(</span><span class="identifier">arg</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP6">Configuration::set_fundamental_mode</a></span><span class="plain">(</span><span class="identifier">args</span><span class="plain">, </span><span class="constant">WEAVE_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="identifier">COLONY_CLSW:</span>
<span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">colony_setting</span><span class="plain"> = </span><span class="functiontext"><a href="3-fln.html#SP3">Filenames::from_text</a></span><span class="plain">(</span><span class="identifier">arg</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP6">Configuration::set_fundamental_mode</a></span><span class="plain">(</span><span class="identifier">args</span><span class="plain">, </span><span class="constant">WEAVE_MODE</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="comment"> Tangle-related</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">TANGLE_CLSW:</span>
@ -405,7 +418,7 @@ provides automatically.
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">breadcrumb_request</span><span class="plain"> *</span><span class="functiontext">Configuration::breadcrumb<button class="popup" onclick="togglePopup('usagePopup5')">...<span class="popuptext" id="usagePopup5">Usage of <b>Configuration::breadcrumb</b>:<br>none</span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">arg</span><span class="plain">) {</span>
<span class="reserved">breadcrumb_request</span><span class="plain"> *</span><span class="functiontext">Configuration::breadcrumb<button class="popup" onclick="togglePopup('usagePopup4')">...<span class="popuptext" id="usagePopup4">Usage of <b>Configuration::breadcrumb</b>:<br>none</span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">arg</span><span class="plain">) {</span>
<span class="reserved">breadcrumb_request</span><span class="plain"> *</span><span class="identifier">BR</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">breadcrumb_request</span><span class="plain">);</span>
<span class="reserved">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="functiontext"><a href="4-pm.html#SP9">Regexp::create_mr</a></span><span class="plain">();</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-pm.html#SP10">Regexp::match</a></span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">arg</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"(%c*?): *(%c*)"</span><span class="plain">)) {</span>
@ -429,7 +442,7 @@ the <code class="display"><span class="extract">X</span></code> in <code class="
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Configuration::bareword<button class="popup" onclick="togglePopup('usagePopup6')">...<span class="popuptext" id="usagePopup6">Usage of <b>Configuration::bareword</b>:<br><a href="#SP2">&#167;2</a></span></button></span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">id</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">opt</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">void</span><span class="plain"> </span><span class="functiontext">Configuration::bareword<button class="popup" onclick="togglePopup('usagePopup5')">...<span class="popuptext" id="usagePopup5">Usage of <b>Configuration::bareword</b>:<br><a href="#SP2">&#167;2</a></span></button></span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">id</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">opt</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">inweb_instructions</span><span class="plain"> *</span><span class="identifier">args</span><span class="plain"> = (</span><span class="reserved">inweb_instructions</span><span class="plain"> *) </span><span class="identifier">state</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">args</span><span class="plain">-&gt;</span><span class="identifier">chosen_web</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) &amp;&amp; (</span><span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">chosen_file</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"><a href="4-sm.html#SP20">Str::suffix_eq</a></span><span class="plain">(</span><span class="identifier">opt</span><span class="plain">, </span><span class="identifier">I</span><span class="string">".inweb"</span><span class="plain">, </span><span class="constant">6</span><span class="plain">))</span>
@ -448,7 +461,7 @@ Otherwise, a range is a chapter number/letter, or a section range.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Configuration::set_range<button class="popup" onclick="togglePopup('usagePopup7')">...<span class="popuptext" id="usagePopup7">Usage of <b>Configuration::set_range</b>:<br><a href="#SP4">&#167;4</a>, Program Control - <a href="1-pc.html#SP7_4_3">&#167;7.4.3</a></span></button></span><span class="plain">(</span><span class="reserved">inweb_instructions</span><span class="plain"> *</span><span class="identifier">args</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">opt</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Configuration::set_range<button class="popup" onclick="togglePopup('usagePopup6')">...<span class="popuptext" id="usagePopup6">Usage of <b>Configuration::set_range</b>:<br><a href="#SP4">&#167;4</a>, Program Control - <a href="1-pc.html#SP7_4_3">&#167;7.4.3</a></span></button></span><span class="plain">(</span><span class="reserved">inweb_instructions</span><span class="plain"> *</span><span class="identifier">args</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">opt</span><span class="plain">) {</span>
<span class="reserved">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="functiontext"><a href="4-pm.html#SP9">Regexp::create_mr</a></span><span class="plain">();</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP21">Str::eq_wide_string</a></span><span class="plain">(</span><span class="identifier">opt</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"index"</span><span class="plain">)) {</span>
<span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">swarm_mode</span><span class="plain"> = </span><span class="constant">SWARM_INDEX_SWM</span><span class="plain">;</span>
@ -484,7 +497,7 @@ Otherwise, a range is a chapter number/letter, or a section range.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Configuration::set_fundamental_mode<button class="popup" onclick="togglePopup('usagePopup8')">...<span class="popuptext" id="usagePopup8">Usage of <b>Configuration::set_fundamental_mode</b>:<br><a href="#SP3">&#167;3</a></span></button></span><span class="plain">(</span><span class="reserved">inweb_instructions</span><span class="plain"> *</span><span class="identifier">args</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">new_material</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Configuration::set_fundamental_mode<button class="popup" onclick="togglePopup('usagePopup7')">...<span class="popuptext" id="usagePopup7">Usage of <b>Configuration::set_fundamental_mode</b>:<br><a href="#SP3">&#167;3</a></span></button></span><span class="plain">(</span><span class="reserved">inweb_instructions</span><span class="plain"> *</span><span class="identifier">args</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">new_material</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">args</span><span class="plain">-&gt;</span><span class="identifier">inweb_mode</span><span class="plain"> != </span><span class="constant">NO_MODE</span><span class="plain">) &amp;&amp; (</span><span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">inweb_mode</span><span class="plain"> != </span><span class="identifier">new_material</span><span class="plain">))</span>
<span class="functiontext"><a href="3-em.html#SP2">Errors::fatal</a></span><span class="plain">(</span><span class="string">"can only do one at a time - weaving, tangling or analysing"</span><span class="plain">);</span>
<span class="identifier">args</span><span class="plain">-&gt;</span><span class="element">inweb_mode</span><span class="plain"> = </span><span class="identifier">new_material</span><span class="plain">;</span>

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Program Control' 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#1">Chapter 1: Top Level</a></li><li><b>Program Control</b></li></ul><p class="purpose">The top level, which decides what is to be done and then carries this plan out.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">inweb</a></li><li><a href="index.html#1">Chapter 1: Top Level</a></li><li><b>Program Control</b></li></ul><p class="purpose">The top level, which decides what is to be done and then carries this plan out.</p>
<ul class="toc"><li><a href="#SP6">&#167;6. Main routine</a></li><li><a href="#SP7">&#167;7. Following instructions</a></li><li><a href="#SP8">&#167;8. Error messages</a></li></ul><hr class="tocbar">
@ -109,7 +114,7 @@ subfolder called <code class="display"><span class="extract">Materials</span></c
<p class="inwebparagraph"><a id="SP6"></a><b>&#167;6. Main routine. </b></p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">main<button class="popup" onclick="togglePopup('usagePopup0')">...<span class="popuptext" id="usagePopup0">Usage of <b>main</b>:<br><a href="#SP7_4_2">&#167;7.4.2</a>, Web Modules - <a href="8-wm.html#SP3">&#167;3</a><br>Configuration - <a href="1-cnf.html#SP1">&#167;1</a><br>Types and Functions - <a href="4-taf.html#SP7_3">&#167;7.3</a></span></button></span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">argc</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> **</span><span class="identifier">argv</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">main</span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">argc</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> **</span><span class="identifier">argv</span><span class="plain">) {</span>
&lt;<span class="cwebmacro">Initialise inweb</span> <span class="cwebmacronumber">6.1</span>&gt;<span class="plain">;</span>
<span class="reserved">inweb_instructions</span><span class="plain"> </span><span class="identifier">args</span><span class="plain"> = </span><span class="functiontext"><a href="1-cnf.html#SP2">Configuration::read</a></span><span class="plain">(</span><span class="identifier">argc</span><span class="plain">, </span><span class="identifier">argv</span><span class="plain">);</span>
<span class="identifier">fundamental_mode</span><span class="plain"> = </span><span class="identifier">args</span><span class="plain">.</span><span class="element">inweb_mode</span><span class="plain">;</span>
@ -159,7 +164,7 @@ program: some input, some thinking, a choice of three forms of output.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Main::follow_instructions<button class="popup" onclick="togglePopup('usagePopup1')">...<span class="popuptext" id="usagePopup1">Usage of <b>Main::follow_instructions</b>:<br><a href="#SP6">&#167;6</a></span></button></span><span class="plain">(</span><span class="reserved">inweb_instructions</span><span class="plain"> *</span><span class="identifier">ins</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Main::follow_instructions<button class="popup" onclick="togglePopup('usagePopup0')">...<span class="popuptext" id="usagePopup0">Usage of <b>Main::follow_instructions</b>:<br><a href="#SP6">&#167;6</a></span></button></span><span class="plain">(</span><span class="reserved">inweb_instructions</span><span class="plain"> *</span><span class="identifier">ins</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">NULL</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">ins</span><span class="plain">-&gt;</span><span class="identifier">chosen_web</span><span class="plain">) || (</span><span class="identifier">ins</span><span class="plain">-&gt;</span><span class="element">chosen_file</span><span class="plain">)) {</span>
<span class="identifier">W</span><span class="plain"> = </span><span class="functiontext"><a href="2-tr.html#SP4">Reader::load_web</a></span><span class="plain">(</span><span class="identifier">ins</span><span class="plain">-&gt;</span><span class="element">chosen_web</span><span class="plain">, </span><span class="identifier">ins</span><span class="plain">-&gt;</span><span class="element">chosen_file</span><span class="plain">,</span>
@ -421,6 +426,8 @@ which for many small webs will be the entire thing.
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">ins</span><span class="plain">-&gt;</span><span class="identifier">chosen_range_actually_chosen</span><span class="plain"> == </span><span class="constant">FALSE</span><span class="plain">) &amp;&amp; (</span><span class="identifier">ins</span><span class="plain">-&gt;</span><span class="element">chosen_file</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">))</span>
<span class="functiontext"><a href="1-cnf.html#SP5">Configuration::set_range</a></span><span class="plain">(</span><span class="identifier">ins</span><span class="plain">, </span><span class="identifier">pattern</span><span class="plain">-&gt;</span><span class="element">default_range</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">ins</span><span class="plain">-&gt;</span><span class="element">colony_setting</span><span class="plain">) </span><span class="functiontext"><a href="6-cln.html#SP2">Colonies::load</a></span><span class="plain">(</span><span class="identifier">ins</span><span class="plain">-&gt;</span><span class="element">colony_setting</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">r</span><span class="plain"> = </span><span class="functiontext"><a href="5-fm.html#SP4">Formats::begin_weaving</a></span><span class="plain">(</span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">pattern</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">r</span><span class="plain"> != </span><span class="constant">SWARM_OFF_SWM</span><span class="plain">) </span><span class="identifier">ins</span><span class="plain">-&gt;</span><span class="element">swarm_mode</span><span class="plain"> = </span><span class="identifier">r</span><span class="plain">;</span>
&lt;<span class="cwebmacro">Assign section numbers for printing purposes</span> <span class="cwebmacronumber">7.4.3.2</span>&gt;<span class="plain">;</span>
@ -487,7 +494,7 @@ which for many small webs will be the entire thing.
<pre class="displaydefn">
<span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">; </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">k</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">section</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="2-tr.html#SP10">Reader::range_within</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">, </span><span class="identifier">ins</span><span class="plain">-&gt;</span><span class="element">chosen_range</span><span class="plain">))</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="2-tr.html#SP10">Reader::range_within</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">, </span><span class="identifier">ins</span><span class="plain">-&gt;</span><span class="element">chosen_range</span><span class="plain">))</span>
<span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">printed_number</span><span class="plain"> = </span><span class="identifier">k</span><span class="plain">++;</span>
</pre>
@ -501,7 +508,7 @@ source:
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Main::error_in_web<button class="popup" onclick="togglePopup('usagePopup2')">...<span class="popuptext" id="usagePopup2">Usage of <b>Main::error_in_web</b>:<br>Configuration - <a href="1-cnf.html#SP5">&#167;5</a><br>The Parser - <a href="2-tp.html#SP1_1_6_3">&#167;1.1.6.3</a>, <a href="2-tp.html#SP1_1_6_4">&#167;1.1.6.4</a>, <a href="2-tp.html#SP1_1_6_7">&#167;1.1.6.7</a>, <a href="2-tp.html#SP1_1_6_7_1">&#167;1.1.6.7.1</a>, <a href="2-tp.html#SP1_1_6_5_1">&#167;1.1.6.5.1</a>, <a href="2-tp.html#SP1_1_6_5_1_1">&#167;1.1.6.5.1.1</a>, <a href="2-tp.html#SP1_1_6_5_1_2">&#167;1.1.6.5.1.2</a>, <a href="2-tp.html#SP1_1_6_5_1_3">&#167;1.1.6.5.1.3</a>, <a href="2-tp.html#SP1_1_6_5_1_4">&#167;1.1.6.5.1.4</a>, <a href="2-tp.html#SP1_1_6_5_1_7">&#167;1.1.6.5.1.7</a>, <a href="2-tp.html#SP3">&#167;3</a><br>Enumerated Constants - <a href="2-ec.html#SP3_1">&#167;3.1</a>, <a href="2-ec.html#SP3_2">&#167;3.2</a>, <a href="2-ec.html#SP3_3">&#167;3.3</a><br>The Analyser - <a href="3-ta.html#SP4_1">&#167;4.1</a><br>The Weaver - <a href="3-tw.html#SP1_3_4_1_8_5">&#167;1.3.4.1.8.5</a><br>The Tangler - <a href="3-tt.html#SP1_1_1_1">&#167;1.1.1.1</a>, <a href="3-tt.html#SP3_1">&#167;3.1</a><br>Types and Functions - <a href="4-taf.html#SP7_3">&#167;7.3</a><br>Language Methods - <a href="4-lm.html#SP10">&#167;10</a><br>C-Like Languages - <a href="4-cl.html#SP3">&#167;3</a>, <a href="4-cl.html#SP3_1">&#167;3.1</a>, <a href="4-cl.html#SP3_2_2_1">&#167;3.2.2.1</a>, <a href="4-cl.html#SP9">&#167;9</a><br>Format Methods - <a href="5-fm.html#SP28">&#167;28</a><br>HTML Formats - <a href="5-hf.html#SP20">&#167;20</a><br>Weave Plugins - <a href="5-wp.html#SP3">&#167;3</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">message</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">sl</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Main::error_in_web<button class="popup" onclick="togglePopup('usagePopup1')">...<span class="popuptext" id="usagePopup1">Usage of <b>Main::error_in_web</b>:<br>Configuration - <a href="1-cnf.html#SP5">&#167;5</a><br>The Parser - <a href="2-tp.html#SP1_1_6_3">&#167;1.1.6.3</a>, <a href="2-tp.html#SP1_1_6_4">&#167;1.1.6.4</a>, <a href="2-tp.html#SP1_1_6_7">&#167;1.1.6.7</a>, <a href="2-tp.html#SP1_1_6_7_1">&#167;1.1.6.7.1</a>, <a href="2-tp.html#SP1_1_6_5_1">&#167;1.1.6.5.1</a>, <a href="2-tp.html#SP1_1_6_5_1_1">&#167;1.1.6.5.1.1</a>, <a href="2-tp.html#SP1_1_6_5_1_2">&#167;1.1.6.5.1.2</a>, <a href="2-tp.html#SP1_1_6_5_1_3">&#167;1.1.6.5.1.3</a>, <a href="2-tp.html#SP1_1_6_5_1_4">&#167;1.1.6.5.1.4</a>, <a href="2-tp.html#SP1_1_6_5_1_7">&#167;1.1.6.5.1.7</a>, <a href="2-tp.html#SP3">&#167;3</a><br>Enumerated Constants - <a href="2-ec.html#SP3_1">&#167;3.1</a>, <a href="2-ec.html#SP3_2">&#167;3.2</a>, <a href="2-ec.html#SP3_3">&#167;3.3</a><br>The Analyser - <a href="3-ta.html#SP4_1">&#167;4.1</a><br>The Weaver - <a href="3-tw.html#SP1_3_4_1_8_5">&#167;1.3.4.1.8.5</a><br>The Tangler - <a href="3-tt.html#SP1_1_1_1">&#167;1.1.1.1</a>, <a href="3-tt.html#SP3_1">&#167;3.1</a><br>Types and Functions - <a href="4-taf.html#SP7_3">&#167;7.3</a><br>Language Methods - <a href="4-lm.html#SP10">&#167;10</a><br>C-Like Languages - <a href="4-cl.html#SP3">&#167;3</a>, <a href="4-cl.html#SP3_1">&#167;3.1</a>, <a href="4-cl.html#SP3_2_2_1">&#167;3.2.2.1</a>, <a href="4-cl.html#SP9">&#167;9</a><br>HTML Formats - <a href="5-hf.html#SP20">&#167;20</a><br>Weave Plugins - <a href="5-wp.html#SP3">&#167;3</a><br>Colonies - <a href="6-cln.html#SP4">&#167;4</a>, <a href="6-cln.html#SP5">&#167;5</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">message</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">sl</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sl</span><span class="plain">) {</span>
<span class="functiontext"><a href="3-em.html#SP5">Errors::in_text_file_S</a></span><span class="plain">(</span><span class="identifier">message</span><span class="plain">, &amp;(</span><span class="identifier">sl</span><span class="plain">-&gt;</span><span class="element">source</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">"%07d %S\n"</span><span class="plain">, </span><span class="identifier">sl</span><span class="plain">-&gt;</span><span class="element">source</span><span class="plain">.</span><span class="element">line_count</span><span class="plain">, </span><span class="identifier">sl</span><span class="plain">-&gt;</span><span class="element">text</span><span class="plain">);</span>

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Patterns' 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#1">Chapter 1: Top Level</a></li><li><b>Patterns</b></li></ul><p class="purpose">Managing weave patterns, which are bundled configuration settings for weaving.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">inweb</a></li><li><a href="index.html#1">Chapter 1: Top Level</a></li><li><b>Patterns</b></li></ul><p class="purpose">Managing weave patterns, which are bundled configuration settings for weaving.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Reading in</a></li><li><a href="#SP5">&#167;5. Obtaining files</a></li></ul><hr class="tocbar">
@ -68,7 +73,7 @@ to such a name, and to read it in. This structure holds the result:
</p>
<pre class="display">
<span class="reserved">weave_pattern</span><span class="plain"> *</span><span class="functiontext">Patterns::find<button class="popup" onclick="togglePopup('usagePopup9')">...<span class="popuptext" id="usagePopup9">Usage of <b>Patterns::find</b>:<br><a href="#SP3_1">&#167;3.1</a>, Program Control - <a href="1-pc.html#SP7_4_3">&#167;7.4.3</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
<span class="reserved">weave_pattern</span><span class="plain"> *</span><span class="functiontext">Patterns::find<button class="popup" onclick="togglePopup('usagePopup8')">...<span class="popuptext" id="usagePopup8">Usage of <b>Patterns::find</b>:<br><a href="#SP3_1">&#167;3.1</a>, Program Control - <a href="1-pc.html#SP7_4_3">&#167;7.4.3</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
<span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">pattern_file</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">weave_pattern</span><span class="plain"> *</span><span class="identifier">wp</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">weave_pattern</span><span class="plain">);</span>
&lt;<span class="cwebmacro">Initialise the pattern structure</span> <span class="cwebmacronumber">2.1</span>&gt;<span class="plain">;</span>
@ -153,7 +158,7 @@ following routine:
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Patterns::scan_pattern_line<button class="popup" onclick="togglePopup('usagePopup10')">...<span class="popuptext" id="usagePopup10">Usage of <b>Patterns::scan_pattern_line</b>:<br><a href="#SP2_3">&#167;2.3</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">line</span><span class="plain">, </span><span class="reserved">text_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">X</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Patterns::scan_pattern_line<button class="popup" onclick="togglePopup('usagePopup9')">...<span class="popuptext" id="usagePopup9">Usage of <b>Patterns::scan_pattern_line</b>:<br><a href="#SP2_3">&#167;2.3</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">line</span><span class="plain">, </span><span class="reserved">text_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">X</span><span class="plain">) {</span>
<span class="reserved">weave_pattern</span><span class="plain"> *</span><span class="identifier">wp</span><span class="plain"> = (</span><span class="reserved">weave_pattern</span><span class="plain"> *) </span><span class="identifier">X</span><span class="plain">;</span>
<span class="reserved">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="functiontext"><a href="4-pm.html#SP9">Regexp::create_mr</a></span><span class="plain">();</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-pm.html#SP10">Regexp::match</a></span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">line</span><span class="plain">, </span><span class="identifier">L</span><span class="string">" *from (%c+)"</span><span class="plain">)) </span>&lt;<span class="cwebmacro">This is a from command</span> <span class="cwebmacronumber">3.1</span>&gt;<span class="plain">;</span>
@ -312,7 +317,7 @@ actual location will depend on where the pattern directory is.
<p class="inwebparagraph"><a id="SP4"></a><b>&#167;4. </b></p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Patterns::yes_or_no<button class="popup" onclick="togglePopup('usagePopup11')">...<span class="popuptext" id="usagePopup11">Usage of <b>Patterns::yes_or_no</b>:<br><a href="#SP3_2">&#167;3.2</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">arg</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">int</span><span class="plain"> </span><span class="functiontext">Patterns::yes_or_no<button class="popup" onclick="togglePopup('usagePopup10')">...<span class="popuptext" id="usagePopup10">Usage of <b>Patterns::yes_or_no</b>:<br><a href="#SP3_2">&#167;3.2</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">arg</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"><a href="4-sm.html#SP18">Str::eq</a></span><span class="plain">(</span><span class="identifier">arg</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"yes"</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP18">Str::eq</a></span><span class="plain">(</span><span class="identifier">arg</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"no"</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="functiontext"><a href="3-em.html#SP5">Errors::in_text_file</a></span><span class="plain">(</span><span class="string">"setting must be 'yes' or 'no'"</span><span class="plain">, </span><span class="identifier">tfp</span><span class="plain">);</span>
@ -334,7 +339,7 @@ from each other then this routine will lock up into an infinite loop.
</p>
<pre class="display">
<span class="reserved">filename</span><span class="plain"> *</span><span class="functiontext">Patterns::obtain_filename<button class="popup" onclick="togglePopup('usagePopup12')">...<span class="popuptext" id="usagePopup12">Usage of <b>Patterns::obtain_filename</b>:<br><a href="#SP6">&#167;6</a>, The Swarm - <a href="3-ts.html#SP4">&#167;4</a><br>The Indexer - <a href="3-ti.html#SP1">&#167;1</a>, <a href="3-ti.html#SP2">&#167;2</a>, <a href="3-ti.html#SP2_1_3">&#167;2.1.3</a>, <a href="3-ti.html#SP5_1">&#167;5.1</a><br>TeX Format - <a href="5-tf.html#SP3_1">&#167;3.1</a><br>HTML Formats - <a href="5-hf.html#SP6">&#167;6</a>, <a href="5-hf.html#SP9">&#167;9</a>, <a href="5-hf.html#SP32">&#167;32</a></span></button></span><span class="plain">(</span><span class="reserved">weave_pattern</span><span class="plain"> *</span><span class="identifier">pattern</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">leafname</span><span class="plain">) {</span>
<span class="reserved">filename</span><span class="plain"> *</span><span class="functiontext">Patterns::obtain_filename<button class="popup" onclick="togglePopup('usagePopup11')">...<span class="popuptext" id="usagePopup11">Usage of <b>Patterns::obtain_filename</b>:<br><a href="#SP6">&#167;6</a>, The Swarm - <a href="3-ts.html#SP4">&#167;4</a><br>The Indexer - <a href="3-ti.html#SP1">&#167;1</a>, <a href="3-ti.html#SP2">&#167;2</a>, <a href="3-ti.html#SP2_1_3">&#167;2.1.3</a>, <a href="3-ti.html#SP5_1">&#167;5.1</a><br>TeX Format - <a href="5-tf.html#SP3_1">&#167;3.1</a><br>HTML Formats - <a href="5-hf.html#SP6">&#167;6</a>, <a href="5-hf.html#SP9">&#167;9</a>, <a href="5-hf.html#SP32">&#167;32</a></span></button></span><span class="plain">(</span><span class="reserved">weave_pattern</span><span class="plain"> *</span><span class="identifier">pattern</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">leafname</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP20">Str::prefix_eq</a></span><span class="plain">(</span><span class="identifier">leafname</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"../"</span><span class="plain">, </span><span class="constant">3</span><span class="plain">)) {</span>
<span class="functiontext"><a href="4-sm.html#SP24">Str::delete_first_character</a></span><span class="plain">(</span><span class="identifier">leafname</span><span class="plain">);</span>
<span class="functiontext"><a href="4-sm.html#SP24">Str::delete_first_character</a></span><span class="plain">(</span><span class="identifier">leafname</span><span class="plain">);</span>
@ -354,7 +359,7 @@ for payloads to be copied into weave, we make good use of the above:
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Patterns::copy_payloads_into_weave<button class="popup" onclick="togglePopup('usagePopup13')">...<span class="popuptext" id="usagePopup13">Usage of <b>Patterns::copy_payloads_into_weave</b>:<br>The Swarm - <a href="3-ts.html#SP4">&#167;4</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">weave_pattern</span><span class="plain"> *</span><span class="identifier">pattern</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Patterns::copy_payloads_into_weave<button class="popup" onclick="togglePopup('usagePopup12')">...<span class="popuptext" id="usagePopup12">Usage of <b>Patterns::copy_payloads_into_weave</b>:<br>The Swarm - <a href="3-ts.html#SP4">&#167;4</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">weave_pattern</span><span class="plain"> *</span><span class="identifier">pattern</span><span class="plain">) {</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">leafname</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">leafname</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain">, </span><span class="identifier">pattern</span><span class="plain">-&gt;</span><span class="element">payloads</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"><a href="#SP5">Patterns::obtain_filename</a></span><span class="plain">(</span><span class="identifier">pattern</span><span class="plain">, </span><span class="identifier">leafname</span><span class="plain">);</span>
@ -380,12 +385,12 @@ for payloads to be copied into weave, we make good use of the above:
<p class="inwebparagraph"><a id="SP7"></a><b>&#167;7. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Patterns::copy_file_into_weave<button class="popup" onclick="togglePopup('usagePopup14')">...<span class="popuptext" id="usagePopup14">Usage of <b>Patterns::copy_file_into_weave</b>:<br><a href="#SP6">&#167;6</a>, HTML Formats - <a href="5-hf.html#SP6">&#167;6</a>, <a href="5-hf.html#SP9">&#167;9</a>, <a href="5-hf.html#SP19">&#167;19</a><br>Weave Plugins - <a href="5-wp.html#SP3">&#167;3</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Patterns::copy_file_into_weave<button class="popup" onclick="togglePopup('usagePopup13')">...<span class="popuptext" id="usagePopup13">Usage of <b>Patterns::copy_file_into_weave</b>:<br><a href="#SP6">&#167;6</a>, HTML Formats - <a href="5-hf.html#SP6">&#167;6</a>, <a href="5-hf.html#SP9">&#167;9</a>, <a href="5-hf.html#SP19">&#167;19</a><br>Weave Plugins - <a href="5-wp.html#SP3">&#167;3</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">) {</span>
<span class="reserved">pathname</span><span class="plain"> *</span><span class="identifier">H</span><span class="plain"> = </span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">redirect_weaves_to</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">H</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">H</span><span class="plain"> = </span><span class="functiontext"><a href="2-tr.html#SP7">Reader::woven_folder</a></span><span class="plain">(</span><span class="identifier">W</span><span class="plain">);</span>
<span class="functiontext"><a href="3-shl.html#SP3">Shell::copy</a></span><span class="plain">(</span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">H</span><span class="plain">, </span><span class="string">""</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Patterns::copy_up_file_into_weave<button class="popup" onclick="togglePopup('usagePopup15')">...<span class="popuptext" id="usagePopup15">Usage of <b>Patterns::copy_up_file_into_weave</b>:<br><a href="#SP6">&#167;6</a>, HTML Formats - <a href="5-hf.html#SP6">&#167;6</a>, <a href="5-hf.html#SP9">&#167;9</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Patterns::copy_up_file_into_weave<button class="popup" onclick="togglePopup('usagePopup14')">...<span class="popuptext" id="usagePopup14">Usage of <b>Patterns::copy_up_file_into_weave</b>:<br><a href="#SP6">&#167;6</a>, HTML Formats - <a href="5-hf.html#SP6">&#167;6</a>, <a href="5-hf.html#SP9">&#167;9</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">) {</span>
<span class="reserved">pathname</span><span class="plain"> *</span><span class="identifier">H</span><span class="plain"> = </span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">redirect_weaves_to</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">H</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">H</span><span class="plain"> = </span><span class="functiontext"><a href="2-tr.html#SP7">Reader::woven_folder</a></span><span class="plain">(</span><span class="identifier">W</span><span class="plain">);</span>
<span class="identifier">H</span><span class="plain"> = </span><span class="functiontext"><a href="3-pth.html#SP7">Pathnames::up</a></span><span class="plain">(</span><span class="identifier">H</span><span class="plain">);</span>

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Enumerated Constants' 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#2">Chapter 2: Parsing a Web</a></li><li><b>Enumerated Constants</b></li></ul><p class="purpose">To define sequentially numbered values for families of constants.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">inweb</a></li><li><a href="index.html#2">Chapter 2: Parsing a Web</a></li><li><b>Enumerated Constants</b></li></ul><p class="purpose">To define sequentially numbered values for families of constants.</p>
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. </b>The idea here is that each enumeration set is a sequence of named constants
with a given postfix: for example, <code class="display"><span class="extract">HARRY_ST</span></code>, <code class="display"><span class="extract">NEVILLE_ST</span></code>, <code class="display"><span class="extract">ANGELINA_ST</span></code>
@ -57,7 +62,7 @@ compare all against all:
</p>
<pre class="display">
<span class="reserved">enumeration_set</span><span class="plain"> *</span><span class="functiontext">Enumerations::find<button class="popup" onclick="togglePopup('usagePopup47')">...<span class="popuptext" id="usagePopup47">Usage of <b>Enumerations::find</b>:<br><a href="#SP3">&#167;3</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">post</span><span class="plain">) {</span>
<span class="reserved">enumeration_set</span><span class="plain"> *</span><span class="functiontext">Enumerations::find<button class="popup" onclick="togglePopup('usagePopup46')">...<span class="popuptext" id="usagePopup46">Usage of <b>Enumerations::find</b>:<br><a href="#SP3">&#167;3</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">post</span><span class="plain">) {</span>
<span class="reserved">enumeration_set</span><span class="plain"> *</span><span class="identifier">es</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">es</span><span class="plain">, </span><span class="reserved">enumeration_set</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP18">Str::eq</a></span><span class="plain">(</span><span class="identifier">post</span><span class="plain">, </span><span class="identifier">es</span><span class="plain">-&gt;</span><span class="element">postfix</span><span class="plain">))</span>
@ -74,7 +79,7 @@ a further constant in what ought to be an existing set.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Enumerations::define<button class="popup" onclick="togglePopup('usagePopup48')">...<span class="popuptext" id="usagePopup48">Usage of <b>Enumerations::define</b>:<br>The Parser - <a href="2-tp.html#SP1_1_6_5_1_7">&#167;1.1.6.5.1.7</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">symbol</span><span class="plain">,</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Enumerations::define<button class="popup" onclick="togglePopup('usagePopup47')">...<span class="popuptext" id="usagePopup47">Usage of <b>Enumerations::define</b>:<br>The Parser - <a href="2-tp.html#SP1_1_6_5_1_7">&#167;1.1.6.5.1.7</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">symbol</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">from</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">pf</span><span class="plain">);</span>
&lt;<span class="cwebmacro">Find the postfix in this symbol name</span> <span class="cwebmacronumber">3.1</span>&gt;<span class="plain">;</span>
@ -165,7 +170,7 @@ the code at the last line on which an <code class="display"><span class="extract
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Enumerations::define_extents<button class="popup" onclick="togglePopup('usagePopup49')">...<span class="popuptext" id="usagePopup49">Usage of <b>Enumerations::define_extents</b>:<br>The Tangler - <a href="3-tt.html#SP1_1_1">&#167;1.1.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">tangle_target</span><span class="plain"> *</span><span class="identifier">target</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">lang</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Enumerations::define_extents<button class="popup" onclick="togglePopup('usagePopup48')">...<span class="popuptext" id="usagePopup48">Usage of <b>Enumerations::define_extents</b>:<br>The Tangler - <a href="3-tt.html#SP1_1_1">&#167;1.1.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">tangle_target</span><span class="plain"> *</span><span class="identifier">target</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">lang</span><span class="plain">) {</span>
<span class="reserved">enumeration_set</span><span class="plain"> *</span><span class="identifier">es</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">es</span><span class="plain">, </span><span class="reserved">enumeration_set</span><span class="plain">) {</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">symbol</span><span class="plain">);</span>

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Line Categories' 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#2">Chapter 2: Parsing a Web</a></li><li><b>Line Categories</b></li></ul><p class="purpose">To store individual lines from webs, and to categorise them according to their meaning.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">inweb</a></li><li><a href="index.html#2">Chapter 2: Parsing a Web</a></li><li><b>Line Categories</b></li></ul><p class="purpose">To store individual lines from webs, and to categorise them according to their meaning.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Line storage</a></li><li><a href="#SP3">&#167;3. Categories</a></li><li><a href="#SP5">&#167;5. Command codes</a></li></ul><hr class="tocbar">
@ -71,12 +76,13 @@ correspond to one of these:
<p class="inwebparagraph"></p>
<p class="endnote">The structure source_line is accessed in 1/pc, 2/tr, 2/tp, 2/pm, 2/ec, 2/pn, 3/ta, 3/tw, 3/tt, 4/taf, 4/lm, 4/as, 4/cl, 4/is, 5/fm, 5/tf, 5/hf and here.</p>
<p class="endnote">The structure source_line is accessed in 1/pc, 2/tr, 2/tp, 2/pm, 2/ec, 2/pn, 3/ta, 3/tw, 3/tt, 4/taf, 4/lm, 4/as, 4/cl, 4/is, 5/tf, 5/hf, 6/cln and here.</p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. </b></p>
<pre class="display">
<span class="reserved">source_line</span><span class="plain"> *</span><span class="functiontext">Lines::new_source_line<button class="popup" onclick="togglePopup('usagePopup31')">...<span class="popuptext" id="usagePopup31">Usage of <b>Lines::new_source_line</b>:<br>The Reader - <a href="2-tr.html#SP6_1_2">&#167;6.1.2</a><br>The Parser - <a href="2-tp.html#SP1_1_5_1">&#167;1.1.5.1</a>, <a href="2-tp.html#SP1_1_6_7_2">&#167;1.1.6.7.2</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">line</span><span class="plain">, </span><span class="reserved">text_file_position</span><span class="plain"> *</span><span class="identifier">tfp</span><span class="plain">) {</span>
<span class="reserved">source_line</span><span class="plain"> *</span><span class="functiontext">Lines::new_source_line_in<button class="popup" onclick="togglePopup('usagePopup30')">...<span class="popuptext" id="usagePopup30">Usage of <b>Lines::new_source_line_in</b>:<br>The Reader - <a href="2-tr.html#SP6_1_2">&#167;6.1.2</a><br>The Parser - <a href="2-tp.html#SP1_1_5_1">&#167;1.1.5.1</a>, <a href="2-tp.html#SP1_1_6_7_2">&#167;1.1.6.7.2</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">line</span><span class="plain">, </span><span class="reserved">text_file_position</span><span class="plain"> *</span><span class="identifier">tfp</span><span class="plain">,</span>
<span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">) {</span>
<span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">sl</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">source_line</span><span class="plain">);</span>
<span class="identifier">sl</span><span class="plain">-&gt;</span><span class="element">text</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP3">Str::duplicate</a></span><span class="plain">(</span><span class="identifier">line</span><span class="plain">);</span>
<span class="identifier">sl</span><span class="plain">-&gt;</span><span class="element">text_operand</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP2">Str::new</a></span><span class="plain">();</span>
@ -96,7 +102,10 @@ correspond to one of these:
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">tfp</span><span class="plain">) </span><span class="identifier">sl</span><span class="plain">-&gt;</span><span class="element">source</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">sl</span><span class="plain">-&gt;</span><span class="element">source</span><span class="plain"> = </span><span class="functiontext"><a href="4-tf.html#SP4">TextFiles::nowhere</a></span><span class="plain">();</span>
<span class="identifier">sl</span><span class="plain">-&gt;</span><span class="element">owning_section</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">sl</span><span class="plain">-&gt;</span><span class="element">owning_section</span><span class="plain"> = </span><span class="identifier">S</span><span class="plain">;</span>
<span class="identifier">sl</span><span class="plain">-&gt;</span><span class="element">owning_section</span><span class="plain">-&gt;</span><span class="element">sect_extent</span><span class="plain">++;</span>
<span class="identifier">sl</span><span class="plain">-&gt;</span><span class="element">owning_section</span><span class="plain">-&gt;</span><span class="element">owning_chapter</span><span class="plain">-&gt;</span><span class="element">owning_web</span><span class="plain">-&gt;</span><span class="element">web_extent</span><span class="plain">++;</span>
<span class="identifier">sl</span><span class="plain">-&gt;</span><span class="element">next_line</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">sl</span><span class="plain">-&gt;</span><span class="element">owning_paragraph</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">sl</span><span class="plain">;</span>
@ -145,7 +154,7 @@ of Inweb:
</p>
<pre class="display">
<span class="reserved">char</span><span class="plain"> *</span><span class="functiontext">Lines::category_name<button class="popup" onclick="togglePopup('usagePopup32')">...<span class="popuptext" id="usagePopup32">Usage of <b>Lines::category_name</b>:<br>The Analyser - <a href="3-ta.html#SP1_1">&#167;1.1</a></span></button></span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">cat</span><span class="plain">) {</span>
<span class="reserved">char</span><span class="plain"> *</span><span class="functiontext">Lines::category_name<button class="popup" onclick="togglePopup('usagePopup31')">...<span class="popuptext" id="usagePopup31">Usage of <b>Lines::category_name</b>:<br>The Analyser - <a href="3-ta.html#SP1_1">&#167;1.1</a></span></button></span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">cat</span><span class="plain">) {</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">cat</span><span class="plain">) {</span>
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">NO_LCAT:</span><span class="plain"> </span><span class="reserved">return</span><span class="plain"> </span><span class="string">"(uncategorised)"</span><span class="plain">;</span>

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Paragraph Macros' 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#2">Chapter 2: Parsing a Web</a></li><li><b>Paragraph Macros</b></li></ul><p class="purpose">To manage the set of named paragraph macros in a section.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">inweb</a></li><li><a href="index.html#2">Chapter 2: Parsing a Web</a></li><li><b>Paragraph Macros</b></li></ul><p class="purpose">To manage the set of named paragraph macros in a section.</p>
<ul class="toc"><li><a href="#SP3">&#167;3. Paragraph macro search</a></li></ul><hr class="tocbar">
@ -51,7 +56,7 @@ the usage of these is always a single section.
</p>
<pre class="display">
<span class="reserved">para_macro</span><span class="plain"> *</span><span class="functiontext">Macros::create<button class="popup" onclick="togglePopup('usagePopup37')">...<span class="popuptext" id="usagePopup37">Usage of <b>Macros::create</b>:<br>The Parser - <a href="2-tp.html#SP1_1_6_4">&#167;1.1.6.4</a></span></button></span><span class="plain">(</span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
<span class="reserved">para_macro</span><span class="plain"> *</span><span class="functiontext">Macros::create<button class="popup" onclick="togglePopup('usagePopup36')">...<span class="popuptext" id="usagePopup36">Usage of <b>Macros::create</b>:<br>The Parser - <a href="2-tp.html#SP1_1_6_4">&#167;1.1.6.4</a></span></button></span><span class="plain">(</span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
<span class="reserved">para_macro</span><span class="plain"> *</span><span class="identifier">pmac</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">para_macro</span><span class="plain">);</span>
<span class="identifier">pmac</span><span class="plain">-&gt;</span><span class="element">macro_name</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP3">Str::duplicate</a></span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
<span class="identifier">pmac</span><span class="plain">-&gt;</span><span class="element">defining_paragraph</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">;</span>
@ -72,7 +77,7 @@ much faster.
</p>
<pre class="display">
<span class="reserved">para_macro</span><span class="plain"> *</span><span class="functiontext">Macros::find_by_name<button class="popup" onclick="togglePopup('usagePopup38')">...<span class="popuptext" id="usagePopup38">Usage of <b>Macros::find_by_name</b>:<br>Paragraph Numbering - <a href="2-pn.html#SP1_1">&#167;1.1</a><br>The Weaver - <a href="3-tw.html#SP1_3_4_1_9_6">&#167;1.3.4.1.9.6</a><br>The Tangler - <a href="3-tt.html#SP3_1">&#167;3.1</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">scope</span><span class="plain">) {</span>
<span class="reserved">para_macro</span><span class="plain"> *</span><span class="functiontext">Macros::find_by_name<button class="popup" onclick="togglePopup('usagePopup37')">...<span class="popuptext" id="usagePopup37">Usage of <b>Macros::find_by_name</b>:<br>Paragraph Numbering - <a href="2-pn.html#SP1_1">&#167;1.1</a><br>The Weaver - <a href="3-tw.html#SP1_3_4_1_9_6">&#167;1.3.4.1.9.6</a><br>The Tangler - <a href="3-tt.html#SP3_1">&#167;3.1</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">scope</span><span class="plain">) {</span>
<span class="reserved">para_macro</span><span class="plain"> *</span><span class="identifier">pmac</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">pmac</span><span class="plain">, </span><span class="reserved">para_macro</span><span class="plain">, </span><span class="identifier">scope</span><span class="plain">-&gt;</span><span class="element">macros</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP18">Str::eq</a></span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">pmac</span><span class="plain">-&gt;</span><span class="element">macro_name</span><span class="plain">))</span>

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Paragraph Numbering' 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#2">Chapter 2: Parsing a Web</a></li><li><b>Paragraph Numbering</b></li></ul><p class="purpose">To work out paragraph numbers within each section.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">inweb</a></li><li><a href="index.html#2">Chapter 2: Parsing a Web</a></li><li><b>Paragraph Numbering</b></li></ul><p class="purpose">To work out paragraph numbers within each section.</p>
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. </b>Traditional LP tools have numbered paragraphs in the obvious way, starting
from 1 and working up to what may be an enormous number. (The web for Knuth's
@ -44,7 +49,7 @@ because tangled code doesn't need to know its own paragraph numbers.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Numbering::number_web<button class="popup" onclick="togglePopup('usagePopup50')">...<span class="popuptext" id="usagePopup50">Usage of <b>Numbering::number_web</b>:<br>Program Control - <a href="1-pc.html#SP7_4_3">&#167;7.4.3</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Numbering::number_web<button class="popup" onclick="togglePopup('usagePopup49')">...<span class="popuptext" id="usagePopup49">Usage of <b>Numbering::number_web</b>:<br>Program Control - <a href="1-pc.html#SP7_4_3">&#167;7.4.3</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">chapter</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">;</span>
<span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, </span><span class="reserved">chapter</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">chapters</span><span class="plain">) {</span>
@ -266,7 +271,7 @@ chosen by the author, so 2 it is.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Numbering::settle_paragraph_number<button class="popup" onclick="togglePopup('usagePopup51')">...<span class="popuptext" id="usagePopup51">Usage of <b>Numbering::settle_paragraph_number</b>:<br><a href="#SP1_2_5">&#167;1.2.5</a></span></button></span><span class="plain">(</span><span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Numbering::settle_paragraph_number<button class="popup" onclick="togglePopup('usagePopup50')">...<span class="popuptext" id="usagePopup50">Usage of <b>Numbering::settle_paragraph_number</b>:<br><a href="#SP1_2_5">&#167;1.2.5</a></span></button></span><span class="plain">(</span><span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="element">paragraph_number</span><span class="plain">) &gt; </span><span class="constant">0</span><span class="plain">) </span><span class="reserved">return</span><span class="plain">;</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="element">paragraph_number</span><span class="plain">, </span><span class="string">"X"</span><span class="plain">); </span><span class="comment"> to prevent malformed sections hanging this</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="element">parent_paragraph</span><span class="plain">) </span><span class="functiontext"><a href="#SP2">Numbering::settle_paragraph_number</a></span><span class="plain">(</span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="element">parent_paragraph</span><span class="plain">);</span>

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Tags' 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#2">Chapter 2: Parsing a Web</a></li><li><b>Tags</b></li></ul><p class="purpose">Thematic tags can be attached to certain paragraphs, some automatically by Inweb, others manually by the author.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">inweb</a></li><li><a href="index.html#2">Chapter 2: Parsing a Web</a></li><li><b>Tags</b></li></ul><p class="purpose">Thematic tags can be attached to certain paragraphs, some automatically by Inweb, others manually by the author.</p>
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. </b>A tag really is just a textual name. Each differently-named tag leads
to one of the following being created:
@ -50,7 +55,7 @@ many differently-named tags in a given web.
</p>
<pre class="display">
<span class="reserved">theme_tag</span><span class="plain"> *</span><span class="functiontext">Tags::find_by_name<button class="popup" onclick="togglePopup('usagePopup39')">...<span class="popuptext" id="usagePopup39">Usage of <b>Tags::find_by_name</b>:<br><a href="#SP4">&#167;4</a>, Program Control - <a href="1-pc.html#SP7_4_3">&#167;7.4.3</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">creating_if_necessary</span><span class="plain">) {</span>
<span class="reserved">theme_tag</span><span class="plain"> *</span><span class="functiontext">Tags::find_by_name<button class="popup" onclick="togglePopup('usagePopup38')">...<span class="popuptext" id="usagePopup38">Usage of <b>Tags::find_by_name</b>:<br><a href="#SP4">&#167;4</a>, Program Control - <a href="1-pc.html#SP7_4_3">&#167;7.4.3</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">creating_if_necessary</span><span class="plain">) {</span>
<span class="reserved">theme_tag</span><span class="plain"> *</span><span class="identifier">tag</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">tag</span><span class="plain">, </span><span class="reserved">theme_tag</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP18">Str::eq</a></span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">tag</span><span class="plain">-&gt;</span><span class="element">tag_name</span><span class="plain">))</span>
@ -88,7 +93,7 @@ they're stored as a linked list within each paragraph.
<span class="constant">MEMORY_MANAGEMENT</span>
<span class="plain">} </span><span class="reserved">paragraph_tagging</span><span class="plain">;</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Tags::add_to_paragraph<button class="popup" onclick="togglePopup('usagePopup40')">...<span class="popuptext" id="usagePopup40">Usage of <b>Tags::add_to_paragraph</b>:<br><a href="#SP4">&#167;4</a>, The Parser - <a href="2-tp.html#SP1_1_3">&#167;1.1.3</a><br>InC Support - <a href="4-is.html#SP3_1_3_5">&#167;3.1.3.5</a></span></button></span><span class="plain">(</span><span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">, </span><span class="reserved">theme_tag</span><span class="plain"> *</span><span class="identifier">tag</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">caption</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Tags::add_to_paragraph<button class="popup" onclick="togglePopup('usagePopup39')">...<span class="popuptext" id="usagePopup39">Usage of <b>Tags::add_to_paragraph</b>:<br><a href="#SP4">&#167;4</a>, The Parser - <a href="2-tp.html#SP1_1_3">&#167;1.1.3</a><br>InC Support - <a href="4-is.html#SP3_1_3_5">&#167;3.1.3.5</a></span></button></span><span class="plain">(</span><span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">, </span><span class="reserved">theme_tag</span><span class="plain"> *</span><span class="identifier">tag</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">caption</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain">) {</span>
<span class="reserved">paragraph_tagging</span><span class="plain"> *</span><span class="identifier">pt</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">paragraph_tagging</span><span class="plain">);</span>
<span class="identifier">pt</span><span class="plain">-&gt;</span><span class="element">the_tag</span><span class="plain"> = </span><span class="identifier">tag</span><span class="plain">;</span>
@ -109,7 +114,7 @@ the tag is <code class="display"><span class="extract">History</span></code>, th
</p>
<pre class="display">
<span class="reserved">theme_tag</span><span class="plain"> *</span><span class="functiontext">Tags::add_by_name<button class="popup" onclick="togglePopup('usagePopup41')">...<span class="popuptext" id="usagePopup41">Usage of <b>Tags::add_by_name</b>:<br>The Reader - <a href="2-tr.html#SP4_4">&#167;4.4</a><br>The Parser - <a href="2-tp.html#SP1_1_2">&#167;1.1.2</a>, <a href="2-tp.html#SP1_1_6_3">&#167;1.1.6.3</a>, <a href="2-tp.html#SP1_1_6_7">&#167;1.1.6.7</a><br>Types and Functions - <a href="4-taf.html#SP2_2">&#167;2.2</a><br>C-Like Languages - <a href="4-cl.html#SP2_1">&#167;2.1</a></span></button></span><span class="plain">(</span><span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text</span><span class="plain">) {</span>
<span class="reserved">theme_tag</span><span class="plain"> *</span><span class="functiontext">Tags::add_by_name<button class="popup" onclick="togglePopup('usagePopup40')">...<span class="popuptext" id="usagePopup40">Usage of <b>Tags::add_by_name</b>:<br>The Reader - <a href="2-tr.html#SP4_4">&#167;4.4</a><br>The Parser - <a href="2-tp.html#SP1_1_2">&#167;1.1.2</a>, <a href="2-tp.html#SP1_1_6_3">&#167;1.1.6.3</a>, <a href="2-tp.html#SP1_1_6_7">&#167;1.1.6.7</a><br>Types and Functions - <a href="4-taf.html#SP2_2">&#167;2.2</a><br>C-Like Languages - <a href="4-cl.html#SP2_1">&#167;2.1</a></span></button></span><span class="plain">(</span><span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">text</span><span class="plain">) == </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"empty tag name"</span><span class="plain">);</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">name</span><span class="plain">); </span><span class="functiontext"><a href="4-sm.html#SP16">Str::copy</a></span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">);</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">caption</span><span class="plain">);</span>
@ -133,7 +138,7 @@ the tag is <code class="display"><span class="extract">History</span></code>, th
</p>
<pre class="display">
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="functiontext">Tags::retrieve_caption<button class="popup" onclick="togglePopup('usagePopup42')">...<span class="popuptext" id="usagePopup42">Usage of <b>Tags::retrieve_caption</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_10_3_1">&#167;1.3.4.1.10.3.1</a></span></button></span><span class="plain">(</span><span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">, </span><span class="reserved">theme_tag</span><span class="plain"> *</span><span class="identifier">tag</span><span class="plain">) {</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="functiontext">Tags::retrieve_caption<button class="popup" onclick="togglePopup('usagePopup41')">...<span class="popuptext" id="usagePopup41">Usage of <b>Tags::retrieve_caption</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_10_3_1">&#167;1.3.4.1.10.3.1</a></span></button></span><span class="plain">(</span><span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">, </span><span class="reserved">theme_tag</span><span class="plain"> *</span><span class="identifier">tag</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">tag</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain">) {</span>
<span class="reserved">paragraph_tagging</span><span class="plain"> *</span><span class="identifier">pt</span><span class="plain">;</span>
@ -153,7 +158,7 @@ doesn't specify a tag.)
</p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Tags::tagged_with<button class="popup" onclick="togglePopup('usagePopup43')">...<span class="popuptext" id="usagePopup43">Usage of <b>Tags::tagged_with</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4">&#167;1.3.4</a></span></button></span><span class="plain">(</span><span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">, </span><span class="reserved">theme_tag</span><span class="plain"> *</span><span class="identifier">tag</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Tags::tagged_with<button class="popup" onclick="togglePopup('usagePopup42')">...<span class="popuptext" id="usagePopup42">Usage of <b>Tags::tagged_with</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4">&#167;1.3.4</a></span></button></span><span class="plain">(</span><span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">, </span><span class="reserved">theme_tag</span><span class="plain"> *</span><span class="identifier">tag</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">tag</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain">) {</span>
<span class="reserved">paragraph_tagging</span><span class="plain"> *</span><span class="identifier">pt</span><span class="plain">;</span>
@ -170,7 +175,7 @@ doesn't specify a tag.)
<p class="inwebparagraph"><a id="SP7"></a><b>&#167;7. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Tags::open_ifdefs<button class="popup" onclick="togglePopup('usagePopup44')">...<span class="popuptext" id="usagePopup44">Usage of <b>Tags::open_ifdefs</b>:<br>The Tangler - <a href="3-tt.html#SP1_1_1_1">&#167;1.1.1.1</a>, <a href="3-tt.html#SP2">&#167;2</a><br>C-Like Languages - <a href="4-cl.html#SP5">&#167;5</a>, <a href="4-cl.html#SP6_1">&#167;6.1</a>, <a href="4-cl.html#SP6_3">&#167;6.3</a>, <a href="4-cl.html#SP6_4">&#167;6.4</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Tags::open_ifdefs<button class="popup" onclick="togglePopup('usagePopup43')">...<span class="popuptext" id="usagePopup43">Usage of <b>Tags::open_ifdefs</b>:<br>The Tangler - <a href="3-tt.html#SP1_1_1_1">&#167;1.1.1.1</a>, <a href="3-tt.html#SP2">&#167;2</a><br>C-Like Languages - <a href="4-cl.html#SP5">&#167;5</a>, <a href="4-cl.html#SP6_1">&#167;6.1</a>, <a href="4-cl.html#SP6_3">&#167;6.3</a>, <a href="4-cl.html#SP6_4">&#167;6.4</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">) {</span>
<span class="reserved">paragraph_tagging</span><span class="plain"> *</span><span class="identifier">pt</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">pt</span><span class="plain">, </span><span class="reserved">paragraph_tagging</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="element">taggings</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">pt</span><span class="plain">-&gt;</span><span class="element">the_tag</span><span class="plain">-&gt;</span><span class="element">ifdef_symbol</span><span class="plain">) &gt; </span><span class="constant">0</span><span class="plain">)</span>
@ -178,7 +183,7 @@ doesn't specify a tag.)
<span class="identifier">P</span><span class="plain">-&gt;</span><span class="element">under_section</span><span class="plain">-&gt;</span><span class="element">sect_language</span><span class="plain">, </span><span class="identifier">pt</span><span class="plain">-&gt;</span><span class="element">the_tag</span><span class="plain">-&gt;</span><span class="element">ifdef_symbol</span><span class="plain">, </span><span class="identifier">pt</span><span class="plain">-&gt;</span><span class="element">the_tag</span><span class="plain">-&gt;</span><span class="element">ifdef_positive</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Tags::close_ifdefs<button class="popup" onclick="togglePopup('usagePopup45')">...<span class="popuptext" id="usagePopup45">Usage of <b>Tags::close_ifdefs</b>:<br>The Tangler - <a href="3-tt.html#SP1_1_1_1">&#167;1.1.1.1</a>, <a href="3-tt.html#SP2">&#167;2</a><br>C-Like Languages - <a href="4-cl.html#SP5">&#167;5</a>, <a href="4-cl.html#SP6_1">&#167;6.1</a>, <a href="4-cl.html#SP6_3">&#167;6.3</a>, <a href="4-cl.html#SP6_4">&#167;6.4</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Tags::close_ifdefs<button class="popup" onclick="togglePopup('usagePopup44')">...<span class="popuptext" id="usagePopup44">Usage of <b>Tags::close_ifdefs</b>:<br>The Tangler - <a href="3-tt.html#SP1_1_1_1">&#167;1.1.1.1</a>, <a href="3-tt.html#SP2">&#167;2</a><br>C-Like Languages - <a href="4-cl.html#SP5">&#167;5</a>, <a href="4-cl.html#SP6_1">&#167;6.1</a>, <a href="4-cl.html#SP6_3">&#167;6.3</a>, <a href="4-cl.html#SP6_4">&#167;6.4</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">) {</span>
<span class="reserved">paragraph_tagging</span><span class="plain"> *</span><span class="identifier">pt</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">pt</span><span class="plain">, </span><span class="reserved">paragraph_tagging</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="element">taggings</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">pt</span><span class="plain">-&gt;</span><span class="element">the_tag</span><span class="plain">-&gt;</span><span class="element">ifdef_symbol</span><span class="plain">) &gt; </span><span class="constant">0</span><span class="plain">)</span>
@ -186,14 +191,14 @@ doesn't specify a tag.)
<span class="identifier">P</span><span class="plain">-&gt;</span><span class="element">under_section</span><span class="plain">-&gt;</span><span class="element">sect_language</span><span class="plain">, </span><span class="identifier">pt</span><span class="plain">-&gt;</span><span class="element">the_tag</span><span class="plain">-&gt;</span><span class="element">ifdef_symbol</span><span class="plain">, </span><span class="identifier">pt</span><span class="plain">-&gt;</span><span class="element">the_tag</span><span class="plain">-&gt;</span><span class="element">ifdef_positive</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Tags::show_endnote_on_ifdefs<button class="popup" onclick="togglePopup('usagePopup46')">...<span class="popuptext" id="usagePopup46">Usage of <b>Tags::show_endnote_on_ifdefs</b>:<br>The Weaver - <a href="3-tw.html#SP2">&#167;2</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Tags::show_endnote_on_ifdefs<button class="popup" onclick="togglePopup('usagePopup45')">...<span class="popuptext" id="usagePopup45">Usage of <b>Tags::show_endnote_on_ifdefs</b>:<br>The Weaver - <a href="3-tw.html#SP2">&#167;2</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">d</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">sense</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
&lt;<span class="cwebmacro">Show ifdef endnoting</span> <span class="cwebmacronumber">7.1</span>&gt;<span class="plain">;</span>
<span class="identifier">sense</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
&lt;<span class="cwebmacro">Show ifdef endnoting</span> <span class="cwebmacronumber">7.1</span>&gt;<span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">d</span><span class="plain"> &gt; </span><span class="constant">0</span><span class="plain">) {</span>
<span class="functiontext"><a href="5-fm.html#SP27">Formats::text</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"."</span><span class="plain">);</span>
<span class="functiontext"><a href="5-fm.html#SP31">Formats::endnote</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="constant">2</span><span class="plain">);</span>
<span class="functiontext"><a href="5-fm.html#SP30">Formats::endnote</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="constant">2</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
@ -213,7 +218,7 @@ doesn't specify a tag.)
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">pt</span><span class="plain">-&gt;</span><span class="element">the_tag</span><span class="plain">-&gt;</span><span class="element">ifdef_symbol</span><span class="plain">) &gt; </span><span class="constant">0</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain">++ == </span><span class="constant">0</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">d</span><span class="plain">++ == </span><span class="constant">0</span><span class="plain">) {</span>
<span class="functiontext"><a href="5-fm.html#SP31">Formats::endnote</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="constant">1</span><span class="plain">);</span>
<span class="functiontext"><a href="5-fm.html#SP30">Formats::endnote</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="constant">1</span><span class="plain">);</span>
<span class="functiontext"><a href="5-fm.html#SP27">Formats::text</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"This paragraph is used only if "</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="functiontext"><a href="5-fm.html#SP27">Formats::text</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">I</span><span class="string">" and if "</span><span class="plain">);</span>

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'The Parser' 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#2">Chapter 2: Parsing a Web</a></li><li><b>The Parser</b></li></ul><p class="purpose">To work through the program read in, assigning each line its category, and noting down other useful information as we go.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">inweb</a></li><li><a href="index.html#2">Chapter 2: Parsing a Web</a></li><li><b>The Parser</b></li></ul><p class="purpose">To work through the program read in, assigning each line its category, and noting down other useful information as we go.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Sequence of parsing</a></li><li><a href="#SP1_1_6">&#167;1.1.6. Categorisatiom</a></li><li><a href="#SP3">&#167;3. Version errors</a></li><li><a href="#SP4">&#167;4. Footnote notation</a></li></ul><hr class="tocbar">
@ -41,16 +46,12 @@ for it to do anything.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Parser::parse_web<button class="popup" onclick="togglePopup('usagePopup33')">...<span class="popuptext" id="usagePopup33">Usage of <b>Parser::parse_web</b>:<br>Program Control - <a href="1-pc.html#SP7">&#167;7</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">inweb_mode</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">sequential</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Parser::parse_web<button class="popup" onclick="togglePopup('usagePopup32')">...<span class="popuptext" id="usagePopup32">Usage of <b>Parser::parse_web</b>:<br>Program Control - <a href="1-pc.html#SP7">&#167;7</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">inweb_mode</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">sequential</span><span class="plain">) {</span>
<span class="reserved">chapter</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">;</span>
<span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, </span><span class="reserved">chapter</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">chapters</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">section_counter</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">section</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">sections</span><span class="plain">) {</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, </span><span class="reserved">chapter</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">chapters</span><span class="plain">)</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">section</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">sections</span><span class="plain">)</span>
&lt;<span class="cwebmacro">Parse a section</span> <span class="cwebmacronumber">1.1</span>&gt;<span class="plain">;</span>
<span class="identifier">section_counter</span><span class="plain">++;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="functiontext"><a href="4-lm.html#SP2">LanguageMethods::parse_types</a></span><span class="plain">(</span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">main_language</span><span class="plain">);</span>
<span class="functiontext"><a href="4-lm.html#SP3">LanguageMethods::parse_functions</a></span><span class="plain">(</span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">main_language</span><span class="plain">);</span>
<span class="functiontext"><a href="4-lm.html#SP4">LanguageMethods::further_parsing</a></span><span class="plain">(</span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">main_language</span><span class="plain">);</span>
@ -237,7 +238,7 @@ reparsing from there.
<pre class="displaydefn">
<span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">NL</span><span class="plain"> = </span><span class="functiontext"><a href="2-lc.html#SP2">Lines::new_source_line</a></span><span class="plain">(</span><span class="identifier">I</span><span class="string">"@"</span><span class="plain">, &amp;(</span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">source</span><span class="plain">));</span>
<span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">NL</span><span class="plain"> = </span><span class="functiontext"><a href="2-lc.html#SP2">Lines::new_source_line_in</a></span><span class="plain">(</span><span class="identifier">I</span><span class="string">"@"</span><span class="plain">, &amp;(</span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">source</span><span class="plain">), </span><span class="identifier">S</span><span class="plain">);</span>
<span class="identifier">PL</span><span class="plain">-&gt;</span><span class="element">next_line</span><span class="plain"> = </span><span class="identifier">NL</span><span class="plain">;</span>
<span class="identifier">NL</span><span class="plain">-&gt;</span><span class="element">next_line</span><span class="plain"> = </span><span class="identifier">L</span><span class="plain">;</span>
<span class="identifier">L</span><span class="plain"> = </span><span class="identifier">PL</span><span class="plain">;</span>
@ -309,8 +310,8 @@ come literally from the source web.
<p class="endnote">This code is used in <a href="#SP1_1_6">&#167;1.1.6</a>.</p>
<p class="inwebparagraph"><a id="SP1_1_6_2"></a><b>&#167;1.1.6.2. </b>The top line of a section gives its title and range; in InC, it can
also give the namespace for its functions.
<p class="inwebparagraph"><a id="SP1_1_6_2"></a><b>&#167;1.1.6.2. </b>The top line of a section gives its title; in InC, it can also give the
namespace for its functions.
</p>
@ -322,25 +323,29 @@ also give the namespace for its functions.
<pre class="displaydefn">
<span class="reserved">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="functiontext"><a href="4-pm.html#SP9">Regexp::create_mr</a></span><span class="plain">();</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-pm.html#SP10">Regexp::match</a></span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">text</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"%[(%C+)%] (%C+/%C+): (%c+)."</span><span class="plain">)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="identifier">using_syntax</span><span class="plain"> &gt;= </span><span class="constant">V2_SYNTAX</span><span class="plain">)</span>
<span class="functiontext"><a href="#SP3">Parser::wrong_version</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">using_syntax</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">,</span>
<span class="string">"section range in header line"</span><span class="plain">, </span><span class="constant">V1_SYNTAX</span><span class="plain">);</span>
<span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_namespace</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP3">Str::duplicate</a></span><span class="plain">(</span><span class="identifier">mr</span><span class="plain">.</span><span class="element">exp</span><span class="plain">[0]);</span>
<span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP3">Str::duplicate</a></span><span class="plain">(</span><span class="identifier">mr</span><span class="plain">.</span><span class="element">exp</span><span class="plain">[1]);</span>
<span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP3">Str::duplicate</a></span><span class="plain">(</span><span class="identifier">mr</span><span class="plain">.</span><span class="element">exp</span><span class="plain">[1]);</span>
<span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">sect_title</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP3">Str::duplicate</a></span><span class="plain">(</span><span class="identifier">mr</span><span class="plain">.</span><span class="element">exp</span><span class="plain">[2]);</span>
<span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">text_operand</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP3">Str::duplicate</a></span><span class="plain">(</span><span class="identifier">mr</span><span class="plain">.</span><span class="element">exp</span><span class="plain">[2]);</span>
<span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">category</span><span class="plain"> = </span><span class="constant">SECTION_HEADING_LCAT</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-pm.html#SP10">Regexp::match</a></span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"(%C+/%C+): (%c+)."</span><span class="plain">)) {</span>
<span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP3">Str::duplicate</a></span><span class="plain">(</span><span class="identifier">mr</span><span class="plain">.</span><span class="element">exp</span><span class="plain">[0]);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="identifier">using_syntax</span><span class="plain"> &gt;= </span><span class="constant">V2_SYNTAX</span><span class="plain">)</span>
<span class="functiontext"><a href="#SP3">Parser::wrong_version</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">using_syntax</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">,</span>
<span class="string">"section range in header line"</span><span class="plain">, </span><span class="constant">V1_SYNTAX</span><span class="plain">);</span>
<span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP3">Str::duplicate</a></span><span class="plain">(</span><span class="identifier">mr</span><span class="plain">.</span><span class="element">exp</span><span class="plain">[0]);</span>
<span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">sect_title</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP3">Str::duplicate</a></span><span class="plain">(</span><span class="identifier">mr</span><span class="plain">.</span><span class="element">exp</span><span class="plain">[1]);</span>
<span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">text_operand</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP3">Str::duplicate</a></span><span class="plain">(</span><span class="identifier">mr</span><span class="plain">.</span><span class="element">exp</span><span class="plain">[1]);</span>
<span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">category</span><span class="plain"> = </span><span class="constant">SECTION_HEADING_LCAT</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-pm.html#SP10">Regexp::match</a></span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"%[(%C+::)%] (%c+)."</span><span class="plain">)) {</span>
<span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_namespace</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP3">Str::duplicate</a></span><span class="plain">(</span><span class="identifier">mr</span><span class="plain">.</span><span class="element">exp</span><span class="plain">[0]);</span>
<span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">sect_title</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP3">Str::duplicate</a></span><span class="plain">(</span><span class="identifier">mr</span><span class="plain">.</span><span class="element">exp</span><span class="plain">[1]);</span>
&lt;<span class="cwebmacro">Set the range to an automatic abbreviation of the relative pathname</span> <span class="cwebmacronumber">1.1.6.2.1</span>&gt;<span class="plain">;</span>
<span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">text_operand</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP3">Str::duplicate</a></span><span class="plain">(</span><span class="identifier">mr</span><span class="plain">.</span><span class="element">exp</span><span class="plain">[1]);</span>
<span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">category</span><span class="plain"> = </span><span class="constant">SECTION_HEADING_LCAT</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-pm.html#SP10">Regexp::match</a></span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"(%c+)."</span><span class="plain">)) {</span>
<span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">sect_title</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP3">Str::duplicate</a></span><span class="plain">(</span><span class="identifier">mr</span><span class="plain">.</span><span class="element">exp</span><span class="plain">[0]);</span>
&lt;<span class="cwebmacro">Set the range to an automatic abbreviation of the relative pathname</span> <span class="cwebmacronumber">1.1.6.2.1</span>&gt;<span class="plain">;</span>
<span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">text_operand</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP3">Str::duplicate</a></span><span class="plain">(</span><span class="identifier">mr</span><span class="plain">.</span><span class="element">exp</span><span class="plain">[0]);</span>
<span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">category</span><span class="plain"> = </span><span class="constant">SECTION_HEADING_LCAT</span><span class="plain">;</span>
<span class="plain">}</span>
@ -351,116 +356,6 @@ also give the namespace for its functions.
<p class="endnote">This code is used in <a href="#SP1_1_6">&#167;1.1.6</a>.</p>
<p class="inwebparagraph"><a id="SP1_1_6_2_1"></a><b>&#167;1.1.6.2.1. </b>If no range is supplied, we make one ourselves.
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Set the range to an automatic abbreviation of the relative pathname</span> <span class="cwebmacronumber">1.1.6.2.1</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">) == </span><span class="constant">0</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sequential</span><span class="plain">) {</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">, </span><span class="string">"%S/"</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">ch_range</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">, </span><span class="string">"s%d"</span><span class="plain">, </span><span class="identifier">section_counter</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">from</span><span class="plain"> = </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">sect_title</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">letters_from_each_word</span><span class="plain"> = </span><span class="constant">5</span><span class="plain">;</span>
<span class="reserved">do</span><span class="plain"> {</span>
<span class="functiontext"><a href="4-sm.html#SP15">Str::clear</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">, </span><span class="string">"%S/"</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">ch_range</span><span class="plain">);</span>
&lt;<span class="cwebmacro">Make the tail using this many consonants from each word</span> <span class="cwebmacronumber">1.1.6.2.1.1</span>&gt;<span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (--</span><span class="identifier">letters_from_each_word</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) </span><span class="reserved">break</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">while</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">) &gt; </span><span class="constant">5</span><span class="plain">);</span>
&lt;<span class="cwebmacro">Terminate with disambiguating numbers in case of collisions</span> <span class="cwebmacronumber">1.1.6.2.1.2</span>&gt;<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="#SP1_1_6_2">&#167;1.1.6.2</a> (twice).</p>
<p class="inwebparagraph"><a id="SP1_1_6_2_1_1"></a><b>&#167;1.1.6.2.1.1. </b>We collapse words to an initial letter plus consonants: thus "electricity"
would be "elctrcty", since we don't count "y" as a vowel here.
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Make the tail using this many consonants from each word</span> <span class="cwebmacronumber">1.1.6.2.1.1</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">sn</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">sw</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP13">Str::get_at</a></span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">sn</span><span class="plain">) == </span><span class="constant">FOLDER_SEPARATOR</span><span class="plain">) </span><span class="identifier">sn</span><span class="plain">++;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">letters_from_current_word</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="functiontext"><a href="4-sm.html#SP13">Str::get_at</a></span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">sn</span><span class="plain">)) &amp;&amp; (</span><span class="functiontext"><a href="4-sm.html#SP13">Str::get_at</a></span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">sn</span><span class="plain">) != </span><span class="character">'.'</span><span class="plain">)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP13">Str::get_at</a></span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">sn</span><span class="plain">) == </span><span class="character">' '</span><span class="plain">) </span><span class="identifier">letters_from_current_word</span><span class="plain"> = </span><span class="constant">0</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">letters_from_current_word</span><span class="plain"> &lt; </span><span class="identifier">letters_from_each_word</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP13">Str::get_at</a></span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">sn</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">l</span><span class="plain"> = </span><span class="identifier">tolower</span><span class="plain">(</span><span class="functiontext"><a href="4-sm.html#SP13">Str::get_at</a></span><span class="plain">(</span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">sn</span><span class="plain">));</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">letters_from_current_word</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) ||</span>
<span class="plain">((</span><span class="identifier">l</span><span class="plain"> != </span><span class="character">'a'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">l</span><span class="plain"> != </span><span class="character">'e'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">l</span><span class="plain"> != </span><span class="character">'i'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">l</span><span class="plain"> != </span><span class="character">'o'</span><span class="plain">) &amp;&amp; (</span><span class="identifier">l</span><span class="plain"> != </span><span class="character">'u'</span><span class="plain">))) {</span>
<span class="functiontext"><a href="4-sm.html#SP14">Str::put_at</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">, </span><span class="identifier">sw</span><span class="plain">++, </span><span class="identifier">l</span><span class="plain">); </span><span class="functiontext"><a href="4-sm.html#SP14">Str::put_at</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">, </span><span class="identifier">sw</span><span class="plain">, </span><span class="constant">0</span><span class="plain">);</span>
<span class="identifier">letters_from_current_word</span><span class="plain">++;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="identifier">sn</span><span class="plain">++;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP1_1_6_2_1">&#167;1.1.6.2.1</a>.</p>
<p class="inwebparagraph"><a id="SP1_1_6_2_1_2"></a><b>&#167;1.1.6.2.1.2. </b>We never want two sections to have the same range.
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Terminate with disambiguating numbers in case of collisions</span> <span class="cwebmacronumber">1.1.6.2.1.2</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">original_range</span><span class="plain">);</span>
<span class="functiontext"><a href="4-sm.html#SP16">Str::copy</a></span><span class="plain">(</span><span class="identifier">original_range</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">disnum</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">collision</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="reserved">do</span><span class="plain"> {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">disnum</span><span class="plain">++ &gt; </span><span class="constant">0</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">ldn</span><span class="plain"> = </span><span class="constant">4</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">disnum</span><span class="plain"> &gt;= </span><span class="constant">1000</span><span class="plain">) </span><span class="identifier">ldn</span><span class="plain"> = </span><span class="constant">3</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">disnum</span><span class="plain"> &gt;= </span><span class="constant">100</span><span class="plain">) </span><span class="identifier">ldn</span><span class="plain"> = </span><span class="constant">2</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">disnum</span><span class="plain"> &gt;= </span><span class="constant">10</span><span class="plain">) </span><span class="identifier">ldn</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">ldn</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="functiontext"><a href="4-sm.html#SP15">Str::clear</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">, </span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">original_range</span><span class="plain">);</span>
<span class="functiontext"><a href="4-sm.html#SP15">Str::truncate</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">, </span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">) - </span><span class="identifier">ldn</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">, </span><span class="string">"%d"</span><span class="plain">, </span><span class="identifier">disnum</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">collision</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="reserved">chapter</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">;</span>
<span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S2</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, </span><span class="reserved">chapter</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">chapters</span><span class="plain">)</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">S2</span><span class="plain">, </span><span class="reserved">section</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">sections</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">S2</span><span class="plain"> != </span><span class="identifier">S</span><span class="plain">) &amp;&amp; (</span><span class="functiontext"><a href="4-sm.html#SP18">Str::eq</a></span><span class="plain">(</span><span class="identifier">S2</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">))) {</span>
<span class="identifier">collision</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">} </span><span class="reserved">while</span><span class="plain"> (</span><span class="identifier">collision</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">original_range</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP1_1_6_2_1">&#167;1.1.6.2.1</a>.</p>
<p class="inwebparagraph"><a id="SP1_1_6_3"></a><b>&#167;1.1.6.3. </b>Version 1 syntax was cluttered up with a number of hardly-used markup
syntaxes called "commands", written in double squared brackets <code class="display"><span class="extract">[[Thus]]</span></code>.
In version 2, this notation is never used.
@ -729,13 +624,13 @@ division in the current section.
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">T</span><span class="plain">;</span>
<span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">latest</span><span class="plain"> = </span><span class="identifier">L</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain">, </span><span class="identifier">lines</span><span class="plain">) {</span>
<span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">TL</span><span class="plain"> = </span><span class="functiontext"><a href="2-lc.html#SP2">Lines::new_source_line</a></span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, &amp;(</span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">source</span><span class="plain">));</span>
<span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">TL</span><span class="plain"> = </span><span class="functiontext"><a href="2-lc.html#SP2">Lines::new_source_line_in</a></span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, &amp;(</span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">source</span><span class="plain">), </span><span class="identifier">S</span><span class="plain">);</span>
<span class="identifier">TL</span><span class="plain">-&gt;</span><span class="element">next_line</span><span class="plain"> = </span><span class="identifier">latest</span><span class="plain">-&gt;</span><span class="element">next_line</span><span class="plain">;</span>
<span class="identifier">TL</span><span class="plain">-&gt;</span><span class="element">plainer</span><span class="plain"> = </span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">plainer</span><span class="plain">;</span>
<span class="identifier">latest</span><span class="plain">-&gt;</span><span class="element">next_line</span><span class="plain"> = </span><span class="identifier">TL</span><span class="plain">;</span>
<span class="identifier">latest</span><span class="plain"> = </span><span class="identifier">TL</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">EEL</span><span class="plain"> = </span><span class="functiontext"><a href="2-lc.html#SP2">Lines::new_source_line</a></span><span class="plain">(</span><span class="identifier">I</span><span class="string">"="</span><span class="plain">, &amp;(</span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">source</span><span class="plain">));</span>
<span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">EEL</span><span class="plain"> = </span><span class="functiontext"><a href="2-lc.html#SP2">Lines::new_source_line_in</a></span><span class="plain">(</span><span class="identifier">I</span><span class="string">"="</span><span class="plain">, &amp;(</span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">source</span><span class="plain">), </span><span class="identifier">S</span><span class="plain">);</span>
<span class="identifier">EEL</span><span class="plain">-&gt;</span><span class="element">next_line</span><span class="plain"> = </span><span class="identifier">latest</span><span class="plain">-&gt;</span><span class="element">next_line</span><span class="plain">;</span>
<span class="identifier">latest</span><span class="plain">-&gt;</span><span class="element">next_line</span><span class="plain"> = </span><span class="identifier">EEL</span><span class="plain">;</span>
<span class="identifier">code_lcat_for_body</span><span class="plain"> = </span><span class="constant">TEXT_EXTRACT_LCAT</span><span class="plain">;</span>
@ -1209,7 +1104,7 @@ is not elegant but handles the back end of both possibilities.
</p>
<pre class="display">
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="functiontext">Parser::extract_purpose<button class="popup" onclick="togglePopup('usagePopup34')">...<span class="popuptext" id="usagePopup34">Usage of <b>Parser::extract_purpose</b>:<br><a href="#SP1_1_4">&#167;1.1.4</a>, <a href="#SP1_1_6_5_1_1">&#167;1.1.6.5.1.1</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">prologue</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">XL</span><span class="plain">, </span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> **</span><span class="identifier">adjust</span><span class="plain">) {</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="functiontext">Parser::extract_purpose<button class="popup" onclick="togglePopup('usagePopup33')">...<span class="popuptext" id="usagePopup33">Usage of <b>Parser::extract_purpose</b>:<br><a href="#SP1_1_4">&#167;1.1.4</a>, <a href="#SP1_1_6_5_1_1">&#167;1.1.6.5.1.1</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">prologue</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">XL</span><span class="plain">, </span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> **</span><span class="identifier">adjust</span><span class="plain">) {</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP3">Str::duplicate</a></span><span class="plain">(</span><span class="identifier">prologue</span><span class="plain">);</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">XL</span><span class="plain">) &amp;&amp; (</span><span class="identifier">XL</span><span class="plain">-&gt;</span><span class="element">next_line</span><span class="plain">) &amp;&amp; (</span><span class="identifier">XL</span><span class="plain">-&gt;</span><span class="element">owning_section</span><span class="plain"> == </span><span class="identifier">S</span><span class="plain">) &amp;&amp;</span>
<span class="plain">(((</span><span class="identifier">adjust</span><span class="plain">) &amp;&amp; (</span><span class="identifier">isalnum</span><span class="plain">(</span><span class="functiontext"><a href="4-sm.html#SP13">Str::get_first_char</a></span><span class="plain">(</span><span class="identifier">XL</span><span class="plain">-&gt;</span><span class="element">text</span><span class="plain">)))) ||</span>
@ -1233,7 +1128,7 @@ when it comes to Inweb's exit code, so they will halt a make.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Parser::wrong_version<button class="popup" onclick="togglePopup('usagePopup35')">...<span class="popuptext" id="usagePopup35">Usage of <b>Parser::wrong_version</b>:<br><a href="#SP1_1_1">&#167;1.1.1</a>, <a href="#SP1_1_5">&#167;1.1.5</a>, <a href="#SP1_1_6">&#167;1.1.6</a>, <a href="#SP1_1_6_3">&#167;1.1.6.3</a>, <a href="#SP1_1_6_5_1">&#167;1.1.6.5.1</a>, <a href="#SP1_1_6_5_1_1">&#167;1.1.6.5.1.1</a>, <a href="#SP1_1_6_5_1_2">&#167;1.1.6.5.1.2</a>, <a href="#SP1_1_6_5_1_3">&#167;1.1.6.5.1.3</a>, <a href="#SP1_1_6_5_1_4">&#167;1.1.6.5.1.4</a>, <a href="#SP1_1_6_5_1_5">&#167;1.1.6.5.1.5</a>, The Weaver - <a href="3-tw.html#SP1_3_4_1_2_1">&#167;1.3.4.1.2.1</a></span></button></span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">using</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">feature</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">need</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Parser::wrong_version<button class="popup" onclick="togglePopup('usagePopup34')">...<span class="popuptext" id="usagePopup34">Usage of <b>Parser::wrong_version</b>:<br><a href="#SP1_1_1">&#167;1.1.1</a>, <a href="#SP1_1_5">&#167;1.1.5</a>, <a href="#SP1_1_6">&#167;1.1.6</a>, <a href="#SP1_1_6_2">&#167;1.1.6.2</a>, <a href="#SP1_1_6_3">&#167;1.1.6.3</a>, <a href="#SP1_1_6_5_1">&#167;1.1.6.5.1</a>, <a href="#SP1_1_6_5_1_1">&#167;1.1.6.5.1.1</a>, <a href="#SP1_1_6_5_1_2">&#167;1.1.6.5.1.2</a>, <a href="#SP1_1_6_5_1_3">&#167;1.1.6.5.1.3</a>, <a href="#SP1_1_6_5_1_4">&#167;1.1.6.5.1.4</a>, <a href="#SP1_1_6_5_1_5">&#167;1.1.6.5.1.5</a>, The Weaver - <a href="3-tw.html#SP1_3_4_1_2_1">&#167;1.3.4.1.2.1</a></span></button></span><span class="plain">(</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">using</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">, </span><span class="reserved">char</span><span class="plain"> *</span><span class="identifier">feature</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">need</span><span class="plain">) {</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">warning</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">warning</span><span class="plain">, </span><span class="string">"%s is a feature available only in version %d syntax (you're using version %d)"</span><span class="plain">,</span>
<span class="identifier">feature</span><span class="plain">, </span><span class="identifier">need</span><span class="plain">, </span><span class="identifier">using</span><span class="plain">);</span>
@ -1247,7 +1142,7 @@ when it comes to Inweb's exit code, so they will halt a make.
<p class="inwebparagraph"><a id="SP4"></a><b>&#167;4. Footnote notation. </b></p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Parser::detect_footnote<button class="popup" onclick="togglePopup('usagePopup36')">...<span class="popuptext" id="usagePopup36">Usage of <b>Parser::detect_footnote</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_8_5">&#167;1.3.4.1.8.5</a><br>Format Methods - <a href="5-fm.html#SP27_3">&#167;27.3</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">matter</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">before</span><span class="plain">,</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Parser::detect_footnote<button class="popup" onclick="togglePopup('usagePopup35')">...<span class="popuptext" id="usagePopup35">Usage of <b>Parser::detect_footnote</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_8_5">&#167;1.3.4.1.8.5</a><br>Format Methods - <a href="5-fm.html#SP27_3">&#167;27.3</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">matter</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">before</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">cue</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">after</span><span class="plain">) {</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">fn_on_notation</span><span class="plain"> =</span>
<span class="functiontext"><a href="8-bdfw.html#SP6">Bibliographic::get_datum</a></span><span class="plain">(</span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Footnote Begins Notation"</span><span class="plain">);</span>

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'The Reader' 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#2">Chapter 2: Parsing a Web</a></li><li><b>The Reader</b></li></ul><p class="purpose">To read the Contents section of the web, and through that each of the other sections in turn, and to collate all of this material.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">inweb</a></li><li><a href="index.html#2">Chapter 2: Parsing a Web</a></li><li><b>The Reader</b></li></ul><p class="purpose">To read the Contents section of the web, and through that each of the other sections in turn, and to collate all of this material.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Web semantics</a></li><li><a href="#SP5">&#167;5. Web reading</a></li><li><a href="#SP7">&#167;7. Woven and Tangled folders</a></li><li><a href="#SP8">&#167;8. Looking up chapters and sections</a></li><li><a href="#SP10">&#167;10. Ranges and containment</a></li><li><a href="#SP11">&#167;11. Tangle targets</a></li><li><a href="#SP14">&#167;14. Additional header files</a></li><li><a href="#SP15">&#167;15. Extent</a></li></ul><hr class="tocbar">
@ -58,7 +63,7 @@ each of which has a list of <code class="display"><span class="extract">section<
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">web_md</span><span class="plain"> *</span><span class="identifier">md</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">chapters</span><span class="plain">; </span><span class="comment"> of <code class="display"><span class="extract">chapter</span></code> (including Sections, Preliminaries, etc.)</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">no_lines</span><span class="plain">; </span><span class="comment"> total lines in literate source, excluding contents</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">web_extent</span><span class="plain">; </span><span class="comment"> total lines in literate source, excluding contents</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">no_paragraphs</span><span class="plain">; </span><span class="comment"> this will be at least 1</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">main_language</span><span class="plain">; </span><span class="comment"> in which most of the sections are written</span>
@ -77,7 +82,7 @@ each of which has a list of <code class="display"><span class="extract">section<
<p class="inwebparagraph"></p>
<p class="endnote">The structure web is accessed in 1/pc, 1/ptt, 2/tp, 2/pn, 3/ta, 3/ts, 3/ti, 3/tw, 3/tt, 4/pl, 4/taf, 4/as, 4/cl, 4/is, 5/fm, 5/ptf, 5/tf, 5/hf, 5/wp, 6/mkf, 6/rw and here.</p>
<p class="endnote">The structure web is accessed in 1/pc, 1/ptt, 2/lc, 2/tp, 2/pn, 3/ta, 3/ts, 3/ti, 3/tw, 3/tt, 4/pl, 4/taf, 4/as, 4/cl, 4/is, 5/fm, 5/ptf, 5/tf, 5/hf, 5/wp, 6/mkf, 6/rw and here.</p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. </b>And for a chapter:
</p>
@ -97,7 +102,7 @@ each of which has a list of <code class="display"><span class="extract">section<
<p class="inwebparagraph"></p>
<p class="endnote">The structure chapter is accessed in 1/pc, 1/ptt, 2/tp, 2/pn, 3/ta, 3/ts, 3/ti, 3/tw, 3/tt, 4/pl, 4/cl, 4/is, 5/fm, 5/ptf, 5/tf, 5/hf, 5/wp, 6/mkf, 6/rw and here.</p>
<p class="endnote">The structure chapter is accessed in 1/pc, 1/ptt, 2/lc, 2/tp, 2/pn, 3/ta, 3/ts, 3/ti, 3/tw, 3/tt, 4/pl, 4/cl, 4/is, 5/fm, 5/ptf, 5/tf, 5/hf, 5/wp, 6/mkf, 6/rw and here.</p>
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. </b>And lastly for a section.
</p>
@ -110,7 +115,6 @@ each of which has a list of <code class="display"><span class="extract">section<
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">sect_namespace</span><span class="plain">; </span><span class="comment"> e.g., "Text::Languages::"</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">sect_purpose</span><span class="plain">; </span><span class="comment"> e.g., "To manage the zoo, and feed all penguins"</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">sect_range</span><span class="plain">; </span><span class="comment"> e.g., "9/tfto"</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">barred</span><span class="plain">; </span><span class="comment"> if version 1 syntax, contains a dividing bar?</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">sect_language</span><span class="plain">; </span><span class="comment"> in which this section is written</span>
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">tangle_target</span><span class="plain"> *</span><span class="identifier">sect_target</span><span class="plain">; </span><span class="comment"> <code class="display"><span class="extract">NULL</span></code> unless this section produces a tangle of its own</span>
@ -135,20 +139,20 @@ each of which has a list of <code class="display"><span class="extract">section<
<p class="inwebparagraph"></p>
<p class="endnote">The structure section is accessed in 1/pc, 1/ptt, 2/tp, 2/pm, 2/tgs, 2/pn, 3/ta, 3/ts, 3/ti, 3/tw, 3/tt, 4/pl, 4/taf, 4/lm, 4/as, 4/cl, 4/is, 5/fm, 5/ptf, 5/tf, 5/hf, 5/wp, 6/mkf, 6/rw and here.</p>
<p class="endnote">The structure section is accessed in 1/pc, 1/ptt, 2/lc, 2/tp, 2/pm, 2/tgs, 2/pn, 3/ta, 3/ts, 3/ti, 3/tw, 3/tt, 4/pl, 4/taf, 4/lm, 4/as, 4/cl, 4/is, 5/fm, 5/ptf, 5/tf, 5/hf, 5/wp, 6/mkf, 6/rw and here.</p>
<p class="inwebparagraph"><a id="SP4"></a><b>&#167;4. </b>The following routine makes the <code class="display"><span class="extract">web</span></code>-<code class="display"><span class="extract">chapter</span></code>-<code class="display"><span class="extract">section</span></code> tree out of a
<code class="display"><span class="extract">web_md</span></code>-<code class="display"><span class="extract">chapter_md</span></code>-<code class="display"><span class="extract">section_md</span></code> tree:
</p>
<pre class="display">
<span class="reserved">web_md</span><span class="plain"> *</span><span class="functiontext">Reader::load_web_md<button class="popup" onclick="togglePopup('usagePopup16')">...<span class="popuptext" id="usagePopup16">Usage of <b>Reader::load_web_md</b>:<br>Makefiles - <a href="6-mkf.html#SP2_11_1">&#167;2.11.1</a></span></button></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">web_md</span><span class="plain"> *</span><span class="functiontext">Reader::load_web_md<button class="popup" onclick="togglePopup('usagePopup15')">...<span class="popuptext" id="usagePopup15">Usage of <b>Reader::load_web_md</b>:<br>Makefiles - <a href="6-mkf.html#SP2_11_1">&#167;2.11.1</a></span></button></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">including_modules</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext"><a href="8-ws.html#SP5">WebMetadata::get</a></span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">alt_F</span><span class="plain">, </span><span class="identifier">default_inweb_syntax</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">including_modules</span><span class="plain">, </span><span class="identifier">path_to_inweb</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">web</span><span class="plain"> *</span><span class="functiontext">Reader::load_web<button class="popup" onclick="togglePopup('usagePopup17')">...<span class="popuptext" id="usagePopup17">Usage of <b>Reader::load_web</b>:<br>Program Control - <a href="1-pc.html#SP7">&#167;7</a></span></button></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">web</span><span class="plain"> *</span><span class="functiontext">Reader::load_web<button class="popup" onclick="togglePopup('usagePopup16')">...<span class="popuptext" id="usagePopup16">Usage of <b>Reader::load_web</b>:<br>Program Control - <a href="1-pc.html#SP7">&#167;7</a></span></button></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">including_modules</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>
@ -212,7 +216,7 @@ each of which has a list of <code class="display"><span class="extract">section<
<span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">as_ebook</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">redirect_weaves_to</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">main_language</span><span class="plain"> = </span><span class="functiontext"><a href="4-pl.html#SP3">Languages::default</a></span><span class="plain">(</span><span class="identifier">W</span><span class="plain">);</span>
<span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">no_lines</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">; </span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">no_paragraphs</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">web_extent</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">; </span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">no_paragraphs</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">language_name</span><span class="plain"> = </span><span class="functiontext"><a href="8-bdfw.html#SP6">Bibliographic::get_datum</a></span><span class="plain">(</span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Language"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">language_name</span><span class="plain">) &gt; </span><span class="constant">0</span><span class="plain">)</span>
<span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">main_language</span><span class="plain"> = </span><span class="functiontext"><a href="4-pl.html#SP2">Languages::find_by_name</a></span><span class="plain">(</span><span class="identifier">language_name</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
@ -273,7 +277,6 @@ each of which has a list of <code class="display"><span class="extract">section<
<span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">tag_with</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"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">Sm</span><span class="plain">-&gt;</span><span class="element">tag_name</span><span class="plain">) &gt; </span><span class="constant">0</span><span class="plain">)</span>
<span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">tag_with</span><span class="plain"> = </span><span class="functiontext"><a href="2-tgs.html#SP4">Tags::add_by_name</a></span><span class="plain">(</span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">Sm</span><span class="plain">-&gt;</span><span class="element">tag_name</span><span class="plain">);</span>
<span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP2">Str::new</a></span><span class="plain">();</span>
</pre>
<p class="inwebparagraph"></p>
@ -304,7 +307,7 @@ inserted if this is a multi-chapter web.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Reader::read_web<button class="popup" onclick="togglePopup('usagePopup18')">...<span class="popuptext" id="usagePopup18">Usage of <b>Reader::read_web</b>:<br>Program Control - <a href="1-pc.html#SP7">&#167;7</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">verbosely</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Reader::read_web<button class="popup" onclick="togglePopup('usagePopup17')">...<span class="popuptext" id="usagePopup17">Usage of <b>Reader::read_web</b>:<br>Program Control - <a href="1-pc.html#SP7">&#167;7</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">verbosely</span><span class="plain">) {</span>
<span class="reserved">chapter</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">;</span>
<span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, </span><span class="reserved">chapter</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">chapters</span><span class="plain">)</span>
@ -322,7 +325,7 @@ inserted if this is a multi-chapter web.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Reader::read_file<button class="popup" onclick="togglePopup('usagePopup19')">...<span class="popuptext" id="usagePopup19">Usage of <b>Reader::read_file</b>:<br><a href="#SP5">&#167;5</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">chapter</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">, </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">titling_line</span><span class="plain">,</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Reader::read_file<button class="popup" onclick="togglePopup('usagePopup18')">...<span class="popuptext" id="usagePopup18">Usage of <b>Reader::read_file</b>:<br><a href="#SP5">&#167;5</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">chapter</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">, </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">titling_line</span><span class="plain">,</span>
<span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">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">disregard_top</span><span class="plain">) {</span>
<span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">owning_chapter</span><span class="plain"> = </span><span class="identifier">C</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">disregard_top</span><span class="plain">)</span>
@ -389,7 +392,7 @@ tangled for.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Reader::scan_source_line<button class="popup" onclick="togglePopup('usagePopup20')">...<span class="popuptext" id="usagePopup20">Usage of <b>Reader::scan_source_line</b>:<br><a href="#SP6">&#167;6</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">line</span><span class="plain">, </span><span class="reserved">text_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">void</span><span class="plain"> </span><span class="functiontext">Reader::scan_source_line<button class="popup" onclick="togglePopup('usagePopup19')">...<span class="popuptext" id="usagePopup19">Usage of <b>Reader::scan_source_line</b>:<br><a href="#SP6">&#167;6</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">line</span><span class="plain">, </span><span class="reserved">text_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">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain"> = (</span><span class="reserved">section</span><span class="plain"> *) </span><span class="identifier">state</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">l</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">line</span><span class="plain">) - </span><span class="constant">1</span><span class="plain">;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">l</span><span class="plain">&gt;=0) &amp;&amp; (</span><span class="functiontext"><a href="4-chr.html#SP2">Characters::is_space_or_tab</a></span><span class="plain">(</span><span class="functiontext"><a href="4-sm.html#SP13">Str::get_at</a></span><span class="plain">(</span><span class="identifier">line</span><span class="plain">, </span><span class="identifier">l</span><span class="plain">)))) </span><span class="functiontext"><a href="4-sm.html#SP15">Str::truncate</a></span><span class="plain">(</span><span class="identifier">line</span><span class="plain">, </span><span class="identifier">l</span><span class="plain">--);</span>
@ -410,20 +413,15 @@ tangled for.
<pre class="displaydefn">
<span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">sl</span><span class="plain"> = </span><span class="functiontext"><a href="2-lc.html#SP2">Lines::new_source_line</a></span><span class="plain">(</span><span class="identifier">line</span><span class="plain">, </span><span class="identifier">tfp</span><span class="plain">);</span>
<span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">sl</span><span class="plain"> = </span><span class="functiontext"><a href="2-lc.html#SP2">Lines::new_source_line_in</a></span><span class="plain">(</span><span class="identifier">line</span><span class="plain">, </span><span class="identifier">tfp</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">);</span>
<span class="comment"> enter this in its section's linked list of lines:</span>
<span class="identifier">sl</span><span class="plain">-&gt;</span><span class="element">owning_section</span><span class="plain"> = </span><span class="identifier">S</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">first_line</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">first_line</span><span class="plain"> = </span><span class="identifier">sl</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">last_line</span><span class="plain">-&gt;</span><span class="element">next_line</span><span class="plain"> = </span><span class="identifier">sl</span><span class="plain">;</span>
<span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">last_line</span><span class="plain"> = </span><span class="identifier">sl</span><span class="plain">;</span>
<span class="comment"> we haven't detected paragraph boundaries yet, so:</span>
<span class="identifier">sl</span><span class="plain">-&gt;</span><span class="element">owning_paragraph</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="comment"> and keep count:</span>
<span class="identifier">sl</span><span class="plain">-&gt;</span><span class="element">owning_section</span><span class="plain">-&gt;</span><span class="element">sect_extent</span><span class="plain">++;</span>
<span class="identifier">sl</span><span class="plain">-&gt;</span><span class="element">owning_section</span><span class="plain">-&gt;</span><span class="element">owning_chapter</span><span class="plain">-&gt;</span><span class="element">owning_web</span><span class="plain">-&gt;</span><span class="element">no_lines</span><span class="plain">++;</span>
</pre>
<p class="inwebparagraph"></p>
@ -434,13 +432,13 @@ tangled for.
</p>
<pre class="display">
<span class="reserved">pathname</span><span class="plain"> *</span><span class="functiontext">Reader::woven_folder<button class="popup" onclick="togglePopup('usagePopup21')">...<span class="popuptext" id="usagePopup21">Usage of <b>Reader::woven_folder</b>:<br>Patterns - <a href="1-ptt.html#SP7">&#167;7</a><br>The Swarm - <a href="3-ts.html#SP2_2">&#167;2.2</a><br>The Indexer - <a href="3-ti.html#SP5_4">&#167;5.4</a><br>HTML Formats - <a href="5-hf.html#SP32">&#167;32</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">pathname</span><span class="plain"> *</span><span class="functiontext">Reader::woven_folder<button class="popup" onclick="togglePopup('usagePopup20')">...<span class="popuptext" id="usagePopup20">Usage of <b>Reader::woven_folder</b>:<br>Patterns - <a href="1-ptt.html#SP7">&#167;7</a><br>The Swarm - <a href="3-ts.html#SP2_2">&#167;2.2</a><br>The Indexer - <a href="3-ti.html#SP5_4">&#167;5.4</a><br>HTML Formats - <a href="5-hf.html#SP32">&#167;32</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">pathname</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="functiontext"><a href="3-pth.html#SP4">Pathnames::subfolder</a></span><span class="plain">(</span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">path_to_web</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Woven"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="3-pth.html#SP8">Pathnames::create_in_file_system</a></span><span class="plain">(</span><span class="identifier">P</span><span class="plain">) == </span><span class="constant">FALSE</span><span class="plain">)</span>
<span class="functiontext"><a href="3-em.html#SP2">Errors::fatal_with_path</a></span><span class="plain">(</span><span class="string">"unable to create Woven subdirectory"</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">P</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">pathname</span><span class="plain"> *</span><span class="functiontext">Reader::tangled_folder<button class="popup" onclick="togglePopup('usagePopup22')">...<span class="popuptext" id="usagePopup22">Usage of <b>Reader::tangled_folder</b>:<br>Program Control - <a href="1-pc.html#SP7_4_2">&#167;7.4.2</a><br>The Tangler - <a href="3-tt.html#SP1_2">&#167;1.2</a><br>InC Support - <a href="4-is.html#SP13">&#167;13</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">pathname</span><span class="plain"> *</span><span class="functiontext">Reader::tangled_folder<button class="popup" onclick="togglePopup('usagePopup21')">...<span class="popuptext" id="usagePopup21">Usage of <b>Reader::tangled_folder</b>:<br>Program Control - <a href="1-pc.html#SP7_4_2">&#167;7.4.2</a><br>The Tangler - <a href="3-tt.html#SP1_2">&#167;1.2</a><br>InC Support - <a href="4-is.html#SP13">&#167;13</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">pathname</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain"> = </span><span class="functiontext"><a href="3-pth.html#SP4">Pathnames::subfolder</a></span><span class="plain">(</span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">path_to_web</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Tangled"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="3-pth.html#SP8">Pathnames::create_in_file_system</a></span><span class="plain">(</span><span class="identifier">P</span><span class="plain">) == </span><span class="constant">FALSE</span><span class="plain">)</span>
<span class="functiontext"><a href="3-em.html#SP2">Errors::fatal_with_path</a></span><span class="plain">(</span><span class="string">"unable to create Tangled subdirectory"</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>
@ -459,7 +457,7 @@ in large webs, and lookup is performed only a few times.
</p>
<pre class="display">
<span class="reserved">chapter</span><span class="plain"> *</span><span class="functiontext">Reader::get_chapter_for_range<button class="popup" onclick="togglePopup('usagePopup23')">...<span class="popuptext" id="usagePopup23">Usage of <b>Reader::get_chapter_for_range</b>:<br>The Analyser - <a href="3-ta.html#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">range</span><span class="plain">) {</span>
<span class="reserved">chapter</span><span class="plain"> *</span><span class="functiontext">Reader::get_chapter_for_range<button class="popup" onclick="togglePopup('usagePopup22')">...<span class="popuptext" id="usagePopup22">Usage of <b>Reader::get_chapter_for_range</b>:<br>The Analyser - <a href="3-ta.html#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">range</span><span class="plain">) {</span>
<span class="reserved">chapter</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">W</span><span class="plain">)</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, </span><span class="reserved">chapter</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">chapters</span><span class="plain">)</span>
@ -468,13 +466,13 @@ in large webs, and lookup is performed only a few times.
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">section</span><span class="plain"> *</span><span class="functiontext">Reader::get_section_for_range<button class="popup" onclick="togglePopup('usagePopup24')">...<span class="popuptext" id="usagePopup24">Usage of <b>Reader::get_section_for_range</b>:<br>Program Control - <a href="1-pc.html#SP7_4_2">&#167;7.4.2</a>, <a href="1-pc.html#SP7_4_2_2">&#167;7.4.2.2</a><br>The Analyser - <a href="3-ta.html#SP1">&#167;1</a><br>The Swarm - <a href="3-ts.html#SP2_2_1">&#167;2.2.1</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">range</span><span class="plain">) {</span>
<span class="reserved">section</span><span class="plain"> *</span><span class="functiontext">Reader::get_section_for_range<button class="popup" onclick="togglePopup('usagePopup23')">...<span class="popuptext" id="usagePopup23">Usage of <b>Reader::get_section_for_range</b>:<br>Program Control - <a href="1-pc.html#SP7_4_2">&#167;7.4.2</a>, <a href="1-pc.html#SP7_4_2_2">&#167;7.4.2.2</a><br>The Analyser - <a href="3-ta.html#SP1">&#167;1</a><br>The Swarm - <a href="3-ts.html#SP2_2_1">&#167;2.2.1</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">range</span><span class="plain">) {</span>
<span class="reserved">chapter</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">;</span>
<span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">W</span><span class="plain">)</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, </span><span class="reserved">chapter</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">chapters</span><span class="plain">)</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">section</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">sections</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP18">Str::eq</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">, </span><span class="identifier">range</span><span class="plain">))</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP18">Str::eq</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">, </span><span class="identifier">range</span><span class="plain">))</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">S</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">}</span>
@ -486,7 +484,7 @@ in large webs, and lookup is performed only a few times.
</p>
<pre class="display">
<span class="reserved">section</span><span class="plain"> *</span><span class="functiontext">Reader::section_by_filename<button class="popup" onclick="togglePopup('usagePopup25')">...<span class="popuptext" id="usagePopup25">Usage of <b>Reader::section_by_filename</b>:<br>none</span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="reserved">filename</span><span class="plain">) {</span>
<span class="reserved">section</span><span class="plain"> *</span><span class="functiontext">Reader::section_by_filename<button class="popup" onclick="togglePopup('usagePopup24')">...<span class="popuptext" id="usagePopup24">Usage of <b>Reader::section_by_filename</b>:<br>none</span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="reserved">filename</span><span class="plain">) {</span>
<span class="reserved">chapter</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">;</span>
<span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">W</span><span class="plain">)</span>
@ -511,7 +509,7 @@ translates to when it's used on the command line.
</p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Reader::range_within<button class="popup" onclick="togglePopup('usagePopup26')">...<span class="popuptext" id="usagePopup26">Usage of <b>Reader::range_within</b>:<br>Program Control - <a href="1-pc.html#SP7_4_3_2">&#167;7.4.3.2</a><br>The Swarm - <a href="3-ts.html#SP1">&#167;1</a>, <a href="3-ts.html#SP2_2">&#167;2.2</a><br>The Weaver - <a href="3-tw.html#SP1_3">&#167;1.3</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">range1</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">range2</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Reader::range_within<button class="popup" onclick="togglePopup('usagePopup25')">...<span class="popuptext" id="usagePopup25">Usage of <b>Reader::range_within</b>:<br>Program Control - <a href="1-pc.html#SP7_4_3_2">&#167;7.4.3.2</a><br>The Swarm - <a href="3-ts.html#SP1">&#167;1</a>, <a href="3-ts.html#SP2_2">&#167;2.2</a><br>The Weaver - <a href="3-tw.html#SP1_3">&#167;1.3</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">range1</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">range2</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP21">Str::eq_wide_string</a></span><span class="plain">(</span><span class="identifier">range2</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"0"</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP18">Str::eq</a></span><span class="plain">(</span><span class="identifier">range1</span><span class="plain">, </span><span class="identifier">range2</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="reserved">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="functiontext"><a href="4-pm.html#SP9">Regexp::create_mr</a></span><span class="plain">();</span>
@ -550,7 +548,7 @@ a web contains just one target, which contains all of the sections.
<p class="inwebparagraph"><a id="SP12"></a><b>&#167;12. </b></p>
<pre class="display">
<span class="reserved">tangle_target</span><span class="plain"> *</span><span class="functiontext">Reader::add_tangle_target<button class="popup" onclick="togglePopup('usagePopup27')">...<span class="popuptext" id="usagePopup27">Usage of <b>Reader::add_tangle_target</b>:<br><a href="#SP4_2">&#167;4.2</a>, <a href="#SP4_4">&#167;4.4</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">language</span><span class="plain">) {</span>
<span class="reserved">tangle_target</span><span class="plain"> *</span><span class="functiontext">Reader::add_tangle_target<button class="popup" onclick="togglePopup('usagePopup26')">...<span class="popuptext" id="usagePopup26">Usage of <b>Reader::add_tangle_target</b>:<br><a href="#SP4_2">&#167;4.2</a>, <a href="#SP4_4">&#167;4.4</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">language</span><span class="plain">) {</span>
<span class="reserved">tangle_target</span><span class="plain"> *</span><span class="identifier">tt</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">tangle_target</span><span class="plain">);</span>
<span class="identifier">tt</span><span class="plain">-&gt;</span><span class="element">tangle_language</span><span class="plain"> = </span><span class="identifier">language</span><span class="plain">;</span>
<span class="identifier">ADD_TO_LINKED_LIST</span><span class="plain">(</span><span class="identifier">tt</span><span class="plain">, </span><span class="reserved">tangle_target</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">tangle_targets</span><span class="plain">);</span>
@ -580,7 +578,7 @@ get around the lack of some POSIX facilities on Windows.)
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Reader::add_imported_header<button class="popup" onclick="togglePopup('usagePopup28')">...<span class="popuptext" id="usagePopup28">Usage of <b>Reader::add_imported_header</b>:<br><a href="#SP4_5">&#167;4.5</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">HF</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Reader::add_imported_header<button class="popup" onclick="togglePopup('usagePopup27')">...<span class="popuptext" id="usagePopup27">Usage of <b>Reader::add_imported_header</b>:<br><a href="#SP4_5">&#167;4.5</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">HF</span><span class="plain">) {</span>
<span class="identifier">ADD_TO_LINKED_LIST</span><span class="plain">(</span><span class="identifier">HF</span><span class="plain">, </span><span class="reserved">filename</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">headers</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
@ -590,7 +588,7 @@ get around the lack of some POSIX facilities on Windows.)
<p class="inwebparagraph"><a id="SP15"></a><b>&#167;15. Extent. </b></p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Reader::web_has_one_section<button class="popup" onclick="togglePopup('usagePopup29')">...<span class="popuptext" id="usagePopup29">Usage of <b>Reader::web_has_one_section</b>:<br>The Swarm - <a href="3-ts.html#SP2_2">&#167;2.2</a><br>The Weaver - <a href="3-tw.html#SP1">&#167;1</a>, <a href="3-tw.html#SP1_3_4_1_10_4">&#167;1.3.4.1.10.4</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Reader::web_has_one_section<button class="popup" onclick="togglePopup('usagePopup28')">...<span class="popuptext" id="usagePopup28">Usage of <b>Reader::web_has_one_section</b>:<br>The Swarm - <a href="3-ts.html#SP2_2">&#167;2.2</a><br>The Weaver - <a href="3-tw.html#SP1">&#167;1</a>, <a href="3-tw.html#SP1_3_4_1_10_4">&#167;1.3.4.1.10.4</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="8-ws.html#SP9">WebMetadata::section_count</a></span><span class="plain">(</span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">) == </span><span class="constant">1</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
@ -602,7 +600,7 @@ get around the lack of some POSIX facilities on Windows.)
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Reader::print_web_statistics<button class="popup" onclick="togglePopup('usagePopup30')">...<span class="popuptext" id="usagePopup30">Usage of <b>Reader::print_web_statistics</b>:<br>Program Control - <a href="1-pc.html#SP7_4">&#167;7.4</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Reader::print_web_statistics<button class="popup" onclick="togglePopup('usagePopup29')">...<span class="popuptext" id="usagePopup29">Usage of <b>Reader::print_web_statistics</b>:<br>Program Control - <a href="1-pc.html#SP7_4">&#167;7.4</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">) {</span>
<span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"web \"%S\": "</span><span class="plain">, </span><span class="functiontext"><a href="8-bdfw.html#SP6">Bibliographic::get_datum</a></span><span class="plain">(</span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Title"</span><span class="plain">));</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> = </span><span class="functiontext"><a href="8-ws.html#SP9">WebMetadata::chapter_count</a></span><span class="plain">(</span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">s</span><span class="plain"> = </span><span class="functiontext"><a href="8-ws.html#SP9">WebMetadata::section_count</a></span><span class="plain">(</span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">);</span>
@ -611,7 +609,7 @@ get around the lack of some POSIX facilities on Windows.)
<span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"%d section%s : %d paragraph%s : %d line%s\n"</span><span class="plain">,</span>
<span class="identifier">s</span><span class="plain">, (</span><span class="identifier">s</span><span class="plain"> == </span><span class="constant">1</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">W</span><span class="plain">-&gt;</span><span class="element">no_paragraphs</span><span class="plain">, (</span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">no_paragraphs</span><span class="plain"> == </span><span class="constant">1</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">W</span><span class="plain">-&gt;</span><span class="element">no_lines</span><span class="plain">, (</span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">no_lines</span><span class="plain"> == </span><span class="constant">1</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">W</span><span class="plain">-&gt;</span><span class="element">web_extent</span><span class="plain">, (</span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">web_extent</span><span class="plain"> == </span><span class="constant">1</span><span class="plain">)?</span><span class="string">""</span><span class="plain">:</span><span class="string">"s"</span><span class="plain">);</span>
<span class="plain">}</span>

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'The Analyser' 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#3">Chapter 3: Outputs</a></li><li><b>The Analyser</b></li></ul><p class="purpose">Here we analyse the code in the web, enabling us to see how functions and data structures are used within the program.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">inweb</a></li><li><a href="index.html#3">Chapter 3: Outputs</a></li><li><b>The Analyser</b></li></ul><p class="purpose">Here we analyse the code in the web, enabling us to see how functions and data structures are used within the program.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Scanning webs</a></li><li><a href="#SP2">&#167;2. The section catalogue</a></li><li><a href="#SP3">&#167;3. Analysing code</a></li><li><a href="#SP5">&#167;5. Identifier searching</a></li><li><a href="#SP6">&#167;6. The identifier hash table</a></li><li><a href="#SP13">&#167;13. Open-source project support</a></li></ul><hr class="tocbar">
@ -34,7 +39,7 @@ result of reading in and parsing the web:
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Analyser::scan_line_categories<button class="popup" onclick="togglePopup('usagePopup52')">...<span class="popuptext" id="usagePopup52">Usage of <b>Analyser::scan_line_categories</b>:<br>Program Control - <a href="1-pc.html#SP7_4_1">&#167;7.4.1</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">range</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Analyser::scan_line_categories<button class="popup" onclick="togglePopup('usagePopup51')">...<span class="popuptext" id="usagePopup51">Usage of <b>Analyser::scan_line_categories</b>:<br>Program Control - <a href="1-pc.html#SP7_4_1">&#167;7.4.1</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">range</span><span class="plain">) {</span>
<span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"Scan of source lines for '%S'\n"</span><span class="plain">, </span><span class="identifier">range</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">count</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">;</span>
<span class="reserved">chapter</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain"> = </span><span class="functiontext"><a href="2-tr.html#SP8">Reader::get_chapter_for_range</a></span><span class="plain">(</span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">range</span><span class="plain">);</span>
@ -91,13 +96,13 @@ so that Chapter 4 contains no assumptions about the language.
</pre>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Analyser::catalogue_the_sections<button class="popup" onclick="togglePopup('usagePopup53')">...<span class="popuptext" id="usagePopup53">Usage of <b>Analyser::catalogue_the_sections</b>:<br>Program Control - <a href="1-pc.html#SP7_4_1">&#167;7.4.1</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">range</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">form</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Analyser::catalogue_the_sections<button class="popup" onclick="togglePopup('usagePopup52')">...<span class="popuptext" id="usagePopup52">Usage of <b>Analyser::catalogue_the_sections</b>:<br>Program Control - <a href="1-pc.html#SP7_4_1">&#167;7.4.1</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">range</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">form</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">max_width</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">max_range_width</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">chapter</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">;</span>
<span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, </span><span class="reserved">chapter</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">chapters</span><span class="plain">)</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">section</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">sections</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">max_range_width</span><span class="plain"> &lt; </span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">)) </span><span class="identifier">max_range_width</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">max_range_width</span><span class="plain"> &lt; </span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">)) </span><span class="identifier">max_range_width</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">);</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">main_title</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">main_title</span><span class="plain">, </span><span class="string">"%S/%S"</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="identifier">md</span><span class="plain">-&gt;</span><span class="element">ch_basic_title</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">sect_title</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">max_width</span><span class="plain"> &lt; </span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">main_title</span><span class="plain">)) </span><span class="identifier">max_width</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">main_title</span><span class="plain">);</span>
@ -109,8 +114,8 @@ so that Chapter 4 contains no assumptions about the language.
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">section</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">sections</span><span class="plain">) {</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">main_title</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">main_title</span><span class="plain">, </span><span class="string">"%S/%S"</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="identifier">md</span><span class="plain">-&gt;</span><span class="element">ch_basic_title</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">sect_title</span><span class="plain">);</span>
<span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"%4d %S"</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_extent</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">);</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">); </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">max_range_width</span><span class="plain">+2; </span><span class="identifier">i</span><span class="plain">++) </span><span class="identifier">PRINT</span><span class="plain">(</span><span class="string">" "</span><span class="plain">);</span>
<span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"%4d %S"</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_extent</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">);</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">); </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">max_range_width</span><span class="plain">+2; </span><span class="identifier">i</span><span class="plain">++) </span><span class="identifier">PRINT</span><span class="plain">(</span><span class="string">" "</span><span class="plain">);</span>
<span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">main_title</span><span class="plain">);</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">main_title</span><span class="plain">); </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="identifier">max_width</span><span class="plain">+2; </span><span class="identifier">i</span><span class="plain">++) </span><span class="identifier">PRINT</span><span class="plain">(</span><span class="string">" "</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">form</span><span class="plain"> != </span><span class="constant">BASIC_SECTIONCAT</span><span class="plain">)</span>
@ -152,7 +157,7 @@ taken must be handled by <code class="display"><span class="extract">LanguageMet
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Analyser::analyse_code<button class="popup" onclick="togglePopup('usagePopup54')">...<span class="popuptext" id="usagePopup54">Usage of <b>Analyser::analyse_code</b>:<br>The Swarm - <a href="3-ts.html#SP2">&#167;2</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Analyser::analyse_code<button class="popup" onclick="togglePopup('usagePopup53')">...<span class="popuptext" id="usagePopup53">Usage of <b>Analyser::analyse_code</b>:<br>The Swarm - <a href="3-ts.html#SP2">&#167;2</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">analysed</span><span class="plain">) </span><span class="reserved">return</span><span class="plain">;</span>
&lt;<span class="cwebmacro">Ask language-specific code to identify search targets, and parse the Interfaces</span> <span class="cwebmacronumber">4.1</span>&gt;<span class="plain">;</span>
@ -278,7 +283,7 @@ string of <code class="display"><span class="extract">%i</span></code> character
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Analyser::analyse_as_code<button class="popup" onclick="togglePopup('usagePopup55')">...<span class="popuptext" id="usagePopup55">Usage of <b>Analyser::analyse_as_code</b>:<br><a href="#SP4_2">&#167;4.2</a>, <a href="#SP4_3">&#167;4.3</a>, <a href="#SP4_4">&#167;4.4</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">mask</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">transf</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Analyser::analyse_as_code<button class="popup" onclick="togglePopup('usagePopup54')">...<span class="popuptext" id="usagePopup54">Usage of <b>Analyser::analyse_as_code</b>:<br><a href="#SP4_2">&#167;4.2</a>, <a href="#SP4_3">&#167;4.3</a>, <a href="#SP4_4">&#167;4.4</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">mask</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">transf</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">start_at</span><span class="plain"> = -1, </span><span class="identifier">element_follows</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">; </span><span class="identifier">i</span><span class="plain"> &lt; </span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">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"><a href="4-pm.html#SP2">Regexp::identifier_char</a></span><span class="plain">(</span><span class="functiontext"><a href="4-sm.html#SP13">Str::get_at</a></span><span class="plain">(</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">))) ||</span>
@ -326,7 +331,7 @@ in Aho, Sethi and Ullman, "Compilers: Principles, Techniques and Tools"
</pre>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Analyser::hash_code_from_word<button class="popup" onclick="togglePopup('usagePopup56')">...<span class="popuptext" id="usagePopup56">Usage of <b>Analyser::hash_code_from_word</b>:<br><a href="#SP9">&#167;9</a></span></button></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">int</span><span class="plain"> </span><span class="functiontext">Analyser::hash_code_from_word<button class="popup" onclick="togglePopup('usagePopup55')">...<span class="popuptext" id="usagePopup55">Usage of <b>Analyser::hash_code_from_word</b>:<br><a href="#SP9">&#167;9</a></span></button></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">unsigned</span><span class="plain"> </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">hash_code</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">string_position</span><span class="plain"> </span><span class="identifier">p</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP10">Str::start</a></span><span class="plain">(</span><span class="identifier">text</span><span class="plain">);</span>
<span class="reserved">switch</span><span class="plain">(</span><span class="functiontext"><a href="4-sm.html#SP13">Str::get</a></span><span class="plain">(</span><span class="identifier">p</span><span class="plain">)) {</span>
@ -388,7 +393,7 @@ of each C function.
</p>
<pre class="display">
<span class="reserved">hash_table_entry</span><span class="plain"> *</span><span class="functiontext">Analyser::find_hash_entry<button class="popup" onclick="togglePopup('usagePopup57')">...<span class="popuptext" id="usagePopup57">Usage of <b>Analyser::find_hash_entry</b>:<br><a href="#SP10">&#167;10</a></span></button></span><span class="plain">(</span><span class="reserved">hash_table</span><span class="plain"> *</span><span class="identifier">HT</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">int</span><span class="plain"> </span><span class="identifier">create</span><span class="plain">) {</span>
<span class="reserved">hash_table_entry</span><span class="plain"> *</span><span class="functiontext">Analyser::find_hash_entry<button class="popup" onclick="togglePopup('usagePopup56')">...<span class="popuptext" id="usagePopup56">Usage of <b>Analyser::find_hash_entry</b>:<br><a href="#SP10">&#167;10</a></span></button></span><span class="plain">(</span><span class="reserved">hash_table</span><span class="plain"> *</span><span class="identifier">HT</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">int</span><span class="plain"> </span><span class="identifier">create</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">h</span><span class="plain"> = </span><span class="functiontext"><a href="#SP6">Analyser::hash_code_from_word</a></span><span class="plain">(</span><span class="identifier">text</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">h</span><span class="plain"> == </span><span class="constant">NUMBER_HASH</span><span class="plain">) </span><span class="reserved">return</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="identifier">HT</span><span class="plain">-&gt;</span><span class="element">analysis_hash_initialised</span><span class="plain"> == </span><span class="constant">FALSE</span><span class="plain">) {</span>
@ -413,7 +418,7 @@ of each C function.
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">hash_table_entry</span><span class="plain"> *</span><span class="functiontext">Analyser::find_hash_entry_for_section<button class="popup" onclick="togglePopup('usagePopup58')">...<span class="popuptext" id="usagePopup58">Usage of <b>Analyser::find_hash_entry_for_section</b>:<br><a href="#SP12">&#167;12</a>, The Weaver - <a href="3-tw.html#SP2_3">&#167;2.3</a>, <a href="3-tw.html#SP3">&#167;3</a><br>C-Like Languages - <a href="4-cl.html#SP8">&#167;8</a>, <a href="4-cl.html#SP9">&#167;9</a><br>InC Support - <a href="4-is.html#SP14_1">&#167;14.1</a>, <a href="4-is.html#SP14_2">&#167;14.2</a>, <a href="4-is.html#SP18">&#167;18</a></span></button></span><span class="plain">(</span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text</span><span class="plain">,</span>
<span class="reserved">hash_table_entry</span><span class="plain"> *</span><span class="functiontext">Analyser::find_hash_entry_for_section<button class="popup" onclick="togglePopup('usagePopup57')">...<span class="popuptext" id="usagePopup57">Usage of <b>Analyser::find_hash_entry_for_section</b>:<br><a href="#SP12">&#167;12</a>, The Weaver - <a href="3-tw.html#SP2_3">&#167;2.3</a>, <a href="3-tw.html#SP3">&#167;3</a><br>C-Like Languages - <a href="4-cl.html#SP8">&#167;8</a>, <a href="4-cl.html#SP9">&#167;9</a><br>InC Support - <a href="4-is.html#SP14_1">&#167;14.1</a>, <a href="4-is.html#SP14_2">&#167;14.2</a>, <a href="4-is.html#SP18">&#167;18</a></span></button></span><span class="plain">(</span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text</span><span class="plain">,</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">create</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext"><a href="#SP9">Analyser::find_hash_entry</a></span><span class="plain">(&amp;(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_target</span><span class="plain">-&gt;</span><span class="element">symbols</span><span class="plain">), </span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">create</span><span class="plain">);</span>
<span class="plain">}</span>
@ -425,7 +430,7 @@ of each C function.
</p>
<pre class="display">
<span class="reserved">hash_table_entry</span><span class="plain"> *</span><span class="functiontext">Analyser::mark_reserved_word<button class="popup" onclick="togglePopup('usagePopup59')">...<span class="popuptext" id="usagePopup59">Usage of <b>Analyser::mark_reserved_word</b>:<br>Programming Languages - <a href="4-pl.html#SP14">&#167;14</a></span></button></span><span class="plain">(</span><span class="reserved">hash_table</span><span class="plain"> *</span><span class="identifier">HT</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">e</span><span class="plain">) {</span>
<span class="reserved">hash_table_entry</span><span class="plain"> *</span><span class="functiontext">Analyser::mark_reserved_word<button class="popup" onclick="togglePopup('usagePopup58')">...<span class="popuptext" id="usagePopup58">Usage of <b>Analyser::mark_reserved_word</b>:<br>Programming Languages - <a href="4-pl.html#SP14">&#167;14</a></span></button></span><span class="plain">(</span><span class="reserved">hash_table</span><span class="plain"> *</span><span class="identifier">HT</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">e</span><span class="plain">) {</span>
<span class="reserved">hash_table_entry</span><span class="plain"> *</span><span class="identifier">hte</span><span class="plain"> = </span><span class="functiontext"><a href="#SP9">Analyser::find_hash_entry</a></span><span class="plain">(</span><span class="identifier">HT</span><span class="plain">, </span><span class="identifier">p</span><span class="plain">, </span><span class="constant">TRUE</span><span class="plain">);</span>
<span class="identifier">hte</span><span class="plain">-&gt;</span><span class="element">reserved_word</span><span class="plain"> |= (1 &lt;&lt; </span><span class="identifier">e</span><span class="plain">);</span>
<span class="identifier">hte</span><span class="plain">-&gt;</span><span class="element">definition_line</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
@ -433,11 +438,11 @@ of each C function.
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">hte</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Analyser::mark_reserved_word_for_section<button class="popup" onclick="togglePopup('usagePopup60')">...<span class="popuptext" id="usagePopup60">Usage of <b>Analyser::mark_reserved_word_for_section</b>:<br>ACME Support - <a href="4-as.html#SP7">&#167;7</a></span></button></span><span class="plain">(</span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">e</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Analyser::mark_reserved_word_for_section<button class="popup" onclick="togglePopup('usagePopup59')">...<span class="popuptext" id="usagePopup59">Usage of <b>Analyser::mark_reserved_word_for_section</b>:<br>ACME Support - <a href="4-as.html#SP7">&#167;7</a></span></button></span><span class="plain">(</span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">e</span><span class="plain">) {</span>
<span class="functiontext"><a href="#SP10">Analyser::mark_reserved_word</a></span><span class="plain">(&amp;(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_target</span><span class="plain">-&gt;</span><span class="element">symbols</span><span class="plain">), </span><span class="identifier">p</span><span class="plain">, </span><span class="identifier">e</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">hash_table_entry</span><span class="plain"> *</span><span class="functiontext">Analyser::mark_reserved_word_at_line<button class="popup" onclick="togglePopup('usagePopup61')">...<span class="popuptext" id="usagePopup61">Usage of <b>Analyser::mark_reserved_word_at_line</b>:<br>The Parser - <a href="2-tp.html#SP1_1_6_5_1_6">&#167;1.1.6.5.1.6</a>, <a href="2-tp.html#SP1_1_6_5_1_7">&#167;1.1.6.5.1.7</a><br>Types and Functions - <a href="4-taf.html#SP2">&#167;2</a>, <a href="4-taf.html#SP4">&#167;4</a>, <a href="4-taf.html#SP7">&#167;7</a></span></button></span><span class="plain">(</span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">e</span><span class="plain">) {</span>
<span class="reserved">hash_table_entry</span><span class="plain"> *</span><span class="functiontext">Analyser::mark_reserved_word_at_line<button class="popup" onclick="togglePopup('usagePopup60')">...<span class="popuptext" id="usagePopup60">Usage of <b>Analyser::mark_reserved_word_at_line</b>:<br>The Parser - <a href="2-tp.html#SP1_1_6_5_1_6">&#167;1.1.6.5.1.6</a>, <a href="2-tp.html#SP1_1_6_5_1_7">&#167;1.1.6.5.1.7</a><br>Types and Functions - <a href="4-taf.html#SP2">&#167;2</a>, <a href="4-taf.html#SP4">&#167;4</a>, <a href="4-taf.html#SP7">&#167;7</a></span></button></span><span class="plain">(</span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">e</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">L</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no line for rw"</span><span class="plain">);</span>
<span class="reserved">hash_table_entry</span><span class="plain"> *</span><span class="identifier">hte</span><span class="plain"> =</span>
<span class="functiontext"><a href="#SP10">Analyser::mark_reserved_word</a></span><span class="plain">(&amp;(</span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">owning_section</span><span class="plain">-&gt;</span><span class="element">sect_target</span><span class="plain">-&gt;</span><span class="element">symbols</span><span class="plain">), </span><span class="identifier">p</span><span class="plain">, </span><span class="identifier">e</span><span class="plain">);</span>
@ -445,23 +450,23 @@ of each C function.
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">hte</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Analyser::is_reserved_word<button class="popup" onclick="togglePopup('usagePopup62')">...<span class="popuptext" id="usagePopup62">Usage of <b>Analyser::is_reserved_word</b>:<br>The Painter - <a href="4-tp.html#SP5">&#167;5</a></span></button></span><span class="plain">(</span><span class="reserved">hash_table</span><span class="plain"> *</span><span class="identifier">HT</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">e</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Analyser::is_reserved_word<button class="popup" onclick="togglePopup('usagePopup61')">...<span class="popuptext" id="usagePopup61">Usage of <b>Analyser::is_reserved_word</b>:<br>The Painter - <a href="4-tp.html#SP5">&#167;5</a></span></button></span><span class="plain">(</span><span class="reserved">hash_table</span><span class="plain"> *</span><span class="identifier">HT</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">e</span><span class="plain">) {</span>
<span class="reserved">hash_table_entry</span><span class="plain"> *</span><span class="identifier">hte</span><span class="plain"> = </span><span class="functiontext"><a href="#SP9">Analyser::find_hash_entry</a></span><span class="plain">(</span><span class="identifier">HT</span><span class="plain">, </span><span class="identifier">p</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">hte</span><span class="plain">) &amp;&amp; (</span><span class="identifier">hte</span><span class="plain">-&gt;</span><span class="element">reserved_word</span><span class="plain"> &amp; (1 &lt;&lt; </span><span class="identifier">e</span><span class="plain">))) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Analyser::is_reserved_word_for_section<button class="popup" onclick="togglePopup('usagePopup63')">...<span class="popuptext" id="usagePopup63">Usage of <b>Analyser::is_reserved_word_for_section</b>:<br>HTML Formats - <a href="5-hf.html#SP10_3">&#167;10.3</a></span></button></span><span class="plain">(</span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">e</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Analyser::is_reserved_word_for_section<button class="popup" onclick="togglePopup('usagePopup62')">...<span class="popuptext" id="usagePopup62">Usage of <b>Analyser::is_reserved_word_for_section</b>:<br>HTML Formats - <a href="5-hf.html#SP10_3">&#167;10.3</a></span></button></span><span class="plain">(</span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">e</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext"><a href="#SP10">Analyser::is_reserved_word</a></span><span class="plain">(&amp;(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_target</span><span class="plain">-&gt;</span><span class="element">symbols</span><span class="plain">), </span><span class="identifier">p</span><span class="plain">, </span><span class="identifier">e</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">source_line</span><span class="plain"> *</span><span class="functiontext">Analyser::get_defn_line<button class="popup" onclick="togglePopup('usagePopup64')">...<span class="popuptext" id="usagePopup64">Usage of <b>Analyser::get_defn_line</b>:<br>HTML Formats - <a href="5-hf.html#SP10_3">&#167;10.3</a></span></button></span><span class="plain">(</span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">e</span><span class="plain">) {</span>
<span class="reserved">source_line</span><span class="plain"> *</span><span class="functiontext">Analyser::get_defn_line<button class="popup" onclick="togglePopup('usagePopup63')">...<span class="popuptext" id="usagePopup63">Usage of <b>Analyser::get_defn_line</b>:<br>HTML Formats - <a href="5-hf.html#SP10_3">&#167;10.3</a></span></button></span><span class="plain">(</span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">e</span><span class="plain">) {</span>
<span class="reserved">hash_table_entry</span><span class="plain"> *</span><span class="identifier">hte</span><span class="plain"> = </span><span class="functiontext"><a href="#SP9">Analyser::find_hash_entry</a></span><span class="plain">(&amp;(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_target</span><span class="plain">-&gt;</span><span class="element">symbols</span><span class="plain">), </span><span class="identifier">p</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">hte</span><span class="plain">) &amp;&amp; (</span><span class="identifier">hte</span><span class="plain">-&gt;</span><span class="element">reserved_word</span><span class="plain"> &amp; (1 &lt;&lt; </span><span class="identifier">e</span><span class="plain">))) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">hte</span><span class="plain">-&gt;</span><span class="element">definition_line</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">language_function</span><span class="plain"> *</span><span class="functiontext">Analyser::get_function<button class="popup" onclick="togglePopup('usagePopup65')">...<span class="popuptext" id="usagePopup65">Usage of <b>Analyser::get_function</b>:<br>HTML Formats - <a href="5-hf.html#SP10_3">&#167;10.3</a></span></button></span><span class="plain">(</span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">e</span><span class="plain">) {</span>
<span class="reserved">language_function</span><span class="plain"> *</span><span class="functiontext">Analyser::get_function<button class="popup" onclick="togglePopup('usagePopup64')">...<span class="popuptext" id="usagePopup64">Usage of <b>Analyser::get_function</b>:<br>HTML Formats - <a href="5-hf.html#SP10_3">&#167;10.3</a></span></button></span><span class="plain">(</span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">e</span><span class="plain">) {</span>
<span class="reserved">hash_table_entry</span><span class="plain"> *</span><span class="identifier">hte</span><span class="plain"> = </span><span class="functiontext"><a href="#SP9">Analyser::find_hash_entry</a></span><span class="plain">(&amp;(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_target</span><span class="plain">-&gt;</span><span class="element">symbols</span><span class="plain">), </span><span class="identifier">p</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">hte</span><span class="plain">) &amp;&amp; (</span><span class="identifier">hte</span><span class="plain">-&gt;</span><span class="element">reserved_word</span><span class="plain"> &amp; (1 &lt;&lt; </span><span class="identifier">e</span><span class="plain">))) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">hte</span><span class="plain">-&gt;</span><span class="element">as_function</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">NULL</span><span class="plain">;</span>
@ -494,7 +499,7 @@ same paragraph of code.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Analyser::analyse_find<button class="popup" onclick="togglePopup('usagePopup66')">...<span class="popuptext" id="usagePopup66">Usage of <b>Analyser::analyse_find</b>:<br><a href="#SP5">&#167;5</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">identifier</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">u</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Analyser::analyse_find<button class="popup" onclick="togglePopup('usagePopup65')">...<span class="popuptext" id="usagePopup65">Usage of <b>Analyser::analyse_find</b>:<br><a href="#SP5">&#167;5</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">identifier</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">u</span><span class="plain">) {</span>
<span class="reserved">hash_table_entry</span><span class="plain"> *</span><span class="identifier">hte</span><span class="plain"> =</span>
<span class="functiontext"><a href="#SP9">Analyser::find_hash_entry_for_section</a></span><span class="plain">(</span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">owning_section</span><span class="plain">, </span><span class="identifier">identifier</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">hte</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain">;</span>
@ -519,14 +524,14 @@ folder: failing that, we fall back on a default script belonging to Inweb.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Analyser::write_makefile<button class="popup" onclick="togglePopup('usagePopup67')">...<span class="popuptext" id="usagePopup67">Usage of <b>Analyser::write_makefile</b>:<br>Program Control - <a href="1-pc.html#SP7_4_1">&#167;7.4.1</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">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">void</span><span class="plain"> </span><span class="functiontext">Analyser::write_makefile<button class="popup" onclick="togglePopup('usagePopup66')">...<span class="popuptext" id="usagePopup66">Usage of <b>Analyser::write_makefile</b>:<br>Program Control - <a href="1-pc.html#SP7_4_1">&#167;7.4.1</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">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">filename</span><span class="plain"> *</span><span class="identifier">prototype</span><span class="plain"> = </span><span class="functiontext"><a href="3-fln.html#SP2">Filenames::in_folder</a></span><span class="plain">(</span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">path_to_web</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="functiontext"><a href="4-tf.html#SP1">TextFiles::exists</a></span><span class="plain">(</span><span class="identifier">prototype</span><span class="plain">)))</span>
<span class="identifier">prototype</span><span class="plain"> = </span><span class="functiontext"><a href="3-fln.html#SP2">Filenames::in_folder</a></span><span class="plain">(</span><span class="identifier">path_to_inweb_materials</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"makescript.txt"</span><span class="plain">);</span>
<span class="functiontext"><a href="6-mkf.html#SP1">Makefiles::write</a></span><span class="plain">(</span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">prototype</span><span class="plain">, </span><span class="identifier">F</span><span class="plain">, </span><span class="identifier">I</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Analyser::write_gitignore<button class="popup" onclick="togglePopup('usagePopup68')">...<span class="popuptext" id="usagePopup68">Usage of <b>Analyser::write_gitignore</b>:<br>Program Control - <a href="1-pc.html#SP7_4_1">&#167;7.4.1</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Analyser::write_gitignore<button class="popup" onclick="togglePopup('usagePopup67')">...<span class="popuptext" id="usagePopup67">Usage of <b>Analyser::write_gitignore</b>:<br>Program Control - <a href="1-pc.html#SP7_4_1">&#167;7.4.1</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">) {</span>
<span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">prototype</span><span class="plain"> = </span><span class="functiontext"><a href="3-fln.html#SP2">Filenames::in_folder</a></span><span class="plain">(</span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">path_to_web</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="functiontext"><a href="4-tf.html#SP1">TextFiles::exists</a></span><span class="plain">(</span><span class="identifier">prototype</span><span class="plain">)))</span>
<span class="identifier">prototype</span><span class="plain"> = </span><span class="functiontext"><a href="3-fln.html#SP2">Filenames::in_folder</a></span><span class="plain">(</span><span class="identifier">path_to_inweb_materials</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"gitignorescript.txt"</span><span class="plain">);</span>

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'The Indexer' 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#3">Chapter 3: Outputs</a></li><li><b>The Indexer</b></li></ul><p class="purpose">To construct indexes of the material woven, following a template.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">inweb</a></li><li><a href="index.html#3">Chapter 3: Outputs</a></li><li><b>The Indexer</b></li></ul><p class="purpose">To construct indexes of the material woven, following a template.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Cover sheets</a></li><li><a href="#SP4">&#167;4. Full index pages</a></li><li><a href="#SP5">&#167;5. Running the interpreter</a></li><li><a href="#SP5_2">&#167;5.2. File handling</a></li><li><a href="#SP5_1_1">&#167;5.1.1. The repeat stack and loops</a></li><li><a href="#SP5_1_8">&#167;5.1.8. Variable substitutions</a></li><li><a href="#SP7">&#167;7. Transcribing CSS</a></li></ul><hr class="tocbar">
@ -35,7 +40,7 @@ to call the fuller indexing service if need be, using <code class="display"><spa
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Indexer::cover_sheet_maker<button class="popup" onclick="togglePopup('usagePopup73')">...<span class="popuptext" id="usagePopup73">Usage of <b>Indexer::cover_sheet_maker</b>:<br><a href="#SP2_1_1">&#167;2.1.1</a>, The Weaver - <a href="3-tw.html#SP1_2">&#167;1.2</a>, <a href="3-tw.html#SP1_4">&#167;1.4</a><br>HTML Formats - <a href="5-hf.html#SP6">&#167;6</a>, <a href="5-hf.html#SP30">&#167;30</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</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">text_stream</span><span class="plain"> *</span><span class="identifier">unextended_leafname</span><span class="plain">,</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Indexer::cover_sheet_maker<button class="popup" onclick="togglePopup('usagePopup72')">...<span class="popuptext" id="usagePopup72">Usage of <b>Indexer::cover_sheet_maker</b>:<br><a href="#SP2_1_1">&#167;2.1.1</a>, The Weaver - <a href="3-tw.html#SP1_2">&#167;1.2</a>, <a href="3-tw.html#SP1_4">&#167;1.4</a><br>HTML Formats - <a href="5-hf.html#SP6">&#167;6</a>, <a href="5-hf.html#SP30">&#167;30</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</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">text_stream</span><span class="plain"> *</span><span class="identifier">unextended_leafname</span><span class="plain">,</span>
<span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wt</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">halves</span><span class="plain">) {</span>
<span class="reserved">cover_sheet_state</span><span class="plain"> </span><span class="identifier">state</span><span class="plain">;</span>
&lt;<span class="cwebmacro">Clear the cover sheet state</span> <span class="cwebmacronumber">1.2</span>&gt;<span class="plain">;</span>
@ -96,7 +101,7 @@ structure.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Indexer::scan_cover_line<button class="popup" onclick="togglePopup('usagePopup74')">...<span class="popuptext" id="usagePopup74">Usage of <b>Indexer::scan_cover_line</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">line</span><span class="plain">, </span><span class="reserved">text_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">v_state</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Indexer::scan_cover_line<button class="popup" onclick="togglePopup('usagePopup73')">...<span class="popuptext" id="usagePopup73">Usage of <b>Indexer::scan_cover_line</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">line</span><span class="plain">, </span><span class="reserved">text_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">v_state</span><span class="plain">) {</span>
<span class="reserved">cover_sheet_state</span><span class="plain"> *</span><span class="identifier">state</span><span class="plain"> = (</span><span class="reserved">cover_sheet_state</span><span class="plain"> *) </span><span class="identifier">v_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">state</span><span class="plain">-&gt;</span><span class="element">WEAVE_COVER_TO</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">include</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
@ -237,7 +242,7 @@ structure.
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Indexer::nav_column<button class="popup" onclick="togglePopup('usagePopup75')">...<span class="popuptext" id="usagePopup75">Usage of <b>Indexer::nav_column</b>:<br><a href="#SP2_1_2">&#167;2.1.2</a>, <a href="#SP5_1_8">&#167;5.1.8</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</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">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">range</span><span class="plain">,</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Indexer::nav_column<button class="popup" onclick="togglePopup('usagePopup74')">...<span class="popuptext" id="usagePopup74">Usage of <b>Indexer::nav_column</b>:<br><a href="#SP2_1_2">&#167;2.1.2</a>, <a href="#SP5_1_8">&#167;5.1.8</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</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">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">range</span><span class="plain">,</span>
<span class="reserved">weave_pattern</span><span class="plain"> *</span><span class="identifier">pattern</span><span class="plain">, </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">nav</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">leafname</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">nav</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-tf.html#SP1">TextFiles::exists</a></span><span class="plain">(</span><span class="identifier">nav</span><span class="plain">))</span>
@ -295,7 +300,7 @@ being accessed directly.
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">docs_mode</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">contents_processor</span><span class="plain">;</span>
<span class="reserved">contents_processor</span><span class="plain"> </span><span class="functiontext">Indexer::new_processor<button class="popup" onclick="togglePopup('usagePopup76')">...<span class="popuptext" id="usagePopup76">Usage of <b>Indexer::new_processor</b>:<br><a href="#SP5">&#167;5</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">range</span><span class="plain">) {</span>
<span class="reserved">contents_processor</span><span class="plain"> </span><span class="functiontext">Indexer::new_processor<button class="popup" onclick="togglePopup('usagePopup75')">...<span class="popuptext" id="usagePopup75">Usage of <b>Indexer::new_processor</b>:<br><a href="#SP5">&#167;5</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">range</span><span class="plain">) {</span>
<span class="reserved">contents_processor</span><span class="plain"> </span><span class="identifier">cp</span><span class="plain">;</span>
<span class="identifier">cp</span><span class="plain">.</span><span class="element">no_tlines</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="identifier">cp</span><span class="plain">.</span><span class="element">restrict_to_range</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP3">Str::duplicate</a></span><span class="plain">(</span><span class="identifier">range</span><span class="plain">);</span>
@ -317,7 +322,7 @@ being accessed directly.
</pre>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Indexer::run<button class="popup" onclick="togglePopup('usagePopup77')">...<span class="popuptext" id="usagePopup77">Usage of <b>Indexer::run</b>:<br><a href="#SP2_1_3">&#167;2.1.3</a>, <a href="#SP3">&#167;3</a>, The Swarm - <a href="3-ts.html#SP4">&#167;4</a><br>HTML Formats - <a href="5-hf.html#SP20">&#167;20</a><br>Weave Plugins - <a href="5-wp.html#SP3">&#167;3</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">range</span><span class="plain">,</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Indexer::run<button class="popup" onclick="togglePopup('usagePopup76')">...<span class="popuptext" id="usagePopup76">Usage of <b>Indexer::run</b>:<br><a href="#SP2_1_3">&#167;2.1.3</a>, <a href="#SP3">&#167;3</a>, The Swarm - <a href="3-ts.html#SP4">&#167;4</a><br>HTML Formats - <a href="5-hf.html#SP20">&#167;20</a><br>Weave Plugins - <a href="5-wp.html#SP3">&#167;3</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">range</span><span class="plain">,</span>
<span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">template_filename</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">contents_page_leafname</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">write_to</span><span class="plain">, </span><span class="reserved">weave_pattern</span><span class="plain"> *</span><span class="identifier">pattern</span><span class="plain">, </span><span class="reserved">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">nav_file</span><span class="plain">,</span>
<span class="reserved">linked_list</span><span class="plain"> *</span><span class="identifier">crumbs</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">docs</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">unlink_selflinks</span><span class="plain">) {</span>
@ -416,7 +421,7 @@ being accessed directly.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Indexer::save_template_line<button class="popup" onclick="togglePopup('usagePopup78')">...<span class="popuptext" id="usagePopup78">Usage of <b>Indexer::save_template_line</b>:<br><a href="#SP5_2">&#167;5.2</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">line</span><span class="plain">, </span><span class="reserved">text_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">void_cp</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Indexer::save_template_line<button class="popup" onclick="togglePopup('usagePopup77')">...<span class="popuptext" id="usagePopup77">Usage of <b>Indexer::save_template_line</b>:<br><a href="#SP5_2">&#167;5.2</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">line</span><span class="plain">, </span><span class="reserved">text_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">void_cp</span><span class="plain">) {</span>
<span class="reserved">contents_processor</span><span class="plain"> *</span><span class="identifier">cp</span><span class="plain"> = (</span><span class="reserved">contents_processor</span><span class="plain"> *) </span><span class="identifier">void_cp</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">cp</span><span class="plain">-&gt;</span><span class="element">no_tlines</span><span class="plain"> &lt; </span><span class="constant">MAX_TEMPLATE_LINES</span><span class="plain">)</span>
<span class="identifier">cp</span><span class="plain">-&gt;</span><span class="element">tlines</span><span class="plain">[</span><span class="identifier">cp</span><span class="plain">-&gt;</span><span class="element">no_tlines</span><span class="plain">++] = </span><span class="functiontext"><a href="4-sm.html#SP3">Str::duplicate</a></span><span class="plain">(</span><span class="identifier">line</span><span class="plain">);</span>
@ -465,8 +470,8 @@ being accessed directly.
<span class="plain">((</span><span class="reserved">chapter</span><span class="plain"> *) </span><span class="identifier">CONTENT_IN_ITEM</span><span class="plain">(</span><span class="identifier">cp</span><span class="plain">-&gt;</span><span class="identifier">repeat_stack_threshold</span><span class="plain">[</span><span class="identifier">j</span><span class="plain">], </span><span class="reserved">chapter</span><span class="plain">))-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">ch_range</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">cp</span><span class="plain">-&gt;</span><span class="element">repeat_stack_level</span><span class="plain">[</span><span class="identifier">j</span><span class="plain">] == </span><span class="constant">SECTION_LEVEL</span><span class="plain">)</span>
<span class="identifier">PRINT</span><span class="plain">(</span><span class="string">" %d: %S/%S"</span><span class="plain">,</span>
<span class="identifier">j</span><span class="plain">, ((</span><span class="reserved">section</span><span class="plain"> *) </span><span class="identifier">CONTENT_IN_ITEM</span><span class="plain">(</span><span class="identifier">cp</span><span class="plain">-&gt;</span><span class="element">repeat_stack_variable</span><span class="plain">[</span><span class="identifier">j</span><span class="plain">], </span><span class="reserved">section</span><span class="plain">))-&gt;</span><span class="element">sect_range</span><span class="plain">,</span>
<span class="plain">((</span><span class="reserved">section</span><span class="plain"> *) </span><span class="identifier">CONTENT_IN_ITEM</span><span class="plain">(</span><span class="identifier">cp</span><span class="plain">-&gt;</span><span class="identifier">repeat_stack_threshold</span><span class="plain">[</span><span class="identifier">j</span><span class="plain">], </span><span class="reserved">section</span><span class="plain">))-&gt;</span><span class="element">sect_range</span><span class="plain">);</span>
<span class="identifier">j</span><span class="plain">, ((</span><span class="reserved">section</span><span class="plain"> *) </span><span class="identifier">CONTENT_IN_ITEM</span><span class="plain">(</span><span class="identifier">cp</span><span class="plain">-&gt;</span><span class="element">repeat_stack_variable</span><span class="plain">[</span><span class="identifier">j</span><span class="plain">], </span><span class="reserved">section</span><span class="plain">))-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">,</span>
<span class="plain">((</span><span class="reserved">section</span><span class="plain"> *) </span><span class="identifier">CONTENT_IN_ITEM</span><span class="plain">(</span><span class="identifier">cp</span><span class="plain">-&gt;</span><span class="identifier">repeat_stack_threshold</span><span class="plain">[</span><span class="identifier">j</span><span class="plain">], </span><span class="reserved">section</span><span class="plain">))-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"\n"</span><span class="plain">);</span>
</pre>
@ -493,7 +498,7 @@ chapter as its value during the sole iteration.
<span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, </span><span class="reserved">chapter</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">chapters</span><span class="plain">)</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">section</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">sections</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP18">Str::eq</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">, </span><span class="identifier">mr</span><span class="plain">.</span><span class="element">exp</span><span class="plain">[0])) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP18">Str::eq</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">, </span><span class="identifier">mr</span><span class="plain">.</span><span class="element">exp</span><span class="plain">[0])) {</span>
<span class="functiontext"><a href="#SP5_1_7">Indexer::start_CI_loop</a></span><span class="plain">(</span><span class="identifier">cp</span><span class="plain">, </span><span class="constant">SECTION_LEVEL</span><span class="plain">, </span><span class="identifier">S_item</span><span class="plain">, </span><span class="identifier">S_item</span><span class="plain">, </span><span class="identifier">lpos</span><span class="plain">);</span>
<span class="functiontext"><a href="4-pm.html#SP9">Regexp::dispose_of</a></span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">);</span>
<span class="reserved">goto</span><span class="plain"> </span><span class="identifier">CYCLE</span><span class="plain">;</span>
@ -644,7 +649,7 @@ on the stack; and similarly for <code class="display"><span class="extract">SECT
</pre>
<pre class="display">
<span class="reserved">linked_list_item</span><span class="plain"> *</span><span class="functiontext">Indexer::heading_topmost_on_stack<button class="popup" onclick="togglePopup('usagePopup79')">...<span class="popuptext" id="usagePopup79">Usage of <b>Indexer::heading_topmost_on_stack</b>:<br><a href="#SP5_1_3">&#167;5.1.3</a>, <a href="#SP5_1_8">&#167;5.1.8</a></span></button></span><span class="plain">(</span><span class="reserved">contents_processor</span><span class="plain"> *</span><span class="identifier">cp</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">level</span><span class="plain">) {</span>
<span class="reserved">linked_list_item</span><span class="plain"> *</span><span class="functiontext">Indexer::heading_topmost_on_stack<button class="popup" onclick="togglePopup('usagePopup78')">...<span class="popuptext" id="usagePopup78">Usage of <b>Indexer::heading_topmost_on_stack</b>:<br><a href="#SP5_1_3">&#167;5.1.3</a>, <a href="#SP5_1_8">&#167;5.1.8</a></span></button></span><span class="plain">(</span><span class="reserved">contents_processor</span><span class="plain"> *</span><span class="identifier">cp</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">level</span><span class="plain">) {</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">rstl</span><span class="plain"> = </span><span class="identifier">cp</span><span class="plain">-&gt;</span><span class="element">stack_pointer</span><span class="plain">-1; </span><span class="identifier">rstl</span><span class="plain"> &gt;= </span><span class="constant">0</span><span class="plain">; </span><span class="identifier">rstl</span><span class="plain">--)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">cp</span><span class="plain">-&gt;</span><span class="element">repeat_stack_level</span><span class="plain">[</span><span class="identifier">rstl</span><span class="plain">] == </span><span class="identifier">level</span><span class="plain">)</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">cp</span><span class="plain">-&gt;</span><span class="identifier">repeat_stack_variable</span><span class="plain">[</span><span class="identifier">rstl</span><span class="plain">];</span>
@ -659,7 +664,7 @@ similarly for ending it by popping them again:
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Indexer::start_CI_loop<button class="popup" onclick="togglePopup('usagePopup80')">...<span class="popuptext" id="usagePopup80">Usage of <b>Indexer::start_CI_loop</b>:<br><a href="#SP5_1_2">&#167;5.1.2</a>, <a href="#SP5_1_3">&#167;5.1.3</a></span></button></span><span class="plain">(</span><span class="reserved">contents_processor</span><span class="plain"> *</span><span class="identifier">cp</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">level</span><span class="plain">,</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Indexer::start_CI_loop<button class="popup" onclick="togglePopup('usagePopup79')">...<span class="popuptext" id="usagePopup79">Usage of <b>Indexer::start_CI_loop</b>:<br><a href="#SP5_1_2">&#167;5.1.2</a>, <a href="#SP5_1_3">&#167;5.1.3</a></span></button></span><span class="plain">(</span><span class="reserved">contents_processor</span><span class="plain"> *</span><span class="identifier">cp</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">level</span><span class="plain">,</span>
<span class="reserved">linked_list_item</span><span class="plain"> *</span><span class="identifier">from</span><span class="plain">, </span><span class="reserved">linked_list_item</span><span class="plain"> *</span><span class="identifier">to</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">pos</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">cp</span><span class="plain">-&gt;</span><span class="element">stack_pointer</span><span class="plain"> &lt; </span><span class="constant">CI_STACK_CAPACITY</span><span class="plain">) {</span>
<span class="identifier">cp</span><span class="plain">-&gt;</span><span class="element">repeat_stack_level</span><span class="plain">[</span><span class="identifier">cp</span><span class="plain">-&gt;</span><span class="element">stack_pointer</span><span class="plain">] = </span><span class="identifier">level</span><span class="plain">;</span>
@ -669,7 +674,7 @@ similarly for ending it by popping them again:
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Indexer::end_CI_loop<button class="popup" onclick="togglePopup('usagePopup81')">...<span class="popuptext" id="usagePopup81">Usage of <b>Indexer::end_CI_loop</b>:<br><a href="#SP5_1_4">&#167;5.1.4</a></span></button></span><span class="plain">(</span><span class="reserved">contents_processor</span><span class="plain"> *</span><span class="identifier">cp</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Indexer::end_CI_loop<button class="popup" onclick="togglePopup('usagePopup80')">...<span class="popuptext" id="usagePopup80">Usage of <b>Indexer::end_CI_loop</b>:<br><a href="#SP5_1_4">&#167;5.1.4</a></span></button></span><span class="plain">(</span><span class="reserved">contents_processor</span><span class="plain"> *</span><span class="identifier">cp</span><span class="plain">) {</span>
<span class="identifier">cp</span><span class="plain">-&gt;</span><span class="element">stack_pointer</span><span class="plain">--;</span>
<span class="plain">}</span>
</pre>
@ -707,6 +712,10 @@ its square-bracketed parts.
<span class="identifier">cp</span><span class="plain">-&gt;</span><span class="element">restrict_to_range</span><span class="plain">, </span><span class="identifier">cp</span><span class="plain">-&gt;</span><span class="element">nav_pattern</span><span class="plain">, </span><span class="identifier">cp</span><span class="plain">-&gt;</span><span class="element">nav_file</span><span class="plain">, </span><span class="identifier">cp</span><span class="plain">-&gt;</span><span class="element">leafname</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-pm.html#SP10">Regexp::match</a></span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">varname</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"Breadcrumbs"</span><span class="plain">)) {</span>
<span class="functiontext"><a href="5-hf.html#SP9">HTMLFormat::drop_initial_breadcrumbs</a></span><span class="plain">(</span><span class="identifier">substituted</span><span class="plain">, </span><span class="identifier">cp</span><span class="plain">-&gt;</span><span class="element">crumbs</span><span class="plain">, </span><span class="identifier">cp</span><span class="plain">-&gt;</span><span class="element">docs_mode</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP21">Str::eq_wide_string</a></span><span class="plain">(</span><span class="identifier">varname</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"Plugins"</span><span class="plain">)) {</span>
<span class="reserved">weave_plugin</span><span class="plain"> *</span><span class="identifier">wp</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">wp</span><span class="plain">, </span><span class="reserved">weave_plugin</span><span class="plain">, </span><span class="identifier">cp</span><span class="plain">-&gt;</span><span class="element">nav_pattern</span><span class="plain">-&gt;</span><span class="element">plugins</span><span class="plain">)</span>
<span class="functiontext"><a href="5-wp.html#SP3">WeavePlugins::include</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">cp</span><span class="plain">-&gt;</span><span class="element">nav_web</span><span class="plain">, </span><span class="identifier">wp</span><span class="plain">, </span><span class="identifier">cp</span><span class="plain">-&gt;</span><span class="element">nav_pattern</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-pm.html#SP10">Regexp::match</a></span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">varname</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"Modules"</span><span class="plain">)) {</span>
&lt;<span class="cwebmacro">Substitute the list of imported modules</span> <span class="cwebmacronumber">5.1.8.5</span>&gt;<span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-pm.html#SP10">Regexp::match</a></span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">varname</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"Chapter (%c+)"</span><span class="plain">)) {</span>
@ -773,7 +782,7 @@ its square-bracketed parts.
<pre class="displaydefn">
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">swarm_leader</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="5-fm.html#SP37">Formats::substitute_post_processing_data</a></span><span class="plain">(</span><span class="identifier">substituted</span><span class="plain">, </span><span class="identifier">swarm_leader</span><span class="plain">, </span><span class="identifier">detail</span><span class="plain">, </span><span class="identifier">pattern</span><span class="plain">) == </span><span class="constant">FALSE</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="5-fm.html#SP36">Formats::substitute_post_processing_data</a></span><span class="plain">(</span><span class="identifier">substituted</span><span class="plain">, </span><span class="identifier">swarm_leader</span><span class="plain">, </span><span class="identifier">detail</span><span class="plain">, </span><span class="identifier">pattern</span><span class="plain">) == </span><span class="constant">FALSE</span><span class="plain">)</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">substituted</span><span class="plain">, </span><span class="string">"%S for complete web"</span><span class="plain">, </span><span class="identifier">detail</span><span class="plain">);</span>
</pre>
@ -797,7 +806,7 @@ its square-bracketed parts.
<span class="functiontext"><a href="4-sm.html#SP16">Str::copy</a></span><span class="plain">(</span><span class="identifier">substituted</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">ch_range</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP21">Str::eq_wide_string</a></span><span class="plain">(</span><span class="identifier">detail</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"Purpose"</span><span class="plain">)) {</span>
<span class="functiontext"><a href="4-sm.html#SP16">Str::copy</a></span><span class="plain">(</span><span class="identifier">substituted</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">rubric</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="5-fm.html#SP37">Formats::substitute_post_processing_data</a></span><span class="plain">(</span><span class="identifier">substituted</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">ch_weave</span><span class="plain">, </span><span class="identifier">detail</span><span class="plain">, </span><span class="identifier">pattern</span><span class="plain">)) {</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="5-fm.html#SP36">Formats::substitute_post_processing_data</a></span><span class="plain">(</span><span class="identifier">substituted</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">ch_weave</span><span class="plain">, </span><span class="identifier">detail</span><span class="plain">, </span><span class="identifier">pattern</span><span class="plain">)) {</span>
<span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">substituted</span><span class="plain">, </span><span class="string">"%S for %S"</span><span class="plain">, </span><span class="identifier">varname</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">ch_title</span><span class="plain">);</span>
@ -823,14 +832,14 @@ its square-bracketed parts.
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP21">Str::eq_wide_string</a></span><span class="plain">(</span><span class="identifier">detail</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"Purpose"</span><span class="plain">)) {</span>
<span class="functiontext"><a href="4-sm.html#SP16">Str::copy</a></span><span class="plain">(</span><span class="identifier">substituted</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_purpose</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP21">Str::eq_wide_string</a></span><span class="plain">(</span><span class="identifier">detail</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"Code"</span><span class="plain">)) {</span>
<span class="functiontext"><a href="4-sm.html#SP16">Str::copy</a></span><span class="plain">(</span><span class="identifier">substituted</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">);</span>
<span class="functiontext"><a href="4-sm.html#SP16">Str::copy</a></span><span class="plain">(</span><span class="identifier">substituted</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP21">Str::eq_wide_string</a></span><span class="plain">(</span><span class="identifier">detail</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"Lines"</span><span class="plain">)) {</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">substituted</span><span class="plain">, </span><span class="string">"%d"</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_extent</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP21">Str::eq_wide_string</a></span><span class="plain">(</span><span class="identifier">detail</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"Source"</span><span class="plain">)) {</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">substituted</span><span class="plain">, </span><span class="string">"%f"</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">source_file_for_section</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP21">Str::eq_wide_string</a></span><span class="plain">(</span><span class="identifier">detail</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"Page"</span><span class="plain">)) {</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">linkto</span><span class="plain">);</span>
<span class="functiontext"><a href="4-sm.html#SP16">Str::copy</a></span><span class="plain">(</span><span class="identifier">linkto</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">);</span>
<span class="functiontext"><a href="4-sm.html#SP16">Str::copy</a></span><span class="plain">(</span><span class="identifier">linkto</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">);</span>
<span class="identifier">LOOP_THROUGH_TEXT</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">linkto</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="functiontext"><a href="4-sm.html#SP13">Str::get</a></span><span class="plain">(</span><span class="identifier">P</span><span class="plain">) == </span><span class="character">'/'</span><span class="plain">) || (</span><span class="functiontext"><a href="4-sm.html#SP13">Str::get</a></span><span class="plain">(</span><span class="identifier">P</span><span class="plain">) == </span><span class="character">' '</span><span class="plain">))</span>
<span class="functiontext"><a href="4-sm.html#SP14">Str::put</a></span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="character">'-'</span><span class="plain">);</span>
@ -843,7 +852,7 @@ its square-bracketed parts.
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">denom</span><span class="plain"> = </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_paragraphs</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">denom</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">denom</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">;</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">substituted</span><span class="plain">, </span><span class="string">"%d"</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_extent</span><span class="plain">/</span><span class="identifier">denom</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="5-fm.html#SP37">Formats::substitute_post_processing_data</a></span><span class="plain">(</span><span class="identifier">substituted</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_weave</span><span class="plain">, </span><span class="identifier">detail</span><span class="plain">, </span><span class="identifier">pattern</span><span class="plain">)) {</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="5-fm.html#SP36">Formats::substitute_post_processing_data</a></span><span class="plain">(</span><span class="identifier">substituted</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_weave</span><span class="plain">, </span><span class="identifier">detail</span><span class="plain">, </span><span class="identifier">pattern</span><span class="plain">)) {</span>
<span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">substituted</span><span class="plain">, </span><span class="string">"%S for %S"</span><span class="plain">, </span><span class="identifier">varname</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">sect_title</span><span class="plain">);</span>
@ -879,7 +888,7 @@ its square-bracketed parts.
<p class="inwebparagraph"><a id="SP6"></a><b>&#167;6. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Indexer::list_module<button class="popup" onclick="togglePopup('usagePopup82')">...<span class="popuptext" id="usagePopup82">Usage of <b>Indexer::list_module</b>:<br><a href="#SP5_1_8_5">&#167;5.1.8.5</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">module</span><span class="plain"> *</span><span class="identifier">M</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">list_this</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Indexer::list_module<button class="popup" onclick="togglePopup('usagePopup81')">...<span class="popuptext" id="usagePopup81">Usage of <b>Indexer::list_module</b>:<br><a href="#SP5_1_8_5">&#167;5.1.8.5</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">module</span><span class="plain"> *</span><span class="identifier">M</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">list_this</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">list_this</span><span class="plain">) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;li&gt;&lt;p&gt;%S - "</span><span class="plain">, </span><span class="identifier">M</span><span class="plain">-&gt;</span><span class="element">module_name</span><span class="plain">);</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">url</span><span class="plain">);</span>
@ -899,14 +908,14 @@ its square-bracketed parts.
<p class="inwebparagraph"><a id="SP7"></a><b>&#167;7. Transcribing CSS. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Indexer::transcribe_CSS<button class="popup" onclick="togglePopup('usagePopup83')">...<span class="popuptext" id="usagePopup83">Usage of <b>Indexer::transcribe_CSS</b>:<br><a href="#SP2">&#167;2</a>, <a href="#SP5_1">&#167;5.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">CSS_file</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Indexer::transcribe_CSS<button class="popup" onclick="togglePopup('usagePopup82')">...<span class="popuptext" id="usagePopup82">Usage of <b>Indexer::transcribe_CSS</b>:<br><a href="#SP2">&#167;2</a>, <a href="#SP5_1">&#167;5.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">CSS_file</span><span class="plain">) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;style type=\"text/css\"&gt;\n"</span><span class="plain">);</span>
<span class="functiontext"><a href="4-tf.html#SP5">TextFiles::read</a></span><span class="plain">(</span><span class="identifier">CSS_file</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">, </span><span class="string">"can't open CSS file"</span><span class="plain">,</span>
<span class="constant">TRUE</span><span class="plain">, </span><span class="functiontext"><a href="#SP7">Indexer::copy_CSS</a></span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\n&lt;/style&gt;\n"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Indexer::copy_CSS<button class="popup" onclick="togglePopup('usagePopup84')">...<span class="popuptext" id="usagePopup84">Usage of <b>Indexer::copy_CSS</b>:<br>none</span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">line</span><span class="plain">, </span><span class="reserved">text_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">X</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Indexer::copy_CSS<button class="popup" onclick="togglePopup('usagePopup83')">...<span class="popuptext" id="usagePopup83">Usage of <b>Indexer::copy_CSS</b>:<br>none</span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">line</span><span class="plain">, </span><span class="reserved">text_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">X</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">X</span><span class="plain">;</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S\n"</span><span class="plain">, </span><span class="identifier">line</span><span class="plain">);</span>
<span class="plain">}</span>

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'The Swarm' 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#3">Chapter 3: Outputs</a></li><li><b>The Swarm</b></li></ul><p class="purpose">To feed multiple output requests to the weaver, and to present weaver results, and update indexes or contents pages.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">inweb</a></li><li><a href="index.html#3">Chapter 3: Outputs</a></li><li><b>The Swarm</b></li></ul><p class="purpose">To feed multiple output requests to the weaver, and to present weaver results, and update indexes or contents pages.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Swarming</a></li></ul><hr class="tocbar">
@ -44,7 +49,7 @@ of Chapter 25 of "On the Banks of Plum Creek".
<pre class="display">
<span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">swarm_leader</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">; </span><span class="comment"> the most inclusive one we weave</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Swarm::weave<button class="popup" onclick="togglePopup('usagePopup69')">...<span class="popuptext" id="usagePopup69">Usage of <b>Swarm::weave</b>:<br>Program Control - <a href="1-pc.html#SP7_4_3">&#167;7.4.3</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">range</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">swarm_mode</span><span class="plain">, </span><span class="reserved">theme_tag</span><span class="plain"> *</span><span class="identifier">tag</span><span class="plain">,</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Swarm::weave<button class="popup" onclick="togglePopup('usagePopup68')">...<span class="popuptext" id="usagePopup68">Usage of <b>Swarm::weave</b>:<br>Program Control - <a href="1-pc.html#SP7_4_3">&#167;7.4.3</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">range</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">swarm_mode</span><span class="plain">, </span><span class="reserved">theme_tag</span><span class="plain"> *</span><span class="identifier">tag</span><span class="plain">,</span>
<span class="reserved">weave_pattern</span><span class="plain"> *</span><span class="identifier">pattern</span><span class="plain">, </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">to</span><span class="plain">, </span><span class="reserved">pathname</span><span class="plain"> *</span><span class="identifier">into</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">docs_mode</span><span class="plain">,</span>
<span class="reserved">linked_list</span><span class="plain"> *</span><span class="identifier">breadcrumbs</span><span class="plain">, </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">navigation</span><span class="plain">) {</span>
<span class="identifier">swarm_leader</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
@ -61,9 +66,9 @@ of Chapter 25 of "On the Banks of Plum Creek".
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">swarm_mode</span><span class="plain"> == </span><span class="constant">SWARM_SECTIONS_SWM</span><span class="plain">)</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">section</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">sections</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="2-tr.html#SP10">Reader::range_within</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">, </span><span class="identifier">range</span><span class="plain">))</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="2-tr.html#SP10">Reader::range_within</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">, </span><span class="identifier">range</span><span class="plain">))</span>
<span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_weave</span><span class="plain"> = </span><span class="functiontext"><a href="#SP2">Swarm::weave_subset</a></span><span class="plain">(</span><span class="identifier">W</span><span class="plain">,</span>
<span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">, </span><span class="identifier">tag</span><span class="plain">, </span><span class="identifier">pattern</span><span class="plain">, </span><span class="identifier">to</span><span class="plain">, </span><span class="identifier">into</span><span class="plain">, </span><span class="identifier">docs_mode</span><span class="plain">,</span>
<span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">, </span><span class="identifier">tag</span><span class="plain">, </span><span class="identifier">pattern</span><span class="plain">, </span><span class="identifier">to</span><span class="plain">, </span><span class="identifier">into</span><span class="plain">, </span><span class="identifier">docs_mode</span><span class="plain">,</span>
<span class="identifier">breadcrumbs</span><span class="plain">, </span><span class="identifier">navigation</span><span class="plain">);</span>
<span class="plain">}</span>
@ -80,7 +85,7 @@ the call comes from Program Control).
</p>
<pre class="display">
<span class="reserved">weave_target</span><span class="plain"> *</span><span class="functiontext">Swarm::weave_subset<button class="popup" onclick="togglePopup('usagePopup70')">...<span class="popuptext" id="usagePopup70">Usage of <b>Swarm::weave_subset</b>:<br><a href="#SP1">&#167;1</a>, Program Control - <a href="1-pc.html#SP7_4_3">&#167;7.4.3</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">range</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">open_afterwards</span><span class="plain">,</span>
<span class="reserved">weave_target</span><span class="plain"> *</span><span class="functiontext">Swarm::weave_subset<button class="popup" onclick="togglePopup('usagePopup69')">...<span class="popuptext" id="usagePopup69">Usage of <b>Swarm::weave_subset</b>:<br><a href="#SP1">&#167;1</a>, Program Control - <a href="1-pc.html#SP7_4_3">&#167;7.4.3</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">range</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">open_afterwards</span><span class="plain">,</span>
<span class="reserved">theme_tag</span><span class="plain"> *</span><span class="identifier">tag</span><span class="plain">, </span><span class="reserved">weave_pattern</span><span class="plain"> *</span><span class="identifier">pattern</span><span class="plain">, </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">to</span><span class="plain">, </span><span class="reserved">pathname</span><span class="plain"> *</span><span class="identifier">into</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">docs_mode</span><span class="plain">,</span>
<span class="reserved">linked_list</span><span class="plain"> *</span><span class="identifier">breadcrumbs</span><span class="plain">, </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">navigation</span><span class="plain">) {</span>
<span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wt</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
@ -89,7 +94,7 @@ the call comes from Program Control).
&lt;<span class="cwebmacro">Compile a set of instructions for the weaver</span> <span class="cwebmacronumber">2.2</span>&gt;<span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="3-tw.html#SP1">Weaver::weave_source</a></span><span class="plain">(</span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">wt</span><span class="plain">) == </span><span class="constant">0</span><span class="plain">) </span><span class="comment"> i.e., the number of lines woven was zero</span>
<span class="functiontext"><a href="3-em.html#SP2">Errors::fatal</a></span><span class="plain">(</span><span class="string">"empty weave request"</span><span class="plain">);</span>
<span class="functiontext"><a href="5-fm.html#SP34">Formats::post_process_weave</a></span><span class="plain">(</span><span class="identifier">wt</span><span class="plain">, </span><span class="identifier">open_afterwards</span><span class="plain">); </span><span class="comment"> e.g., run through TeX</span>
<span class="functiontext"><a href="5-fm.html#SP33">Formats::post_process_weave</a></span><span class="plain">(</span><span class="identifier">wt</span><span class="plain">, </span><span class="identifier">open_afterwards</span><span class="plain">); </span><span class="comment"> e.g., run through TeX</span>
&lt;<span class="cwebmacro">Report on the outcome of the weave to the console</span> <span class="cwebmacronumber">2.3</span>&gt;<span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">wt</span><span class="plain">;</span>
@ -129,7 +134,7 @@ the call comes from Program Control).
<p class="inwebparagraph"></p>
<p class="endnote">The structure weave_target is accessed in 1/ptt, 3/ti, 3/tw, 4/is, 5/fm, 5/tf, 5/hf, 5/rtt and here.</p>
<p class="endnote">The structure weave_target is accessed in 1/ptt, 3/ti, 3/tw, 4/is, 5/fm, 5/tf, 5/hf, 5/rtt, 6/cln and here.</p>
<p class="inwebparagraph"><a id="SP2_2"></a><b>&#167;2.2. </b><code class="display">
&lt;<span class="cwebmacrodefn">Compile a set of instructions for the weaver</span> <span class="cwebmacronumber">2.2</span>&gt; =
@ -164,7 +169,7 @@ the call comes from Program Control).
<span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, </span><span class="reserved">chapter</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">chapters</span><span class="plain">)</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">section</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">sections</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="2-tr.html#SP10">Reader::range_within</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">, </span><span class="identifier">wt</span><span class="plain">-&gt;</span><span class="element">weave_range</span><span class="plain">))</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="2-tr.html#SP10">Reader::range_within</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">, </span><span class="identifier">wt</span><span class="plain">-&gt;</span><span class="element">weave_range</span><span class="plain">))</span>
<span class="identifier">has_content</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">has_content</span><span class="plain"> == </span><span class="constant">FALSE</span><span class="plain">)</span>
<span class="functiontext"><a href="3-em.html#SP2">Errors::fatal</a></span><span class="plain">(</span><span class="string">"no sections match that range"</span><span class="plain">);</span>
@ -269,7 +274,7 @@ and details of any cover-sheet to use.
<pre class="displaydefn">
<span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"[%S: %S -&gt; %f"</span><span class="plain">, </span><span class="identifier">wt</span><span class="plain">-&gt;</span><span class="element">booklet_title</span><span class="plain">, </span><span class="identifier">wt</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">-&gt;</span><span class="element">format_name</span><span class="plain">, </span><span class="identifier">wt</span><span class="plain">-&gt;</span><span class="element">weave_to</span><span class="plain">);</span>
<span class="functiontext"><a href="5-fm.html#SP35">Formats::report_on_post_processing</a></span><span class="plain">(</span><span class="identifier">wt</span><span class="plain">);</span>
<span class="functiontext"><a href="5-fm.html#SP34">Formats::report_on_post_processing</a></span><span class="plain">(</span><span class="identifier">wt</span><span class="plain">);</span>
<span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"]\n"</span><span class="plain">);</span>
</pre>
@ -280,7 +285,7 @@ and details of any cover-sheet to use.
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Swarm::ensure_plugin<button class="popup" onclick="togglePopup('usagePopup71')">...<span class="popuptext" id="usagePopup71">Usage of <b>Swarm::ensure_plugin</b>:<br>HTML Formats - <a href="5-hf.html#SP6">&#167;6</a>, <a href="5-hf.html#SP10_3">&#167;10.3</a>, <a href="5-hf.html#SP13">&#167;13</a>, <a href="5-hf.html#SP14">&#167;14</a>, <a href="5-hf.html#SP15">&#167;15</a></span></button></span><span class="plain">(</span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wt</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">void</span><span class="plain"> </span><span class="functiontext">Swarm::ensure_plugin<button class="popup" onclick="togglePopup('usagePopup70')">...<span class="popuptext" id="usagePopup70">Usage of <b>Swarm::ensure_plugin</b>:<br>HTML Formats - <a href="5-hf.html#SP6">&#167;6</a>, <a href="5-hf.html#SP10_3">&#167;10.3</a>, <a href="5-hf.html#SP13">&#167;13</a>, <a href="5-hf.html#SP14">&#167;14</a>, <a href="5-hf.html#SP15">&#167;15</a></span></button></span><span class="plain">(</span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wt</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">weave_plugin</span><span class="plain"> *</span><span class="identifier">existing</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">existing</span><span class="plain">, </span><span class="reserved">weave_plugin</span><span class="plain">, </span><span class="identifier">wt</span><span class="plain">-&gt;</span><span class="element">plugins</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP18">Str::eq_insensitive</a></span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">existing</span><span class="plain">-&gt;</span><span class="element">plugin_name</span><span class="plain">))</span>
@ -298,7 +303,7 @@ generic <code class="display"><span class="extract">index.html</span></code> if
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Swarm::weave_index_templates<button class="popup" onclick="togglePopup('usagePopup72')">...<span class="popuptext" id="usagePopup72">Usage of <b>Swarm::weave_index_templates</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">range</span><span class="plain">, </span><span class="reserved">weave_pattern</span><span class="plain"> *</span><span class="identifier">pattern</span><span class="plain">,</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Swarm::weave_index_templates<button class="popup" onclick="togglePopup('usagePopup71')">...<span class="popuptext" id="usagePopup71">Usage of <b>Swarm::weave_index_templates</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">range</span><span class="plain">, </span><span class="reserved">weave_pattern</span><span class="plain"> *</span><span class="identifier">pattern</span><span class="plain">,</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">self_contained</span><span class="plain">, </span><span class="reserved">pathname</span><span class="plain"> *</span><span class="identifier">into</span><span class="plain">, </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">, </span><span class="reserved">linked_list</span><span class="plain"> *</span><span class="identifier">crumbs</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">docs</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (!(</span><span class="functiontext"><a href="8-bdfw.html#SP6">Bibliographic::data_exists</a></span><span class="plain">(</span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Version Number"</span><span class="plain">)))</span>
<span class="functiontext"><a href="8-bdfw.html#SP7">Bibliographic::set_datum</a></span><span class="plain">(</span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Version Number"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">" "</span><span class="plain">);</span>

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'The Tangler' 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#3">Chapter 3: Outputs</a></li><li><b>The Tangler</b></li></ul><p class="purpose">To transcribe a version of the text in the web into a form which can be compiled as a program.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">inweb</a></li><li><a href="index.html#3">Chapter 3: Outputs</a></li><li><b>The Tangler</b></li></ul><p class="purpose">To transcribe a version of the text in the web into a form which can be compiled as a program.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. The Master Tangler</a></li><li><a href="#SP3">&#167;3. The Code Tangler</a></li><li><a href="#SP4">&#167;4. Prinary target</a></li></ul><hr class="tocbar">
@ -37,7 +42,7 @@ here for the tangling to begin...
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Tangler::go<button class="popup" onclick="togglePopup('usagePopup89')">...<span class="popuptext" id="usagePopup89">Usage of <b>Tangler::go</b>:<br>Program Control - <a href="1-pc.html#SP7_4_2">&#167;7.4.2</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">tangle_target</span><span class="plain"> *</span><span class="identifier">target</span><span class="plain">, </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">dest_file</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Tangler::go<button class="popup" onclick="togglePopup('usagePopup88')">...<span class="popuptext" id="usagePopup88">Usage of <b>Tangler::go</b>:<br>Program Control - <a href="1-pc.html#SP7_4_2">&#167;7.4.2</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">tangle_target</span><span class="plain"> *</span><span class="identifier">target</span><span class="plain">, </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">dest_file</span><span class="plain">) {</span>
<span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">lang</span><span class="plain"> = </span><span class="identifier">target</span><span class="plain">-&gt;</span><span class="element">tangle_language</span><span class="plain">;</span>
<span class="identifier">PRINT</span><span class="plain">(</span><span class="string">" tangling &lt;%/f&gt; (written in %S)\n"</span><span class="plain">, </span><span class="identifier">dest_file</span><span class="plain">, </span><span class="identifier">lang</span><span class="plain">-&gt;</span><span class="element">language_name</span><span class="plain">);</span>
@ -182,7 +187,7 @@ something quirky has been done to support a language feature.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Tangler::tangle_paragraph<button class="popup" onclick="togglePopup('usagePopup90')">...<span class="popuptext" id="usagePopup90">Usage of <b>Tangler::tangle_paragraph</b>:<br><a href="#SP1_1">&#167;1.1</a>, <a href="#SP3_1">&#167;3.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Tangler::tangle_paragraph<button class="popup" onclick="togglePopup('usagePopup89')">...<span class="popuptext" id="usagePopup89">Usage of <b>Tangler::tangle_paragraph</b>:<br><a href="#SP1_1">&#167;1.1</a>, <a href="#SP3_1">&#167;3.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">) {</span>
<span class="functiontext"><a href="2-tgs.html#SP7">Tags::open_ifdefs</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">contiguous</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="element">first_line_in_paragraph</span><span class="plain">;</span>
@ -232,7 +237,7 @@ Almost all of the time, it simply prints <code class="display"><span class="extr
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Tangler::tangle_code<button class="popup" onclick="togglePopup('usagePopup91')">...<span class="popuptext" id="usagePopup91">Usage of <b>Tangler::tangle_code</b>:<br><a href="#SP2">&#167;2</a>, <a href="#SP3_1">&#167;3.1</a>, <a href="#SP3_2">&#167;3.2</a>, ACME Support - <a href="4-as.html#SP3">&#167;3</a><br>C-Like Languages - <a href="4-cl.html#SP5">&#167;5</a><br>InC Support - <a href="4-is.html#SP9_1_2_1">&#167;9.1.2.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">original</span><span class="plain">, </span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Tangler::tangle_code<button class="popup" onclick="togglePopup('usagePopup90')">...<span class="popuptext" id="usagePopup90">Usage of <b>Tangler::tangle_code</b>:<br><a href="#SP2">&#167;2</a>, <a href="#SP3_1">&#167;3.1</a>, <a href="#SP3_2">&#167;3.2</a>, ACME Support - <a href="4-as.html#SP3">&#167;3</a><br>C-Like Languages - <a href="4-cl.html#SP5">&#167;5</a><br>InC Support - <a href="4-is.html#SP9_1_2_1">&#167;9.1.2.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">original</span><span class="plain">, </span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">mlen</span><span class="plain">, </span><span class="identifier">slen</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">mpos</span><span class="plain"> = </span><span class="functiontext"><a href="4-pm.html#SP3">Regexp::find_expansion</a></span><span class="plain">(</span><span class="identifier">original</span><span class="plain">, </span><span class="character">'@'</span><span class="plain">, </span><span class="character">'&lt;'</span><span class="plain">, </span><span class="character">'@'</span><span class="plain">, </span><span class="character">'&gt;'</span><span class="plain">, &amp;</span><span class="identifier">mlen</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">spos</span><span class="plain"> = </span><span class="functiontext"><a href="4-pm.html#SP3">Regexp::find_expansion</a></span><span class="plain">(</span><span class="identifier">original</span><span class="plain">, </span><span class="character">'['</span><span class="plain">, </span><span class="character">'['</span><span class="plain">, </span><span class="character">']'</span><span class="plain">, </span><span class="character">']'</span><span class="plain">, &amp;</span><span class="identifier">slen</span><span class="plain">);</span>
@ -367,7 +372,7 @@ passes straight through. So <code class="display"><span class="extract">[[water]
</p>
<pre class="display">
<span class="reserved">tangle_target</span><span class="plain"> *</span><span class="functiontext">Tangler::primary_target<button class="popup" onclick="togglePopup('usagePopup92')">...<span class="popuptext" id="usagePopup92">Usage of <b>Tangler::primary_target</b>:<br>Program Control - <a href="1-pc.html#SP7_4_2">&#167;7.4.2</a><br>The Analyser - <a href="3-ta.html#SP4">&#167;4</a>, <a href="3-ta.html#SP4_1">&#167;4.1</a><br>ACME Support - <a href="4-as.html#SP4">&#167;4</a>, <a href="4-as.html#SP5">&#167;5</a><br>C-Like Languages - <a href="4-cl.html#SP2_1">&#167;2.1</a>, <a href="4-cl.html#SP3">&#167;3</a>, <a href="4-cl.html#SP6_1">&#167;6.1</a>, <a href="4-cl.html#SP6_4">&#167;6.4</a><br>InC Support - <a href="4-is.html#SP3">&#167;3</a>, <a href="4-is.html#SP6">&#167;6</a>, <a href="4-is.html#SP7">&#167;7</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">tangle_target</span><span class="plain"> *</span><span class="functiontext">Tangler::primary_target<button class="popup" onclick="togglePopup('usagePopup91')">...<span class="popuptext" id="usagePopup91">Usage of <b>Tangler::primary_target</b>:<br>Program Control - <a href="1-pc.html#SP7_4_2">&#167;7.4.2</a><br>The Analyser - <a href="3-ta.html#SP4">&#167;4</a>, <a href="3-ta.html#SP4_1">&#167;4.1</a><br>ACME Support - <a href="4-as.html#SP4">&#167;4</a>, <a href="4-as.html#SP5">&#167;5</a><br>C-Like Languages - <a href="4-cl.html#SP2_1">&#167;2.1</a>, <a href="4-cl.html#SP3">&#167;3</a>, <a href="4-cl.html#SP6_1">&#167;6.1</a>, <a href="4-cl.html#SP6_4">&#167;6.4</a><br>InC Support - <a href="4-is.html#SP3">&#167;3</a>, <a href="4-is.html#SP6">&#167;6</a>, <a href="4-is.html#SP7">&#167;7</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">W</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no such web"</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">FIRST_IN_LINKED_LIST</span><span class="plain">(</span><span class="reserved">tangle_target</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">tangle_targets</span><span class="plain">);</span>
<span class="plain">}</span>

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'The Weaver' 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#3">Chapter 3: Outputs</a></li><li><b>The Weaver</b></li></ul><p class="purpose">To weave a portion of the code into instructions for TeX.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">inweb</a></li><li><a href="index.html#3">Chapter 3: Outputs</a></li><li><b>The Weaver</b></li></ul><p class="purpose">To weave a portion of the code into instructions for TeX.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. The Master Weaver</a></li><li><a href="#SP1_3_1">&#167;1.3.1. The state</a></li><li><a href="#SP1_3_4">&#167;1.3.4. Weaving a section</a></li><li><a href="#SP1_3_4_1_1">&#167;1.3.4.1.1. Reasons to skip things</a></li><li><a href="#SP1_3_4_1_3">&#167;1.3.4.1.3. Headings</a></li><li><a href="#SP1_3_4_1_8">&#167;1.3.4.1.8. Commentary matter</a></li><li><a href="#SP1_3_4_1_9">&#167;1.3.4.1.9. Code-like matter</a></li><li><a href="#SP1_3_4_1_10">&#167;1.3.4.1.10. How paragraphs begin</a></li><li><a href="#SP1_3_4_2">&#167;1.3.4.2. How paragraphs end</a></li><li><a href="#SP2">&#167;2. Endnotes</a></li><li><a href="#SP4">&#167;4. Section tables of contents</a></li></ul><hr class="tocbar">
@ -40,7 +45,7 @@ where to put the result: and so we arrive at the front door of the routine
</p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Weaver::weave_source<button class="popup" onclick="togglePopup('usagePopup85')">...<span class="popuptext" id="usagePopup85">Usage of <b>Weaver::weave_source</b>:<br>The Swarm - <a href="3-ts.html#SP2">&#167;2</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Weaver::weave_source<button class="popup" onclick="togglePopup('usagePopup84')">...<span class="popuptext" id="usagePopup84">Usage of <b>Weaver::weave_source</b>:<br>The Swarm - <a href="3-ts.html#SP2">&#167;2</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">) {</span>
<span class="reserved">text_stream</span><span class="plain"> </span><span class="identifier">TO_struct</span><span class="plain">;</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain"> = &amp;</span><span class="identifier">TO_struct</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">STREAM_OPEN_TO_FILE</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="identifier">weave_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>
@ -108,7 +113,7 @@ where to put the result: and so we arrive at the front door of the routine
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="identifier">imported</span><span class="plain"> == </span><span class="constant">FALSE</span><span class="plain">) {</span>
<span class="functiontext"><a href="4-sm.html#SP15">Str::clear</a></span><span class="plain">(</span><span class="identifier">state</span><span class="plain">-&gt;</span><span class="element">chaptermark</span><span class="plain">);</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">section</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">sections</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="2-tr.html#SP10">Reader::range_within</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">weave_range</span><span class="plain">)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="2-tr.html#SP10">Reader::range_within</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">weave_range</span><span class="plain">)) {</span>
<span class="identifier">latest_section</span><span class="plain"> = </span><span class="identifier">S</span><span class="plain">;</span>
&lt;<span class="cwebmacro">Wipe the slate clean of footnotes</span> <span class="cwebmacronumber">1.3.3</span>&gt;<span class="plain">;</span>
<span class="functiontext"><a href="4-lm.html#SP22">LanguageMethods::begin_weave</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">);</span>
@ -145,7 +150,7 @@ where to put the result: and so we arrive at the front door of the routine
<pre class="displaydefn">
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">rennab</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">rennab</span><span class="plain">, </span><span class="string">"End of weave"</span><span class="plain">);</span>
<span class="functiontext"><a href="5-fm.html#SP33">Formats::tail</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">rennab</span><span class="plain">, </span><span class="identifier">latest_section</span><span class="plain">);</span>
<span class="functiontext"><a href="5-fm.html#SP32">Formats::tail</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">rennab</span><span class="plain">, </span><span class="identifier">latest_section</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">rennab</span><span class="plain">);</span>
</pre>
@ -739,8 +744,7 @@ and macro usage is rendered differently.
<span class="identifier">W</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">, </span><span class="identifier">matter</span><span class="plain">, </span><span class="identifier">concluding_comment</span><span class="plain">)) </span><span class="reserved">continue</span><span class="plain">;</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">colouring</span><span class="plain">);</span>
<span class="functiontext"><a href="4-lm.html#SP25">LanguageMethods::syntax_colour</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_language</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">,</span>
<span class="plain"> </span><span class="identifier">matter</span><span class="plain">, </span><span class="identifier">colouring</span><span class="plain">);</span>
<span class="functiontext"><a href="4-lm.html#SP25">LanguageMethods::syntax_colour</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_language</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">, </span><span class="identifier">matter</span><span class="plain">, </span><span class="identifier">colouring</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">found</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
&lt;<span class="cwebmacro">Find macro usages and adjust syntax colouring accordingly</span> <span class="cwebmacronumber">1.3.4.1.9.6</span>&gt;<span class="plain">;</span>
@ -1043,7 +1047,7 @@ in TeX's deeply peculiar font encoding system.
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">weight</span><span class="plain"> == </span><span class="constant">2</span><span class="plain">) {</span>
<span class="functiontext"><a href="4-sm.html#SP16">Str::copy</a></span><span class="plain">(</span><span class="identifier">state</span><span class="plain">-&gt;</span><span class="element">sectionmark</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="identifier">text_operand</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">pattern</span><span class="plain">-&gt;</span><span class="element">show_abbrevs</span><span class="plain"> == </span><span class="constant">FALSE</span><span class="plain">) </span><span class="functiontext"><a href="4-sm.html#SP15">Str::clear</a></span><span class="plain">(</span><span class="identifier">state</span><span class="plain">-&gt;</span><span class="element">chaptermark</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">) &gt; </span><span class="constant">0</span><span class="plain">) </span><span class="functiontext"><a href="4-sm.html#SP16">Str::copy</a></span><span class="plain">(</span><span class="identifier">state</span><span class="plain">-&gt;</span><span class="element">chaptermark</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">) &gt; </span><span class="constant">0</span><span class="plain">) </span><span class="functiontext"><a href="4-sm.html#SP16">Str::copy</a></span><span class="plain">(</span><span class="identifier">state</span><span class="plain">-&gt;</span><span class="element">chaptermark</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">state</span><span class="plain">-&gt;</span><span class="element">chaptermark</span><span class="plain">) &gt; </span><span class="constant">0</span><span class="plain">) {</span>
<span class="functiontext"><a href="4-sm.html#SP15">Str::clear</a></span><span class="plain">(</span><span class="identifier">state</span><span class="plain">-&gt;</span><span class="element">sectionmark</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">state</span><span class="plain">-&gt;</span><span class="element">sectionmark</span><span class="plain">, </span><span class="string">" - %S"</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">text_operand</span><span class="plain">);</span>
@ -1222,7 +1226,7 @@ structure usage, or how <code class="display"><span class="extract">CWEB</span><
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Weaver::show_endnotes_on_previous_paragraph<button class="popup" onclick="togglePopup('usagePopup86')">...<span class="popuptext" id="usagePopup86">Usage of <b>Weaver::show_endnotes_on_previous_paragraph</b>:<br><a href="#SP1_3_4_2">&#167;1.3.4.2</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">,</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Weaver::show_endnotes_on_previous_paragraph<button class="popup" onclick="togglePopup('usagePopup85')">...<span class="popuptext" id="usagePopup85">Usage of <b>Weaver::show_endnotes_on_previous_paragraph</b>:<br><a href="#SP1_3_4_2">&#167;1.3.4.2</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">,</span>
<span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">) {</span>
<span class="functiontext"><a href="2-tgs.html#SP7">Tags::show_endnote_on_ifdefs</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="element">defines_macro</span><span class="plain">)</span>
@ -1244,7 +1248,7 @@ structure usage, or how <code class="display"><span class="extract">CWEB</span><
<pre class="displaydefn">
<span class="functiontext"><a href="5-fm.html#SP31">Formats::endnote</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="constant">1</span><span class="plain">);</span>
<span class="functiontext"><a href="5-fm.html#SP30">Formats::endnote</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="constant">1</span><span class="plain">);</span>
<span class="functiontext"><a href="5-fm.html#SP27">Formats::text</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"This code is "</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">ct</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">macro_usage</span><span class="plain"> *</span><span class="identifier">mu</span><span class="plain">;</span>
@ -1261,7 +1265,7 @@ structure usage, or how <code class="display"><span class="extract">CWEB</span><
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="functiontext"><a href="5-fm.html#SP27">Formats::text</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"used in "</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="functiontext"><a href="5-fm.html#SP32">Formats::locale</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">mu</span><span class="plain">-&gt;</span><span class="element">used_in_paragraph</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="functiontext"><a href="5-fm.html#SP31">Formats::locale</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">mu</span><span class="plain">-&gt;</span><span class="element">used_in_paragraph</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="identifier">used_flag</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">; </span><span class="identifier">k</span><span class="plain">++;</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">mu</span><span class="plain">-&gt;</span><span class="element">multiplicity</span><span class="plain">) {</span>
<span class="reserved">case</span><span class="plain"> </span><span class="constant">1</span><span class="plain">: </span><span class="reserved">break</span><span class="plain">;</span>
@ -1280,7 +1284,7 @@ structure usage, or how <code class="display"><span class="extract">CWEB</span><
<span class="plain">}</span>
<span class="plain">}</span>
<span class="functiontext"><a href="5-fm.html#SP27">Formats::text</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"."</span><span class="plain">);</span>
<span class="functiontext"><a href="5-fm.html#SP31">Formats::endnote</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="constant">2</span><span class="plain">);</span>
<span class="functiontext"><a href="5-fm.html#SP30">Formats::endnote</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="constant">2</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
@ -1294,9 +1298,9 @@ structure usage, or how <code class="display"><span class="extract">CWEB</span><
<pre class="displaydefn">
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">fn</span><span class="plain">-&gt;</span><span class="element">usage_described</span><span class="plain"> == </span><span class="constant">FALSE</span><span class="plain">) {</span>
<span class="functiontext"><a href="5-fm.html#SP31">Formats::endnote</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="constant">1</span><span class="plain">);</span>
<span class="functiontext"><a href="5-fm.html#SP30">Formats::endnote</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="constant">1</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP3">Weaver::show_function_usage</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">fn</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">);</span>
<span class="functiontext"><a href="5-fm.html#SP31">Formats::endnote</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="constant">2</span><span class="plain">);</span>
<span class="functiontext"><a href="5-fm.html#SP30">Formats::endnote</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="constant">2</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
@ -1310,7 +1314,7 @@ structure usage, or how <code class="display"><span class="extract">CWEB</span><
<pre class="displaydefn">
<span class="functiontext"><a href="5-fm.html#SP31">Formats::endnote</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="constant">1</span><span class="plain">);</span>
<span class="functiontext"><a href="5-fm.html#SP30">Formats::endnote</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="constant">1</span><span class="plain">);</span>
<span class="functiontext"><a href="5-fm.html#SP27">Formats::text</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"The structure "</span><span class="plain">);</span>
<span class="functiontext"><a href="5-fm.html#SP27">Formats::text</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">st</span><span class="plain">-&gt;</span><span class="element">structure_name</span><span class="plain">);</span>
@ -1342,12 +1346,12 @@ structure usage, or how <code class="display"><span class="extract">CWEB</span><
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">section</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">scratch_flag</span><span class="plain">) &amp;&amp; (</span><span class="identifier">S</span><span class="plain"> != </span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="element">under_section</span><span class="plain">)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain">++ &gt; </span><span class="constant">0</span><span class="plain">) </span><span class="functiontext"><a href="5-fm.html#SP27">Formats::text</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">I</span><span class="string">", "</span><span class="plain">);</span>
<span class="functiontext"><a href="5-fm.html#SP27">Formats::text</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">);</span>
<span class="functiontext"><a href="5-fm.html#SP27">Formats::text</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="element">under_section</span><span class="plain">-&gt;</span><span class="element">scratch_flag</span><span class="plain">) </span><span class="functiontext"><a href="5-fm.html#SP27">Formats::text</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">I</span><span class="string">" and here"</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="functiontext"><a href="5-fm.html#SP27">Formats::text</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"."</span><span class="plain">);</span>
<span class="functiontext"><a href="5-fm.html#SP31">Formats::endnote</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="constant">2</span><span class="plain">);</span>
<span class="functiontext"><a href="5-fm.html#SP30">Formats::endnote</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="constant">2</span><span class="plain">);</span>
</pre>
<p class="inwebparagraph"></p>
@ -1357,7 +1361,7 @@ structure usage, or how <code class="display"><span class="extract">CWEB</span><
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Weaver::show_function_usage<button class="popup" onclick="togglePopup('usagePopup87')">...<span class="popuptext" id="usagePopup87">Usage of <b>Weaver::show_function_usage</b>:<br><a href="#SP2_2">&#167;2.2</a>, HTML Formats - <a href="5-hf.html#SP10_3">&#167;10.3</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">,</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Weaver::show_function_usage<button class="popup" onclick="togglePopup('usagePopup86')">...<span class="popuptext" id="usagePopup86">Usage of <b>Weaver::show_function_usage</b>:<br><a href="#SP2_2">&#167;2.2</a>, HTML Formats - <a href="5-hf.html#SP10_3">&#167;10.3</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">,</span>
<span class="reserved">language_function</span><span class="plain"> *</span><span class="identifier">fn</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">as_list</span><span class="plain">) {</span>
<span class="identifier">fn</span><span class="plain">-&gt;</span><span class="element">usage_described</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="reserved">hash_table_entry</span><span class="plain"> *</span><span class="identifier">hte</span><span class="plain"> =</span>
@ -1422,7 +1426,7 @@ structure usage, or how <code class="display"><span class="extract">CWEB</span><
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" - "</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">count_under</span><span class="plain">++ &gt; </span><span class="constant">0</span><span class="plain">) </span><span class="functiontext"><a href="5-fm.html#SP27">Formats::text</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">I</span><span class="string">", "</span><span class="plain">);</span>
<span class="functiontext"><a href="5-fm.html#SP32">Formats::locale</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">hteu</span><span class="plain">-&gt;</span><span class="element">usage_recorded_at</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="functiontext"><a href="5-fm.html#SP31">Formats::locale</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">hteu</span><span class="plain">-&gt;</span><span class="element">usage_recorded_at</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="identifier">last_cited_in</span><span class="plain"> = </span><span class="identifier">hteu</span><span class="plain">-&gt;</span><span class="element">usage_recorded_at</span><span class="plain">-&gt;</span><span class="element">under_section</span><span class="plain">;</span>
</pre>
@ -1435,7 +1439,7 @@ marked as <code class="display"><span class="extract">@h</span></code> headings.
</p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Weaver::weave_table_of_contents<button class="popup" onclick="togglePopup('usagePopup88')">...<span class="popuptext" id="usagePopup88">Usage of <b>Weaver::weave_table_of_contents</b>:<br><a href="#SP1_3_4_1_3">&#167;1.3.4.1.3</a>, <a href="#SP1_3_4_1_4">&#167;1.3.4.1.4</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Weaver::weave_table_of_contents<button class="popup" onclick="togglePopup('usagePopup87')">...<span class="popuptext" id="usagePopup87">Usage of <b>Weaver::weave_table_of_contents</b>:<br><a href="#SP1_3_4_1_3">&#167;1.3.4.1.3</a>, <a href="#SP1_3_4_1_4">&#167;1.3.4.1.4</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">noteworthy</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="reserved">paragraph</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">paragraphs</span><span class="plain">)</span>
@ -1443,7 +1447,7 @@ marked as <code class="display"><span class="extract">@h</span></code> headings.
<span class="identifier">noteworthy</span><span class="plain">++;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">noteworthy</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="functiontext"><a href="5-fm.html#SP6">Formats::toc</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="constant">1</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">, </span><span class="identifier">I</span><span class="string">""</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="functiontext"><a href="5-fm.html#SP6">Formats::toc</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="constant">1</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">, </span><span class="identifier">I</span><span class="string">""</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="identifier">noteworthy</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="reserved">paragraph</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">paragraphs</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="element">weight</span><span class="plain"> &gt; </span><span class="constant">0</span><span class="plain">) &amp;&amp; ((</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">barred</span><span class="plain"> == </span><span class="constant">FALSE</span><span class="plain">) || (</span><span class="identifier">P</span><span class="plain">-&gt;</span><span class="element">above_bar</span><span class="plain"> == </span><span class="constant">FALSE</span><span class="plain">))) {</span>

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'ACME Support' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">inweb</a></li><li><a href="index.html#4">Chapter 4: Languages</a></li><li><b>ACME Support</b></li></ul><p class="purpose">For generic programming languages by the ACME corporation.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">inweb</a></li><li><a href="index.html#4">Chapter 4: Languages</a></li><li><b>ACME Support</b></li></ul><p class="purpose">For generic programming languages by the ACME corporation.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. One Dozen ACME Explosive Tennis Balls</a></li><li><a href="#SP3">&#167;3. Tangling methods</a></li></ul><hr class="tocbar">
@ -41,7 +46,7 @@ actually called ACME: the 6502 assembler of the same name.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ACMESupport::add_fallbacks<button class="popup" onclick="togglePopup('usagePopup151')">...<span class="popuptext" id="usagePopup151">Usage of <b>ACMESupport::add_fallbacks</b>:<br>Programming Languages - <a href="4-pl.html#SP7_2">&#167;7.2</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ACMESupport::add_fallbacks<button class="popup" onclick="togglePopup('usagePopup150')">...<span class="popuptext" id="usagePopup150">Usage of <b>ACMESupport::add_fallbacks</b>:<br>Programming Languages - <a href="4-pl.html#SP7_2">&#167;7.2</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="2-mth.html#SP6">Methods::provided</a></span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="identifier">methods</span><span class="plain">, </span><span class="constant">PARSE_TYPES_PAR_MTID</span><span class="plain">) == </span><span class="constant">FALSE</span><span class="plain">)</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">PARSE_TYPES_PAR_MTID</span><span class="plain">, </span><span class="functiontext"><a href="#SP4">ACMESupport::parse_types</a></span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="2-mth.html#SP6">Methods::provided</a></span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="identifier">methods</span><span class="plain">, </span><span class="constant">PARSE_FUNCTIONS_PAR_MTID</span><span class="plain">) == </span><span class="constant">FALSE</span><span class="plain">)</span>
@ -87,7 +92,7 @@ files to crash Inweb.)
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ACMESupport::expand<button class="popup" onclick="togglePopup('usagePopup152')">...<span class="popuptext" id="usagePopup152">Usage of <b>ACMESupport::expand</b>:<br><a href="#SP3">&#167;3</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">prototype</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">,</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ACMESupport::expand<button class="popup" onclick="togglePopup('usagePopup151')">...<span class="popuptext" id="usagePopup151">Usage of <b>ACMESupport::expand</b>:<br><a href="#SP3">&#167;3</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">prototype</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">,</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">N</span><span class="plain">, </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">prototype</span><span class="plain">) &gt; </span><span class="constant">0</span><span class="plain">) {</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">prototype</span><span class="plain">); </span><span class="identifier">i</span><span class="plain">++) {</span>
@ -114,22 +119,22 @@ files to crash Inweb.)
<p class="inwebparagraph"><a id="SP3"></a><b>&#167;3. Tangling methods. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ACMESupport::shebang<button class="popup" onclick="togglePopup('usagePopup153')">...<span class="popuptext" id="usagePopup153">Usage of <b>ACMESupport::shebang</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">,</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ACMESupport::shebang<button class="popup" onclick="togglePopup('usagePopup152')">...<span class="popuptext" id="usagePopup152">Usage of <b>ACMESupport::shebang</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">,</span>
<span class="reserved">tangle_target</span><span class="plain"> *</span><span class="identifier">target</span><span class="plain">) {</span>
<span class="functiontext"><a href="#SP2">ACMESupport::expand</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="element">shebang</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, -1, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ACMESupport::before_macro_expansion<button class="popup" onclick="togglePopup('usagePopup154')">...<span class="popuptext" id="usagePopup154">Usage of <b>ACMESupport::before_macro_expansion</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">,</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ACMESupport::before_macro_expansion<button class="popup" onclick="togglePopup('usagePopup153')">...<span class="popuptext" id="usagePopup153">Usage of <b>ACMESupport::before_macro_expansion</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">,</span>
<span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">para_macro</span><span class="plain"> *</span><span class="identifier">pmac</span><span class="plain">) {</span>
<span class="functiontext"><a href="#SP2">ACMESupport::expand</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="element">before_macro_expansion</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, -1, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ACMESupport::after_macro_expansion<button class="popup" onclick="togglePopup('usagePopup155')">...<span class="popuptext" id="usagePopup155">Usage of <b>ACMESupport::after_macro_expansion</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">,</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ACMESupport::after_macro_expansion<button class="popup" onclick="togglePopup('usagePopup154')">...<span class="popuptext" id="usagePopup154">Usage of <b>ACMESupport::after_macro_expansion</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">,</span>
<span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">para_macro</span><span class="plain"> *</span><span class="identifier">pmac</span><span class="plain">) {</span>
<span class="functiontext"><a href="#SP2">ACMESupport::expand</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="element">after_macro_expansion</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, -1, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">ACMESupport::start_definition<button class="popup" onclick="togglePopup('usagePopup156')">...<span class="popuptext" id="usagePopup156">Usage of <b>ACMESupport::start_definition</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">,</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">ACMESupport::start_definition<button class="popup" onclick="togglePopup('usagePopup155')">...<span class="popuptext" id="usagePopup155">Usage of <b>ACMESupport::start_definition</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">term</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">start</span><span class="plain">, </span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-lm.html#SP30">LanguageMethods::supports_definitions</a></span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">)) {</span>
<span class="functiontext"><a href="#SP2">ACMESupport::expand</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="element">start_definition</span><span class="plain">, </span><span class="identifier">term</span><span class="plain">, -1, </span><span class="identifier">NULL</span><span class="plain">);</span>
@ -138,7 +143,7 @@ files to crash Inweb.)
<span class="reserved">return</span><span class="plain"> </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">ACMESupport::prolong_definition<button class="popup" onclick="togglePopup('usagePopup157')">...<span class="popuptext" id="usagePopup157">Usage of <b>ACMESupport::prolong_definition</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">,</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">ACMESupport::prolong_definition<button class="popup" onclick="togglePopup('usagePopup156')">...<span class="popuptext" id="usagePopup156">Usage of <b>ACMESupport::prolong_definition</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">more</span><span class="plain">, </span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-lm.html#SP30">LanguageMethods::supports_definitions</a></span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">)) {</span>
<span class="functiontext"><a href="#SP2">ACMESupport::expand</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="element">prolong_definition</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, -1, </span><span class="identifier">NULL</span><span class="plain">);</span>
@ -147,7 +152,7 @@ files to crash Inweb.)
<span class="reserved">return</span><span class="plain"> </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">ACMESupport::end_definition<button class="popup" onclick="togglePopup('usagePopup158')">...<span class="popuptext" id="usagePopup158">Usage of <b>ACMESupport::end_definition</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">,</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">ACMESupport::end_definition<button class="popup" onclick="togglePopup('usagePopup157')">...<span class="popuptext" id="usagePopup157">Usage of <b>ACMESupport::end_definition</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-lm.html#SP30">LanguageMethods::supports_definitions</a></span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">)) {</span>
<span class="functiontext"><a href="#SP2">ACMESupport::expand</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="element">end_definition</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, -1, </span><span class="identifier">NULL</span><span class="plain">);</span>
@ -155,25 +160,25 @@ files to crash Inweb.)
<span class="reserved">return</span><span class="plain"> </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ACMESupport::I6_open_ifdef<button class="popup" onclick="togglePopup('usagePopup159')">...<span class="popuptext" id="usagePopup159">Usage of <b>ACMESupport::I6_open_ifdef</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">,</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ACMESupport::I6_open_ifdef<button class="popup" onclick="togglePopup('usagePopup158')">...<span class="popuptext" id="usagePopup158">Usage of <b>ACMESupport::I6_open_ifdef</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">symbol</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">sense</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sense</span><span class="plain">) </span><span class="functiontext"><a href="#SP2">ACMESupport::expand</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="element">start_ifdef</span><span class="plain">, </span><span class="identifier">symbol</span><span class="plain">, -1, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="functiontext"><a href="#SP2">ACMESupport::expand</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="element">start_ifndef</span><span class="plain">, </span><span class="identifier">symbol</span><span class="plain">, -1, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ACMESupport::I6_close_ifdef<button class="popup" onclick="togglePopup('usagePopup160')">...<span class="popuptext" id="usagePopup160">Usage of <b>ACMESupport::I6_close_ifdef</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">,</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ACMESupport::I6_close_ifdef<button class="popup" onclick="togglePopup('usagePopup159')">...<span class="popuptext" id="usagePopup159">Usage of <b>ACMESupport::I6_close_ifdef</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">symbol</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">sense</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">sense</span><span class="plain">) </span><span class="functiontext"><a href="#SP2">ACMESupport::expand</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="element">end_ifdef</span><span class="plain">, </span><span class="identifier">symbol</span><span class="plain">, -1, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="functiontext"><a href="#SP2">ACMESupport::expand</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="element">end_ifndef</span><span class="plain">, </span><span class="identifier">symbol</span><span class="plain">, -1, </span><span class="identifier">NULL</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ACMESupport::insert_line_marker<button class="popup" onclick="togglePopup('usagePopup161')">...<span class="popuptext" id="usagePopup161">Usage of <b>ACMESupport::insert_line_marker</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">,</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ACMESupport::insert_line_marker<button class="popup" onclick="togglePopup('usagePopup160')">...<span class="popuptext" id="usagePopup160">Usage of <b>ACMESupport::insert_line_marker</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
<span class="functiontext"><a href="#SP2">ACMESupport::expand</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="element">line_marker</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">,</span>
<span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">source</span><span class="plain">.</span><span class="identifier">line_count</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">source</span><span class="plain">.</span><span class="element">text_file_filename</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ACMESupport::comment<button class="popup" onclick="togglePopup('usagePopup162')">...<span class="popuptext" id="usagePopup162">Usage of <b>ACMESupport::comment</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">,</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ACMESupport::comment<button class="popup" onclick="togglePopup('usagePopup161')">...<span class="popuptext" id="usagePopup161">Usage of <b>ACMESupport::comment</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">comm</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="element">multiline_comment_open</span><span class="plain">) &gt; </span><span class="constant">0</span><span class="plain">) {</span>
<span class="functiontext"><a href="#SP2">ACMESupport::expand</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="element">multiline_comment_open</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, -1, </span><span class="identifier">NULL</span><span class="plain">);</span>
@ -189,7 +194,7 @@ files to crash Inweb.)
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">ACMESupport::parse_comment<button class="popup" onclick="togglePopup('usagePopup163')">...<span class="popuptext" id="usagePopup163">Usage of <b>ACMESupport::parse_comment</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">,</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">ACMESupport::parse_comment<button class="popup" onclick="togglePopup('usagePopup162')">...<span class="popuptext" id="usagePopup162">Usage of <b>ACMESupport::parse_comment</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">line</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">part_before_comment</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">part_within_comment</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">q_mode</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">c_mode</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">non_white_space</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">, </span><span class="identifier">c_position</span><span class="plain"> = -1, </span><span class="identifier">c_end</span><span class="plain"> = -1;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain">&lt;</span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">line</span><span class="plain">); </span><span class="identifier">i</span><span class="plain">++) {</span>
@ -254,7 +259,7 @@ files to crash Inweb.)
<p class="inwebparagraph"><a id="SP4"></a><b>&#167;4. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ACMESupport::parse_types<button class="popup" onclick="togglePopup('usagePopup164')">...<span class="popuptext" id="usagePopup164">Usage of <b>ACMESupport::parse_types</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ACMESupport::parse_types<button class="popup" onclick="togglePopup('usagePopup163')">...<span class="popuptext" id="usagePopup163">Usage of <b>ACMESupport::parse_types</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">main_language</span><span class="plain">-&gt;</span><span class="element">type_notation</span><span class="plain">[0]) {</span>
<span class="reserved">chapter</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">;</span>
<span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">;</span>
@ -276,7 +281,7 @@ files to crash Inweb.)
<p class="inwebparagraph"><a id="SP5"></a><b>&#167;5. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ACMESupport::parse_functions<button class="popup" onclick="togglePopup('usagePopup165')">...<span class="popuptext" id="usagePopup165">Usage of <b>ACMESupport::parse_functions</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ACMESupport::parse_functions<button class="popup" onclick="togglePopup('usagePopup164')">...<span class="popuptext" id="usagePopup164">Usage of <b>ACMESupport::parse_functions</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">main_language</span><span class="plain">-&gt;</span><span class="element">function_notation</span><span class="plain">[0]) {</span>
<span class="reserved">chapter</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">;</span>
<span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">;</span>
@ -301,7 +306,7 @@ a spurious comment betraying Inweb's involvement in the process.
</p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">ACMESupport::suppress_disclaimer<button class="popup" onclick="togglePopup('usagePopup166')">...<span class="popuptext" id="usagePopup166">Usage of <b>ACMESupport::suppress_disclaimer</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">ACMESupport::suppress_disclaimer<button class="popup" onclick="togglePopup('usagePopup165')">...<span class="popuptext" id="usagePopup165">Usage of <b>ACMESupport::suppress_disclaimer</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="identifier">suppress_disclaimer</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
@ -311,7 +316,7 @@ a spurious comment betraying Inweb's involvement in the process.
<p class="inwebparagraph"><a id="SP7"></a><b>&#167;7. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ACMESupport::begin_weave<button class="popup" onclick="togglePopup('usagePopup167')">...<span class="popuptext" id="usagePopup167">Usage of <b>ACMESupport::begin_weave</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ACMESupport::begin_weave<button class="popup" onclick="togglePopup('usagePopup166')">...<span class="popuptext" id="usagePopup166">Usage of <b>ACMESupport::begin_weave</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">) {</span>
<span class="reserved">reserved_word</span><span class="plain"> *</span><span class="identifier">rw</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">rw</span><span class="plain">, </span><span class="reserved">reserved_word</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="element">reserved_words</span><span class="plain">)</span>
<span class="functiontext"><a href="3-ta.html#SP10">Analyser::mark_reserved_word_for_section</a></span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">rw</span><span class="plain">-&gt;</span><span class="element">word</span><span class="plain">, </span><span class="identifier">rw</span><span class="plain">-&gt;</span><span class="element">colour</span><span class="plain">);</span>
@ -324,13 +329,13 @@ a spurious comment betraying Inweb's involvement in the process.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ACMESupport::reset_syntax_colouring<button class="popup" onclick="togglePopup('usagePopup168')">...<span class="popuptext" id="usagePopup168">Usage of <b>ACMESupport::reset_syntax_colouring</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">ACMESupport::reset_syntax_colouring<button class="popup" onclick="togglePopup('usagePopup167')">...<span class="popuptext" id="usagePopup167">Usage of <b>ACMESupport::reset_syntax_colouring</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">) {</span>
<span class="functiontext"><a href="4-tp.html#SP1">Painter::reset_syntax_colouring</a></span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">ACMESupport::syntax_colour<button class="popup" onclick="togglePopup('usagePopup169')">...<span class="popuptext" id="usagePopup169">Usage of <b>ACMESupport::syntax_colour</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
<span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">chapter</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">, </span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">matter</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">colouring</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">ACMESupport::syntax_colour<button class="popup" onclick="togglePopup('usagePopup168')">...<span class="popuptext" id="usagePopup168">Usage of <b>ACMESupport::syntax_colour</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">,</span>
<span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">matter</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">colouring</span><span class="plain">) {</span>
<span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain"> = </span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">owning_section</span><span class="plain">;</span>
<span class="reserved">hash_table</span><span class="plain"> *</span><span class="identifier">ht</span><span class="plain"> = &amp;(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_target</span><span class="plain">-&gt;</span><span class="element">symbols</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">category</span><span class="plain"> == </span><span class="constant">TEXT_EXTRACT_LCAT</span><span class="plain">) &amp;&amp; (</span><span class="identifier">pl</span><span class="plain"> != </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_language</span><span class="plain">))</span>
<span class="identifier">ht</span><span class="plain"> = &amp;(</span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="identifier">built_in_keywords</span><span class="plain">);</span>

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'C-Like Languages' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">inweb</a></li><li><a href="index.html#4">Chapter 4: Languages</a></li><li><b>C-Like Languages</b></li></ul><p class="purpose">To provide special features for the whole C family of languages.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">inweb</a></li><li><a href="index.html#4">Chapter 4: Languages</a></li><li><b>C-Like Languages</b></li></ul><p class="purpose">To provide special features for the whole C family of languages.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. </a></li><li><a href="#SP2">&#167;2. Parsing</a></li><li><a href="#SP2_2">&#167;2.2. Structure dependency</a></li><li><a href="#SP3">&#167;3. Functions</a></li><li><a href="#SP4">&#167;4. Subcategorisation</a></li><li><a href="#SP5">&#167;5. Tangling extras</a></li><li><a href="#SP6">&#167;6. Tangling predeclarations</a></li><li><a href="#SP7">&#167;7. Overriding regular code weaving</a></li><li><a href="#SP8">&#167;8. Analysis</a></li></ul><hr class="tocbar">
@ -34,7 +39,7 @@ This does:
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CLike::make_c_like<button class="popup" onclick="togglePopup('usagePopup181')">...<span class="popuptext" id="usagePopup181">Usage of <b>CLike::make_c_like</b>:<br>Programming Languages - <a href="4-pl.html#SP7_2">&#167;7.2</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CLike::make_c_like<button class="popup" onclick="togglePopup('usagePopup180')">...<span class="popuptext" id="usagePopup180">Usage of <b>CLike::make_c_like</b>:<br>Programming Languages - <a href="4-pl.html#SP7_2">&#167;7.2</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">) {</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">PARSE_TYPES_PAR_MTID</span><span class="plain">, </span><span class="functiontext"><a href="#SP2">CLike::parse_types</a></span><span class="plain">);</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">PARSE_FUNCTIONS_PAR_MTID</span><span class="plain">, </span><span class="functiontext"><a href="#SP3">CLike::parse_functions</a></span><span class="plain">);</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">SUBCATEGORISE_LINE_PAR_MTID</span><span class="plain">, </span><span class="functiontext"><a href="#SP4">CLike::subcategorise_code</a></span><span class="plain">);</span>
@ -55,7 +60,7 @@ is run if the language is "C-like": regular C and InC both qualify.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CLike::parse_types<button class="popup" onclick="togglePopup('usagePopup182')">...<span class="popuptext" id="usagePopup182">Usage of <b>CLike::parse_types</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CLike::parse_types<button class="popup" onclick="togglePopup('usagePopup181')">...<span class="popuptext" id="usagePopup181">Usage of <b>CLike::parse_types</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">) {</span>
&lt;<span class="cwebmacro">Find every typedef struct in the tangle</span> <span class="cwebmacronumber">2.1</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Work out which structs contain which others</span> <span class="cwebmacronumber">2.2</span>&gt;<span class="plain">;</span>
<span class="plain">}</span>
@ -327,7 +332,7 @@ source line being scanned lies within.
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">cc_sp</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">cc_stack</span><span class="plain">[</span><span class="constant">MAX_CONDITIONAL_COMPILATION_STACK</span><span class="plain">];</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CLike::parse_functions<button class="popup" onclick="togglePopup('usagePopup183')">...<span class="popuptext" id="usagePopup183">Usage of <b>CLike::parse_functions</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CLike::parse_functions<button class="popup" onclick="togglePopup('usagePopup182')">...<span class="popuptext" id="usagePopup182">Usage of <b>CLike::parse_functions</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">) {</span>
<span class="identifier">cc_sp</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">chapter</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">;</span>
<span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">;</span>
@ -523,7 +528,7 @@ look for a <code class="display"><span class="extract">#include</span></code> of
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CLike::subcategorise_code<button class="popup" onclick="togglePopup('usagePopup184')">...<span class="popuptext" id="usagePopup184">Usage of <b>CLike::subcategorise_code</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CLike::subcategorise_code<button class="popup" onclick="togglePopup('usagePopup183')">...<span class="popuptext" id="usagePopup183">Usage of <b>CLike::subcategorise_code</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
<span class="reserved">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="functiontext"><a href="4-pm.html#SP9">Regexp::create_mr</a></span><span class="plain">();</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-pm.html#SP10">Regexp::match</a></span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">text</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"#include &lt;(%C+)&gt;%c*"</span><span class="plain">)) {</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">library_file</span><span class="plain"> = </span><span class="identifier">mr</span><span class="plain">.</span><span class="element">exp</span><span class="plain">[0];</span>
@ -556,7 +561,7 @@ platform-specific details to handle directories without POSIX in Windows.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CLike::additional_early_matter<button class="popup" onclick="togglePopup('usagePopup185')">...<span class="popuptext" id="usagePopup185">Usage of <b>CLike::additional_early_matter</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">tangle_target</span><span class="plain"> *</span><span class="identifier">target</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CLike::additional_early_matter<button class="popup" onclick="togglePopup('usagePopup184')">...<span class="popuptext" id="usagePopup184">Usage of <b>CLike::additional_early_matter</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">tangle_target</span><span class="plain"> *</span><span class="identifier">target</span><span class="plain">) {</span>
<span class="reserved">chapter</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">;</span>
<span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">;</span>
<span class="identifier">LOOP_WITHIN_TANGLE</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">target</span><span class="plain">)</span>
@ -578,7 +583,7 @@ structures.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CLike::additional_predeclarations<button class="popup" onclick="togglePopup('usagePopup186')">...<span class="popuptext" id="usagePopup186">Usage of <b>CLike::additional_predeclarations</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CLike::additional_predeclarations<button class="popup" onclick="togglePopup('usagePopup185')">...<span class="popuptext" id="usagePopup185">Usage of <b>CLike::additional_predeclarations</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">) {</span>
&lt;<span class="cwebmacro">Predeclare the structures in a well-founded order</span> <span class="cwebmacronumber">6.2</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Predeclare simple typedefs</span> <span class="cwebmacronumber">6.1</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Predeclare the functions</span> <span class="cwebmacronumber">6.4</span>&gt;<span class="plain">;</span>
@ -644,7 +649,7 @@ finished.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CLike::tangle_structure<button class="popup" onclick="togglePopup('usagePopup187')">...<span class="popuptext" id="usagePopup187">Usage of <b>CLike::tangle_structure</b>:<br><a href="#SP6_2">&#167;6.2</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">language_type</span><span class="plain"> *</span><span class="identifier">str</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CLike::tangle_structure<button class="popup" onclick="togglePopup('usagePopup186')">...<span class="popuptext" id="usagePopup186">Usage of <b>CLike::tangle_structure</b>:<br><a href="#SP6_2">&#167;6.2</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">language_type</span><span class="plain"> *</span><span class="identifier">str</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">str</span><span class="plain">-&gt;</span><span class="element">tangled</span><span class="plain"> != </span><span class="constant">FALSE</span><span class="plain">) </span><span class="reserved">return</span><span class="plain">;</span>
<span class="identifier">str</span><span class="plain">-&gt;</span><span class="element">tangled</span><span class="plain"> = </span><span class="constant">NOT_APPLICABLE</span><span class="plain">;</span>
<span class="reserved">language_type</span><span class="plain"> *</span><span class="identifier">embodied</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
@ -729,7 +734,7 @@ are all known to Inweb's hash table of interesting identifiers:
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CLike::analyse_code<button class="popup" onclick="togglePopup('usagePopup188')">...<span class="popuptext" id="usagePopup188">Usage of <b>CLike::analyse_code</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CLike::analyse_code<button class="popup" onclick="togglePopup('usagePopup187')">...<span class="popuptext" id="usagePopup187">Usage of <b>CLike::analyse_code</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">language_function</span><span class="plain"> *</span><span class="identifier">fn</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">fn</span><span class="plain">, </span><span class="reserved">language_function</span><span class="plain">)</span>
<span class="functiontext"><a href="3-ta.html#SP9">Analyser::find_hash_entry_for_section</a></span><span class="plain">(</span><span class="identifier">fn</span><span class="plain">-&gt;</span><span class="element">function_header_at</span><span class="plain">-&gt;</span><span class="element">owning_section</span><span class="plain">,</span>
@ -755,7 +760,7 @@ bibliographic variable, but don't do that.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CLike::post_analysis<button class="popup" onclick="togglePopup('usagePopup189')">...<span class="popuptext" id="usagePopup189">Usage of <b>CLike::post_analysis</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">CLike::post_analysis<button class="popup" onclick="togglePopup('usagePopup188')">...<span class="popuptext" id="usagePopup188">Usage of <b>CLike::post_analysis</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">check_namespaces</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP21">Str::eq_wide_string</a></span><span class="plain">(</span><span class="functiontext"><a href="8-bdfw.html#SP6">Bibliographic::get_datum</a></span><span class="plain">(</span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Namespaces"</span><span class="plain">), </span><span class="identifier">L</span><span class="string">"On"</span><span class="plain">)) </span><span class="identifier">check_namespaces</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="reserved">language_function</span><span class="plain"> *</span><span class="identifier">fn</span><span class="plain">;</span>

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'InC Support' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">inweb</a></li><li><a href="index.html#4">Chapter 4: Languages</a></li><li><b>InC Support</b></li></ul><p class="purpose">To support a modest extension of C called InC.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">inweb</a></li><li><a href="index.html#4">Chapter 4: Languages</a></li><li><b>InC Support</b></li></ul><p class="purpose">To support a modest extension of C called InC.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Creation</a></li><li><a href="#SP3">&#167;3. Parsing methods</a></li><li><a href="#SP3_1">&#167;3.1. Parsing Preform grammar</a></li><li><a href="#SP3_1_1_1">&#167;3.1.1.1. Parsing the body of Preform grammar</a></li><li><a href="#SP3_2">&#167;3.2. Parsing I-literals</a></li><li><a href="#SP4">&#167;4. Tangling methods</a></li><li><a href="#SP14">&#167;14. Weaving</a></li><li><a href="#SP15">&#167;15. Weaving methods</a></li><li><a href="#SP18">&#167;18. Analysis methods</a></li></ul><hr class="tocbar">
@ -34,7 +39,7 @@ all of those methods, it has a whole lot more of its own.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InCSupport::add_features<button class="popup" onclick="togglePopup('usagePopup190')">...<span class="popuptext" id="usagePopup190">Usage of <b>InCSupport::add_features</b>:<br>Programming Languages - <a href="4-pl.html#SP7_2">&#167;7.2</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InCSupport::add_features<button class="popup" onclick="togglePopup('usagePopup189')">...<span class="popuptext" id="usagePopup189">Usage of <b>InCSupport::add_features</b>:<br>Programming Languages - <a href="4-pl.html#SP7_2">&#167;7.2</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">) {</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">FURTHER_PARSING_PAR_MTID</span><span class="plain">, </span><span class="functiontext"><a href="#SP3">InCSupport::further_parsing</a></span><span class="plain">);</span>
<span class="identifier">METHOD_ADD</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">SUPPRESS_EXPANSION_TAN_MTID</span><span class="plain">, </span><span class="functiontext"><a href="#SP4">InCSupport::suppress_expansion</a></span><span class="plain">);</span>
@ -72,7 +77,7 @@ all of those methods, it has a whole lot more of its own.
<pre class="display">
<span class="reserved">preform_nonterminal</span><span class="plain"> *</span><span class="identifier">alphabetical_list_of_nonterminals</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">InCSupport::further_parsing<button class="popup" onclick="togglePopup('usagePopup191')">...<span class="popuptext" id="usagePopup191">Usage of <b>InCSupport::further_parsing</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InCSupport::further_parsing<button class="popup" onclick="togglePopup('usagePopup190')">...<span class="popuptext" id="usagePopup190">Usage of <b>InCSupport::further_parsing</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">chapter</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">;</span>
<span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">;</span>
<span class="identifier">LOOP_WITHIN_TANGLE</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, </span><span class="functiontext"><a href="3-tt.html#SP4">Tangler::primary_target</a></span><span class="plain">(</span><span class="identifier">W</span><span class="plain">)) {</span>
@ -600,7 +605,7 @@ comment. (This avoids problems when tangling code that's been commented out.)
</p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InCSupport::suppress_expansion<button class="popup" onclick="togglePopup('usagePopup192')">...<span class="popuptext" id="usagePopup192">Usage of <b>InCSupport::suppress_expansion</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">material</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InCSupport::suppress_expansion<button class="popup" onclick="togglePopup('usagePopup191')">...<span class="popuptext" id="usagePopup191">Usage of <b>InCSupport::suppress_expansion</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">material</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="functiontext"><a href="4-sm.html#SP13">Str::get_at</a></span><span class="plain">(</span><span class="identifier">material</span><span class="plain">, </span><span class="constant">0</span><span class="plain">) == </span><span class="character">'/'</span><span class="plain">) &amp;&amp; (</span><span class="functiontext"><a href="4-sm.html#SP13">Str::get_at</a></span><span class="plain">(</span><span class="identifier">material</span><span class="plain">, </span><span class="constant">1</span><span class="plain">) == </span><span class="character">'/'</span><span class="plain">))</span>
<span class="reserved">return</span><span class="plain"> </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="constant">FALSE</span><span class="plain">;</span>
@ -631,7 +636,7 @@ in any program using Preform. For the Inform project, that's done in the
<ul class="items"><li>(b) <code class="display"><span class="extract">[[textliterals]]</span></code> tangles to code which initialises the I-literals.
</li></ul>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InCSupport::special_tangle_command<button class="popup" onclick="togglePopup('usagePopup193')">...<span class="popuptext" id="usagePopup193">Usage of <b>InCSupport::special_tangle_command</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">me</span><span class="plain">, </span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">data</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InCSupport::special_tangle_command<button class="popup" onclick="togglePopup('usagePopup192')">...<span class="popuptext" id="usagePopup192">Usage of <b>InCSupport::special_tangle_command</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">me</span><span class="plain">, </span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">data</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP21">Str::eq_wide_string</a></span><span class="plain">(</span><span class="identifier">data</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"nonterminals"</span><span class="plain">)) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"register_tangled_nonterminals();\n"</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="constant">TRUE</span><span class="plain">;</span>
@ -661,7 +666,7 @@ all integers to zero and all pointers to <code class="display"><span class="extr
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InCSupport::additional_predeclarations<button class="popup" onclick="togglePopup('usagePopup194')">...<span class="popuptext" id="usagePopup194">Usage of <b>InCSupport::additional_predeclarations</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InCSupport::additional_predeclarations<button class="popup" onclick="togglePopup('usagePopup193')">...<span class="popuptext" id="usagePopup193">Usage of <b>InCSupport::additional_predeclarations</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">chapter</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">;</span>
<span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">;</span>
<span class="identifier">LOOP_WITHIN_TANGLE</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, </span><span class="functiontext"><a href="3-tt.html#SP4">Tangler::primary_target</a></span><span class="plain">(</span><span class="identifier">W</span><span class="plain">))</span>
@ -694,7 +699,7 @@ They make use of macros and data structures defined in the Inform 7 web.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InCSupport::gnabehs<button class="popup" onclick="togglePopup('usagePopup195')">...<span class="popuptext" id="usagePopup195">Usage of <b>InCSupport::gnabehs</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InCSupport::gnabehs<button class="popup" onclick="togglePopup('usagePopup194')">...<span class="popuptext" id="usagePopup194">Usage of <b>InCSupport::gnabehs</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"void register_tangled_nonterminals(void) {\n"</span><span class="plain">);</span>
<span class="reserved">chapter</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">;</span>
<span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">;</span>
@ -733,7 +738,7 @@ in a special way...
</p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InCSupport::will_insert_in_tangle<button class="popup" onclick="togglePopup('usagePopup196')">...<span class="popuptext" id="usagePopup196">Usage of <b>InCSupport::will_insert_in_tangle</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InCSupport::will_insert_in_tangle<button class="popup" onclick="togglePopup('usagePopup195')">...<span class="popuptext" id="usagePopup195">Usage of <b>InCSupport::will_insert_in_tangle</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">category</span><span class="plain"> == </span><span class="constant">PREFORM_LCAT</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
@ -764,7 +769,7 @@ same rules as for the body of any other C function.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InCSupport::insert_in_tangle<button class="popup" onclick="togglePopup('usagePopup197')">...<span class="popuptext" id="usagePopup197">Usage of <b>InCSupport::insert_in_tangle</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InCSupport::insert_in_tangle<button class="popup" onclick="togglePopup('usagePopup196')">...<span class="popuptext" id="usagePopup196">Usage of <b>InCSupport::insert_in_tangle</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
<span class="reserved">preform_nonterminal</span><span class="plain"> *</span><span class="identifier">pnt</span><span class="plain"> = </span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">preform_nonterminal_defined</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pnt</span><span class="plain">-&gt;</span><span class="element">as_function</span><span class="plain">) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"int %SR(wording W, int *X, void **XP) {\n"</span><span class="plain">,</span>
@ -970,7 +975,7 @@ we also provide for some other special extensions to C.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InCSupport::tangle_code<button class="popup" onclick="togglePopup('usagePopup198')">...<span class="popuptext" id="usagePopup198">Usage of <b>InCSupport::tangle_code</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">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">original</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InCSupport::tangle_code<button class="popup" onclick="togglePopup('usagePopup197')">...<span class="popuptext" id="usagePopup197">Usage of <b>InCSupport::tangle_code</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">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">original</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">fcall_pos</span><span class="plain"> = -1;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">; </span><span class="identifier">i</span><span class="plain"> &lt; </span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">original</span><span class="plain">); </span><span class="identifier">i</span><span class="plain">++) {</span>
&lt;<span class="cwebmacro">Double-colons are namespace dividers in function names</span> <span class="cwebmacronumber">10.1</span>&gt;<span class="plain">;</span>
@ -1136,7 +1141,7 @@ the size of Inform 7, there's no significant gain from speeding them up
</p>
<pre class="display">
<span class="reserved">preform_nonterminal</span><span class="plain"> *</span><span class="functiontext">InCSupport::nonterminal_by_name<button class="popup" onclick="togglePopup('usagePopup199')">...<span class="popuptext" id="usagePopup199">Usage of <b>InCSupport::nonterminal_by_name</b>:<br><a href="#SP10_3">&#167;10.3</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
<span class="reserved">preform_nonterminal</span><span class="plain"> *</span><span class="functiontext">InCSupport::nonterminal_by_name<button class="popup" onclick="togglePopup('usagePopup198')">...<span class="popuptext" id="usagePopup198">Usage of <b>InCSupport::nonterminal_by_name</b>:<br><a href="#SP10_3">&#167;10.3</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
<span class="reserved">preform_nonterminal</span><span class="plain"> *</span><span class="identifier">pnt</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">pnt</span><span class="plain">, </span><span class="reserved">preform_nonterminal</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP18">Str::eq</a></span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">pnt</span><span class="plain">-&gt;</span><span class="element">nt_name</span><span class="plain">))</span>
@ -1154,7 +1159,7 @@ not by Inweb.
</p>
<pre class="display">
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="functiontext">InCSupport::nonterminal_variable_identifier<button class="popup" onclick="togglePopup('usagePopup200')">...<span class="popuptext" id="usagePopup200">Usage of <b>InCSupport::nonterminal_variable_identifier</b>:<br><a href="#SP10_2">&#167;10.2</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="functiontext">InCSupport::nonterminal_variable_identifier<button class="popup" onclick="togglePopup('usagePopup199')">...<span class="popuptext" id="usagePopup199">Usage of <b>InCSupport::nonterminal_variable_identifier</b>:<br><a href="#SP10_2">&#167;10.2</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP21">Str::eq_wide_string</a></span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"r"</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"most_recent_result"</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP21">Str::eq_wide_string</a></span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"rp"</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">I</span><span class="string">"most_recent_result_p"</span><span class="plain">;</span>
<span class="reserved">nonterminal_variable</span><span class="plain"> *</span><span class="identifier">ntv</span><span class="plain">;</span>
@ -1180,7 +1185,7 @@ will read in at run-time. This is how that happens:
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InCSupport::additional_tangling<button class="popup" onclick="togglePopup('usagePopup201')">...<span class="popuptext" id="usagePopup201">Usage of <b>InCSupport::additional_tangling</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">tangle_target</span><span class="plain"> *</span><span class="identifier">target</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InCSupport::additional_tangling<button class="popup" onclick="togglePopup('usagePopup200')">...<span class="popuptext" id="usagePopup200">Usage of <b>InCSupport::additional_tangling</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">tangle_target</span><span class="plain"> *</span><span class="identifier">target</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">NUMBER_CREATED</span><span class="plain">(</span><span class="reserved">preform_nonterminal</span><span class="plain">) &gt; </span><span class="constant">0</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="functiontext"><a href="2-tr.html#SP7">Reader::tangled_folder</a></span><span class="plain">(</span><span class="identifier">W</span><span class="plain">);</span>
<span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">Syntax</span><span class="plain"> = </span><span class="functiontext"><a href="3-fln.html#SP2">Filenames::in_folder</a></span><span class="plain">(</span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Syntax.preform"</span><span class="plain">);</span>
@ -1260,7 +1265,7 @@ nonterminal definitions:
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InCSupport::weave_grammar_index<button class="popup" onclick="togglePopup('usagePopup202')">...<span class="popuptext" id="usagePopup202">Usage of <b>InCSupport::weave_grammar_index</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_2">&#167;1.3.4.1.2</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InCSupport::weave_grammar_index<button class="popup" onclick="togglePopup('usagePopup201')">...<span class="popuptext" id="usagePopup201">Usage of <b>InCSupport::weave_grammar_index</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_2">&#167;1.3.4.1.2</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\\raggedright\\tolerance=10000"</span><span class="plain">);</span>
<span class="reserved">preform_nonterminal</span><span class="plain"> *</span><span class="identifier">pnt</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="identifier">pnt</span><span class="plain"> = </span><span class="identifier">alphabetical_list_of_nonterminals</span><span class="plain">; </span><span class="identifier">pnt</span><span class="plain">;</span>
@ -1269,7 +1274,7 @@ nonterminal definitions:
<span class="string">"\\leaders\\hbox to 1em{\\hss.\\hss}\\hfill {\\xreffont %S}}\n"</span><span class="plain">,</span>
<span class="identifier">pnt</span><span class="plain">-&gt;</span><span class="element">unangled_name</span><span class="plain">,</span>
<span class="plain">(</span><span class="identifier">pnt</span><span class="plain">-&gt;</span><span class="element">as_function</span><span class="plain">)?</span><span class="string">" (internal)"</span><span class="plain">:</span><span class="string">""</span><span class="plain">,</span>
<span class="identifier">pnt</span><span class="plain">-&gt;</span><span class="element">where_defined</span><span class="plain">-&gt;</span><span class="element">owning_section</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">);</span>
<span class="identifier">pnt</span><span class="plain">-&gt;</span><span class="element">where_defined</span><span class="plain">-&gt;</span><span class="element">owning_section</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">said_something</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
&lt;<span class="cwebmacro">List where the nonterminal appears in other Preform declarations</span> <span class="cwebmacronumber">14.2</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">List where the nonterminal is called from Inform code</span> <span class="cwebmacronumber">14.1</span>&gt;<span class="plain">;</span>
@ -1309,7 +1314,7 @@ nonterminal definitions:
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">section</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">scratch_flag</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain">++ &gt; </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">", "</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"{\\xreffont %S}"</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"{\\xreffont %S}"</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\n\n"</span><span class="plain">);</span>
<span class="plain">}</span>
@ -1344,7 +1349,7 @@ nonterminal definitions:
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">section</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">scratch_flag</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain">++ &gt; </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">", "</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"{\\xreffont %S}"</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"{\\xreffont %S}"</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">sect_range</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\n\n"</span><span class="plain">);</span>
<span class="plain">}</span>
@ -1361,7 +1366,7 @@ of C code which appear in <code class="display"><span class="extract">internal</
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">skipping_internal</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">, </span><span class="identifier">preform_production_count</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InCSupport::skip_in_weaving<button class="popup" onclick="togglePopup('usagePopup203')">...<span class="popuptext" id="usagePopup203">Usage of <b>InCSupport::skip_in_weaving</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InCSupport::skip_in_weaving<button class="popup" onclick="togglePopup('usagePopup202')">...<span class="popuptext" id="usagePopup202">Usage of <b>InCSupport::skip_in_weaving</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Preform_theme</span><span class="plain">) &amp;&amp; (</span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">theme_match</span><span class="plain"> == </span><span class="identifier">Preform_theme</span><span class="plain">)) {</span>
<span class="reserved">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="functiontext"><a href="4-pm.html#SP9">Regexp::create_mr</a></span><span class="plain">();</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-pm.html#SP10">Regexp::match</a></span><span class="plain">(&amp;</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">text</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"}%c*"</span><span class="plain">)) {</span>
@ -1380,11 +1385,11 @@ of C code which appear in <code class="display"><span class="extract">internal</
</p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InCSupport::weave_code_line<button class="popup" onclick="togglePopup('usagePopup204')">...<span class="popuptext" id="usagePopup204">Usage of <b>InCSupport::weave_code_line</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">,</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InCSupport::weave_code_line<button class="popup" onclick="togglePopup('usagePopup203')">...<span class="popuptext" id="usagePopup203">Usage of <b>InCSupport::weave_code_line</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">,</span>
<span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">chapter</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">, </span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">matter</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">concluding_comment</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">Preform_theme</span><span class="plain">) &amp;&amp; (</span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">theme_match</span><span class="plain"> == </span><span class="identifier">Preform_theme</span><span class="plain">))</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext"><a href="5-fm.html#SP30">Formats::preform_document</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">,</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext"><a href="5-fm.html#SP29">Formats::preform_document</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">,</span>
<span class="identifier">matter</span><span class="plain">, </span><span class="identifier">concluding_comment</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
@ -1398,7 +1403,7 @@ exists. We watch for it here:
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InCSupport::new_tag_declared<button class="popup" onclick="togglePopup('usagePopup205')">...<span class="popuptext" id="usagePopup205">Usage of <b>InCSupport::new_tag_declared</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">theme_tag</span><span class="plain"> *</span><span class="identifier">tag</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InCSupport::new_tag_declared<button class="popup" onclick="togglePopup('usagePopup204')">...<span class="popuptext" id="usagePopup204">Usage of <b>InCSupport::new_tag_declared</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">theme_tag</span><span class="plain"> *</span><span class="identifier">tag</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP21">Str::eq_wide_string</a></span><span class="plain">(</span><span class="identifier">tag</span><span class="plain">-&gt;</span><span class="element">tag_name</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"Preform"</span><span class="plain">)) </span><span class="identifier">Preform_theme</span><span class="plain"> = </span><span class="identifier">tag</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
@ -1408,14 +1413,14 @@ exists. We watch for it here:
<p class="inwebparagraph"><a id="SP18"></a><b>&#167;18. Analysis methods. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InCSupport::analyse_code<button class="popup" onclick="togglePopup('usagePopup206')">...<span class="popuptext" id="usagePopup206">Usage of <b>InCSupport::analyse_code</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">InCSupport::analyse_code<button class="popup" onclick="togglePopup('usagePopup205')">...<span class="popuptext" id="usagePopup205">Usage of <b>InCSupport::analyse_code</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">preform_nonterminal</span><span class="plain"> *</span><span class="identifier">pnt</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">pnt</span><span class="plain">, </span><span class="reserved">preform_nonterminal</span><span class="plain">)</span>
<span class="functiontext"><a href="3-ta.html#SP9">Analyser::find_hash_entry_for_section</a></span><span class="plain">(</span><span class="identifier">pnt</span><span class="plain">-&gt;</span><span class="element">where_defined</span><span class="plain">-&gt;</span><span class="element">owning_section</span><span class="plain">,</span>
<span class="identifier">pnt</span><span class="plain">-&gt;</span><span class="element">unangled_name</span><span class="plain">, </span><span class="constant">TRUE</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InCSupport::share_element<button class="popup" onclick="togglePopup('usagePopup207')">...<span class="popuptext" id="usagePopup207">Usage of <b>InCSupport::share_element</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">elname</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">InCSupport::share_element<button class="popup" onclick="togglePopup('usagePopup206')">...<span class="popuptext" id="usagePopup206">Usage of <b>InCSupport::share_element</b>:<br><a href="#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">self</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">elname</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP21">Str::eq_wide_string</a></span><span class="plain">(</span><span class="identifier">elname</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"word_ref1"</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP21">Str::eq_wide_string</a></span><span class="plain">(</span><span class="identifier">elname</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"word_ref2"</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP21">Str::eq_wide_string</a></span><span class="plain">(</span><span class="identifier">elname</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"next"</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">TRUE</span><span class="plain">;</span>

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Language Methods' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">inweb</a></li><li><a href="index.html#4">Chapter 4: Languages</a></li><li><b>Language Methods</b></li></ul><p class="purpose">To characterise the relevant differences in behaviour between the various programming languages supported.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">inweb</a></li><li><a href="index.html#4">Chapter 4: Languages</a></li><li><b>Language Methods</b></li></ul><p class="purpose">To characterise the relevant differences in behaviour between the various programming languages supported.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Introduction</a></li><li><a href="#SP2">&#167;2. Parsing methods</a></li><li><a href="#SP7">&#167;7. Tangling methods</a></li><li><a href="#SP22">&#167;22. Weaving methods</a></li><li><a href="#SP28">&#167;28. Analysis methods</a></li><li><a href="#SP30">&#167;30. What we support</a></li></ul><hr class="tocbar">
@ -66,7 +71,7 @@ need a more detailed picture.
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">PARSE_TYPES_PAR_MTID</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::parse_types<button class="popup" onclick="togglePopup('usagePopup116')">...<span class="popuptext" id="usagePopup116">Usage of <b>LanguageMethods::parse_types</b>:<br>The Parser - <a href="2-tp.html#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::parse_types<button class="popup" onclick="togglePopup('usagePopup115')">...<span class="popuptext" id="usagePopup115">Usage of <b>LanguageMethods::parse_types</b>:<br>The Parser - <a href="2-tp.html#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">) {</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">PARSE_TYPES_PAR_MTID</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
@ -83,7 +88,7 @@ need a more detailed picture.
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">PARSE_FUNCTIONS_PAR_MTID</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::parse_functions<button class="popup" onclick="togglePopup('usagePopup117')">...<span class="popuptext" id="usagePopup117">Usage of <b>LanguageMethods::parse_functions</b>:<br>The Parser - <a href="2-tp.html#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::parse_functions<button class="popup" onclick="togglePopup('usagePopup116')">...<span class="popuptext" id="usagePopup116">Usage of <b>LanguageMethods::parse_functions</b>:<br>The Parser - <a href="2-tp.html#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">) {</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">PARSE_FUNCTIONS_PAR_MTID</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
@ -102,7 +107,7 @@ of interest.
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">FURTHER_PARSING_PAR_MTID</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::further_parsing<button class="popup" onclick="togglePopup('usagePopup118')">...<span class="popuptext" id="usagePopup118">Usage of <b>LanguageMethods::further_parsing</b>:<br>The Parser - <a href="2-tp.html#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::further_parsing<button class="popup" onclick="togglePopup('usagePopup117')">...<span class="popuptext" id="usagePopup117">Usage of <b>LanguageMethods::further_parsing</b>:<br>The Parser - <a href="2-tp.html#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">) {</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">FURTHER_PARSING_PAR_MTID</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
@ -122,7 +127,7 @@ otherwise never produce.
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">SUBCATEGORISE_LINE_PAR_MTID</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::subcategorise_line<button class="popup" onclick="togglePopup('usagePopup119')">...<span class="popuptext" id="usagePopup119">Usage of <b>LanguageMethods::subcategorise_line</b>:<br>The Parser - <a href="2-tp.html#SP1_1_6_9">&#167;1.1.6.9</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::subcategorise_line<button class="popup" onclick="togglePopup('usagePopup118')">...<span class="popuptext" id="usagePopup118">Usage of <b>LanguageMethods::subcategorise_line</b>:<br>The Parser - <a href="2-tp.html#SP1_1_6_9">&#167;1.1.6.9</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">SUBCATEGORISE_LINE_PAR_MTID</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
@ -143,7 +148,7 @@ within the comment into the supplied strings.
<pre class="display">
<span class="identifier">IMETHOD_TYPE</span><span class="plain">(</span><span class="constant">PARSE_COMMENT_TAN_MTID</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">line</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">before</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">within</span><span class="plain">)</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">LanguageMethods::parse_comment<button class="popup" onclick="togglePopup('usagePopup120')">...<span class="popuptext" id="usagePopup120">Usage of <b>LanguageMethods::parse_comment</b>:<br>The Parser - <a href="2-tp.html#SP1_1_6_5_1_7">&#167;1.1.6.5.1.7</a><br>The Weaver - <a href="3-tw.html#SP1_3_4_1_9_4">&#167;1.3.4.1.9.4</a><br>The Painter - <a href="4-tp.html#SP2">&#167;2</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">,</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">LanguageMethods::parse_comment<button class="popup" onclick="togglePopup('usagePopup119')">...<span class="popuptext" id="usagePopup119">Usage of <b>LanguageMethods::parse_comment</b>:<br>The Parser - <a href="2-tp.html#SP1_1_6_5_1_7">&#167;1.1.6.5.1.7</a><br>The Weaver - <a href="3-tw.html#SP1_3_4_1_9_4">&#167;1.3.4.1.9.4</a><br>The Painter - <a href="4-tp.html#SP2">&#167;2</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">line</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">before</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">within</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="identifier">IMETHOD_CALL</span><span class="plain">(</span><span class="identifier">rv</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">PARSE_COMMENT_TAN_MTID</span><span class="plain">, </span><span class="identifier">line</span><span class="plain">, </span><span class="identifier">before</span><span class="plain">, </span><span class="identifier">within</span><span class="plain">);</span>
@ -169,7 +174,7 @@ For example, Perl prints <code class="display"><span class="extract">#!/usr/bin/
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">SHEBANG_TAN_MTID</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">tangle_target</span><span class="plain"> *</span><span class="identifier">target</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::shebang<button class="popup" onclick="togglePopup('usagePopup121')">...<span class="popuptext" id="usagePopup121">Usage of <b>LanguageMethods::shebang</b>:<br>The Tangler - <a href="3-tt.html#SP1_1">&#167;1.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">tangle_target</span><span class="plain"> *</span><span class="identifier">target</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::shebang<button class="popup" onclick="togglePopup('usagePopup120')">...<span class="popuptext" id="usagePopup120">Usage of <b>LanguageMethods::shebang</b>:<br>The Tangler - <a href="3-tt.html#SP1_1">&#167;1.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">tangle_target</span><span class="plain"> *</span><span class="identifier">target</span><span class="plain">) {</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">SHEBANG_TAN_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">target</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
@ -187,7 +192,7 @@ at tangled (therefore not original) material.
<pre class="display">
<span class="identifier">IMETHOD_TYPE</span><span class="plain">(</span><span class="constant">SUPPRESS_DISCLAIMER_TAN_MTID</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::disclaimer<button class="popup" onclick="togglePopup('usagePopup122')">...<span class="popuptext" id="usagePopup122">Usage of <b>LanguageMethods::disclaimer</b>:<br>The Tangler - <a href="3-tt.html#SP1_1">&#167;1.1</a></span></button></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">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">tangle_target</span><span class="plain"> *</span><span class="identifier">target</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::disclaimer<button class="popup" onclick="togglePopup('usagePopup121')">...<span class="popuptext" id="usagePopup121">Usage of <b>LanguageMethods::disclaimer</b>:<br>The Tangler - <a href="3-tt.html#SP1_1">&#167;1.1</a></span></button></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">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">tangle_target</span><span class="plain"> *</span><span class="identifier">target</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="identifier">IMETHOD_CALLV</span><span class="plain">(</span><span class="identifier">rv</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">SUPPRESS_DISCLAIMER_TAN_MTID</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rv</span><span class="plain"> == </span><span class="constant">FALSE</span><span class="plain">)</span>
@ -208,7 +213,7 @@ at tangled (therefore not original) material.
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">ADDITIONAL_EARLY_MATTER_TAN_MTID</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">tangle_target</span><span class="plain"> *</span><span class="identifier">target</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::additional_early_matter<button class="popup" onclick="togglePopup('usagePopup123')">...<span class="popuptext" id="usagePopup123">Usage of <b>LanguageMethods::additional_early_matter</b>:<br>The Tangler - <a href="3-tt.html#SP1_1">&#167;1.1</a></span></button></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">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">tangle_target</span><span class="plain"> *</span><span class="identifier">target</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::additional_early_matter<button class="popup" onclick="togglePopup('usagePopup122')">...<span class="popuptext" id="usagePopup122">Usage of <b>LanguageMethods::additional_early_matter</b>:<br>The Tangler - <a href="3-tt.html#SP1_1">&#167;1.1</a></span></button></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">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">tangle_target</span><span class="plain"> *</span><span class="identifier">target</span><span class="plain">) {</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">ADDITIONAL_EARLY_MATTER_TAN_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">target</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
@ -234,7 +239,7 @@ then subsequent lines are fed in order to <code class="display"><span class="ext
<span class="identifier">IMETHOD_TYPE</span><span class="plain">(</span><span class="constant">PROLONG_DEFN_TAN_MTID</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">more</span><span class="plain">, </span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">)</span>
<span class="identifier">IMETHOD_TYPE</span><span class="plain">(</span><span class="constant">END_DEFN_TAN_MTID</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::start_definition<button class="popup" onclick="togglePopup('usagePopup124')">...<span class="popuptext" id="usagePopup124">Usage of <b>LanguageMethods::start_definition</b>:<br>Enumerated Constants - <a href="2-ec.html#SP4">&#167;4</a><br>The Tangler - <a href="3-tt.html#SP1_1_1_1">&#167;1.1.1.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">,</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::start_definition<button class="popup" onclick="togglePopup('usagePopup123')">...<span class="popuptext" id="usagePopup123">Usage of <b>LanguageMethods::start_definition</b>:<br>Enumerated Constants - <a href="2-ec.html#SP4">&#167;4</a><br>The Tangler - <a href="3-tt.html#SP1_1_1_1">&#167;1.1.1.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">term</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">start</span><span class="plain">, </span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="identifier">IMETHOD_CALL</span><span class="plain">(</span><span class="identifier">rv</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">START_DEFN_TAN_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">term</span><span class="plain">, </span><span class="identifier">start</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">);</span>
@ -242,7 +247,7 @@ then subsequent lines are fed in order to <code class="display"><span class="ext
<span class="functiontext"><a href="1-pc.html#SP8">Main::error_in_web</a></span><span class="plain">(</span><span class="identifier">I</span><span class="string">"this programming language does not support @d"</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::prolong_definition<button class="popup" onclick="togglePopup('usagePopup125')">...<span class="popuptext" id="usagePopup125">Usage of <b>LanguageMethods::prolong_definition</b>:<br>The Tangler - <a href="3-tt.html#SP1_1_1_1">&#167;1.1.1.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">,</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::prolong_definition<button class="popup" onclick="togglePopup('usagePopup124')">...<span class="popuptext" id="usagePopup124">Usage of <b>LanguageMethods::prolong_definition</b>:<br>The Tangler - <a href="3-tt.html#SP1_1_1_1">&#167;1.1.1.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">more</span><span class="plain">, </span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="identifier">IMETHOD_CALL</span><span class="plain">(</span><span class="identifier">rv</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">PROLONG_DEFN_TAN_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">more</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">);</span>
@ -250,7 +255,7 @@ then subsequent lines are fed in order to <code class="display"><span class="ext
<span class="functiontext"><a href="1-pc.html#SP8">Main::error_in_web</a></span><span class="plain">(</span><span class="identifier">I</span><span class="string">"this programming language does not support multiline @d"</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::end_definition<button class="popup" onclick="togglePopup('usagePopup126')">...<span class="popuptext" id="usagePopup126">Usage of <b>LanguageMethods::end_definition</b>:<br>Enumerated Constants - <a href="2-ec.html#SP4">&#167;4</a><br>The Tangler - <a href="3-tt.html#SP1_1_1_1">&#167;1.1.1.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">,</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::end_definition<button class="popup" onclick="togglePopup('usagePopup125')">...<span class="popuptext" id="usagePopup125">Usage of <b>LanguageMethods::end_definition</b>:<br>Enumerated Constants - <a href="2-ec.html#SP4">&#167;4</a><br>The Tangler - <a href="3-tt.html#SP1_1_1_1">&#167;1.1.1.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">,</span>
<span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="identifier">IMETHOD_CALL</span><span class="plain">(</span><span class="identifier">rv</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">END_DEFN_TAN_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">);</span>
@ -270,7 +275,7 @@ automatically predeclare all functions, obviating the need for header files.
<pre class="display">
<span class="identifier">IMETHOD_TYPE</span><span class="plain">(</span><span class="constant">ADDITIONAL_PREDECLARATIONS_TAN_MTID</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::additional_predeclarations<button class="popup" onclick="togglePopup('usagePopup127')">...<span class="popuptext" id="usagePopup127">Usage of <b>LanguageMethods::additional_predeclarations</b>:<br>The Tangler - <a href="3-tt.html#SP1_1">&#167;1.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</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">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::additional_predeclarations<button class="popup" onclick="togglePopup('usagePopup126')">...<span class="popuptext" id="usagePopup126">Usage of <b>LanguageMethods::additional_predeclarations</b>:<br>The Tangler - <a href="3-tt.html#SP1_1">&#167;1.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</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">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">ADDITIONAL_PREDECLARATIONS_TAN_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
@ -291,7 +296,7 @@ the more routine matter, tangling ordinary paragraphs into code.
<pre class="display">
<span class="identifier">IMETHOD_TYPE</span><span class="plain">(</span><span class="constant">SUPPRESS_EXPANSION_TAN_MTID</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">material</span><span class="plain">)</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">LanguageMethods::allow_expansion<button class="popup" onclick="togglePopup('usagePopup128')">...<span class="popuptext" id="usagePopup128">Usage of <b>LanguageMethods::allow_expansion</b>:<br>The Tangler - <a href="3-tt.html#SP3">&#167;3</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">material</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">LanguageMethods::allow_expansion<button class="popup" onclick="togglePopup('usagePopup127')">...<span class="popuptext" id="usagePopup127">Usage of <b>LanguageMethods::allow_expansion</b>:<br>The Tangler - <a href="3-tt.html#SP3">&#167;3</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">material</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="identifier">IMETHOD_CALL</span><span class="plain">(</span><span class="identifier">rv</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">SUPPRESS_EXPANSION_TAN_MTID</span><span class="plain">, </span><span class="identifier">material</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> (</span><span class="identifier">rv</span><span class="plain">)?</span><span class="identifier">FALSE:TRUE</span><span class="plain">;</span>
@ -313,7 +318,7 @@ as follows, which return <code class="display"><span class="extract">TRUE</span>
<pre class="display">
<span class="identifier">IMETHOD_TYPE</span><span class="plain">(</span><span class="constant">TANGLE_COMMAND_TAN_MTID</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">data</span><span class="plain">)</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">LanguageMethods::special_tangle_command<button class="popup" onclick="togglePopup('usagePopup129')">...<span class="popuptext" id="usagePopup129">Usage of <b>LanguageMethods::special_tangle_command</b>:<br>The Tangler - <a href="3-tt.html#SP3_2">&#167;3.2</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">data</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">LanguageMethods::special_tangle_command<button class="popup" onclick="togglePopup('usagePopup128')">...<span class="popuptext" id="usagePopup128">Usage of <b>LanguageMethods::special_tangle_command</b>:<br>The Tangler - <a href="3-tt.html#SP3_2">&#167;3.2</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">data</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="identifier">IMETHOD_CALL</span><span class="plain">(</span><span class="identifier">rv</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">TANGLE_COMMAND_TAN_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">data</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain">;</span>
@ -337,12 +342,12 @@ do so, we should then act on that basis.
<pre class="display">
<span class="identifier">IMETHOD_TYPE</span><span class="plain">(</span><span class="constant">WILL_TANGLE_EXTRA_LINE_TAN_MTID</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">)</span>
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">TANGLE_EXTRA_LINE_TAN_MTID</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">)</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">LanguageMethods::will_insert_in_tangle<button class="popup" onclick="togglePopup('usagePopup130')">...<span class="popuptext" id="usagePopup130">Usage of <b>LanguageMethods::will_insert_in_tangle</b>:<br>The Tangler - <a href="3-tt.html#SP2">&#167;2</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">LanguageMethods::will_insert_in_tangle<button class="popup" onclick="togglePopup('usagePopup129')">...<span class="popuptext" id="usagePopup129">Usage of <b>LanguageMethods::will_insert_in_tangle</b>:<br>The Tangler - <a href="3-tt.html#SP2">&#167;2</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="identifier">IMETHOD_CALL</span><span class="plain">(</span><span class="identifier">rv</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">WILL_TANGLE_EXTRA_LINE_TAN_MTID</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::insert_in_tangle<button class="popup" onclick="togglePopup('usagePopup131')">...<span class="popuptext" id="usagePopup131">Usage of <b>LanguageMethods::insert_in_tangle</b>:<br>The Tangler - <a href="3-tt.html#SP2">&#167;2</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::insert_in_tangle<button class="popup" onclick="togglePopup('usagePopup130')">...<span class="popuptext" id="usagePopup130">Usage of <b>LanguageMethods::insert_in_tangle</b>:<br>The Tangler - <a href="3-tt.html#SP2">&#167;2</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">TANGLE_EXTRA_LINE_TAN_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
@ -362,7 +367,7 @@ from the given file; we generate this automatically.
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">INSERT_LINE_MARKER_TAN_MTID</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::insert_line_marker<button class="popup" onclick="togglePopup('usagePopup132')">...<span class="popuptext" id="usagePopup132">Usage of <b>LanguageMethods::insert_line_marker</b>:<br>The Tangler - <a href="3-tt.html#SP2_1">&#167;2.1</a>, <a href="3-tt.html#SP3_1">&#167;3.1</a><br>C-Like Languages - <a href="4-cl.html#SP6_3">&#167;6.3</a>, <a href="4-cl.html#SP6_4">&#167;6.4</a><br>InC Support - <a href="4-is.html#SP6">&#167;6</a>, <a href="4-is.html#SP7">&#167;7</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::insert_line_marker<button class="popup" onclick="togglePopup('usagePopup131')">...<span class="popuptext" id="usagePopup131">Usage of <b>LanguageMethods::insert_line_marker</b>:<br>The Tangler - <a href="3-tt.html#SP2_1">&#167;2.1</a>, <a href="3-tt.html#SP3_1">&#167;3.1</a><br>C-Like Languages - <a href="4-cl.html#SP6_3">&#167;6.3</a>, <a href="4-cl.html#SP6_4">&#167;6.4</a><br>InC Support - <a href="4-is.html#SP6">&#167;6</a>, <a href="4-is.html#SP7">&#167;7</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">INSERT_LINE_MARKER_TAN_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
@ -383,10 +388,10 @@ splice <code class="display"><span class="extract">{</span></code> and <code cla
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">BEFORE_MACRO_EXPANSION_TAN_MTID</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">para_macro</span><span class="plain"> *</span><span class="identifier">pmac</span><span class="plain">)</span>
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">AFTER_MACRO_EXPANSION_TAN_MTID</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">para_macro</span><span class="plain"> *</span><span class="identifier">pmac</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::before_macro_expansion<button class="popup" onclick="togglePopup('usagePopup133')">...<span class="popuptext" id="usagePopup133">Usage of <b>LanguageMethods::before_macro_expansion</b>:<br>The Tangler - <a href="3-tt.html#SP3_1">&#167;3.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">para_macro</span><span class="plain"> *</span><span class="identifier">pmac</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::before_macro_expansion<button class="popup" onclick="togglePopup('usagePopup132')">...<span class="popuptext" id="usagePopup132">Usage of <b>LanguageMethods::before_macro_expansion</b>:<br>The Tangler - <a href="3-tt.html#SP3_1">&#167;3.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">para_macro</span><span class="plain"> *</span><span class="identifier">pmac</span><span class="plain">) {</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">BEFORE_MACRO_EXPANSION_TAN_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pmac</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::after_macro_expansion<button class="popup" onclick="togglePopup('usagePopup134')">...<span class="popuptext" id="usagePopup134">Usage of <b>LanguageMethods::after_macro_expansion</b>:<br>The Tangler - <a href="3-tt.html#SP3_1">&#167;3.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">para_macro</span><span class="plain"> *</span><span class="identifier">pmac</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::after_macro_expansion<button class="popup" onclick="togglePopup('usagePopup133')">...<span class="popuptext" id="usagePopup133">Usage of <b>LanguageMethods::after_macro_expansion</b>:<br>The Tangler - <a href="3-tt.html#SP3_1">&#167;3.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">para_macro</span><span class="plain"> *</span><span class="identifier">pmac</span><span class="plain">) {</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">AFTER_MACRO_EXPANSION_TAN_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">pmac</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
@ -407,10 +412,10 @@ for a preprocessor to conditionally read: that is, to tangle code which contains
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">OPEN_IFDEF_TAN_MTID</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">symbol</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">sense</span><span class="plain">)</span>
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">CLOSE_IFDEF_TAN_MTID</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">symbol</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">sense</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::open_ifdef<button class="popup" onclick="togglePopup('usagePopup135')">...<span class="popuptext" id="usagePopup135">Usage of <b>LanguageMethods::open_ifdef</b>:<br>Tags - <a href="2-tgs.html#SP7">&#167;7</a><br>The Tangler - <a href="3-tt.html#SP1_1_1">&#167;1.1.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">symbol</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">sense</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::open_ifdef<button class="popup" onclick="togglePopup('usagePopup134')">...<span class="popuptext" id="usagePopup134">Usage of <b>LanguageMethods::open_ifdef</b>:<br>Tags - <a href="2-tgs.html#SP7">&#167;7</a><br>The Tangler - <a href="3-tt.html#SP1_1_1">&#167;1.1.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">symbol</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">sense</span><span class="plain">) {</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">OPEN_IFDEF_TAN_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">symbol</span><span class="plain">, </span><span class="identifier">sense</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::close_ifdef<button class="popup" onclick="togglePopup('usagePopup136')">...<span class="popuptext" id="usagePopup136">Usage of <b>LanguageMethods::close_ifdef</b>:<br>Tags - <a href="2-tgs.html#SP7">&#167;7</a><br>The Tangler - <a href="3-tt.html#SP1_1_1">&#167;1.1.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">symbol</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">sense</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::close_ifdef<button class="popup" onclick="togglePopup('usagePopup135')">...<span class="popuptext" id="usagePopup135">Usage of <b>LanguageMethods::close_ifdef</b>:<br>Tags - <a href="2-tgs.html#SP7">&#167;7</a><br>The Tangler - <a href="3-tt.html#SP1_1_1">&#167;1.1.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">symbol</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">sense</span><span class="plain">) {</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">CLOSE_IFDEF_TAN_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">symbol</span><span class="plain">, </span><span class="identifier">sense</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
@ -427,7 +432,7 @@ for a preprocessor to conditionally read: that is, to tangle code which contains
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">COMMENT_TAN_MTID</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">comm</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::comment<button class="popup" onclick="togglePopup('usagePopup137')">...<span class="popuptext" id="usagePopup137">Usage of <b>LanguageMethods::comment</b>:<br><a href="#SP8">&#167;8</a>, The Tangler - <a href="3-tt.html#SP3_1">&#167;3.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">comm</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::comment<button class="popup" onclick="togglePopup('usagePopup136')">...<span class="popuptext" id="usagePopup136">Usage of <b>LanguageMethods::comment</b>:<br><a href="#SP8">&#167;8</a>, The Tangler - <a href="3-tt.html#SP3_1">&#167;3.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">comm</span><span class="plain">) {</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">COMMENT_TAN_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">comm</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
@ -446,7 +451,7 @@ passes the code straight through, printing <code class="display"><span class="ex
<pre class="display">
<span class="identifier">IMETHOD_TYPE</span><span class="plain">(</span><span class="constant">TANGLE_CODE_UNUSUALLY_TAN_MTID</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">original</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::tangle_code<button class="popup" onclick="togglePopup('usagePopup138')">...<span class="popuptext" id="usagePopup138">Usage of <b>LanguageMethods::tangle_code</b>:<br>The Tangler - <a href="3-tt.html#SP3">&#167;3</a>, <a href="3-tt.html#SP3_1">&#167;3.1</a>, <a href="3-tt.html#SP3_2">&#167;3.2</a><br>C-Like Languages - <a href="4-cl.html#SP6_1">&#167;6.1</a>, <a href="4-cl.html#SP6_4">&#167;6.4</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">original</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::tangle_code<button class="popup" onclick="togglePopup('usagePopup137')">...<span class="popuptext" id="usagePopup137">Usage of <b>LanguageMethods::tangle_code</b>:<br>The Tangler - <a href="3-tt.html#SP3">&#167;3</a>, <a href="3-tt.html#SP3_1">&#167;3.1</a>, <a href="3-tt.html#SP3_2">&#167;3.2</a><br>C-Like Languages - <a href="4-cl.html#SP6_1">&#167;6.1</a>, <a href="4-cl.html#SP6_4">&#167;6.4</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">original</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="identifier">IMETHOD_CALL</span><span class="plain">(</span><span class="identifier">rv</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">TANGLE_CODE_UNUSUALLY_TAN_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">original</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rv</span><span class="plain"> == </span><span class="constant">FALSE</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">original</span><span class="plain">);</span>
@ -465,7 +470,7 @@ passes the code straight through, printing <code class="display"><span class="ex
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">GNABEHS_TAN_MTID</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::gnabehs<button class="popup" onclick="togglePopup('usagePopup139')">...<span class="popuptext" id="usagePopup139">Usage of <b>LanguageMethods::gnabehs</b>:<br>The Tangler - <a href="3-tt.html#SP1_1">&#167;1.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</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">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::gnabehs<button class="popup" onclick="togglePopup('usagePopup138')">...<span class="popuptext" id="usagePopup138">Usage of <b>LanguageMethods::gnabehs</b>:<br>The Tangler - <a href="3-tt.html#SP1_1">&#167;1.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</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">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">GNABEHS_TAN_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
@ -484,7 +489,7 @@ them the opportunity.
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">ADDITIONAL_TANGLING_TAN_MTID</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">tangle_target</span><span class="plain"> *</span><span class="identifier">target</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::additional_tangling<button class="popup" onclick="togglePopup('usagePopup140')">...<span class="popuptext" id="usagePopup140">Usage of <b>LanguageMethods::additional_tangling</b>:<br>The Tangler - <a href="3-tt.html#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">tangle_target</span><span class="plain"> *</span><span class="identifier">target</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::additional_tangling<button class="popup" onclick="togglePopup('usagePopup139')">...<span class="popuptext" id="usagePopup139">Usage of <b>LanguageMethods::additional_tangling</b>:<br>The Tangler - <a href="3-tt.html#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">tangle_target</span><span class="plain"> *</span><span class="identifier">target</span><span class="plain">) {</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">ADDITIONAL_TANGLING_TAN_MTID</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">target</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
@ -502,7 +507,7 @@ anything that the language in question might need later.
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">BEGIN_WEAVE_WEA_MTID</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::begin_weave<button class="popup" onclick="togglePopup('usagePopup141')">...<span class="popuptext" id="usagePopup141">Usage of <b>LanguageMethods::begin_weave</b>:<br>The Weaver - <a href="3-tw.html#SP1_3">&#167;1.3</a></span></button></span><span class="plain">(</span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::begin_weave<button class="popup" onclick="togglePopup('usagePopup140')">...<span class="popuptext" id="usagePopup140">Usage of <b>LanguageMethods::begin_weave</b>:<br>The Weaver - <a href="3-tw.html#SP1_3">&#167;1.3</a></span></button></span><span class="plain">(</span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">) {</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">sect_language</span><span class="plain">, </span><span class="constant">BEGIN_WEAVE_WEA_MTID</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
@ -519,7 +524,7 @@ anything that the language in question might need later.
<pre class="display">
<span class="identifier">IMETHOD_TYPE</span><span class="plain">(</span><span class="constant">SKIP_IN_WEAVING_WEA_MTID</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">)</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">LanguageMethods::skip_in_weaving<button class="popup" onclick="togglePopup('usagePopup142')">...<span class="popuptext" id="usagePopup142">Usage of <b>LanguageMethods::skip_in_weaving</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4">&#167;1.3.4</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">LanguageMethods::skip_in_weaving<button class="popup" onclick="togglePopup('usagePopup141')">...<span class="popuptext" id="usagePopup141">Usage of <b>LanguageMethods::skip_in_weaving</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4">&#167;1.3.4</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="identifier">IMETHOD_CALL</span><span class="plain">(</span><span class="identifier">rv</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">SKIP_IN_WEAVING_WEA_MTID</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain">;</span>
@ -541,7 +546,7 @@ sake, which minimises the knock-on effect of any colouring mistakes.
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">RESET_SYNTAX_COLOURING_WEA_MTID</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::reset_syntax_colouring<button class="popup" onclick="togglePopup('usagePopup143')">...<span class="popuptext" id="usagePopup143">Usage of <b>LanguageMethods::reset_syntax_colouring</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_1">&#167;1.3.4.1.1</a>, <a href="3-tw.html#SP1_3_4_1_9_6">&#167;1.3.4.1.9.6</a>, <a href="3-tw.html#SP1_3_4_1_10">&#167;1.3.4.1.10</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::reset_syntax_colouring<button class="popup" onclick="togglePopup('usagePopup142')">...<span class="popuptext" id="usagePopup142">Usage of <b>LanguageMethods::reset_syntax_colouring</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_1">&#167;1.3.4.1.1</a>, <a href="3-tw.html#SP1_3_4_1_9_6">&#167;1.3.4.1.9.6</a>, <a href="3-tw.html#SP1_3_4_1_10">&#167;1.3.4.1.10</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">) {</span>
<span class="identifier">VMETHOD_CALLV</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">RESET_SYNTAX_COLOURING_WEA_MTID</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
@ -559,17 +564,17 @@ sake, which minimises the knock-on effect of any colouring mistakes.
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">colouring_state</span><span class="plain"> = </span><span class="constant">PLAIN_COLOUR</span><span class="plain">;</span>
<span class="identifier">IMETHOD_TYPE</span><span class="plain">(</span><span class="constant">SYNTAX_COLOUR_WEA_MTID</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">,</span>
<span class="reserved">chapter</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">, </span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">matter</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">colouring</span><span class="plain">)</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">LanguageMethods::syntax_colour<button class="popup" onclick="togglePopup('usagePopup144')">...<span class="popuptext" id="usagePopup144">Usage of <b>LanguageMethods::syntax_colour</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_9">&#167;1.3.4.1.9</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
<span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">chapter</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">, </span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">matter</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">colouring</span><span class="plain">) {</span>
<span class="functiontext"><a href="4-sm.html#SP16">Str::copy</a></span><span class="plain">(</span><span class="identifier">colouring</span><span class="plain">, </span><span class="identifier">matter</span><span class="plain">);</span>
<span class="identifier">IMETHOD_TYPE</span><span class="plain">(</span><span class="constant">SYNTAX_COLOUR_WEA_MTID</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">,</span>
<span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">matter</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">colouring</span><span class="plain">)</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">LanguageMethods::syntax_colour<button class="popup" onclick="togglePopup('usagePopup143')">...<span class="popuptext" id="usagePopup143">Usage of <b>LanguageMethods::syntax_colour</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_9">&#167;1.3.4.1.9</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">,</span>
<span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">matter</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">colouring</span><span class="plain">) {</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain"> &lt; </span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">matter</span><span class="plain">); </span><span class="identifier">i</span><span class="plain">++) </span><span class="functiontext"><a href="4-sm.html#SP14">Str::put_at</a></span><span class="plain">(</span><span class="identifier">colouring</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">, </span><span class="constant">PLAIN_COLOUR</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">colour_as</span><span class="plain"> = </span><span class="identifier">pl</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">category</span><span class="plain"> == </span><span class="constant">TEXT_EXTRACT_LCAT</span><span class="plain">) </span><span class="identifier">colour_as</span><span class="plain"> = </span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">colour_as</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">colour_as</span><span class="plain">)</span>
<span class="identifier">IMETHOD_CALL</span><span class="plain">(</span><span class="identifier">rv</span><span class="plain">, </span><span class="identifier">colour_as</span><span class="plain">, </span><span class="constant">SYNTAX_COLOUR_WEA_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">, </span><span class="identifier">matter</span><span class="plain">, </span><span class="identifier">colouring</span><span class="plain">);</span>
<span class="identifier">IMETHOD_CALL</span><span class="plain">(</span><span class="identifier">rv</span><span class="plain">, </span><span class="identifier">colour_as</span><span class="plain">, </span><span class="constant">SYNTAX_COLOUR_WEA_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">,</span>
<span class="identifier">matter</span><span class="plain">, </span><span class="identifier">colouring</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
@ -589,7 +594,7 @@ method has already woven something more attractive.
<pre class="display">
<span class="identifier">IMETHOD_TYPE</span><span class="plain">(</span><span class="constant">WEAVE_CODE_LINE_WEA_MTID</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">,</span>
<span class="reserved">chapter</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">, </span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">matter</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">concluding_comment</span><span class="plain">)</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">LanguageMethods::weave_code_line<button class="popup" onclick="togglePopup('usagePopup145')">...<span class="popuptext" id="usagePopup145">Usage of <b>LanguageMethods::weave_code_line</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_9">&#167;1.3.4.1.9</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">LanguageMethods::weave_code_line<button class="popup" onclick="togglePopup('usagePopup144')">...<span class="popuptext" id="usagePopup144">Usage of <b>LanguageMethods::weave_code_line</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_9">&#167;1.3.4.1.9</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
<span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">chapter</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">, </span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">matter</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">concluding_comment</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="identifier">IMETHOD_CALL</span><span class="plain">(</span><span class="identifier">rv</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">WEAVE_CODE_LINE_WEA_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">, </span><span class="identifier">matter</span><span class="plain">, </span><span class="identifier">concluding_comment</span><span class="plain">);</span>
@ -609,7 +614,7 @@ method has already woven something more attractive.
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">NOTIFY_NEW_TAG_WEA_MTID</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">theme_tag</span><span class="plain"> *</span><span class="identifier">tag</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::new_tag_declared<button class="popup" onclick="togglePopup('usagePopup146')">...<span class="popuptext" id="usagePopup146">Usage of <b>LanguageMethods::new_tag_declared</b>:<br>Tags - <a href="2-tgs.html#SP2">&#167;2</a></span></button></span><span class="plain">(</span><span class="reserved">theme_tag</span><span class="plain"> *</span><span class="identifier">tag</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::new_tag_declared<button class="popup" onclick="togglePopup('usagePopup145')">...<span class="popuptext" id="usagePopup145">Usage of <b>LanguageMethods::new_tag_declared</b>:<br>Tags - <a href="2-tgs.html#SP2">&#167;2</a></span></button></span><span class="plain">(</span><span class="reserved">theme_tag</span><span class="plain"> *</span><span class="identifier">tag</span><span class="plain">) {</span>
<span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain">)</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">NOTIFY_NEW_TAG_WEA_MTID</span><span class="plain">, </span><span class="identifier">tag</span><span class="plain">);</span>
@ -639,10 +644,10 @@ colouring purposes.)
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">EARLY_PREWEAVE_ANALYSIS_ANA_MTID</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">)</span>
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">LATE_PREWEAVE_ANALYSIS_ANA_MTID</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::early_preweave_analysis<button class="popup" onclick="togglePopup('usagePopup147')">...<span class="popuptext" id="usagePopup147">Usage of <b>LanguageMethods::early_preweave_analysis</b>:<br>The Analyser - <a href="3-ta.html#SP4_1">&#167;4.1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::early_preweave_analysis<button class="popup" onclick="togglePopup('usagePopup146')">...<span class="popuptext" id="usagePopup146">Usage of <b>LanguageMethods::early_preweave_analysis</b>:<br>The Analyser - <a href="3-ta.html#SP4_1">&#167;4.1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">) {</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">EARLY_PREWEAVE_ANALYSIS_ANA_MTID</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::late_preweave_analysis<button class="popup" onclick="togglePopup('usagePopup148')">...<span class="popuptext" id="usagePopup148">Usage of <b>LanguageMethods::late_preweave_analysis</b>:<br>The Analyser - <a href="3-ta.html#SP4">&#167;4</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">LanguageMethods::late_preweave_analysis<button class="popup" onclick="togglePopup('usagePopup147')">...<span class="popuptext" id="usagePopup147">Usage of <b>LanguageMethods::late_preweave_analysis</b>:<br>The Analyser - <a href="3-ta.html#SP4">&#167;4</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">) {</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">LATE_PREWEAVE_ANALYSIS_ANA_MTID</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
@ -660,7 +665,7 @@ special treatment, and this method decides which.
<pre class="display">
<span class="identifier">IMETHOD_TYPE</span><span class="plain">(</span><span class="constant">SHARE_ELEMENT_ANA_MTID</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">element_name</span><span class="plain">)</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">LanguageMethods::share_element<button class="popup" onclick="togglePopup('usagePopup149')">...<span class="popuptext" id="usagePopup149">Usage of <b>LanguageMethods::share_element</b>:<br>Types and Functions - <a href="4-taf.html#SP4">&#167;4</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">element_name</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">LanguageMethods::share_element<button class="popup" onclick="togglePopup('usagePopup148')">...<span class="popuptext" id="usagePopup148">Usage of <b>LanguageMethods::share_element</b>:<br>Types and Functions - <a href="4-taf.html#SP4">&#167;4</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">element_name</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="identifier">IMETHOD_CALL</span><span class="plain">(</span><span class="identifier">rv</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">, </span><span class="constant">SHARE_ELEMENT_ANA_MTID</span><span class="plain">, </span><span class="identifier">element_name</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain">;</span>
@ -672,7 +677,7 @@ special treatment, and this method decides which.
<p class="inwebparagraph"><a id="SP30"></a><b>&#167;30. What we support. </b></p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">LanguageMethods::supports_definitions<button class="popup" onclick="togglePopup('usagePopup150')">...<span class="popuptext" id="usagePopup150">Usage of <b>LanguageMethods::supports_definitions</b>:<br>ACME Support - <a href="4-as.html#SP3">&#167;3</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">LanguageMethods::supports_definitions<button class="popup" onclick="togglePopup('usagePopup149')">...<span class="popuptext" id="usagePopup149">Usage of <b>LanguageMethods::supports_definitions</b>:<br>ACME Support - <a href="4-as.html#SP3">&#167;3</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="element">start_definition</span><span class="plain">) &gt; </span><span class="constant">0</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="element">prolong_definition</span><span class="plain">) &gt; </span><span class="constant">0</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="element">end_definition</span><span class="plain">) &gt; </span><span class="constant">0</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">TRUE</span><span class="plain">;</span>

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Programming Languages' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">inweb</a></li><li><a href="index.html#4">Chapter 4: Languages</a></li><li><b>Programming Languages</b></li></ul><p class="purpose">Defining the programming languages supported by Inweb, loading in their definitions from files.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">inweb</a></li><li><a href="index.html#4">Chapter 4: Languages</a></li><li><b>Programming Languages</b></li></ul><p class="purpose">Defining the programming languages supported by Inweb, loading in their definitions from files.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Languages</a></li><li><a href="#SP9">&#167;9. Blocks</a></li><li><a href="#SP11">&#167;11. Colouring Rules</a></li><li><a href="#SP14">&#167;14. Reserved words</a></li><li><a href="#SP15">&#167;15. Expressions</a></li></ul><hr class="tocbar">
@ -35,7 +40,7 @@
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. </b></p>
<pre class="display">
<span class="reserved">programming_language</span><span class="plain"> *</span><span class="functiontext">Languages::find_by_name<button class="popup" onclick="togglePopup('usagePopup93')">...<span class="popuptext" id="usagePopup93">Usage of <b>Languages::find_by_name</b>:<br><a href="#SP3">&#167;3</a>, The Reader - <a href="2-tr.html#SP4_2">&#167;4.2</a>, <a href="2-tr.html#SP4_3">&#167;4.3</a>, <a href="2-tr.html#SP4_4">&#167;4.4</a><br>The Parser - <a href="2-tp.html#SP1_1_6_7">&#167;1.1.6.7</a><br>The Weaver - <a href="3-tw.html#SP1_3_4_1_2_1">&#167;1.3.4.1.2.1</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">lname</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">programming_language</span><span class="plain"> *</span><span class="functiontext">Languages::find_by_name<button class="popup" onclick="togglePopup('usagePopup92')">...<span class="popuptext" id="usagePopup92">Usage of <b>Languages::find_by_name</b>:<br><a href="#SP3">&#167;3</a>, The Reader - <a href="2-tr.html#SP4_2">&#167;4.2</a>, <a href="2-tr.html#SP4_3">&#167;4.3</a>, <a href="2-tr.html#SP4_4">&#167;4.4</a><br>The Parser - <a href="2-tp.html#SP1_1_6_7">&#167;1.1.6.7</a><br>The Weaver - <a href="3-tw.html#SP1_3_4_1_2_1">&#167;1.3.4.1.2.1</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">lname</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">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">;</span>
&lt;<span class="cwebmacro">If this is the name of a language already known, return that</span> <span class="cwebmacronumber">2.1</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Read the language definition file with this name</span> <span class="cwebmacronumber">2.2</span>&gt;<span class="plain">;</span>
@ -109,11 +114,11 @@
</p>
<pre class="display">
<span class="reserved">programming_language</span><span class="plain"> *</span><span class="functiontext">Languages::default<button class="popup" onclick="togglePopup('usagePopup94')">...<span class="popuptext" id="usagePopup94">Usage of <b>Languages::default</b>:<br>The Reader - <a href="2-tr.html#SP4_2">&#167;4.2</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">programming_language</span><span class="plain"> *</span><span class="functiontext">Languages::default<button class="popup" onclick="togglePopup('usagePopup93')">...<span class="popuptext" id="usagePopup93">Usage of <b>Languages::default</b>:<br>The Reader - <a href="2-tr.html#SP4_2">&#167;4.2</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext"><a href="#SP2">Languages::find_by_name</a></span><span class="plain">(</span><span class="identifier">I</span><span class="string">"C"</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Languages::show<button class="popup" onclick="togglePopup('usagePopup95')">...<span class="popuptext" id="usagePopup95">Usage of <b>Languages::show</b>:<br>Program Control - <a href="1-pc.html#SP7_2">&#167;7.2</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Languages::show<button class="popup" onclick="togglePopup('usagePopup94')">...<span class="popuptext" id="usagePopup94">Usage of <b>Languages::show</b>:<br>Program Control - <a href="1-pc.html#SP7_2">&#167;7.2</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"Inweb can see the following programming language definitions:\n\n"</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">N</span><span class="plain"> = </span><span class="identifier">NUMBER_CREATED</span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain">);</span>
<span class="reserved">programming_language</span><span class="plain"> **</span><span class="identifier">sorted_table</span><span class="plain"> =</span>
@ -135,7 +140,7 @@
<p class="inwebparagraph"><a id="SP4"></a><b>&#167;4. </b></p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Languages::compare_names<button class="popup" onclick="togglePopup('usagePopup96')">...<span class="popuptext" id="usagePopup96">Usage of <b>Languages::compare_names</b>:<br><a href="#SP3">&#167;3</a></span></button></span><span class="plain">(</span><span class="reserved">const</span><span class="plain"> </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">ent1</span><span class="plain">, </span><span class="reserved">const</span><span class="plain"> </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">ent2</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Languages::compare_names<button class="popup" onclick="togglePopup('usagePopup95')">...<span class="popuptext" id="usagePopup95">Usage of <b>Languages::compare_names</b>:<br><a href="#SP3">&#167;3</a></span></button></span><span class="plain">(</span><span class="reserved">const</span><span class="plain"> </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">ent1</span><span class="plain">, </span><span class="reserved">const</span><span class="plain"> </span><span class="reserved">void</span><span class="plain"> *</span><span class="identifier">ent2</span><span class="plain">) {</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">tx1</span><span class="plain"> = (*((</span><span class="reserved">const</span><span class="plain"> </span><span class="reserved">programming_language</span><span class="plain"> **) </span><span class="identifier">ent1</span><span class="plain">))-&gt;</span><span class="element">language_name</span><span class="plain">;</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">tx2</span><span class="plain"> = (*((</span><span class="reserved">const</span><span class="plain"> </span><span class="reserved">programming_language</span><span class="plain"> **) </span><span class="identifier">ent2</span><span class="plain">))-&gt;</span><span class="element">language_name</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext"><a href="4-sm.html#SP19">Str::cmp_insensitive</a></span><span class="plain">(</span><span class="identifier">tx1</span><span class="plain">, </span><span class="identifier">tx2</span><span class="plain">);</span>
@ -148,7 +153,7 @@
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Languages::read_definitions<button class="popup" onclick="togglePopup('usagePopup97')">...<span class="popuptext" id="usagePopup97">Usage of <b>Languages::read_definitions</b>:<br>Program Control - <a href="1-pc.html#SP7_2">&#167;7.2</a><br>Configuration - <a href="1-cnf.html#SP3">&#167;3</a></span></button></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">void</span><span class="plain"> </span><span class="functiontext">Languages::read_definitions<button class="popup" onclick="togglePopup('usagePopup96')">...<span class="popuptext" id="usagePopup96">Usage of <b>Languages::read_definitions</b>:<br>Program Control - <a href="1-pc.html#SP7_2">&#167;7.2</a><br>Configuration - <a href="1-cnf.html#SP3">&#167;3</a></span></button></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">if</span><span class="plain"> (</span><span class="identifier">P</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">P</span><span class="plain"> = </span><span class="functiontext"><a href="#SP5">Languages::default_directory</a></span><span class="plain">();</span>
<span class="reserved">scan_directory</span><span class="plain"> *</span><span class="identifier">D</span><span class="plain"> = </span><span class="functiontext"><a href="3-drc.html#SP2">Directories::open</a></span><span class="plain">(</span><span class="identifier">P</span><span class="plain">);</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">leafname</span><span class="plain">);</span>
@ -162,7 +167,7 @@
<span class="functiontext"><a href="3-drc.html#SP2">Directories::close</a></span><span class="plain">(</span><span class="identifier">D</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">pathname</span><span class="plain"> *</span><span class="functiontext">Languages::default_directory<button class="popup" onclick="togglePopup('usagePopup98')">...<span class="popuptext" id="usagePopup98">Usage of <b>Languages::default_directory</b>:<br><a href="#SP2_2">&#167;2.2</a></span></button></span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="reserved">pathname</span><span class="plain"> *</span><span class="functiontext">Languages::default_directory<button class="popup" onclick="togglePopup('usagePopup97')">...<span class="popuptext" id="usagePopup97">Usage of <b>Languages::default_directory</b>:<br><a href="#SP2_2">&#167;2.2</a></span></button></span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="functiontext"><a href="3-pth.html#SP4">Pathnames::subfolder</a></span><span class="plain">(</span><span class="identifier">path_to_inweb</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Languages"</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
@ -235,7 +240,7 @@ currently inside.
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">colouring_language_block</span><span class="plain"> *</span><span class="identifier">current_block</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">language_reader_state</span><span class="plain">;</span>
<span class="reserved">programming_language</span><span class="plain"> *</span><span class="functiontext">Languages::read_definition<button class="popup" onclick="togglePopup('usagePopup99')">...<span class="popuptext" id="usagePopup99">Usage of <b>Languages::read_definition</b>:<br><a href="#SP2_2">&#167;2.2</a>, <a href="#SP5">&#167;5</a>, Configuration - <a href="1-cnf.html#SP3">&#167;3</a></span></button></span><span class="plain">(</span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">) {</span>
<span class="reserved">programming_language</span><span class="plain"> *</span><span class="functiontext">Languages::read_definition<button class="popup" onclick="togglePopup('usagePopup98')">...<span class="popuptext" id="usagePopup98">Usage of <b>Languages::read_definition</b>:<br><a href="#SP2_2">&#167;2.2</a>, <a href="#SP5">&#167;5</a>, Configuration - <a href="1-cnf.html#SP3">&#167;3</a></span></button></span><span class="plain">(</span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">) {</span>
<span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain">);</span>
&lt;<span class="cwebmacro">Initialise the language to a plain-text state</span> <span class="cwebmacronumber">7.1</span>&gt;<span class="plain">;</span>
<span class="reserved">language_reader_state</span><span class="plain"> </span><span class="identifier">lrs</span><span class="plain">;</span>
@ -329,7 +334,7 @@ adds generic method calls to give effect to the settings in the definition.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Languages::read_definition_line<button class="popup" onclick="togglePopup('usagePopup100')">...<span class="popuptext" id="usagePopup100">Usage of <b>Languages::read_definition_line</b>:<br><a href="#SP7">&#167;7</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">line</span><span class="plain">, </span><span class="reserved">text_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">v_state</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Languages::read_definition_line<button class="popup" onclick="togglePopup('usagePopup99')">...<span class="popuptext" id="usagePopup99">Usage of <b>Languages::read_definition_line</b>:<br><a href="#SP7">&#167;7</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">line</span><span class="plain">, </span><span class="reserved">text_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">v_state</span><span class="plain">) {</span>
<span class="reserved">language_reader_state</span><span class="plain"> *</span><span class="identifier">state</span><span class="plain"> = (</span><span class="reserved">language_reader_state</span><span class="plain"> *) </span><span class="identifier">v_state</span><span class="plain">;</span>
<span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain"> = </span><span class="identifier">state</span><span class="plain">-&gt;</span><span class="element">defining</span><span class="plain">;</span>
@ -548,7 +553,7 @@ represents a complete program.
<p class="inwebparagraph"><a id="SP10"></a><b>&#167;10. </b></p>
<pre class="display">
<span class="reserved">colouring_language_block</span><span class="plain"> *</span><span class="functiontext">Languages::new_block<button class="popup" onclick="togglePopup('usagePopup101')">...<span class="popuptext" id="usagePopup101">Usage of <b>Languages::new_block</b>:<br><a href="#SP8_1">&#167;8.1</a>, <a href="#SP8_2">&#167;8.2</a>, <a href="#SP13_2">&#167;13.2</a></span></button></span><span class="plain">(</span><span class="reserved">colouring_language_block</span><span class="plain"> *</span><span class="identifier">within</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">r</span><span class="plain">) {</span>
<span class="reserved">colouring_language_block</span><span class="plain"> *</span><span class="functiontext">Languages::new_block<button class="popup" onclick="togglePopup('usagePopup100')">...<span class="popuptext" id="usagePopup100">Usage of <b>Languages::new_block</b>:<br><a href="#SP8_1">&#167;8.1</a>, <a href="#SP8_2">&#167;8.2</a>, <a href="#SP13_2">&#167;13.2</a></span></button></span><span class="plain">(</span><span class="reserved">colouring_language_block</span><span class="plain"> *</span><span class="identifier">within</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">r</span><span class="plain">) {</span>
<span class="reserved">colouring_language_block</span><span class="plain"> *</span><span class="identifier">block</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">colouring_language_block</span><span class="plain">);</span>
<span class="identifier">block</span><span class="plain">-&gt;</span><span class="element">rules</span><span class="plain"> = </span><span class="identifier">NEW_LINKED_LIST</span><span class="plain">(</span><span class="reserved">colouring_rule</span><span class="plain">);</span>
<span class="identifier">block</span><span class="plain">-&gt;</span><span class="element">parent</span><span class="plain"> = </span><span class="identifier">within</span><span class="plain">;</span>
@ -615,7 +620,7 @@ little context before it (where available).
<p class="inwebparagraph"><a id="SP12"></a><b>&#167;12. </b></p>
<pre class="display">
<span class="reserved">colouring_rule</span><span class="plain"> *</span><span class="functiontext">Languages::new_rule<button class="popup" onclick="togglePopup('usagePopup102')">...<span class="popuptext" id="usagePopup102">Usage of <b>Languages::new_rule</b>:<br><a href="#SP8_2">&#167;8.2</a>, <a href="#SP13">&#167;13</a></span></button></span><span class="plain">(</span><span class="reserved">colouring_language_block</span><span class="plain"> *</span><span class="identifier">within</span><span class="plain">) {</span>
<span class="reserved">colouring_rule</span><span class="plain"> *</span><span class="functiontext">Languages::new_rule<button class="popup" onclick="togglePopup('usagePopup101')">...<span class="popuptext" id="usagePopup101">Usage of <b>Languages::new_rule</b>:<br><a href="#SP8_2">&#167;8.2</a>, <a href="#SP13">&#167;13</a></span></button></span><span class="plain">(</span><span class="reserved">colouring_language_block</span><span class="plain"> *</span><span class="identifier">within</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">within</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"rule outside block"</span><span class="plain">);</span>
<span class="reserved">colouring_rule</span><span class="plain"> *</span><span class="identifier">rule</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">colouring_rule</span><span class="plain">);</span>
<span class="identifier">ADD_TO_LINKED_LIST</span><span class="plain">(</span><span class="identifier">rule</span><span class="plain">, </span><span class="reserved">colouring_rule</span><span class="plain">, </span><span class="identifier">within</span><span class="plain">-&gt;</span><span class="element">rules</span><span class="plain">);</span>
@ -644,7 +649,7 @@ little context before it (where available).
<p class="inwebparagraph"><a id="SP13"></a><b>&#167;13. </b></p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Languages::parse_rule<button class="popup" onclick="togglePopup('usagePopup103')">...<span class="popuptext" id="usagePopup103">Usage of <b>Languages::parse_rule</b>:<br><a href="#SP8_2">&#167;8.2</a></span></button></span><span class="plain">(</span><span class="reserved">language_reader_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">premiss</span><span class="plain">,</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Languages::parse_rule<button class="popup" onclick="togglePopup('usagePopup102')">...<span class="popuptext" id="usagePopup102">Usage of <b>Languages::parse_rule</b>:<br><a href="#SP8_2">&#167;8.2</a></span></button></span><span class="plain">(</span><span class="reserved">language_reader_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">premiss</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">action</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"><a href="4-pm.html#SP9">Regexp::create_mr</a></span><span class="plain">();</span>
<span class="reserved">colouring_rule</span><span class="plain"> *</span><span class="identifier">rule</span><span class="plain"> = </span><span class="functiontext"><a href="#SP12">Languages::new_rule</a></span><span class="plain">(</span><span class="identifier">state</span><span class="plain">-&gt;</span><span class="element">current_block</span><span class="plain">);</span>
@ -747,7 +752,7 @@ little context before it (where available).
<span class="constant">MEMORY_MANAGEMENT</span>
<span class="plain">} </span><span class="reserved">reserved_word</span><span class="plain">;</span>
<span class="reserved">reserved_word</span><span class="plain"> *</span><span class="functiontext">Languages::reserved<button class="popup" onclick="togglePopup('usagePopup104')">...<span class="popuptext" id="usagePopup104">Usage of <b>Languages::reserved</b>:<br><a href="#SP8_1">&#167;8.1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">C</span><span class="plain">,</span>
<span class="reserved">reserved_word</span><span class="plain"> *</span><span class="functiontext">Languages::reserved<button class="popup" onclick="togglePopup('usagePopup103')">...<span class="popuptext" id="usagePopup103">Usage of <b>Languages::reserved</b>:<br><a href="#SP8_1">&#167;8.1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">C</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">reserved_word</span><span class="plain"> *</span><span class="identifier">rw</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">rw</span><span class="plain">, </span><span class="reserved">reserved_word</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">-&gt;</span><span class="element">reserved_words</span><span class="plain">)</span>
@ -791,7 +796,7 @@ but which are not expressible in the syntax of this file.
</pre>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Languages::colour<button class="popup" onclick="togglePopup('usagePopup105')">...<span class="popuptext" id="usagePopup105">Usage of <b>Languages::colour</b>:<br><a href="#SP8_1">&#167;8.1</a>, <a href="#SP8_2">&#167;8.2</a>, <a href="#SP13_1">&#167;13.1</a>, <a href="#SP13_2">&#167;13.2</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">T</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">int</span><span class="plain"> </span><span class="functiontext">Languages::colour<button class="popup" onclick="togglePopup('usagePopup104')">...<span class="popuptext" id="usagePopup104">Usage of <b>Languages::colour</b>:<br><a href="#SP8_1">&#167;8.1</a>, <a href="#SP8_2">&#167;8.2</a>, <a href="#SP13_1">&#167;13.1</a>, <a href="#SP13_2">&#167;13.2</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">T</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"><a href="4-sm.html#SP13">Str::get_first_char</a></span><span class="plain">(</span><span class="identifier">T</span><span class="plain">) != </span><span class="character">'!'</span><span class="plain">) {</span>
<span class="functiontext"><a href="3-em.html#SP5">Errors::in_text_file</a></span><span class="plain">(</span><span class="string">"colour names must begin with !"</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="constant">PLAIN_COLOUR</span><span class="plain">;</span>
@ -820,7 +825,7 @@ but which are not expressible in the syntax of this file.
</p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Languages::boolean<button class="popup" onclick="togglePopup('usagePopup106')">...<span class="popuptext" id="usagePopup106">Usage of <b>Languages::boolean</b>:<br><a href="#SP8_1">&#167;8.1</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">T</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">int</span><span class="plain"> </span><span class="functiontext">Languages::boolean<button class="popup" onclick="togglePopup('usagePopup105')">...<span class="popuptext" id="usagePopup105">Usage of <b>Languages::boolean</b>:<br><a href="#SP8_1">&#167;8.1</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">T</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"><a href="4-sm.html#SP18">Str::eq</a></span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"true"</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP18">Str::eq</a></span><span class="plain">(</span><span class="identifier">T</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"false"</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="reserved">else</span><span class="plain"> {</span>
@ -838,7 +843,7 @@ literal backslash.
</p>
<pre class="display">
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="functiontext">Languages::text<button class="popup" onclick="togglePopup('usagePopup107')">...<span class="popuptext" id="usagePopup107">Usage of <b>Languages::text</b>:<br><a href="#SP8_1">&#167;8.1</a>, <a href="#SP8_2">&#167;8.2</a>, <a href="#SP13_1">&#167;13.1</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">T</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">int</span><span class="plain"> </span><span class="identifier">allow</span><span class="plain">) {</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="functiontext">Languages::text<button class="popup" onclick="togglePopup('usagePopup106')">...<span class="popuptext" id="usagePopup106">Usage of <b>Languages::text</b>:<br><a href="#SP8_1">&#167;8.1</a>, <a href="#SP8_2">&#167;8.2</a>, <a href="#SP13_1">&#167;13.1</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">T</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">int</span><span class="plain"> </span><span class="identifier">allow</span><span class="plain">) {</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">V</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP2">Str::new</a></span><span class="plain">();</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">T</span><span class="plain">) &gt; </span><span class="constant">0</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">bareword</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">, </span><span class="identifier">spaced</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">, </span><span class="identifier">from</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">to</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">T</span><span class="plain">)-1;</span>
@ -929,7 +934,7 @@ literal backslash.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Languages::regexp<button class="popup" onclick="togglePopup('usagePopup108')">...<span class="popuptext" id="usagePopup108">Usage of <b>Languages::regexp</b>:<br><a href="#SP8_1">&#167;8.1</a>, <a href="#SP8_2">&#167;8.2</a>, <a href="#SP13_1">&#167;13.1</a></span></button></span><span class="plain">(</span><span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">write_to</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">T</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="functiontext">Languages::regexp<button class="popup" onclick="togglePopup('usagePopup107')">...<span class="popuptext" id="usagePopup107">Usage of <b>Languages::regexp</b>:<br><a href="#SP8_1">&#167;8.1</a>, <a href="#SP8_2">&#167;8.2</a>, <a href="#SP13_1">&#167;13.1</a></span></button></span><span class="plain">(</span><span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">write_to</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">T</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="identifier">write_to</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no buffer"</span><span class="plain">);</span>
<span class="identifier">write_to</span><span class="plain">[0] = </span><span class="constant">0</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">T</span><span class="plain">) &gt; </span><span class="constant">0</span><span class="plain">) {</span>
@ -979,12 +984,12 @@ literal backslash.
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Languages::add_to_regexp<button class="popup" onclick="togglePopup('usagePopup109')">...<span class="popuptext" id="usagePopup109">Usage of <b>Languages::add_to_regexp</b>:<br>none</span></button></span><span class="plain">(</span><span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">write_to</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">, </span><span class="identifier">wchar_t</span><span class="plain"> </span><span class="identifier">c</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Languages::add_to_regexp<button class="popup" onclick="togglePopup('usagePopup108')">...<span class="popuptext" id="usagePopup108">Usage of <b>Languages::add_to_regexp</b>:<br>none</span></button></span><span class="plain">(</span><span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">write_to</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">, </span><span class="identifier">wchar_t</span><span class="plain"> </span><span class="identifier">c</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">i</span><span class="plain"> &lt; </span><span class="constant">MAX_ILDF_REGEXP_LENGTH</span><span class="plain">) </span><span class="identifier">write_to</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">++] = </span><span class="identifier">c</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Languages::add_escape_to_regexp<button class="popup" onclick="togglePopup('usagePopup110')">...<span class="popuptext" id="usagePopup110">Usage of <b>Languages::add_escape_to_regexp</b>:<br>none</span></button></span><span class="plain">(</span><span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">write_to</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">, </span><span class="identifier">wchar_t</span><span class="plain"> </span><span class="identifier">c</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Languages::add_escape_to_regexp<button class="popup" onclick="togglePopup('usagePopup109')">...<span class="popuptext" id="usagePopup109">Usage of <b>Languages::add_escape_to_regexp</b>:<br>none</span></button></span><span class="plain">(</span><span class="identifier">wchar_t</span><span class="plain"> *</span><span class="identifier">write_to</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">, </span><span class="identifier">wchar_t</span><span class="plain"> </span><span class="identifier">c</span><span class="plain">) {</span>
<span class="identifier">i</span><span class="plain"> = </span><span class="functiontext"><a href="#SP18">Languages::add_to_regexp</a></span><span class="plain">(</span><span class="identifier">write_to</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">, </span><span class="character">'%'</span><span class="plain">);</span>
<span class="identifier">i</span><span class="plain"> = </span><span class="functiontext"><a href="#SP18">Languages::add_to_regexp</a></span><span class="plain">(</span><span class="identifier">write_to</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">, </span><span class="identifier">c</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">;</span>

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'Types and Functions' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">inweb</a></li><li><a href="index.html#4">Chapter 4: Languages</a></li><li><b>Types and Functions</b></li></ul><p class="purpose">Basic support for languages to recognise structure and function declarations.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">inweb</a></li><li><a href="index.html#4">Chapter 4: Languages</a></li><li><b>Types and Functions</b></li></ul><p class="purpose">Basic support for languages to recognise structure and function declarations.</p>
<ul class="toc"><li><a href="#SP6">&#167;6. Functions</a></li><li><a href="#SP8">&#167;8. Cataloguing</a></li></ul><hr class="tocbar">
@ -47,14 +52,14 @@
<p class="inwebparagraph"></p>
<p class="endnote">The structure language_type is accessed in 3/tw, 4/cl, 5/fm and here.</p>
<p class="endnote">The structure language_type is accessed in 3/tw, 4/cl, 6/cln and here.</p>
<p class="inwebparagraph"><a id="SP2"></a><b>&#167;2. </b></p>
<pre class="display">
<span class="reserved">language_type</span><span class="plain"> *</span><span class="identifier">first_cst_alphabetically</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">language_type</span><span class="plain"> *</span><span class="functiontext">Functions::new_struct<button class="popup" onclick="togglePopup('usagePopup111')">...<span class="popuptext" id="usagePopup111">Usage of <b>Functions::new_struct</b>:<br>C-Like Languages - <a href="4-cl.html#SP2_1">&#167;2.1</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
<span class="reserved">language_type</span><span class="plain"> *</span><span class="functiontext">Functions::new_struct<button class="popup" onclick="togglePopup('usagePopup110')">...<span class="popuptext" id="usagePopup110">Usage of <b>Functions::new_struct</b>:<br>C-Like Languages - <a href="4-cl.html#SP2_1">&#167;2.1</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
<span class="reserved">language_type</span><span class="plain"> *</span><span class="identifier">str</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">language_type</span><span class="plain">);</span>
&lt;<span class="cwebmacro">Initialise the language type structure</span> <span class="cwebmacronumber">2.1</span>&gt;<span class="plain">;</span>
<span class="functiontext"><a href="3-ta.html#SP10">Analyser::mark_reserved_word_at_line</a></span><span class="plain">(</span><span class="identifier">L</span><span class="plain">, </span><span class="identifier">str</span><span class="plain">-&gt;</span><span class="element">structure_name</span><span class="plain">, </span><span class="constant">RESERVED_COLOUR</span><span class="plain">);</span>
@ -160,7 +165,7 @@ affects the reports in the woven code about where structures are used.
<p class="inwebparagraph"><a id="SP4"></a><b>&#167;4. </b></p>
<pre class="display">
<span class="reserved">structure_element</span><span class="plain"> *</span><span class="functiontext">Functions::new_element<button class="popup" onclick="togglePopup('usagePopup112')">...<span class="popuptext" id="usagePopup112">Usage of <b>Functions::new_element</b>:<br>C-Like Languages - <a href="4-cl.html#SP2_1_1">&#167;2.1.1</a></span></button></span><span class="plain">(</span><span class="reserved">language_type</span><span class="plain"> *</span><span class="identifier">str</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">elname</span><span class="plain">,</span>
<span class="reserved">structure_element</span><span class="plain"> *</span><span class="functiontext">Functions::new_element<button class="popup" onclick="togglePopup('usagePopup111')">...<span class="popuptext" id="usagePopup111">Usage of <b>Functions::new_element</b>:<br>C-Like Languages - <a href="4-cl.html#SP2_1_1">&#167;2.1.1</a></span></button></span><span class="plain">(</span><span class="reserved">language_type</span><span class="plain"> *</span><span class="identifier">str</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">elname</span><span class="plain">,</span>
<span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
<span class="functiontext"><a href="3-ta.html#SP10">Analyser::mark_reserved_word_at_line</a></span><span class="plain">(</span><span class="identifier">L</span><span class="plain">, </span><span class="identifier">elname</span><span class="plain">, </span><span class="constant">ELEMENT_COLOUR</span><span class="plain">);</span>
<span class="reserved">structure_element</span><span class="plain"> *</span><span class="identifier">elt</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">structure_element</span><span class="plain">);</span>
@ -179,7 +184,7 @@ affects the reports in the woven code about where structures are used.
<p class="inwebparagraph"><a id="SP5"></a><b>&#167;5. </b></p>
<pre class="display">
<span class="reserved">language_type</span><span class="plain"> *</span><span class="functiontext">Functions::find_structure<button class="popup" onclick="togglePopup('usagePopup113')">...<span class="popuptext" id="usagePopup113">Usage of <b>Functions::find_structure</b>:<br>none</span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
<span class="reserved">language_type</span><span class="plain"> *</span><span class="functiontext">Functions::find_structure<button class="popup" onclick="togglePopup('usagePopup112')">...<span class="popuptext" id="usagePopup112">Usage of <b>Functions::find_structure</b>:<br>none</span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
<span class="reserved">language_type</span><span class="plain"> *</span><span class="identifier">str</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">str</span><span class="plain">, </span><span class="reserved">language_type</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">-&gt;</span><span class="element">language_types</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP18">Str::eq</a></span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">str</span><span class="plain">-&gt;</span><span class="element">structure_name</span><span class="plain">))</span>
@ -211,12 +216,12 @@ affects the reports in the woven code about where structures are used.
<p class="inwebparagraph"></p>
<p class="endnote">The structure language_function is accessed in 3/tw, 4/cl, 5/fm and here.</p>
<p class="endnote">The structure language_function is accessed in 3/tw, 4/cl, 5/hf, 6/cln and here.</p>
<p class="inwebparagraph"><a id="SP7"></a><b>&#167;7. </b></p>
<pre class="display">
<span class="reserved">language_function</span><span class="plain"> *</span><span class="functiontext">Functions::new_function<button class="popup" onclick="togglePopup('usagePopup114')">...<span class="popuptext" id="usagePopup114">Usage of <b>Functions::new_function</b>:<br>ACME Support - <a href="4-as.html#SP4">&#167;4</a>, <a href="4-as.html#SP5">&#167;5</a><br>C-Like Languages - <a href="4-cl.html#SP3_2_2">&#167;3.2.2</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">fname</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
<span class="reserved">language_function</span><span class="plain"> *</span><span class="functiontext">Functions::new_function<button class="popup" onclick="togglePopup('usagePopup113')">...<span class="popuptext" id="usagePopup113">Usage of <b>Functions::new_function</b>:<br>ACME Support - <a href="4-as.html#SP4">&#167;4</a>, <a href="4-as.html#SP5">&#167;5</a><br>C-Like Languages - <a href="4-cl.html#SP3_2_2">&#167;3.2.2</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">fname</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
<span class="reserved">hash_table_entry</span><span class="plain"> *</span><span class="identifier">hte</span><span class="plain"> =</span>
<span class="functiontext"><a href="3-ta.html#SP10">Analyser::mark_reserved_word_at_line</a></span><span class="plain">(</span><span class="identifier">L</span><span class="plain">, </span><span class="identifier">fname</span><span class="plain">, </span><span class="constant">FUNCTION_COLOUR</span><span class="plain">);</span>
<span class="reserved">language_function</span><span class="plain"> *</span><span class="identifier">fn</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">language_function</span><span class="plain">);</span>
@ -250,6 +255,9 @@ part of the function structure. We'll need it when predeclaring the function.
<span class="identifier">fn</span><span class="plain">-&gt;</span><span class="element">call_freely</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="identifier">fn</span><span class="plain">-&gt;</span><span class="element">function_header_at</span><span class="plain"> = </span><span class="identifier">L</span><span class="plain">;</span>
<span class="identifier">fn</span><span class="plain">-&gt;</span><span class="element">usage_described</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="functiontext"><a href="4-sm.html#SP21">Str::eq_wide_string</a></span><span class="plain">(</span><span class="identifier">fname</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"main"</span><span class="plain">)) &amp;&amp;</span>
<span class="plain">(</span><span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">owning_section</span><span class="plain">-&gt;</span><span class="element">sect_language</span><span class="plain">-&gt;</span><span class="element">C_like</span><span class="plain">))</span>
<span class="identifier">fn</span><span class="plain">-&gt;</span><span class="element">usage_described</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="identifier">fn</span><span class="plain">-&gt;</span><span class="element">no_conditionals</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
</pre>
@ -314,7 +322,7 @@ forms of section catalogue.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Functions::catalogue<button class="popup" onclick="togglePopup('usagePopup115')">...<span class="popuptext" id="usagePopup115">Usage of <b>Functions::catalogue</b>:<br>The Analyser - <a href="3-ta.html#SP2">&#167;2</a></span></button></span><span class="plain">(</span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">functions_too</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Functions::catalogue<button class="popup" onclick="togglePopup('usagePopup114')">...<span class="popuptext" id="usagePopup114">Usage of <b>Functions::catalogue</b>:<br>The Analyser - <a href="3-ta.html#SP2">&#167;2</a></span></button></span><span class="plain">(</span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">functions_too</span><span class="plain">) {</span>
<span class="reserved">language_type</span><span class="plain"> *</span><span class="identifier">str</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">str</span><span class="plain">, </span><span class="reserved">language_type</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">str</span><span class="plain">-&gt;</span><span class="element">structure_header_at</span><span class="plain">-&gt;</span><span class="element">owning_section</span><span class="plain"> == </span><span class="identifier">S</span><span class="plain">)</span>

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,7 +30,7 @@
<main role="main">
<!--Weave of 'The Painter' generated by 7-->
<ul class="crumbs"><li><a href="../webs.html">Source</a></li><li><a href="index.html">inweb</a></li><li><a href="index.html#4">Chapter 4: Languages</a></li><li><b>The Painter</b></li></ul><p class="purpose">A simple syntax-colouring engine.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">inweb</a></li><li><a href="index.html#4">Chapter 4: Languages</a></li><li><b>The Painter</b></li></ul><p class="purpose">A simple syntax-colouring engine.</p>
<ul class="toc"><li><a href="#SP7">&#167;7. Painting a file</a></li></ul><hr class="tocbar">
@ -43,7 +48,7 @@ to <code class="display"><span class="extract">Painter::syntax_colour</span></co
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">painter_count</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">;</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Painter::reset_syntax_colouring<button class="popup" onclick="togglePopup('usagePopup170')">...<span class="popuptext" id="usagePopup170">Usage of <b>Painter::reset_syntax_colouring</b>:<br><a href="#SP7">&#167;7</a>, ACME Support - <a href="4-as.html#SP8">&#167;8</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Painter::reset_syntax_colouring<button class="popup" onclick="togglePopup('usagePopup169')">...<span class="popuptext" id="usagePopup169">Usage of <b>Painter::reset_syntax_colouring</b>:<br><a href="#SP7">&#167;7</a>, ACME Support - <a href="4-as.html#SP8">&#167;8</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">) {</span>
<span class="identifier">colouring_state</span><span class="plain"> = </span><span class="constant">PLAIN_COLOUR</span><span class="plain">;</span>
<span class="identifier">painter_count</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">;</span>
<span class="plain">}</span>
@ -74,7 +79,7 @@ its colouring program.
</p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Painter::syntax_colour<button class="popup" onclick="togglePopup('usagePopup171')">...<span class="popuptext" id="usagePopup171">Usage of <b>Painter::syntax_colour</b>:<br><a href="#SP7">&#167;7</a>, ACME Support - <a href="4-as.html#SP8">&#167;8</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">,</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Painter::syntax_colour<button class="popup" onclick="togglePopup('usagePopup170')">...<span class="popuptext" id="usagePopup170">Usage of <b>Painter::syntax_colour</b>:<br><a href="#SP7">&#167;7</a>, ACME Support - <a href="4-as.html#SP8">&#167;8</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">,</span>
<span class="reserved">hash_table</span><span class="plain"> *</span><span class="identifier">HT</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">matter</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">colouring</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">with_comments</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">from</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">, </span><span class="identifier">to</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP8">Str::len</a></span><span class="plain">(</span><span class="identifier">matter</span><span class="plain">) - </span><span class="constant">1</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">with_comments</span><span class="plain">) {</span>
@ -94,7 +99,7 @@ its colouring program.
<span class="reserved">return</span><span class="plain"> </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Painter::syntax_colour_inner<button class="popup" onclick="togglePopup('usagePopup172')">...<span class="popuptext" id="usagePopup172">Usage of <b>Painter::syntax_colour_inner</b>:<br>none</span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">,</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Painter::syntax_colour_inner<button class="popup" onclick="togglePopup('usagePopup171')">...<span class="popuptext" id="usagePopup171">Usage of <b>Painter::syntax_colour_inner</b>:<br>none</span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">,</span>
<span class="reserved">hash_table</span><span class="plain"> *</span><span class="identifier">HT</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">matter</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">colouring</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">from</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">to</span><span class="plain">) {</span>
&lt;<span class="cwebmacro">Spot identifiers, literal text and character constants</span> <span class="cwebmacronumber">2.1</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Spot literal numerical constants</span> <span class="cwebmacronumber">2.2</span>&gt;<span class="plain">;</span>
@ -230,7 +235,7 @@ can contain a <code class="display"><span class="extract">::</span></code> names
</p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Painter::identifier_at<button class="popup" onclick="togglePopup('usagePopup173')">...<span class="popuptext" id="usagePopup173">Usage of <b>Painter::identifier_at</b>:<br><a href="#SP2_1">&#167;2.1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">,</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Painter::identifier_at<button class="popup" onclick="togglePopup('usagePopup172')">...<span class="popuptext" id="usagePopup172">Usage of <b>Painter::identifier_at</b>:<br><a href="#SP2_1">&#167;2.1</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">matter</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">colouring</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">) {</span>
<span class="identifier">wchar_t</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP13">Str::get_at</a></span><span class="plain">(</span><span class="identifier">matter</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">i</span><span class="plain"> &gt; </span><span class="constant">0</span><span class="plain">) &amp;&amp; (</span><span class="functiontext"><a href="4-sm.html#SP13">Str::get_at</a></span><span class="plain">(</span><span class="identifier">colouring</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">-1) == </span><span class="constant">IDENTIFIER_COLOUR</span><span class="plain">)) {</span>
@ -279,7 +284,7 @@ rule across the whole snippet before moving on to the next.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Painter::execute<button class="popup" onclick="togglePopup('usagePopup174')">...<span class="popuptext" id="usagePopup174">Usage of <b>Painter::execute</b>:<br><a href="#SP2_4">&#167;2.4</a>, <a href="#SP6">&#167;6</a></span></button></span><span class="plain">(</span><span class="reserved">hash_table</span><span class="plain"> *</span><span class="identifier">HT</span><span class="plain">, </span><span class="reserved">colouring_language_block</span><span class="plain"> *</span><span class="identifier">block</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">matter</span><span class="plain">,</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Painter::execute<button class="popup" onclick="togglePopup('usagePopup173')">...<span class="popuptext" id="usagePopup173">Usage of <b>Painter::execute</b>:<br><a href="#SP2_4">&#167;2.4</a>, <a href="#SP6">&#167;6</a></span></button></span><span class="plain">(</span><span class="reserved">hash_table</span><span class="plain"> *</span><span class="identifier">HT</span><span class="plain">, </span><span class="reserved">colouring_language_block</span><span class="plain"> *</span><span class="identifier">block</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">matter</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">colouring</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">from</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">to</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">N</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">block</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"no block"</span><span class="plain">);</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">colouring_at_start</span><span class="plain">);</span>
@ -364,7 +369,7 @@ rule across the whole snippet before moving on to the next.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Painter::execute_rule<button class="popup" onclick="togglePopup('usagePopup175')">...<span class="popuptext" id="usagePopup175">Usage of <b>Painter::execute_rule</b>:<br><a href="#SP3">&#167;3</a></span></button></span><span class="plain">(</span><span class="reserved">hash_table</span><span class="plain"> *</span><span class="identifier">HT</span><span class="plain">, </span><span class="reserved">colouring_rule</span><span class="plain"> *</span><span class="identifier">rule</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">matter</span><span class="plain">,</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Painter::execute_rule<button class="popup" onclick="togglePopup('usagePopup174')">...<span class="popuptext" id="usagePopup174">Usage of <b>Painter::execute_rule</b>:<br><a href="#SP3">&#167;3</a></span></button></span><span class="plain">(</span><span class="reserved">hash_table</span><span class="plain"> *</span><span class="identifier">HT</span><span class="plain">, </span><span class="reserved">colouring_rule</span><span class="plain"> *</span><span class="identifier">rule</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">matter</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">colouring</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">from</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">to</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">N</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="#SP5">Painter::satisfies</a></span><span class="plain">(</span><span class="identifier">HT</span><span class="plain">, </span><span class="identifier">rule</span><span class="plain">, </span><span class="identifier">matter</span><span class="plain">, </span><span class="identifier">colouring</span><span class="plain">, </span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">to</span><span class="plain">, </span><span class="identifier">N</span><span class="plain">) == </span><span class="identifier">rule</span><span class="plain">-&gt;</span><span class="element">sense</span><span class="plain">)</span>
<span class="functiontext"><a href="#SP6">Painter::follow</a></span><span class="plain">(</span><span class="identifier">HT</span><span class="plain">, </span><span class="identifier">rule</span><span class="plain">, </span><span class="identifier">matter</span><span class="plain">, </span><span class="identifier">colouring</span><span class="plain">, </span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">to</span><span class="plain">);</span>
@ -387,7 +392,7 @@ rule across the whole snippet before moving on to the next.
</pre>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Painter::satisfies<button class="popup" onclick="togglePopup('usagePopup176')">...<span class="popuptext" id="usagePopup176">Usage of <b>Painter::satisfies</b>:<br><a href="#SP4">&#167;4</a></span></button></span><span class="plain">(</span><span class="reserved">hash_table</span><span class="plain"> *</span><span class="identifier">HT</span><span class="plain">, </span><span class="reserved">colouring_rule</span><span class="plain"> *</span><span class="identifier">rule</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">matter</span><span class="plain">,</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Painter::satisfies<button class="popup" onclick="togglePopup('usagePopup175')">...<span class="popuptext" id="usagePopup175">Usage of <b>Painter::satisfies</b>:<br><a href="#SP4">&#167;4</a></span></button></span><span class="plain">(</span><span class="reserved">hash_table</span><span class="plain"> *</span><span class="identifier">HT</span><span class="plain">, </span><span class="reserved">colouring_rule</span><span class="plain"> *</span><span class="identifier">rule</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">matter</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">colouring</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">from</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">to</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">N</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rule</span><span class="plain">-&gt;</span><span class="identifier">number</span><span class="plain"> &gt; </span><span class="constant">0</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rule</span><span class="plain">-&gt;</span><span class="identifier">number_of</span><span class="plain"> &gt; </span><span class="constant">0</span><span class="plain">) {</span>
@ -455,7 +460,7 @@ rule across the whole snippet before moving on to the next.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Painter::follow<button class="popup" onclick="togglePopup('usagePopup177')">...<span class="popuptext" id="usagePopup177">Usage of <b>Painter::follow</b>:<br><a href="#SP4">&#167;4</a></span></button></span><span class="plain">(</span><span class="reserved">hash_table</span><span class="plain"> *</span><span class="identifier">HT</span><span class="plain">, </span><span class="reserved">colouring_rule</span><span class="plain"> *</span><span class="identifier">rule</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">matter</span><span class="plain">,</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Painter::follow<button class="popup" onclick="togglePopup('usagePopup176')">...<span class="popuptext" id="usagePopup176">Usage of <b>Painter::follow</b>:<br><a href="#SP4">&#167;4</a></span></button></span><span class="plain">(</span><span class="reserved">hash_table</span><span class="plain"> *</span><span class="identifier">HT</span><span class="plain">, </span><span class="reserved">colouring_rule</span><span class="plain"> *</span><span class="identifier">rule</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">matter</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">colouring</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">from</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">to</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rule</span><span class="plain">-&gt;</span><span class="identifier">execute_block</span><span class="plain">)</span>
<span class="functiontext"><a href="#SP3">Painter::execute</a></span><span class="plain">(</span><span class="identifier">HT</span><span class="plain">, </span><span class="identifier">rule</span><span class="plain">-&gt;</span><span class="element">execute_block</span><span class="plain">, </span><span class="identifier">matter</span><span class="plain">, </span><span class="identifier">colouring</span><span class="plain">, </span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">to</span><span class="plain">, </span><span class="constant">0</span><span class="plain">);</span>
@ -495,7 +500,7 @@ rule across the whole snippet before moving on to the next.
<p class="inwebparagraph"><a id="SP7"></a><b>&#167;7. Painting a file. </b></p>
<pre class="display">
<span class="reserved">linked_list</span><span class="plain"> *</span><span class="functiontext">Painter::lines<button class="popup" onclick="togglePopup('usagePopup178')">...<span class="popuptext" id="usagePopup178">Usage of <b>Painter::lines</b>:<br>The Parser - <a href="2-tp.html#SP1_1_6_7_2">&#167;1.1.6.7.2</a></span></button></span><span class="plain">(</span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">) {</span>
<span class="reserved">linked_list</span><span class="plain"> *</span><span class="functiontext">Painter::lines<button class="popup" onclick="togglePopup('usagePopup177')">...<span class="popuptext" id="usagePopup177">Usage of <b>Painter::lines</b>:<br>The Parser - <a href="2-tp.html#SP1_1_6_7_2">&#167;1.1.6.7.2</a></span></button></span><span class="plain">(</span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">) {</span>
<span class="reserved">linked_list</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain"> = </span><span class="identifier">NEW_LINKED_LIST</span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain">);</span>
<span class="functiontext"><a href="4-tf.html#SP5">TextFiles::read</a></span><span class="plain">(</span><span class="identifier">F</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">, </span><span class="string">"unable to read file of textual extract"</span><span class="plain">, </span><span class="constant">TRUE</span><span class="plain">,</span>
<span class="plain">&amp;</span><span class="functiontext"><a href="#SP7">Painter::text_file_helper</a></span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">);</span>
@ -517,12 +522,12 @@ rule across the whole snippet before moving on to the next.
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">L</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Painter::text_file_helper<button class="popup" onclick="togglePopup('usagePopup179')">...<span class="popuptext" id="usagePopup179">Usage of <b>Painter::text_file_helper</b>:<br>none</span></button></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">void</span><span class="plain"> </span><span class="functiontext">Painter::text_file_helper<button class="popup" onclick="togglePopup('usagePopup178')">...<span class="popuptext" id="usagePopup178">Usage of <b>Painter::text_file_helper</b>:<br>none</span></button></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">linked_list</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain"> = (</span><span class="reserved">linked_list</span><span class="plain"> *) </span><span class="identifier">state</span><span class="plain">;</span>
<span class="identifier">ADD_TO_LINKED_LIST</span><span class="plain">(</span><span class="functiontext"><a href="4-sm.html#SP3">Str::duplicate</a></span><span class="plain">(</span><span class="identifier">text</span><span class="plain">), </span><span class="reserved">text_stream</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Painter::colour_file<button class="popup" onclick="togglePopup('usagePopup180')">...<span class="popuptext" id="usagePopup180">Usage of <b>Painter::colour_file</b>:<br>Program Control - <a href="1-pc.html#SP7_3">&#167;7.3</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">to</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">coloured</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Painter::colour_file<button class="popup" onclick="togglePopup('usagePopup179')">...<span class="popuptext" id="usagePopup179">Usage of <b>Painter::colour_file</b>:<br>Program Control - <a href="1-pc.html#SP7_3">&#167;7.3</a></span></button></span><span class="plain">(</span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">, </span><span class="reserved">filename</span><span class="plain"> *</span><span class="identifier">F</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">to</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">coloured</span><span class="plain">) {</span>
<span class="reserved">linked_list</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain"> = </span><span class="functiontext"><a href="#SP7">Painter::lines</a></span><span class="plain">(</span><span class="identifier">F</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">pl</span><span class="plain">) </span><span class="functiontext"><a href="#SP1">Painter::reset_syntax_colouring</a></span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">;</span>

View file

@ -10,7 +10,7 @@
</head>
<body>
<nav role="navigation">
<h1><a href="../webs.html">Sources</a></h1>
<h1><a href="../webs.html">Inweb Source</a></h1>
<ul>
<li><a href="../inweb/index.html">inweb</a></li>
</ul>
@ -18,6 +18,11 @@
<ul>
<li><a href="../foundation-module/index.html">foundation-module</a></li>
<li><a href="../foundation-test/index.html">foundation-test</a></li>
</ul>
<h2>Example Webs</h2>
<ul>
<li><a href="../goldbach/index.html">goldbach</a></li>
<li><a href="../twinprimes/twinprimes.html">twinprimes</a></li>
</ul>
@ -25,9 +30,9 @@
<main role="main">
<!--Weave of 'Format Methods' 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#5">Chapter 5: Formats</a></li><li><b>Format Methods</b></li></ul><p class="purpose">To characterise the relevant differences in behaviour between the various weaving formats offered, such as HTML, ePub, or TeX.</p>
<ul class="crumbs"><li><a href="../webs.html">Home</a></li><li><a href="index.html">inweb</a></li><li><a href="index.html#5">Chapter 5: Formats</a></li><li><b>Format Methods</b></li></ul><p class="purpose">To characterise the relevant differences in behaviour between the various weaving formats offered, such as HTML, ePub, or TeX.</p>
<ul class="toc"><li><a href="#SP1">&#167;1. Formats</a></li><li><a href="#SP3">&#167;3. Creation</a></li><li><a href="#SP4">&#167;4. Methods</a></li><li><a href="#SP34">&#167;34. Post-processing</a></li></ul><hr class="tocbar">
<ul class="toc"><li><a href="#SP1">&#167;1. Formats</a></li><li><a href="#SP3">&#167;3. Creation</a></li><li><a href="#SP4">&#167;4. Methods</a></li><li><a href="#SP33">&#167;33. Post-processing</a></li></ul><hr class="tocbar">
<p class="inwebparagraph"><a id="SP1"></a><b>&#167;1. Formats. </b>Exactly as in the previous chapter, each format expresses its behaviour
through optional method calls.
@ -41,7 +46,7 @@ through optional method calls.
<span class="constant">MEMORY_MANAGEMENT</span>
<span class="plain">} </span><span class="reserved">weave_format</span><span class="plain">;</span>
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="functiontext">Formats::create_weave_format<button class="popup" onclick="togglePopup('usagePopup208')">...<span class="popuptext" id="usagePopup208">Usage of <b>Formats::create_weave_format</b>:<br>Plain Text Format - <a href="5-ptf.html#SP1">&#167;1</a><br>TeX Format - <a href="5-tf.html#SP1_1">&#167;1.1</a>, <a href="5-tf.html#SP1_2">&#167;1.2</a>, <a href="5-tf.html#SP1_3">&#167;1.3</a><br>HTML Formats - <a href="5-hf.html#SP1_1">&#167;1.1</a>, <a href="5-hf.html#SP1_2">&#167;1.2</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">ext</span><span class="plain">) {</span>
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="functiontext">Formats::create_weave_format<button class="popup" onclick="togglePopup('usagePopup207')">...<span class="popuptext" id="usagePopup207">Usage of <b>Formats::create_weave_format</b>:<br>Plain Text Format - <a href="5-ptf.html#SP1">&#167;1</a><br>TeX Format - <a href="5-tf.html#SP1_1">&#167;1.1</a>, <a href="5-tf.html#SP1_2">&#167;1.2</a>, <a href="5-tf.html#SP1_3">&#167;1.3</a><br>HTML Formats - <a href="5-hf.html#SP1_1">&#167;1.1</a>, <a href="5-hf.html#SP1_2">&#167;1.2</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">ext</span><span class="plain">) {</span>
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">CREATE</span><span class="plain">(</span><span class="reserved">weave_format</span><span class="plain">);</span>
<span class="identifier">wf</span><span class="plain">-&gt;</span><span class="element">format_name</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP3">Str::duplicate</a></span><span class="plain">(</span><span class="identifier">name</span><span class="plain">);</span>
<span class="identifier">wf</span><span class="plain">-&gt;</span><span class="element">woven_extension</span><span class="plain"> = </span><span class="functiontext"><a href="4-sm.html#SP3">Str::duplicate</a></span><span class="plain">(</span><span class="identifier">ext</span><span class="plain">);</span>
@ -49,7 +54,7 @@ through optional method calls.
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">wf</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="functiontext">Formats::find_by_name<button class="popup" onclick="togglePopup('usagePopup209')">...<span class="popuptext" id="usagePopup209">Usage of <b>Formats::find_by_name</b>:<br><a href="#SP36">&#167;36</a>, Patterns - <a href="1-ptt.html#SP3_2">&#167;3.2</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="functiontext">Formats::find_by_name<button class="popup" onclick="togglePopup('usagePopup208')">...<span class="popuptext" id="usagePopup208">Usage of <b>Formats::find_by_name</b>:<br><a href="#SP35">&#167;35</a>, Patterns - <a href="1-ptt.html#SP3_2">&#167;3.2</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">name</span><span class="plain">) {</span>
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP18">Str::eq_insensitive</a></span><span class="plain">(</span><span class="identifier">name</span><span class="plain">, </span><span class="identifier">wf</span><span class="plain">-&gt;</span><span class="element">format_name</span><span class="plain">))</span>
@ -69,7 +74,7 @@ stage produces, even though we will later end up with a <code class="display"><s
</p>
<pre class="display">
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="functiontext">Formats::file_extension<button class="popup" onclick="togglePopup('usagePopup210')">...<span class="popuptext" id="usagePopup210">Usage of <b>Formats::file_extension</b>:<br>The Swarm - <a href="3-ts.html#SP2_2_1">&#167;2.2.1</a><br>The Indexer - <a href="3-ti.html#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">) {</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="functiontext">Formats::file_extension<button class="popup" onclick="togglePopup('usagePopup209')">...<span class="popuptext" id="usagePopup209">Usage of <b>Formats::file_extension</b>:<br>The Swarm - <a href="3-ts.html#SP2_2_1">&#167;2.2.1</a><br>The Indexer - <a href="3-ti.html#SP1">&#167;1</a></span></button></span><span class="plain">(</span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">) {</span>
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">wf</span><span class="plain">-&gt;</span><span class="identifier">woven_extension</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
@ -80,7 +85,7 @@ stage produces, even though we will later end up with a <code class="display"><s
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::create_weave_formats<button class="popup" onclick="togglePopup('usagePopup211')">...<span class="popuptext" id="usagePopup211">Usage of <b>Formats::create_weave_formats</b>:<br>Program Control - <a href="1-pc.html#SP6_1">&#167;6.1</a></span></button></span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::create_weave_formats<button class="popup" onclick="togglePopup('usagePopup210')">...<span class="popuptext" id="usagePopup210">Usage of <b>Formats::create_weave_formats</b>:<br>Program Control - <a href="1-pc.html#SP6_1">&#167;6.1</a></span></button></span><span class="plain">(</span><span class="reserved">void</span><span class="plain">) {</span>
<span class="functiontext"><a href="5-tf.html#SP1">TeX::create</a></span><span class="plain">();</span>
<span class="functiontext"><a href="5-ptf.html#SP1">PlainText::create</a></span><span class="plain">();</span>
<span class="functiontext"><a href="5-hf.html#SP1">HTMLFormat::create</a></span><span class="plain">();</span>
@ -111,13 +116,13 @@ this is helpful for EPUB weaving.
<pre class="display">
<span class="identifier">IMETHOD_TYPE</span><span class="plain">(</span><span class="constant">BEGIN_WEAVING_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">weave_pattern</span><span class="plain"> *</span><span class="identifier">pattern</span><span class="plain">)</span>
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">END_WEAVING_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">weave_pattern</span><span class="plain"> *</span><span class="identifier">pattern</span><span class="plain">)</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Formats::begin_weaving<button class="popup" onclick="togglePopup('usagePopup212')">...<span class="popuptext" id="usagePopup212">Usage of <b>Formats::begin_weaving</b>:<br>Program Control - <a href="1-pc.html#SP7_4_3">&#167;7.4.3</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">weave_pattern</span><span class="plain"> *</span><span class="identifier">pattern</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Formats::begin_weaving<button class="popup" onclick="togglePopup('usagePopup211')">...<span class="popuptext" id="usagePopup211">Usage of <b>Formats::begin_weaving</b>:<br>Program Control - <a href="1-pc.html#SP7_4_3">&#167;7.4.3</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">weave_pattern</span><span class="plain"> *</span><span class="identifier">pattern</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="identifier">IMETHOD_CALL</span><span class="plain">(</span><span class="identifier">rv</span><span class="plain">, </span><span class="identifier">pattern</span><span class="plain">-&gt;</span><span class="element">pattern_format</span><span class="plain">, </span><span class="constant">BEGIN_WEAVING_FOR_MTID</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">pattern</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rv</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain">;</span>
<span class="reserved">return</span><span class="plain"> </span><span class="constant">SWARM_OFF_SWM</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::end_weaving<button class="popup" onclick="togglePopup('usagePopup213')">...<span class="popuptext" id="usagePopup213">Usage of <b>Formats::end_weaving</b>:<br>Program Control - <a href="1-pc.html#SP7_4_3">&#167;7.4.3</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">weave_pattern</span><span class="plain"> *</span><span class="identifier">pattern</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::end_weaving<button class="popup" onclick="togglePopup('usagePopup212')">...<span class="popuptext" id="usagePopup212">Usage of <b>Formats::end_weaving</b>:<br>Program Control - <a href="1-pc.html#SP7_4_3">&#167;7.4.3</a></span></button></span><span class="plain">(</span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">weave_pattern</span><span class="plain"> *</span><span class="identifier">pattern</span><span class="plain">) {</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">pattern</span><span class="plain">-&gt;</span><span class="element">pattern_format</span><span class="plain">, </span><span class="constant">END_WEAVING_FOR_MTID</span><span class="plain">, </span><span class="identifier">W</span><span class="plain">, </span><span class="identifier">pattern</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
@ -140,7 +145,7 @@ HTML comment.
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">TOP_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">comment</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::top<button class="popup" onclick="togglePopup('usagePopup214')">...<span class="popuptext" id="usagePopup214">Usage of <b>Formats::top</b>:<br>The Weaver - <a href="3-tw.html#SP1_1">&#167;1.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">comment</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::top<button class="popup" onclick="togglePopup('usagePopup213')">...<span class="popuptext" id="usagePopup213">Usage of <b>Formats::top</b>:<br>The Weaver - <a href="3-tw.html#SP1_1">&#167;1.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">comment</span><span class="plain">) {</span>
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">TOP_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">comment</span><span class="plain">);</span>
<span class="plain">}</span>
@ -167,7 +172,7 @@ It is called with four possible values of <code class="display"><span class="ext
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">TOC_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">stage</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text1</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text2</span><span class="plain">, </span><span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::toc<button class="popup" onclick="togglePopup('usagePopup215')">...<span class="popuptext" id="usagePopup215">Usage of <b>Formats::toc</b>:<br>The Weaver - <a href="3-tw.html#SP4">&#167;4</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">stage</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text1</span><span class="plain">,</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::toc<button class="popup" onclick="togglePopup('usagePopup214')">...<span class="popuptext" id="usagePopup214">Usage of <b>Formats::toc</b>:<br>The Weaver - <a href="3-tw.html#SP4">&#167;4</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">stage</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text1</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text2</span><span class="plain">, </span><span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">) {</span>
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">TOC_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">stage</span><span class="plain">, </span><span class="identifier">text1</span><span class="plain">, </span><span class="identifier">text2</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">);</span>
@ -188,7 +193,7 @@ interstitial material. This is how:
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">CHAPTER_TP_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">chapter</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::chapter_title_page<button class="popup" onclick="togglePopup('usagePopup216')">...<span class="popuptext" id="usagePopup216">Usage of <b>Formats::chapter_title_page</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_10">&#167;1.3.4.1.10</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">chapter</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::chapter_title_page<button class="popup" onclick="togglePopup('usagePopup215')">...<span class="popuptext" id="usagePopup215">Usage of <b>Formats::chapter_title_page</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_10">&#167;1.3.4.1.10</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">chapter</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">) {</span>
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">CHAPTER_TP_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">);</span>
<span class="plain">}</span>
@ -219,7 +224,7 @@ some supplementary text, used in some cases for running heads.
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">SUBHEADING_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">level</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">heading</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">addendum</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::subheading<button class="popup" onclick="togglePopup('usagePopup217')">...<span class="popuptext" id="usagePopup217">Usage of <b>Formats::subheading</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_3">&#167;1.3.4.1.3</a>, <a href="3-tw.html#SP1_3_4_1_6">&#167;1.3.4.1.6</a>, <a href="3-tw.html#SP1_3_4_1_10_3_1">&#167;1.3.4.1.10.3.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">level</span><span class="plain">,</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::subheading<button class="popup" onclick="togglePopup('usagePopup216')">...<span class="popuptext" id="usagePopup216">Usage of <b>Formats::subheading</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_3">&#167;1.3.4.1.3</a>, <a href="3-tw.html#SP1_3_4_1_6">&#167;1.3.4.1.6</a>, <a href="3-tw.html#SP1_3_4_1_10_3_1">&#167;1.3.4.1.10.3.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">level</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">heading</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">addendum</span><span class="plain">) {</span>
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">SUBHEADING_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">level</span><span class="plain">, </span><span class="identifier">heading</span><span class="plain">, </span><span class="identifier">addendum</span><span class="plain">);</span>
@ -255,7 +260,7 @@ the benefit of the TeX format, and all other formats can leave them be.
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">PARAGRAPH_HEADING_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">,</span>
<span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">TeX_macro</span><span class="plain">, </span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">heading_text</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">chaptermark</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">sectionmark</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">weight</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::paragraph_heading<button class="popup" onclick="togglePopup('usagePopup218')">...<span class="popuptext" id="usagePopup218">Usage of <b>Formats::paragraph_heading</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_10">&#167;1.3.4.1.10</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">TeX_macro</span><span class="plain">,</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::paragraph_heading<button class="popup" onclick="togglePopup('usagePopup217')">...<span class="popuptext" id="usagePopup217">Usage of <b>Formats::paragraph_heading</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_10">&#167;1.3.4.1.10</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">TeX_macro</span><span class="plain">,</span>
<span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">P</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">heading_text</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">chaptermark</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">sectionmark</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">weight</span><span class="plain">) {</span>
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
@ -283,7 +288,7 @@ been syntax-coloured; there can also be some indentation, and perhaps even some
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">colouring</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">concluding_comment</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">starts</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">finishes</span><span class="plain">,</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">code_mode</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">linked</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::source_code<button class="popup" onclick="togglePopup('usagePopup219')">...<span class="popuptext" id="usagePopup219">Usage of <b>Formats::source_code</b>:<br><a href="#SP11">&#167;11</a>, The Weaver - <a href="3-tw.html#SP1_3_4_1_8_4">&#167;1.3.4.1.8.4</a>, <a href="3-tw.html#SP1_3_4_1_9">&#167;1.3.4.1.9</a>, <a href="3-tw.html#SP1_3_4_1_9_6">&#167;1.3.4.1.9.6</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">tab_stops_of_indentation</span><span class="plain">,</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::source_code<button class="popup" onclick="togglePopup('usagePopup218')">...<span class="popuptext" id="usagePopup218">Usage of <b>Formats::source_code</b>:<br><a href="#SP11">&#167;11</a>, The Weaver - <a href="3-tw.html#SP1_3_4_1_8_4">&#167;1.3.4.1.8.4</a>, <a href="3-tw.html#SP1_3_4_1_9">&#167;1.3.4.1.9</a>, <a href="3-tw.html#SP1_3_4_1_9_6">&#167;1.3.4.1.9.6</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">tab_stops_of_indentation</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">prefatory</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">matter</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">colouring</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">concluding_comment</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">starts</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">finishes</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">code_mode</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">linked</span><span class="plain">) {</span>
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
@ -306,7 +311,7 @@ drably in a uniform <code class="display"><span class="extract">EXTRACT_COLOUR</
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">INLINE_CODE_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">pre</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::source_fragment<button class="popup" onclick="togglePopup('usagePopup220')">...<span class="popuptext" id="usagePopup220">Usage of <b>Formats::source_fragment</b>:<br><a href="#SP27">&#167;27</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">fragment</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::source_fragment<button class="popup" onclick="togglePopup('usagePopup219')">...<span class="popuptext" id="usagePopup219">Usage of <b>Formats::source_fragment</b>:<br><a href="#SP27">&#167;27</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">fragment</span><span class="plain">) {</span>
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">INLINE_CODE_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="constant">TRUE</span><span class="plain">);</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">colouring</span><span class="plain">);</span>
@ -330,7 +335,7 @@ drably in a uniform <code class="display"><span class="extract">EXTRACT_COLOUR</
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">URL_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">url</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">content</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">external</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::url<button class="popup" onclick="togglePopup('usagePopup221')">...<span class="popuptext" id="usagePopup221">Usage of <b>Formats::url</b>:<br><a href="#SP27_2">&#167;27.2</a>, <a href="#SP27_4_1">&#167;27.4.1</a>, HTML Formats - <a href="5-hf.html#SP10_1">&#167;10.1</a>, <a href="5-hf.html#SP10_2_1">&#167;10.2.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">url</span><span class="plain">,</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::url<button class="popup" onclick="togglePopup('usagePopup220')">...<span class="popuptext" id="usagePopup220">Usage of <b>Formats::url</b>:<br><a href="#SP27_2">&#167;27.2</a>, <a href="#SP27_4_1">&#167;27.4.1</a>, HTML Formats - <a href="5-hf.html#SP10_1">&#167;10.1</a>, <a href="5-hf.html#SP10_2_1">&#167;10.2.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">url</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">content</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">external</span><span class="plain">) {</span>
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="2-mth.html#SP6">Methods::provided</a></span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">-&gt;</span><span class="identifier">methods</span><span class="plain">, </span><span class="constant">URL_FOR_MTID</span><span class="plain">)) {</span>
@ -354,7 +359,7 @@ drably in a uniform <code class="display"><span class="extract">EXTRACT_COLOUR</
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">FOOTNOTE_CUE_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">cue</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::footnote_cue<button class="popup" onclick="togglePopup('usagePopup222')">...<span class="popuptext" id="usagePopup222">Usage of <b>Formats::footnote_cue</b>:<br><a href="#SP27_3">&#167;27.3</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">cue</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::footnote_cue<button class="popup" onclick="togglePopup('usagePopup221')">...<span class="popuptext" id="usagePopup221">Usage of <b>Formats::footnote_cue</b>:<br><a href="#SP27_3">&#167;27.3</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">cue</span><span class="plain">) {</span>
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="2-mth.html#SP6">Methods::provided</a></span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">-&gt;</span><span class="identifier">methods</span><span class="plain">, </span><span class="constant">FOOTNOTE_CUE_FOR_MTID</span><span class="plain">)) {</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">FOOTNOTE_CUE_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">cue</span><span class="plain">);</span>
@ -377,7 +382,7 @@ drably in a uniform <code class="display"><span class="extract">EXTRACT_COLOUR</
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">BEGIN_FOOTNOTE_TEXT_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">cue</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::begin_footnote_text<button class="popup" onclick="togglePopup('usagePopup223')">...<span class="popuptext" id="usagePopup223">Usage of <b>Formats::begin_footnote_text</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_8_5">&#167;1.3.4.1.8.5</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">cue</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::begin_footnote_text<button class="popup" onclick="togglePopup('usagePopup222')">...<span class="popuptext" id="usagePopup222">Usage of <b>Formats::begin_footnote_text</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_8_5">&#167;1.3.4.1.8.5</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">cue</span><span class="plain">) {</span>
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="2-mth.html#SP6">Methods::provided</a></span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">-&gt;</span><span class="identifier">methods</span><span class="plain">, </span><span class="constant">BEGIN_FOOTNOTE_TEXT_FOR_MTID</span><span class="plain">)) {</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">BEGIN_FOOTNOTE_TEXT_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">cue</span><span class="plain">);</span>
@ -401,7 +406,7 @@ in pairs and do not nest.
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">END_FOOTNOTE_TEXT_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">cue</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::end_footnote_text<button class="popup" onclick="togglePopup('usagePopup224')">...<span class="popuptext" id="usagePopup224">Usage of <b>Formats::end_footnote_text</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_8_5_1">&#167;1.3.4.1.8.5.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">cue</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::end_footnote_text<button class="popup" onclick="togglePopup('usagePopup223')">...<span class="popuptext" id="usagePopup223">Usage of <b>Formats::end_footnote_text</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_8_5_1">&#167;1.3.4.1.8.5.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">cue</span><span class="plain">) {</span>
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="2-mth.html#SP6">Methods::provided</a></span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">-&gt;</span><span class="identifier">methods</span><span class="plain">, </span><span class="constant">END_FOOTNOTE_TEXT_FOR_MTID</span><span class="plain">)) {</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">END_FOOTNOTE_TEXT_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">cue</span><span class="plain">);</span>
@ -425,7 +430,7 @@ a convenience for Inform 7 code commentary.
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">DISPLAY_LINE_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">,</span>
<span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">from</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::display_line<button class="popup" onclick="togglePopup('usagePopup225')">...<span class="popuptext" id="usagePopup225">Usage of <b>Formats::display_line</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_8_1">&#167;1.3.4.1.8.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">from</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::display_line<button class="popup" onclick="togglePopup('usagePopup224')">...<span class="popuptext" id="usagePopup224">Usage of <b>Formats::display_line</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_8_1">&#167;1.3.4.1.8.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">from</span><span class="plain">) {</span>
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">DISPLAY_LINE_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">from</span><span class="plain">);</span>
<span class="plain">}</span>
@ -457,7 +462,7 @@ indentation but not weave any bracketed marker.
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">ITEM_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">depth</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">label</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::item<button class="popup" onclick="togglePopup('usagePopup226')">...<span class="popuptext" id="usagePopup226">Usage of <b>Formats::item</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_8_3">&#167;1.3.4.1.8.3</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">depth</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">label</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::item<button class="popup" onclick="togglePopup('usagePopup225')">...<span class="popuptext" id="usagePopup225">Usage of <b>Formats::item</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_8_3">&#167;1.3.4.1.8.3</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">depth</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">label</span><span class="plain">) {</span>
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">ITEM_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">depth</span><span class="plain">, </span><span class="identifier">label</span><span class="plain">);</span>
<span class="plain">}</span>
@ -476,7 +481,7 @@ very old webs nowadays. New formats really needn't implement this.
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">BAR_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::bar<button class="popup" onclick="togglePopup('usagePopup227')">...<span class="popuptext" id="usagePopup227">Usage of <b>Formats::bar</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_7">&#167;1.3.4.1.7</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::bar<button class="popup" onclick="togglePopup('usagePopup226')">...<span class="popuptext" id="usagePopup226">Usage of <b>Formats::bar</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_7">&#167;1.3.4.1.7</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">) {</span>
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">BAR_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">);</span>
<span class="plain">}</span>
@ -497,7 +502,7 @@ of the web.
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">FIGURE_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">figname</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">w</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">h</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::figure<button class="popup" onclick="togglePopup('usagePopup228')">...<span class="popuptext" id="usagePopup228">Usage of <b>Formats::figure</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_2_1">&#167;1.3.4.1.2.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">figname</span><span class="plain">,</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::figure<button class="popup" onclick="togglePopup('usagePopup227')">...<span class="popuptext" id="usagePopup227">Usage of <b>Formats::figure</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_2_1">&#167;1.3.4.1.2.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">figname</span><span class="plain">,</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">w</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">h</span><span class="plain">, </span><span class="reserved">programming_language</span><span class="plain"> *</span><span class="identifier">pl</span><span class="plain">) {</span>
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">FIGURE_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">figname</span><span class="plain">, </span><span class="identifier">w</span><span class="plain">, </span><span class="identifier">h</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">);</span>
@ -519,7 +524,7 @@ that service uses to identify the video/audio in question.
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">EMBED_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">service</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">ID</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::embed<button class="popup" onclick="togglePopup('usagePopup229')">...<span class="popuptext" id="usagePopup229">Usage of <b>Formats::embed</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_2_2">&#167;1.3.4.1.2.2</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">service</span><span class="plain">,</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::embed<button class="popup" onclick="togglePopup('usagePopup228')">...<span class="popuptext" id="usagePopup228">Usage of <b>Formats::embed</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_2_2">&#167;1.3.4.1.2.2</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">service</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">ID</span><span class="plain">) {</span>
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">EMBED_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">service</span><span class="plain">, </span><span class="identifier">ID</span><span class="plain">);</span>
@ -541,7 +546,7 @@ thing is to render some sort of equals sign after it, if so.
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">PARA_MACRO_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
<span class="reserved">para_macro</span><span class="plain"> *</span><span class="identifier">pmac</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">defn</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::para_macro<button class="popup" onclick="togglePopup('usagePopup230')">...<span class="popuptext" id="usagePopup230">Usage of <b>Formats::para_macro</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_9_6">&#167;1.3.4.1.9.6</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">para_macro</span><span class="plain"> *</span><span class="identifier">pmac</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">defn</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::para_macro<button class="popup" onclick="togglePopup('usagePopup229')">...<span class="popuptext" id="usagePopup229">Usage of <b>Formats::para_macro</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_9_6">&#167;1.3.4.1.9.6</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">para_macro</span><span class="plain"> *</span><span class="identifier">pmac</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">defn</span><span class="plain">) {</span>
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">PARA_MACRO_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">pmac</span><span class="plain">, </span><span class="identifier">defn</span><span class="plain">);</span>
<span class="plain">}</span>
@ -561,7 +566,7 @@ at that), so no harm is done if there's no visual indication here.
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">PAGEBREAK_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::pagebreak<button class="popup" onclick="togglePopup('usagePopup231')">...<span class="popuptext" id="usagePopup231">Usage of <b>Formats::pagebreak</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_2">&#167;1.3.4.1.2</a>, <a href="3-tw.html#SP1_3_4_1_10_1">&#167;1.3.4.1.10.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::pagebreak<button class="popup" onclick="togglePopup('usagePopup230')">...<span class="popuptext" id="usagePopup230">Usage of <b>Formats::pagebreak</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_2">&#167;1.3.4.1.2</a>, <a href="3-tw.html#SP1_3_4_1_10_1">&#167;1.3.4.1.10.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">) {</span>
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">PAGEBREAK_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">);</span>
<span class="plain">}</span>
@ -583,7 +588,7 @@ information.
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">BLANK_LINE_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">in_comment</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::blank_line<button class="popup" onclick="togglePopup('usagePopup232')">...<span class="popuptext" id="usagePopup232">Usage of <b>Formats::blank_line</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_8_2">&#167;1.3.4.1.8.2</a>, <a href="3-tw.html#SP1_3_4_1_9_2">&#167;1.3.4.1.9.2</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">in_comment</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::blank_line<button class="popup" onclick="togglePopup('usagePopup231')">...<span class="popuptext" id="usagePopup231">Usage of <b>Formats::blank_line</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_8_2">&#167;1.3.4.1.8.2</a>, <a href="3-tw.html#SP1_3_4_1_9_2">&#167;1.3.4.1.9.2</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">in_comment</span><span class="plain">) {</span>
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">BLANK_LINE_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">in_comment</span><span class="plain">);</span>
<span class="plain">}</span>
@ -604,7 +609,7 @@ the definitions.
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">AFTER_DEFINITIONS_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::after_definitions<button class="popup" onclick="togglePopup('usagePopup233')">...<span class="popuptext" id="usagePopup233">Usage of <b>Formats::after_definitions</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_9">&#167;1.3.4.1.9</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::after_definitions<button class="popup" onclick="togglePopup('usagePopup232')">...<span class="popuptext" id="usagePopup232">Usage of <b>Formats::after_definitions</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_9">&#167;1.3.4.1.9</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">) {</span>
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">AFTER_DEFINITIONS_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">);</span>
<span class="plain">}</span>
@ -627,7 +632,7 @@ weaver and turned into something else (such as list items).
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">CHANGE_MATERIAL_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">,</span>
<span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">old_material</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">new_material</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">content</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">plainly</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::change_material<button class="popup" onclick="togglePopup('usagePopup234')">...<span class="popuptext" id="usagePopup234">Usage of <b>Formats::change_material</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_1">&#167;1.3.4.1.1</a>, <a href="3-tw.html#SP1_3_4_1_8_3">&#167;1.3.4.1.8.3</a>, <a href="3-tw.html#SP1_3_4_1_8_4">&#167;1.3.4.1.8.4</a>, <a href="3-tw.html#SP1_3_4_1_9_1">&#167;1.3.4.1.9.1</a>, <a href="3-tw.html#SP1_3_4_2">&#167;1.3.4.2</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::change_material<button class="popup" onclick="togglePopup('usagePopup233')">...<span class="popuptext" id="usagePopup233">Usage of <b>Formats::change_material</b>:<br>The Weaver - <a href="3-tw.html#SP1_3_4_1_1">&#167;1.3.4.1.1</a>, <a href="3-tw.html#SP1_3_4_1_8_3">&#167;1.3.4.1.8.3</a>, <a href="3-tw.html#SP1_3_4_1_8_4">&#167;1.3.4.1.8.4</a>, <a href="3-tw.html#SP1_3_4_1_9_1">&#167;1.3.4.1.9.1</a>, <a href="3-tw.html#SP1_3_4_2">&#167;1.3.4.2</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">old_material</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">new_material</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">content</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">plainly</span><span class="plain">) {</span>
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">CHANGE_MATERIAL_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">old_material</span><span class="plain">, </span><span class="identifier">new_material</span><span class="plain">,</span>
@ -651,7 +656,7 @@ nothing.
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">CHANGE_COLOUR_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">,</span>
<span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">col</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">in_code</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::change_colour<button class="popup" onclick="togglePopup('usagePopup235')">...<span class="popuptext" id="usagePopup235">Usage of <b>Formats::change_colour</b>:<br>TeX Format - <a href="5-tf.html#SP8_2">&#167;8.2</a>, <a href="5-tf.html#SP15">&#167;15</a><br>HTML Formats - <a href="5-hf.html#SP10_3">&#167;10.3</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">col</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">in_code</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::change_colour<button class="popup" onclick="togglePopup('usagePopup234')">...<span class="popuptext" id="usagePopup234">Usage of <b>Formats::change_colour</b>:<br>TeX Format - <a href="5-tf.html#SP8_2">&#167;8.2</a>, <a href="5-tf.html#SP15">&#167;15</a><br>HTML Formats - <a href="5-hf.html#SP10_3">&#167;10.3</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">col</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">in_code</span><span class="plain">) {</span>
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">CHANGE_COLOUR_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">col</span><span class="plain">, </span><span class="identifier">in_code</span><span class="plain">);</span>
<span class="plain">}</span>
@ -666,14 +671,14 @@ as appropriate.
</p>
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::text<button class="popup" onclick="togglePopup('usagePopup236')">...<span class="popuptext" id="usagePopup236">Usage of <b>Formats::text</b>:<br>Tags - <a href="2-tgs.html#SP7">&#167;7</a>, <a href="2-tgs.html#SP7_1">&#167;7.1</a><br>The Weaver - <a href="3-tw.html#SP1_3_4_1_8">&#167;1.3.4.1.8</a>, <a href="3-tw.html#SP1_3_4_1_8_4">&#167;1.3.4.1.8.4</a>, <a href="3-tw.html#SP1_3_4_1_10_5">&#167;1.3.4.1.10.5</a>, <a href="3-tw.html#SP2_1">&#167;2.1</a>, <a href="3-tw.html#SP2_3">&#167;2.3</a>, <a href="3-tw.html#SP3">&#167;3</a>, <a href="3-tw.html#SP3_1">&#167;3.1</a><br>Plain Text Format - <a href="5-ptf.html#SP3">&#167;3</a><br>TeX Format - <a href="5-tf.html#SP4">&#167;4</a><br>HTML Formats - <a href="5-hf.html#SP7">&#167;7</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">id</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::text<button class="popup" onclick="togglePopup('usagePopup235')">...<span class="popuptext" id="usagePopup235">Usage of <b>Formats::text</b>:<br>Tags - <a href="2-tgs.html#SP7">&#167;7</a>, <a href="2-tgs.html#SP7_1">&#167;7.1</a><br>The Weaver - <a href="3-tw.html#SP1_3_4_1_8">&#167;1.3.4.1.8</a>, <a href="3-tw.html#SP1_3_4_1_8_4">&#167;1.3.4.1.8.4</a>, <a href="3-tw.html#SP1_3_4_1_10_5">&#167;1.3.4.1.10.5</a>, <a href="3-tw.html#SP2_1">&#167;2.1</a>, <a href="3-tw.html#SP2_3">&#167;2.3</a>, <a href="3-tw.html#SP3">&#167;3</a>, <a href="3-tw.html#SP3_1">&#167;3.1</a><br>Plain Text Format - <a href="5-ptf.html#SP3">&#167;3</a><br>TeX Format - <a href="5-tf.html#SP4">&#167;4</a><br>HTML Formats - <a href="5-hf.html#SP7">&#167;7</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">id</span><span class="plain">) {</span>
<span class="functiontext"><a href="#SP27">Formats::text_r</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">id</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::text_comment<button class="popup" onclick="togglePopup('usagePopup237')">...<span class="popuptext" id="usagePopup237">Usage of <b>Formats::text_comment</b>:<br>TeX Format - <a href="5-tf.html#SP24_2">&#167;24.2</a><br>HTML Formats - <a href="5-hf.html#SP10">&#167;10</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">id</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::text_comment<button class="popup" onclick="togglePopup('usagePopup236')">...<span class="popuptext" id="usagePopup236">Usage of <b>Formats::text_comment</b>:<br>TeX Format - <a href="5-tf.html#SP24_2">&#167;24.2</a><br>HTML Formats - <a href="5-hf.html#SP10">&#167;10</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">id</span><span class="plain">) {</span>
<span class="functiontext"><a href="#SP27">Formats::text_r</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">id</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">, </span><span class="constant">TRUE</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::text_r<button class="popup" onclick="togglePopup('usagePopup238')">...<span class="popuptext" id="usagePopup238">Usage of <b>Formats::text_r</b>:<br><a href="#SP27_1">&#167;27.1</a>, <a href="#SP27_2">&#167;27.2</a>, <a href="#SP27_3">&#167;27.3</a>, <a href="#SP27_4_1">&#167;27.4.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">id</span><span class="plain">,</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::text_r<button class="popup" onclick="togglePopup('usagePopup237')">...<span class="popuptext" id="usagePopup237">Usage of <b>Formats::text_r</b>:<br><a href="#SP27_1">&#167;27.1</a>, <a href="#SP27_2">&#167;27.2</a>, <a href="#SP27_3">&#167;27.3</a>, <a href="#SP27_4_1">&#167;27.4.1</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">id</span><span class="plain">,</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">within</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">comments</span><span class="plain">) {</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">code_in_comments_notation</span><span class="plain"> =</span>
<span class="functiontext"><a href="8-bdfw.html#SP6">Bibliographic::get_datum</a></span><span class="plain">(</span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">weave_web</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">,</span>
@ -690,7 +695,7 @@ as appropriate.
<span class="functiontext"><a href="#SP11">Formats::source_fragment</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">id</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
&lt;<span class="cwebmacro">Detect use of footnotes</span> <span class="cwebmacronumber">27.3</span>&gt;<span class="plain">;</span>
<span class="functiontext"><a href="#SP29">Formats::text_fragment</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">id</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP28">Formats::text_fragment</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">id</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
@ -825,8 +830,8 @@ as appropriate.
<pre class="displaydefn">
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">url</span><span class="plain">);</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">title</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="#SP28">Formats::resolve_reference_in_weave</a></span><span class="plain">(</span><span class="identifier">url</span><span class="plain">, </span><span class="identifier">title</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">reference</span><span class="plain">,</span>
<span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">current_weave_line</span><span class="plain">)) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="6-cln.html#SP5">Colonies::resolve_reference_in_weave</a></span><span class="plain">(</span><span class="identifier">url</span><span class="plain">, </span><span class="identifier">title</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">reference</span><span class="plain">,</span>
<span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">weave_web</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">current_weave_line</span><span class="plain">)) {</span>
<span class="functiontext"><a href="#SP27">Formats::text_r</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">before</span><span class="plain">, </span><span class="identifier">within</span><span class="plain">, </span><span class="identifier">comments</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP12">Formats::url</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">url</span><span class="plain">, </span><span class="identifier">title</span><span class="plain">, </span><span class="constant">FALSE</span><span class="plain">);</span>
<span class="functiontext"><a href="#SP27">Formats::text_r</a></span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">after</span><span class="plain">, </span><span class="identifier">within</span><span class="plain">, </span><span class="identifier">comments</span><span class="plain">);</span>
@ -840,82 +845,7 @@ as appropriate.
<p class="endnote">This code is used in <a href="#SP27_4">&#167;27.4</a>.</p>
<p class="inwebparagraph"><a id="SP28"></a><b>&#167;28. </b>The following must decide what a reference like "Chapter 3" should refer
to: that is, whether it makes unamgiguous sense, and if so, what URL we should
link to, and what the full text of the link might be.
</p>
<pre class="display">
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Formats::resolve_reference_in_weave<button class="popup" onclick="togglePopup('usagePopup239')">...<span class="popuptext" id="usagePopup239">Usage of <b>Formats::resolve_reference_in_weave</b>:<br><a href="#SP27_4_1">&#167;27.4.1</a>, HTML Formats - <a href="5-hf.html#SP10_2_1">&#167;10.2.1</a></span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">url</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">title</span><span class="plain">,</span>
<span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">) {</span>
<span class="reserved">module</span><span class="plain"> *</span><span class="identifier">found_M</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">section_md</span><span class="plain"> *</span><span class="identifier">found_Sm</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">named_as_module</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">N</span><span class="plain"> = </span><span class="functiontext"><a href="8-wm.html#SP9">WebModules::named_reference</a></span><span class="plain">(&amp;</span><span class="identifier">found_M</span><span class="plain">, &amp;</span><span class="identifier">found_Sm</span><span class="plain">, &amp;</span><span class="identifier">named_as_module</span><span class="plain">,</span>
<span class="identifier">title</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="identifier">weave_web</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">as_module</span><span class="plain">, </span><span class="identifier">text</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">N</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">L</span><span class="plain">) </span>&lt;<span class="cwebmacro">Try references to non-sections</span> <span class="cwebmacronumber">28.1</span>&gt;<span class="plain">;</span>
<span class="functiontext"><a href="1-pc.html#SP8">Main::error_in_web</a></span><span class="plain">(</span><span class="identifier">I</span><span class="string">"No section has this name"</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">N</span><span class="plain"> &gt; </span><span class="constant">1</span><span class="plain">) {</span>
<span class="functiontext"><a href="1-pc.html#SP8">Main::error_in_web</a></span><span class="plain">(</span><span class="identifier">I</span><span class="string">"Multiple sections might be meant here"</span><span class="plain">, </span><span class="identifier">L</span><span class="plain">);</span>
<span class="functiontext"><a href="8-wm.html#SP9">WebModules::named_reference</a></span><span class="plain">(&amp;</span><span class="identifier">found_M</span><span class="plain">, &amp;</span><span class="identifier">found_Sm</span><span class="plain">, &amp;</span><span class="identifier">named_as_module</span><span class="plain">,</span>
<span class="identifier">title</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="identifier">weave_web</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">as_module</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">, </span><span class="constant">TRUE</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="reserved">chapter</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">;</span>
<span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, *</span><span class="identifier">found_S</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">C</span><span class="plain">, </span><span class="reserved">chapter</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">weave_web</span><span class="plain">-&gt;</span><span class="element">chapters</span><span class="plain">)</span>
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">section</span><span class="plain">, </span><span class="identifier">C</span><span class="plain">-&gt;</span><span class="element">sections</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">S</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain"> == </span><span class="identifier">found_Sm</span><span class="plain">) </span><span class="identifier">found_S</span><span class="plain"> = </span><span class="identifier">S</span><span class="plain">;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">found_S</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"could not locate S"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">found_M</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">internal_error</span><span class="plain">(</span><span class="string">"could not locate M"</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">found_M</span><span class="plain"> != </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">weave_web</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">as_module</span><span class="plain">) {</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">url</span><span class="plain">, </span><span class="string">"../%S-module/"</span><span class="plain">, </span><span class="identifier">found_M</span><span class="plain">-&gt;</span><span class="element">module_name</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="functiontext"><a href="5-hf.html#SP29">HTMLFormat::section_URL</a></span><span class="plain">(</span><span class="identifier">url</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">found_S</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">named_as_module</span><span class="plain"> == </span><span class="constant">FALSE</span><span class="plain">) &amp;&amp; (</span><span class="identifier">found_M</span><span class="plain"> != </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">weave_web</span><span class="plain">-&gt;</span><span class="element">md</span><span class="plain">-&gt;</span><span class="element">as_module</span><span class="plain">)) {</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">title</span><span class="plain">, </span><span class="string">" (in %S)"</span><span class="plain">, </span><span class="identifier">found_M</span><span class="plain">-&gt;</span><span class="element">module_name</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">return</span><span class="plain"> </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP28_1"></a><b>&#167;28.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Try references to non-sections</span> <span class="cwebmacronumber">28.1</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">language_function</span><span class="plain"> *</span><span class="identifier">fn</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">fn</span><span class="plain">, </span><span class="reserved">language_function</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP18">Str::eq_insensitive</a></span><span class="plain">(</span><span class="identifier">fn</span><span class="plain">-&gt;</span><span class="element">function_name</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">)) {</span>
<span class="functiontext"><a href="5-hf.html#SP29">HTMLFormat::xref</a></span><span class="plain">(</span><span class="identifier">url</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">fn</span><span class="plain">-&gt;</span><span class="element">function_header_at</span><span class="plain">-&gt;</span><span class="element">owning_paragraph</span><span class="plain">,</span>
<span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">owning_section</span><span class="plain">, </span><span class="constant">TRUE</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">title</span><span class="plain">, </span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">fn</span><span class="plain">-&gt;</span><span class="element">function_name</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="reserved">language_type</span><span class="plain"> *</span><span class="identifier">str</span><span class="plain">;</span>
<span class="identifier">LOOP_OVER</span><span class="plain">(</span><span class="identifier">str</span><span class="plain">, </span><span class="reserved">language_type</span><span class="plain">) {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext"><a href="4-sm.html#SP18">Str::eq_insensitive</a></span><span class="plain">(</span><span class="identifier">str</span><span class="plain">-&gt;</span><span class="element">structure_name</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">)) {</span>
<span class="functiontext"><a href="5-hf.html#SP29">HTMLFormat::xref</a></span><span class="plain">(</span><span class="identifier">url</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">str</span><span class="plain">-&gt;</span><span class="element">structure_header_at</span><span class="plain">-&gt;</span><span class="element">owning_paragraph</span><span class="plain">,</span>
<span class="identifier">L</span><span class="plain">-&gt;</span><span class="element">owning_section</span><span class="plain">, </span><span class="constant">TRUE</span><span class="plain">);</span>
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">title</span><span class="plain">, </span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">str</span><span class="plain">-&gt;</span><span class="element">structure_name</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain"> </span><span class="constant">TRUE</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP28">&#167;28</a>.</p>
<p class="inwebparagraph"><a id="SP29"></a><b>&#167;29. </b><code class="display"><span class="extract">COMMENTARY_TEXT_FOR_MTID</span></code> straightforwardly weaves out a run of contiguous
<p class="inwebparagraph"><a id="SP28"></a><b>&#167;28. </b><code class="display"><span class="extract">COMMENTARY_TEXT_FOR_MTID</span></code> straightforwardly weaves out a run of contiguous
text. Ordinarily, any formulae written in TeX notation (i.e., in dollar signs
used as brackets) will be transmogrified into a plain text paraphrase, but
the <code class="display"><span class="extract">PRESERVE_MATH_MODE_FOR_MTID</span></code> can prevent this. (And of course the TeX
@ -934,7 +864,7 @@ format does, because it wants to keep the formulae in all their glory.)
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">COMMENTARY_TEXT_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">,</span>
<span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">matter</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::text_fragment<button class="popup" onclick="togglePopup('usagePopup240')">...<span class="popuptext" id="usagePopup240">Usage of <b>Formats::text_fragment</b>:<br><a href="#SP27">&#167;27</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">fragment</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::text_fragment<button class="popup" onclick="togglePopup('usagePopup238')">...<span class="popuptext" id="usagePopup238">Usage of <b>Formats::text_fragment</b>:<br><a href="#SP27">&#167;27</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">fragment</span><span class="plain">) {</span>
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">matter</span><span class="plain">);</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
@ -952,7 +882,7 @@ format does, because it wants to keep the formulae in all their glory.)
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP30"></a><b>&#167;30. </b>The weaver has special typographical support for the stand-alone Inform
<p class="inwebparagraph"><a id="SP29"></a><b>&#167;29. </b>The weaver has special typographical support for the stand-alone Inform
document of Preform grammar, and this is the hook for it. Most formats
should ignore it.
</p>
@ -966,7 +896,7 @@ should ignore it.
<span class="identifier">IMETHOD_TYPE</span><span class="plain">(</span><span class="constant">PREFORM_DOCUMENT_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">,</span>
<span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">, </span><span class="reserved">chapter</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">, </span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">matter</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">concluding_comment</span><span class="plain">)</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Formats::preform_document<button class="popup" onclick="togglePopup('usagePopup241')">...<span class="popuptext" id="usagePopup241">Usage of <b>Formats::preform_document</b>:<br>InC Support - <a href="4-is.html#SP16">&#167;16</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">,</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Formats::preform_document<button class="popup" onclick="togglePopup('usagePopup239')">...<span class="popuptext" id="usagePopup239">Usage of <b>Formats::preform_document</b>:<br>InC Support - <a href="4-is.html#SP16">&#167;16</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">web</span><span class="plain"> *</span><span class="identifier">W</span><span class="plain">,</span>
<span class="reserved">chapter</span><span class="plain"> *</span><span class="identifier">C</span><span class="plain">, </span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">, </span><span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">L</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">matter</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">concluding_comment</span><span class="plain">) {</span>
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
@ -979,7 +909,7 @@ should ignore it.
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP31"></a><b>&#167;31. </b>When the weaver adds one of its endnotes &mdash; "This function is used in...",
<p class="inwebparagraph"><a id="SP30"></a><b>&#167;30. </b>When the weaver adds one of its endnotes &mdash; "This function is used in...",
or some such &mdash; it calls this method twice, once before the start, with
<code class="display"><span class="extract">end</span></code> set to 1, and once after the end, with <code class="display"><span class="extract">end</span></code> set to 2.
</p>
@ -991,7 +921,7 @@ or some such &mdash; it calls this method twice, once before the start, with
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">ENDNOTE_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">end</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::endnote<button class="popup" onclick="togglePopup('usagePopup242')">...<span class="popuptext" id="usagePopup242">Usage of <b>Formats::endnote</b>:<br>Tags - <a href="2-tgs.html#SP7">&#167;7</a>, <a href="2-tgs.html#SP7_1">&#167;7.1</a><br>The Weaver - <a href="3-tw.html#SP2_1">&#167;2.1</a>, <a href="3-tw.html#SP2_2">&#167;2.2</a>, <a href="3-tw.html#SP2_3">&#167;2.3</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">end</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::endnote<button class="popup" onclick="togglePopup('usagePopup240')">...<span class="popuptext" id="usagePopup240">Usage of <b>Formats::endnote</b>:<br>Tags - <a href="2-tgs.html#SP7">&#167;7</a>, <a href="2-tgs.html#SP7_1">&#167;7.1</a><br>The Weaver - <a href="3-tw.html#SP2_1">&#167;2.1</a>, <a href="3-tw.html#SP2_2">&#167;2.2</a>, <a href="3-tw.html#SP2_3">&#167;2.3</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">end</span><span class="plain">) {</span>
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">ENDNOTE_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">end</span><span class="plain">);</span>
<span class="plain">}</span>
@ -999,7 +929,7 @@ or some such &mdash; it calls this method twice, once before the start, with
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP32"></a><b>&#167;32. </b>"Locale" here isn't used in the Unix sense. It means text which describes
<p class="inwebparagraph"><a id="SP31"></a><b>&#167;31. </b>"Locale" here isn't used in the Unix sense. It means text which describes
a range of numbered paragraphs, from <code class="display"><span class="extract">par1</span></code> to <code class="display"><span class="extract">par2</span></code>, though <code class="display"><span class="extract">par2</span></code> can
instead be null, in which case the description is of just one para. (This
is often used in endnotes.)
@ -1013,7 +943,7 @@ is often used in endnotes.)
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">LOCALE_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
<span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">par1</span><span class="plain">, </span><span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">par2</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::locale<button class="popup" onclick="togglePopup('usagePopup243')">...<span class="popuptext" id="usagePopup243">Usage of <b>Formats::locale</b>:<br>The Weaver - <a href="3-tw.html#SP2_1">&#167;2.1</a>, <a href="3-tw.html#SP3_1">&#167;3.1</a><br>Plain Text Format - <a href="5-ptf.html#SP6">&#167;6</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">par1</span><span class="plain">, </span><span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">par2</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::locale<button class="popup" onclick="togglePopup('usagePopup241')">...<span class="popuptext" id="usagePopup241">Usage of <b>Formats::locale</b>:<br>The Weaver - <a href="3-tw.html#SP2_1">&#167;2.1</a>, <a href="3-tw.html#SP3_1">&#167;3.1</a><br>Plain Text Format - <a href="5-ptf.html#SP6">&#167;6</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">par1</span><span class="plain">, </span><span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">par2</span><span class="plain">) {</span>
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">LOCALE_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">par1</span><span class="plain">, </span><span class="identifier">par2</span><span class="plain">);</span>
<span class="plain">}</span>
@ -1021,7 +951,7 @@ is often used in endnotes.)
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP33"></a><b>&#167;33. </b>And finally: the bottom of the woven file. The <code class="display"><span class="extract">comment</span></code> is, again, not
<p class="inwebparagraph"><a id="SP32"></a><b>&#167;32. </b>And finally: the bottom of the woven file. The <code class="display"><span class="extract">comment</span></code> is, again, not
intended for human eyes, and will be some sort of "End of weave" remark.
</p>
@ -1033,7 +963,7 @@ intended for human eyes, and will be some sort of "End of weave" remark.
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">TAIL_FOR_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">comment</span><span class="plain">, </span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::tail<button class="popup" onclick="togglePopup('usagePopup244')">...<span class="popuptext" id="usagePopup244">Usage of <b>Formats::tail</b>:<br>The Weaver - <a href="3-tw.html#SP1_5">&#167;1.5</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">comment</span><span class="plain">, </span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::tail<button class="popup" onclick="togglePopup('usagePopup242')">...<span class="popuptext" id="usagePopup242">Usage of <b>Formats::tail</b>:<br>The Weaver - <a href="3-tw.html#SP1_5">&#167;1.5</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">comment</span><span class="plain">, </span><span class="reserved">section</span><span class="plain"> *</span><span class="identifier">S</span><span class="plain">) {</span>
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">;</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wf</span><span class="plain">, </span><span class="constant">TAIL_FOR_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">comment</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">);</span>
<span class="plain">}</span>
@ -1041,7 +971,7 @@ intended for human eyes, and will be some sort of "End of weave" remark.
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP34"></a><b>&#167;34. Post-processing. </b>Consider what happens when Inweb makes a PDF, via TeX. The initial weave is
<p class="inwebparagraph"><a id="SP33"></a><b>&#167;33. Post-processing. </b>Consider what happens when Inweb makes a PDF, via TeX. The initial weave is
to a TeX file; it's then "post-processing" which will turn this into a PDF.
The following method calls allow such two-stage formats to function; in
this case, it would be the PDF format which provides the necessary methods
@ -1055,14 +985,14 @@ to turn TeX into PDF. The important method is this one:
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">POST_PROCESS_POS_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">open_afterwards</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::post_process_weave<button class="popup" onclick="togglePopup('usagePopup245')">...<span class="popuptext" id="usagePopup245">Usage of <b>Formats::post_process_weave</b>:<br>The Swarm - <a href="3-ts.html#SP2">&#167;2</a></span></button></span><span class="plain">(</span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">open_afterwards</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::post_process_weave<button class="popup" onclick="togglePopup('usagePopup243')">...<span class="popuptext" id="usagePopup243">Usage of <b>Formats::post_process_weave</b>:<br>The Swarm - <a href="3-ts.html#SP2">&#167;2</a></span></button></span><span class="plain">(</span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">open_afterwards</span><span class="plain">) {</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">, </span><span class="constant">POST_PROCESS_POS_MTID</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">open_afterwards</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP35"></a><b>&#167;35. </b>Optionally, a fancy report can be printed out, to describe what has been
<p class="inwebparagraph"><a id="SP34"></a><b>&#167;34. </b>Optionally, a fancy report can be printed out, to describe what has been
done:
</p>
@ -1073,14 +1003,14 @@ done:
<pre class="display">
<span class="identifier">VMETHOD_TYPE</span><span class="plain">(</span><span class="constant">POST_PROCESS_REPORT_POS_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">)</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::report_on_post_processing<button class="popup" onclick="togglePopup('usagePopup246')">...<span class="popuptext" id="usagePopup246">Usage of <b>Formats::report_on_post_processing</b>:<br>The Swarm - <a href="3-ts.html#SP2_3">&#167;2.3</a></span></button></span><span class="plain">(</span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">) {</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::report_on_post_processing<button class="popup" onclick="togglePopup('usagePopup244')">...<span class="popuptext" id="usagePopup244">Usage of <b>Formats::report_on_post_processing</b>:<br>The Swarm - <a href="3-ts.html#SP2_3">&#167;2.3</a></span></button></span><span class="plain">(</span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">) {</span>
<span class="identifier">VMETHOD_CALL</span><span class="plain">(</span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">, </span><span class="constant">POST_PROCESS_REPORT_POS_MTID</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP36"></a><b>&#167;36. </b>After post-processing, an index file is sometimes needed. For example, if a
<p class="inwebparagraph"><a id="SP35"></a><b>&#167;35. </b>After post-processing, an index file is sometimes needed. For example, if a
big web is woven to a swarm of PDFs, one for each section, then we also want
to make an index page in HTML which provides annotated links to those PDFs.
</p>
@ -1092,7 +1022,7 @@ to make an index page in HTML which provides annotated links to those PDFs.
<pre class="display">
<span class="identifier">IMETHOD_TYPE</span><span class="plain">(</span><span class="constant">INDEX_PDFS_POS_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">)</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Formats::index_pdfs<button class="popup" onclick="togglePopup('usagePopup247')">...<span class="popuptext" id="usagePopup247">Usage of <b>Formats::index_pdfs</b>:<br>none</span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">format</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Formats::index_pdfs<button class="popup" onclick="togglePopup('usagePopup245')">...<span class="popuptext" id="usagePopup245">Usage of <b>Formats::index_pdfs</b>:<br>none</span></button></span><span class="plain">(</span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">format</span><span class="plain">) {</span>
<span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain"> = </span><span class="functiontext"><a href="#SP1">Formats::find_by_name</a></span><span class="plain">(</span><span class="identifier">format</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">wf</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
@ -1103,7 +1033,7 @@ to make an index page in HTML which provides annotated links to those PDFs.
<p class="inwebparagraph"></p>
<p class="inwebparagraph"><a id="SP37"></a><b>&#167;37. </b>And in that index file, we may want to substitute in values for placeholder
<p class="inwebparagraph"><a id="SP36"></a><b>&#167;36. </b>And in that index file, we may want to substitute in values for placeholder
text like <code class="display"><span class="extract">[[PDF Size]]</span></code> in the template file. This is the <code class="display"><span class="extract">detail</span></code>.
</p>
@ -1115,7 +1045,7 @@ text like <code class="display"><span class="extract">[[PDF Size]]</span></code>
<pre class="display">
<span class="identifier">IMETHOD_TYPE</span><span class="plain">(</span><span class="constant">POST_PROCESS_SUBSTITUTE_POS_MTID</span><span class="plain">, </span><span class="reserved">weave_format</span><span class="plain"> *</span><span class="identifier">wf</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">OUT</span><span class="plain">,</span>
<span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">detail</span><span class="plain">, </span><span class="reserved">weave_pattern</span><span class="plain"> *</span><span class="identifier">pattern</span><span class="plain">)</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Formats::substitute_post_processing_data<button class="popup" onclick="togglePopup('usagePopup248')">...<span class="popuptext" id="usagePopup248">Usage of <b>Formats::substitute_post_processing_data</b>:<br>The Indexer - <a href="3-ti.html#SP5_1_8_2">&#167;5.1.8.2</a>, <a href="3-ti.html#SP5_1_8_3">&#167;5.1.8.3</a>, <a href="3-ti.html#SP5_1_8_4">&#167;5.1.8.4</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">Formats::substitute_post_processing_data<button class="popup" onclick="togglePopup('usagePopup246')">...<span class="popuptext" id="usagePopup246">Usage of <b>Formats::substitute_post_processing_data</b>:<br>The Indexer - <a href="3-ti.html#SP5_1_8_2">&#167;5.1.8.2</a>, <a href="3-ti.html#SP5_1_8_3">&#167;5.1.8.3</a>, <a href="3-ti.html#SP5_1_8_4">&#167;5.1.8.4</a></span></button></span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">weave_target</span><span class="plain"> *</span><span class="identifier">wv</span><span class="plain">,</span>
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">detail</span><span class="plain">, </span><span class="reserved">weave_pattern</span><span class="plain"> *</span><span class="identifier">pattern</span><span class="plain">) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">rv</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="identifier">IMETHOD_CALL</span><span class="plain">(</span><span class="identifier">rv</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">-&gt;</span><span class="element">format</span><span class="plain">, </span><span class="constant">POST_PROCESS_SUBSTITUTE_POS_MTID</span><span class="plain">, </span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">, </span><span class="identifier">detail</span><span class="plain">, </span><span class="identifier">pattern</span><span class="plain">);</span>

Some files were not shown because too many files have changed in this diff Show more