Cross-references
This commit is contained in:
parent
699a03b74e
commit
9d1c0173b8
57 changed files with 2781 additions and 1624 deletions
|
@ -13,6 +13,8 @@ where to put the result: and so we arrive at the front door of the routine
|
|||
|Weaver::weave_source| below.
|
||||
|
||||
=
|
||||
source_line *current_weave_line = NULL;
|
||||
|
||||
int Weaver::weave_source(web *W, weave_target *wv) {
|
||||
text_stream TO_struct;
|
||||
text_stream *OUT = &TO_struct;
|
||||
|
@ -113,6 +115,7 @@ typedef struct weaver_state {
|
|||
@<Weave this section@> =
|
||||
paragraph *current_paragraph = NULL;
|
||||
for (source_line *L = S->first_line; L; L = L->next_line) {
|
||||
current_weave_line = L;
|
||||
if ((Tags::tagged_with(L->owning_paragraph, wv->theme_match)) &&
|
||||
(LanguageMethods::skip_in_weaving(S->sect_language, wv, L) == FALSE)) {
|
||||
lines_woven++;
|
||||
|
|
|
@ -156,7 +156,7 @@ int ACMESupport::parse_comment(programming_language *pl,
|
|||
for (int i=0; i<Str::len(line); i++) {
|
||||
wchar_t c = Str::get_at(line, i);
|
||||
if (c_mode == 2) {
|
||||
if (ACMESupport::text_at(line, i, pl->multiline_comment_close)) {
|
||||
if (Str::includes_at(line, i, pl->multiline_comment_close)) {
|
||||
c_mode = 0; c_end = i; i += Str::len(pl->multiline_comment_close) - 1;
|
||||
}
|
||||
} else {
|
||||
|
@ -167,28 +167,30 @@ int ACMESupport::parse_comment(programming_language *pl,
|
|||
if (q_mode == 0) q_mode = 2;
|
||||
else if (q_mode == 2) q_mode = 0;
|
||||
}
|
||||
if (c == Str::get_first_char(pl->character_literal)) {
|
||||
if (q_mode == 0) q_mode = 1;
|
||||
else if (q_mode == 1) q_mode = 0;
|
||||
}
|
||||
if (ACMESupport::text_at(line, i, pl->multiline_comment_open)) {
|
||||
c_mode = 2; c_position = i; non_white_space = FALSE;
|
||||
i += Str::len(pl->multiline_comment_open) - 1;
|
||||
}
|
||||
if (c_mode == 0) {
|
||||
if (ACMESupport::text_at(line, i, pl->line_comment)) {
|
||||
c_mode = 1; c_position = i; c_end = Str::len(line); non_white_space = FALSE;
|
||||
i += Str::len(pl->line_comment) - 1;
|
||||
if (q_mode == 0) {
|
||||
if (c == Str::get_first_char(pl->character_literal)) {
|
||||
if (q_mode == 0) q_mode = 1;
|
||||
else if (q_mode == 1) q_mode = 0;
|
||||
}
|
||||
if (ACMESupport::text_at(line, i, pl->whole_line_comment)) {
|
||||
int material_exists = FALSE;
|
||||
for (int j=0; j<i; j++)
|
||||
if (!(Characters::is_whitespace(Str::get_at(line, j))))
|
||||
material_exists = TRUE;
|
||||
if (material_exists == FALSE) {
|
||||
c_mode = 1; c_position = i; c_end = Str::len(line);
|
||||
non_white_space = FALSE;
|
||||
i += Str::len(pl->whole_line_comment) - 1;
|
||||
if (Str::includes_at(line, i, pl->multiline_comment_open)) {
|
||||
c_mode = 2; c_position = i; non_white_space = FALSE;
|
||||
i += Str::len(pl->multiline_comment_open) - 1;
|
||||
}
|
||||
if (c_mode == 0) {
|
||||
if (Str::includes_at(line, i, pl->line_comment)) {
|
||||
c_mode = 1; c_position = i; c_end = Str::len(line); non_white_space = FALSE;
|
||||
i += Str::len(pl->line_comment) - 1;
|
||||
}
|
||||
if (Str::includes_at(line, i, pl->whole_line_comment)) {
|
||||
int material_exists = FALSE;
|
||||
for (int j=0; j<i; j++)
|
||||
if (!(Characters::is_whitespace(Str::get_at(line, j))))
|
||||
material_exists = TRUE;
|
||||
if (material_exists == FALSE) {
|
||||
c_mode = 1; c_position = i; c_end = Str::len(line);
|
||||
non_white_space = FALSE;
|
||||
i += Str::len(pl->whole_line_comment) - 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -207,16 +209,6 @@ int ACMESupport::parse_comment(programming_language *pl,
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
int ACMESupport::text_at(text_stream *line, int i, text_stream *pattern) {
|
||||
if (Str::len(pattern) == 0) return FALSE;
|
||||
if (i < 0) return FALSE;
|
||||
if (i + Str::len(pattern) > Str::len(line)) return FALSE;
|
||||
LOOP_THROUGH_TEXT(pos, pattern)
|
||||
if (Str::get(pos) != Str::get_at(line, i++))
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ This is here so that tangling the Standard Rules extension doesn't insert
|
||||
a spurious comment betraying Inweb's involvement in the process.
|
||||
|
||||
|
|
|
@ -111,26 +111,26 @@ void Painter::syntax_colour_inner(programming_language *pl,
|
|||
if ((Str::get_at(colouring, i) == PLAIN_COLOUR) ||
|
||||
(Str::get_at(colouring, i) == IDENTIFIER_COLOUR)) {
|
||||
wchar_t c = Str::get_at(matter, i);
|
||||
if (ACMESupport::text_at(matter, i, pl->binary_literal_prefix)) {
|
||||
if (Str::includes_at(matter, i, pl->binary_literal_prefix)) {
|
||||
base = 2;
|
||||
for (int j=0; j<Str::len(pl->binary_literal_prefix); j++)
|
||||
Str::put_at(colouring, i+j, (char) CONSTANT_COLOUR);
|
||||
dec_possible = TRUE;
|
||||
continue;
|
||||
} else if (ACMESupport::text_at(matter, i, pl->octal_literal_prefix)) {
|
||||
} else if (Str::includes_at(matter, i, pl->octal_literal_prefix)) {
|
||||
base = 8;
|
||||
for (int j=0; j<Str::len(pl->octal_literal_prefix); j++)
|
||||
Str::put_at(colouring, i+j, (char) CONSTANT_COLOUR);
|
||||
dec_possible = TRUE;
|
||||
continue;
|
||||
} else if (ACMESupport::text_at(matter, i, pl->hexadecimal_literal_prefix)) {
|
||||
} else if (Str::includes_at(matter, i, pl->hexadecimal_literal_prefix)) {
|
||||
base = 16;
|
||||
for (int j=0; j<Str::len(pl->hexadecimal_literal_prefix); j++)
|
||||
Str::put_at(colouring, i+j, (char) CONSTANT_COLOUR);
|
||||
dec_possible = TRUE;
|
||||
continue;
|
||||
}
|
||||
if ((ACMESupport::text_at(matter, i, pl->negative_literal_prefix)) &&
|
||||
if ((Str::includes_at(matter, i, pl->negative_literal_prefix)) &&
|
||||
(dec_possible) && (base == 0)) {
|
||||
base = 10;
|
||||
Str::put_at(colouring, i, (char) CONSTANT_COLOUR);
|
||||
|
@ -228,7 +228,7 @@ void Painter::execute(hash_table *HT, colouring_language_block *block, text_stre
|
|||
int L = Str::len(block->run_instance) - 1;
|
||||
if (L >= 0)
|
||||
for (int count=1, i=from; i<=to - L; i++)
|
||||
if (ACMESupport::text_at(matter, i, block->run_instance)) {
|
||||
if (Str::includes_at(matter, i, block->run_instance)) {
|
||||
Painter::execute_rule(HT, rule, matter, colouring, i, i+L, count++);
|
||||
i += L;
|
||||
}
|
||||
|
@ -321,7 +321,7 @@ int Painter::satisfies(hash_table *HT, colouring_rule *rule, text_stream *matter
|
|||
if ((rule->match_prefix == SPACED_RULE_PREFIX) && (pos == from))
|
||||
return FALSE;
|
||||
}
|
||||
if (ACMESupport::text_at(matter,
|
||||
if (Str::includes_at(matter,
|
||||
pos-Str::len(rule->match_text), rule->match_text) == FALSE)
|
||||
return FALSE;
|
||||
rule->fix_position = pos-Str::len(rule->match_text);
|
||||
|
@ -334,7 +334,7 @@ int Painter::satisfies(hash_table *HT, colouring_rule *rule, text_stream *matter
|
|||
if ((rule->match_prefix == SPACED_RULE_SUFFIX) && (pos == from))
|
||||
return FALSE;
|
||||
}
|
||||
if (ACMESupport::text_at(matter, pos, rule->match_text) == FALSE)
|
||||
if (Str::includes_at(matter, pos, rule->match_text) == FALSE)
|
||||
return FALSE;
|
||||
rule->fix_position = pos;
|
||||
} else {
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
[Formats::] Weave Formats.
|
||||
[Formats::] Format Methods.
|
||||
|
||||
To characterise the different weaving output formats (text, typeset,
|
||||
web and so on).
|
||||
To characterise the relevant differences in behaviour between the
|
||||
various weaving formats offered, such as HTML, ePub, or TeX.
|
||||
|
||||
@h Formats.
|
||||
Exactly as in the previous chapter, each format expresses its behaviour
|
||||
|
@ -168,10 +168,11 @@ VMETHOD_TYPE(PARAGRAPH_HEADING_FOR_MTID, weave_format *wf, text_stream *OUT,
|
|||
weave_target *wv, text_stream *TeX_macro, section *S, paragraph *P,
|
||||
text_stream *heading_text, text_stream *chaptermark, text_stream *sectionmark, int weight)
|
||||
void Formats::paragraph_heading(OUTPUT_STREAM, weave_target *wv, text_stream *TeX_macro,
|
||||
section *S, paragraph *P, text_stream *heading_text, text_stream *chaptermark, text_stream *sectionmark,
|
||||
int weight) {
|
||||
section *S, paragraph *P, text_stream *heading_text, text_stream *chaptermark,
|
||||
text_stream *sectionmark, int weight) {
|
||||
weave_format *wf = wv->format;
|
||||
VMETHOD_CALL(wf, PARAGRAPH_HEADING_FOR_MTID, OUT, wv, TeX_macro, S, P, heading_text, chaptermark, sectionmark, weight);
|
||||
VMETHOD_CALL(wf, PARAGRAPH_HEADING_FOR_MTID, OUT, wv, TeX_macro, S, P,
|
||||
heading_text, chaptermark, sectionmark, weight);
|
||||
}
|
||||
|
||||
@ The following method is expected to weave a piece of code, which has already
|
||||
|
@ -236,7 +237,8 @@ a convenience for Inform 7 code commentary.
|
|||
@e DISPLAY_LINE_FOR_MTID
|
||||
|
||||
=
|
||||
VMETHOD_TYPE(DISPLAY_LINE_FOR_MTID, weave_format *wf, text_stream *OUT, weave_target *wv, text_stream *from)
|
||||
VMETHOD_TYPE(DISPLAY_LINE_FOR_MTID, weave_format *wf, text_stream *OUT,
|
||||
weave_target *wv, text_stream *from)
|
||||
void Formats::display_line(OUTPUT_STREAM, weave_target *wv, text_stream *from) {
|
||||
weave_format *wf = wv->format;
|
||||
VMETHOD_CALL(wf, DISPLAY_LINE_FOR_MTID, OUT, wv, from);
|
||||
|
@ -395,28 +397,45 @@ void Formats::text_comment(OUTPUT_STREAM, weave_target *wv, text_stream *id) {
|
|||
|
||||
void Formats::text_r(OUTPUT_STREAM, weave_target *wv, text_stream *id,
|
||||
int within, int comments) {
|
||||
text_stream *notation = Bibliographic::get_datum(wv->weave_web->md,
|
||||
text_stream *code_in_comments_notation =
|
||||
Bibliographic::get_datum(wv->weave_web->md,
|
||||
(comments)?(I"Code In Code Comments Notation"):(I"Code In Commentary Notation"));
|
||||
if (Str::ne(notation, I"Off")) {
|
||||
for (int i=0; i < Str::len(id); i++) {
|
||||
if (Str::get_at(id, i) == '\\') i += Str::len(notation) - 1;
|
||||
else if (ACMESupport::text_at(id, i, notation)) {
|
||||
TEMPORARY_TEXT(before);
|
||||
Str::copy(before, id); Str::truncate(before, i);
|
||||
TEMPORARY_TEXT(after);
|
||||
Str::substr(after, Str::at(id, i + Str::len(notation)), Str::end(id));
|
||||
Formats::text_r(OUT, wv, before, within, comments);
|
||||
Formats::text_r(OUT, wv, after, (within)?FALSE:TRUE, comments);
|
||||
DISCARD_TEXT(before);
|
||||
DISCARD_TEXT(after);
|
||||
return;
|
||||
}
|
||||
if (Str::ne(code_in_comments_notation, I"Off")) @<Split text and code extracts@>;
|
||||
|
||||
if (within == FALSE) @<Recognose hyperlinks@>;
|
||||
|
||||
text_stream *xref_notation = Bibliographic::get_datum(wv->weave_web->md,
|
||||
I"Cross-References Notation");
|
||||
if (Str::ne(xref_notation, I"Off")) @<Recognise cross-references@>;
|
||||
|
||||
if (within) {
|
||||
Formats::source_fragment(OUT, wv, id);
|
||||
} else {
|
||||
Formats::text_fragment(OUT, wv, id);
|
||||
}
|
||||
}
|
||||
|
||||
@<Split text and code extracts@> =
|
||||
for (int i=0; i < Str::len(id); i++) {
|
||||
if (Str::get_at(id, i) == '\\') i += Str::len(code_in_comments_notation) - 1;
|
||||
else if (Str::includes_at(id, i, code_in_comments_notation)) {
|
||||
TEMPORARY_TEXT(before);
|
||||
Str::copy(before, id); Str::truncate(before, i);
|
||||
TEMPORARY_TEXT(after);
|
||||
Str::substr(after, Str::at(id,
|
||||
i + Str::len(code_in_comments_notation)), Str::end(id));
|
||||
Formats::text_r(OUT, wv, before, within, comments);
|
||||
Formats::text_r(OUT, wv, after, (within)?FALSE:TRUE, comments);
|
||||
DISCARD_TEXT(before);
|
||||
DISCARD_TEXT(after);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@<Recognose hyperlinks@> =
|
||||
for (int i=0; i < Str::len(id); i++) {
|
||||
if ((within == FALSE) &&
|
||||
((ACMESupport::text_at(id, i, I"http://")) ||
|
||||
(ACMESupport::text_at(id, i, I"https://")))) {
|
||||
if ((Str::includes_at(id, i, I"http://")) ||
|
||||
(Str::includes_at(id, i, I"https://"))) {
|
||||
TEMPORARY_TEXT(before);
|
||||
Str::copy(before, id); Str::truncate(before, i);
|
||||
TEMPORARY_TEXT(after);
|
||||
|
@ -426,16 +445,90 @@ void Formats::text_r(OUTPUT_STREAM, weave_target *wv, text_stream *id,
|
|||
Formats::text_r(OUT, wv, before, within, comments);
|
||||
Formats::url(OUT, wv, mr.exp[0], mr.exp[0], TRUE);
|
||||
Formats::text_r(OUT, wv, mr.exp[1], within, comments);
|
||||
Regexp::dispose_of(&mr);
|
||||
return;
|
||||
}
|
||||
Regexp::dispose_of(&mr);
|
||||
DISCARD_TEXT(before);
|
||||
DISCARD_TEXT(after);
|
||||
}
|
||||
}
|
||||
if (within) {
|
||||
Formats::source_fragment(OUT, wv, id);
|
||||
|
||||
@<Recognise cross-references@> =
|
||||
int N = Str::len(xref_notation);
|
||||
for (int i=0; i < Str::len(id); i++) {
|
||||
if ((within == FALSE) && (Str::includes_at(id, i, xref_notation))) {
|
||||
int j = i + N+1;
|
||||
while (j < Str::len(id)) {
|
||||
if (Str::includes_at(id, j, xref_notation)) {
|
||||
int allow = FALSE;
|
||||
TEMPORARY_TEXT(before);
|
||||
TEMPORARY_TEXT(reference);
|
||||
TEMPORARY_TEXT(after);
|
||||
Str::substr(before, Str::start(id), Str::at(id, i));
|
||||
Str::substr(reference, Str::at(id, i + N), Str::at(id, j));
|
||||
Str::substr(after, Str::at(id, j + N), Str::end(id));
|
||||
@<Attempt to resolve the cross-reference@>;
|
||||
DISCARD_TEXT(before);
|
||||
DISCARD_TEXT(reference);
|
||||
DISCARD_TEXT(after);
|
||||
if (allow) return;
|
||||
}
|
||||
j++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@<Attempt to resolve the cross-reference@> =
|
||||
TEMPORARY_TEXT(url);
|
||||
TEMPORARY_TEXT(title);
|
||||
if (Formats::resolve_reference_in_weave(url, title, wv, reference,
|
||||
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);
|
||||
allow = TRUE;
|
||||
}
|
||||
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) {
|
||||
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 {
|
||||
Formats::text_fragment(OUT, wv, id);
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
|
@ -312,21 +312,13 @@ void HTMLFormat::source_code(weave_format *self, text_stream *OUT, weave_target
|
|||
int current_colour = -1, colour_wanted = PLAIN_COLOUR;
|
||||
for (int i=0; i < Str::len(matter); i++) {
|
||||
colour_wanted = Str::get_at(colouring, i); @<Adjust code colour as necessary@>;
|
||||
if ((linked) &&
|
||||
((ACMESupport::text_at(matter, i, I"http://")) ||
|
||||
(ACMESupport::text_at(matter, i, I"https://")))) {
|
||||
TEMPORARY_TEXT(before);
|
||||
Str::copy(before, matter); Str::truncate(before, i);
|
||||
TEMPORARY_TEXT(after);
|
||||
Str::substr(after, Str::at(matter, i), Str::end(matter));
|
||||
match_results mr = Regexp::create_mr();
|
||||
if (Regexp::match(&mr, after, L"(https*://%C+)(%c*)")) {
|
||||
Formats::url(OUT, wv, mr.exp[0], mr.exp[0], TRUE);
|
||||
i += Str::len(mr.exp[0]);
|
||||
}
|
||||
DISCARD_TEXT(before);
|
||||
DISCARD_TEXT(after);
|
||||
}
|
||||
if (linked) {
|
||||
@<Pick up hyperlinking at the eleventh hour@>;
|
||||
text_stream *xref_notation = Bibliographic::get_datum(wv->weave_web->md,
|
||||
I"Cross-References Notation");
|
||||
if (Str::ne(xref_notation, I"Off"))
|
||||
@<Pick up cross-references at the eleventh hour@>;
|
||||
}
|
||||
if (Str::get_at(matter, i) == '<') WRITE("<");
|
||||
else if (Str::get_at(matter, i) == '>') WRITE(">");
|
||||
else if (Str::get_at(matter, i) == '&') WRITE("&");
|
||||
|
@ -345,6 +337,48 @@ void HTMLFormat::source_code(weave_format *self, text_stream *OUT, weave_target
|
|||
}
|
||||
}
|
||||
|
||||
@<Pick up hyperlinking at the eleventh hour@> =
|
||||
if ((Str::includes_at(matter, i, I"http://")) ||
|
||||
(Str::includes_at(matter, i, I"https://"))) {
|
||||
TEMPORARY_TEXT(before);
|
||||
Str::copy(before, matter); Str::truncate(before, i);
|
||||
TEMPORARY_TEXT(after);
|
||||
Str::substr(after, Str::at(matter, i), Str::end(matter));
|
||||
match_results mr = Regexp::create_mr();
|
||||
if (Regexp::match(&mr, after, L"(https*://%C+)(%c*)")) {
|
||||
Formats::url(OUT, wv, mr.exp[0], mr.exp[0], TRUE);
|
||||
i += Str::len(mr.exp[0]);
|
||||
}
|
||||
DISCARD_TEXT(before);
|
||||
DISCARD_TEXT(after);
|
||||
}
|
||||
|
||||
@<Pick up cross-references at the eleventh hour@> =
|
||||
int N = Str::len(xref_notation);
|
||||
if ((Str::includes_at(matter, i, xref_notation))) {
|
||||
int j = i + N+1;
|
||||
while (j < Str::len(matter)) {
|
||||
if (Str::includes_at(matter, j, xref_notation)) {
|
||||
TEMPORARY_TEXT(reference);
|
||||
Str::substr(reference, Str::at(matter, i + N), Str::at(matter, j));
|
||||
@<Attempt to resolve the cross-reference@>;
|
||||
DISCARD_TEXT(reference);
|
||||
}
|
||||
j++;
|
||||
}
|
||||
}
|
||||
|
||||
@<Attempt to resolve the cross-reference@> =
|
||||
TEMPORARY_TEXT(url);
|
||||
TEMPORARY_TEXT(title);
|
||||
if (Formats::resolve_reference_in_weave(url, title, wv, reference,
|
||||
current_weave_line)) {
|
||||
Formats::url(OUT, wv, url, title, FALSE);
|
||||
i = j + N;
|
||||
}
|
||||
DISCARD_TEXT(url);
|
||||
DISCARD_TEXT(title);
|
||||
|
||||
@<Adjust code colour as necessary@> =
|
||||
if (colour_wanted != current_colour) {
|
||||
if (current_colour >= 0) HTML_CLOSE("span");
|
||||
|
@ -519,7 +553,7 @@ void HTMLFormat::change_colour(weave_format *self, text_stream *OUT, weave_targe
|
|||
int col, int in_code) {
|
||||
char *cl = "plain";
|
||||
switch (col) {
|
||||
case DEFINITION_COLOUR: cl = "cwebmacrotext"; break;
|
||||
case DEFINITION_COLOUR: cl = "cwebmacrotext"; break;
|
||||
case FUNCTION_COLOUR: cl = "functiontext"; break;
|
||||
case IDENTIFIER_COLOUR: cl = "identifier"; break;
|
||||
case ELEMENT_COLOUR: cl = "element"; break;
|
||||
|
@ -581,6 +615,15 @@ void HTMLFormat::locale(weave_format *self, text_stream *OUT, weave_target *wv,
|
|||
}
|
||||
|
||||
@ =
|
||||
void HTMLFormat::section_URL(OUTPUT_STREAM, weave_target *wv, section *from) {
|
||||
TEMPORARY_TEXT(linkto);
|
||||
Str::copy(linkto, from->sect_range);
|
||||
LOOP_THROUGH_TEXT(pos, linkto)
|
||||
if ((Str::get(pos) == '/') || (Str::get(pos) == ' '))
|
||||
Str::put(pos, '-');
|
||||
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);
|
||||
|
@ -591,14 +634,17 @@ void HTMLFormat::xref(OUTPUT_STREAM, weave_target *wv, paragraph *P, section *fr
|
|||
Str::put(pos, '-');
|
||||
WRITE_TO(linkto, ".html");
|
||||
}
|
||||
WRITE("%S%s%S", linkto, (a_link)?"#":"", P->ornament);
|
||||
WRITE("%S", linkto);
|
||||
if (P) WRITE("%s%S", (a_link)?"#":"", P->ornament);
|
||||
DISCARD_TEXT(linkto);
|
||||
|
||||
WRITE("P");
|
||||
text_stream *N = P->paragraph_number;
|
||||
LOOP_THROUGH_TEXT(pos, N)
|
||||
if (Str::get(pos) == '.') WRITE("_");
|
||||
else PUT(Str::get(pos));
|
||||
if (P) {
|
||||
WRITE("P");
|
||||
text_stream *N = P->paragraph_number;
|
||||
LOOP_THROUGH_TEXT(pos, N)
|
||||
if (Str::get(pos) == '.') WRITE("_");
|
||||
else PUT(Str::get(pos));
|
||||
}
|
||||
}
|
||||
|
||||
@ =
|
||||
|
|
|
@ -58,7 +58,7 @@ in different programming languages."
|
|||
|
||||
Chapter 5: Formats
|
||||
"Weaving to a variety of different human-readable formats."
|
||||
Weave Formats
|
||||
Format Methods
|
||||
Plain Text Format
|
||||
TeX Format
|
||||
HTML Formats
|
||||
|
|
|
@ -381,6 +381,51 @@ produces:
|
|||
Compare: https://en.wikipedia.org/wiki/Crocheting_Adventures_with_Hyperbolic_Planes
|
||||
=
|
||||
|
||||
@ Cross-references are also allowed. These are normally written within |//|
|
||||
signs and are only available in the commentary of a web. They allow us to
|
||||
place cross-references like so:
|
||||
= (text)
|
||||
To see how cross-references are implemented, see //Format Methods//,
|
||||
or more generally the whole of //Chapter 5//; to decipher the text,
|
||||
Inweb uses code from //foundation// at //foundation: Web Modules//.
|
||||
=
|
||||
To see how cross-references are implemented, see //Format Methods//,
|
||||
or more generally the whole of //Chapter 5//; to decipher the text,
|
||||
Inweb uses code from //foundation// at //foundation: Web Modules//.
|
||||
|
||||
What happened in that last sentence is that Inweb noticed the following:
|
||||
(a) "Format Methods" is the name of a section of code in the Inweb web;
|
||||
(b) The web also has a "Chapter 5";
|
||||
(c) It uses a module called "foundation";
|
||||
(d) And that module has a section called "Web Modules".
|
||||
|
||||
Inweb then made links accordingly. Chapters, which can be referred to either
|
||||
numerically, link to the first section in them; modules likewise.
|
||||
|
||||
Errors are thrown if these references are in any way ambiguous. They are not
|
||||
case sensitive.
|
||||
|
||||
Cross-references also work inside text extracts marked as |hyperlinked|.
|
||||
= (text)
|
||||
= (hyperlinked text)
|
||||
See the //Manual// for more on this.
|
||||
=
|
||||
=
|
||||
produces:
|
||||
= (hyperlinked text)
|
||||
See the //Manual// for more on this.
|
||||
=
|
||||
|
||||
This notation may be inconvenient if you need |//| for something else, but it
|
||||
can be configured in the Contents page of a web, say like so:
|
||||
= (text as Inweb)
|
||||
Cross-References Notation: &&&
|
||||
=
|
||||
It's also possible to disable cross-referencing entirely with:
|
||||
= (text as Inweb)
|
||||
Cross-References Notation: Off
|
||||
=
|
||||
|
||||
@ Pictures must be in PNG, JPG or PDF format and can be included with lines
|
||||
like:
|
||||
= (text as Inweb)
|
||||
|
|
|
@ -6,6 +6,8 @@ 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
|
||||
|
|
2995
Tangled/inweb.c
2995
Tangled/inweb.c
File diff suppressed because it is too large
Load diff
|
@ -1,7 +1,7 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>Foundation</title>
|
||||
<title>Foundation Module</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">
|
||||
|
@ -23,8 +23,8 @@
|
|||
</nav>
|
||||
<main role="main">
|
||||
|
||||
<!--Weave of 'Foundation' 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</b></li></ul><p class="purpose">Starting up and shutting down.</p>
|
||||
<!--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="toc"><li><a href="#SP1">§1. Introduction</a></li><li><a href="#SP2">§2. Basic definitions</a></li><li><a href="#SP8">§8. The beginning and the end</a></li></ul><hr class="tocbar">
|
||||
|
|
@ -615,7 +615,7 @@ actually running a one-line AppleScript here.
|
|||
<p class="endnote">This paragraph is used only if PLATFORM_POSIX is defined.</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="1-fnd.html">Back to 'Foundation'</a></li><li><a href="1-wp.html">Continue with 'Windows Platform'</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="1-fm.html">Back to 'Foundation Module'</a></li><li><a href="1-wp.html">Continue with 'Windows Platform'</a></li></ul><hr class="tocbar">
|
||||
<!--End of weave-->
|
||||
</main>
|
||||
</body>
|
||||
|
|
|
@ -119,7 +119,7 @@ trace-sentences mode, that is, between asterisk sentences.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Log::declare_aspect is used in 1/fnd (<a href="1-fnd.html#SP8_2">§8.2</a>).</p>
|
||||
<p class="endnote">The function Log::declare_aspect is used in 1/fm (<a href="1-fm.html#SP8_2">§8.2</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP4_1"></a><b>§4.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Empty the aspects table</span> <span class="cwebmacronumber">4.1</span>> =
|
||||
|
@ -226,7 +226,7 @@ temporarily the sentence tracing file: but we don't care.
|
|||
|
||||
<p class="endnote">The function Log::open_alternative appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Log::close is used in 1/fnd (<a href="1-fnd.html#SP9">§9</a>).</p>
|
||||
<p class="endnote">The function Log::close is used in 1/fm (<a href="1-fm.html#SP9">§9</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP6"></a><b>§6. Subheadings. </b>To provide signposts in what is otherwise a huge amorphous pile of text,
|
||||
the debugging log can be divided into "phases", subdivided into "stages".
|
||||
|
@ -280,7 +280,7 @@ debug log, and is used when errors occur.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Log::aspect_switched_on is used in <a href="#SP11">§11</a>, 1/fnd (<a href="1-fnd.html#SP9">§9</a>), 2/str (<a href="2-str.html#SP3">§3</a>).</p>
|
||||
<p class="endnote">The function Log::aspect_switched_on is used in <a href="#SP11">§11</a>, 1/fm (<a href="1-fm.html#SP9">§9</a>), 2/str (<a href="2-str.html#SP3">§3</a>).</p>
|
||||
|
||||
<p class="endnote">The function Log::set_aspect appears nowhere else.</p>
|
||||
|
||||
|
|
|
@ -161,7 +161,7 @@ begin as soon as this is initialised.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Memory::start is used in 1/fnd (<a href="1-fnd.html#SP8">§8</a>).</p>
|
||||
<p class="endnote">The function Memory::start is used in 1/fm (<a href="1-fm.html#SP8">§8</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP6"></a><b>§6. Architecture. </b>The memory manager is built in three levels, with its interface to the user
|
||||
being entirely at level 3 (except that when it shuts down it calls a level 1
|
||||
|
@ -341,7 +341,7 @@ block.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Memory::free is used in 1/fnd (<a href="1-fnd.html#SP9">§9</a>).</p>
|
||||
<p class="endnote">The function Memory::free is used in 1/fm (<a href="1-fm.html#SP9">§9</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP13"></a><b>§13. Level 2: memory frames and integrity checking. </b>Within these extensive blocks of contiguous memory, we place the actual
|
||||
objects in between "memory frames", which are only used at present to police
|
||||
|
@ -1063,7 +1063,7 @@ report in the debugging log (for which, see below).
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Memory::log_statistics is used in 1/fnd (<a href="1-fnd.html#SP9">§9</a>).</p>
|
||||
<p class="endnote">The function Memory::log_statistics is used in 1/fm (<a href="1-fm.html#SP9">§9</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP32_1"></a><b>§32.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Calculate the memory usage for objects</span> <span class="cwebmacronumber">32.1</span>> =
|
||||
|
|
|
@ -473,7 +473,7 @@ is clear, that is, no conversion is made.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Streams::log is used in 1/fnd (<a href="1-fnd.html#SP8_3">§8.3</a>).</p>
|
||||
<p class="endnote">The function Streams::log is used in 1/fm (<a href="1-fm.html#SP8_3">§8.3</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP22"></a><b>§22. Standard I/O wrappers. </b>The first call to <code class="display"><span class="extract">Streams::get_stdout()</span></code> creates a suitable wrapper for <code class="display"><span class="extract">stdout</span></code>
|
||||
and returns a <code class="display"><span class="extract">text_stream *</span></code> pointer to it; subsequent calls just return this wrapper.
|
||||
|
@ -1285,7 +1285,7 @@ to open similar ones again).
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Streams::writer is used in 1/fnd (<a href="1-fnd.html#SP8_1">§8.1</a>).</p>
|
||||
<p class="endnote">The function Streams::writer is used in 1/fm (<a href="1-fm.html#SP8_1">§8.1</a>).</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="2-mmr.html">Back to 'Memory'</a></li><li><a href="2-wal.html">Continue with 'Writers and Loggers'</a></li></ul><hr class="tocbar">
|
||||
|
|
|
@ -126,9 +126,9 @@ because the loggers don't use format strings.)
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Writers::register_writer is used in 1/fnd (<a href="1-fnd.html#SP8_1">§8.1</a>).</p>
|
||||
<p class="endnote">The function Writers::register_writer is used in 1/fm (<a href="1-fm.html#SP8_1">§8.1</a>).</p>
|
||||
|
||||
<p class="endnote">The function Writers::register_logger is used in 1/fnd (<a href="1-fnd.html#SP8_3">§8.3</a>).</p>
|
||||
<p class="endnote">The function Writers::register_logger is used in 1/fm (<a href="1-fm.html#SP8_3">§8.3</a>).</p>
|
||||
|
||||
<p class="endnote">The function Writers::register_writer_I appears nowhere else.</p>
|
||||
|
||||
|
@ -331,7 +331,7 @@ file encodings, but expanding <code class="display"><span class="extract">%s</sp
|
|||
<span class="plain">#</span><span class="identifier">pragma</span><span class="plain"> </span><span class="identifier">clang</span><span class="plain"> </span><span class="identifier">diagnostic</span><span class="plain"> </span><span class="identifier">push</span>
|
||||
<span class="plain">#</span><span class="identifier">pragma</span><span class="plain"> </span><span class="identifier">clang</span><span class="plain"> </span><span class="identifier">diagnostic</span><span class="plain"> </span><span class="identifier">ignored</span><span class="plain"> </span><span class="string">"-Wformat-nonliteral"</span>
|
||||
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">esc_number</span><span class="plain">) {</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="character">'c'</span><span class="plain">: </span><span class="reserved">case</span><span class="plain"> </span><span class="character">'d'</span><span class="plain">: </span><span class="reserved">case</span><span class="plain"> </span><span class="character">'i'</span><span class="plain">: </span><span class="reserved">case</span><span class="plain"> </span><span class="character">'x'</span><span class="plain">: { </span><span class="comment"> <code class="display"><span class="extract">char</span></code> is promoted to <code class="display"><span class="extract">int</span></code> in variable arguments</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="character">'c'</span><span class="plain">: </span><span class="reserved">case</span><span class="plain"> </span><span class="character">'d'</span><span class="plain">: </span><span class="reserved">case</span><span class="plain"> </span><span class="character">'i'</span><span class="plain">: </span><span class="reserved">case</span><span class="plain"> </span><span class="character">'x'</span><span class="plain">: { /* |</span><span class="reserved">char</span><span class="plain">| </span><span class="identifier">is</span><span class="plain"> </span><span class="identifier">promoted</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">in</span><span class="plain"> </span><span class="identifier">variable</span><span class="plain"> </span><span class="identifier">arguments</span><span class="plain"> */</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">ival</span><span class="plain"> = </span><span class="identifier">va_arg</span><span class="plain">(</span><span class="identifier">ap</span><span class="plain">, </span><span class="reserved">int</span><span class="plain">);</span>
|
||||
<span class="reserved">char</span><span class="plain"> </span><span class="identifier">temp</span><span class="plain">[256];</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">snprintf</span><span class="plain">(</span><span class="identifier">temp</span><span class="plain">, </span><span class="constant">255</span><span class="plain">, </span><span class="identifier">format_string</span><span class="plain">, </span><span class="identifier">ival</span><span class="plain">) >= </span><span class="constant">255</span><span class="plain">) </span><span class="identifier">strcpy</span><span class="plain">(</span><span class="identifier">temp</span><span class="plain">, </span><span class="string">"?"</span><span class="plain">);</span>
|
||||
|
|
|
@ -153,11 +153,11 @@ swtich, and then the client should call:
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function CommandLine::begin_group is used in 1/fnd (<a href="1-fnd.html#SP8_5">§8.5</a>).</p>
|
||||
<p class="endnote">The function CommandLine::begin_group is used in 1/fm (<a href="1-fm.html#SP8_5">§8.5</a>).</p>
|
||||
|
||||
<p class="endnote">The function CommandLine::end_group is used in 1/fnd (<a href="1-fnd.html#SP8_5">§8.5</a>).</p>
|
||||
<p class="endnote">The function CommandLine::end_group is used in 1/fm (<a href="1-fm.html#SP8_5">§8.5</a>).</p>
|
||||
|
||||
<p class="endnote">The function CommandLine::declare_switch is used in <a href="#SP6">§6</a>, 1/fnd (<a href="1-fnd.html#SP8_5">§8.5</a>).</p>
|
||||
<p class="endnote">The function CommandLine::declare_switch is used in <a href="#SP6">§6</a>, 1/fm (<a href="1-fm.html#SP8_5">§8.5</a>).</p>
|
||||
|
||||
<p class="endnote">The function CommandLine::declare_switch_p is used in <a href="#SP6">§6</a>.</p>
|
||||
|
||||
|
@ -225,7 +225,7 @@ section. So the sorting version of <code class="display"><span class="extract">n
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function CommandLine::declare_boolean_switch is used in 1/fnd (<a href="1-fnd.html#SP8_5">§8.5</a>).</p>
|
||||
<p class="endnote">The function CommandLine::declare_boolean_switch is used in 1/fm (<a href="1-fm.html#SP8_5">§8.5</a>).</p>
|
||||
|
||||
<p class="endnote">The function CommandLine::declare_numerical_switch appears nowhere else.</p>
|
||||
|
||||
|
@ -280,7 +280,7 @@ through the file if one has by that point been provided.
|
|||
<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">=1; </span><span class="identifier">i</span><span class="plain"><</span><span class="identifier">argc</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">switched</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
|
||||
<span class="reserved">char</span><span class="plain"> *</span><span class="identifier">p</span><span class="plain"> = </span><span class="identifier">argv</span><span class="plain">[</span><span class="identifier">i</span><span class="plain">];</span>
|
||||
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">p</span><span class="plain">[0] == </span><span class="character">'-'</span><span class="plain">) { </span><span class="identifier">p</span><span class="plain">++; </span><span class="identifier">switched</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">; } </span><span class="comment"> allow a doubled-dash as a single</span>
|
||||
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">p</span><span class="plain">[0] == </span><span class="character">'-'</span><span class="plain">) { </span><span class="identifier">p</span><span class="plain">++; </span><span class="identifier">switched</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">; } /* </span><span class="identifier">allow</span><span class="plain"> </span><span class="identifier">a</span><span class="plain"> </span><span class="identifier">doubled</span><span class="plain">-</span><span class="identifier">dash</span><span class="plain"> </span><span class="identifier">as</span><span class="plain"> </span><span class="identifier">a</span><span class="plain"> </span><span class="identifier">single</span><span class="plain"> */</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">opt</span><span class="plain">);</span>
|
||||
<span class="functiontext">Streams::write_locale_string</span><span class="plain">(</span><span class="identifier">opt</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">arg</span><span class="plain">);</span>
|
||||
|
|
|
@ -133,7 +133,7 @@ as Unicode code points, regardless of what text encoding the locale has.)
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Filenames::writer is used in 1/fnd (<a href="1-fnd.html#SP8_1">§8.1</a>).</p>
|
||||
<p class="endnote">The function Filenames::writer is used in 1/fm (<a href="1-fm.html#SP8_1">§8.1</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP5"></a><b>§5. </b>And again relative to a given pathname:
|
||||
</p>
|
||||
|
|
|
@ -103,7 +103,7 @@ host file system.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Pathnames::start is used in 1/fnd (<a href="1-fnd.html#SP8">§8</a>).</p>
|
||||
<p class="endnote">The function Pathnames::start is used in 1/fm (<a href="1-fm.html#SP8">§8</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP3"></a><b>§3. Installation folder. </b></p>
|
||||
|
||||
|
@ -225,7 +225,7 @@ except possibly for an initial slash, so for example <code class="display"><span
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Pathnames::writer is used in 1/fnd (<a href="1-fnd.html#SP8_1">§8.1</a>), 3/fln (<a href="3-fln.html#SP4">§4</a>).</p>
|
||||
<p class="endnote">The function Pathnames::writer is used in 1/fm (<a href="1-fm.html#SP8_1">§8.1</a>), 3/fln (<a href="3-fln.html#SP4">§4</a>).</p>
|
||||
|
||||
<p class="endnote">The function Pathnames::writer_r appears nowhere else.</p>
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Time::begin is used in 1/fnd (<a href="1-fnd.html#SP8">§8</a>).</p>
|
||||
<p class="endnote">The function Time::begin is used in 1/fm (<a href="1-fm.html#SP8">§8</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b>The command line option <code class="display"><span class="extract">-fixtime</span></code> causes any tool compiled with Foundation
|
||||
to fix the date as 11 a.m. on 28 March 2016, which is Inform's birthday. This
|
||||
|
|
|
@ -191,7 +191,7 @@ hand. This I think makes for opaque code. So:
|
|||
<p class="endnote">The function CStrings::truncated_strcpy is used in 2/dl (<a href="2-dl.html#SP6">§6</a>).</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="4-chr.html">Back to 'Characters'</a></li><li><a href="4-ws.html">Continue with 'Wide Strings.w'</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="4-chr.html">Back to 'Characters'</a></li><li><a href="4-ws.html">Continue with 'Wide Strings'</a></li></ul><hr class="tocbar">
|
||||
<!--End of weave-->
|
||||
</main>
|
||||
</body>
|
||||
|
|
|
@ -211,7 +211,7 @@ are not. They are simply a little faster to access if short.
|
|||
|
||||
<p class="endnote">The structure match_result is private to this section.</p>
|
||||
|
||||
<p class="endnote">The structure match_results is accessed in 3/cla, 8/ws, 8/bf and here.</p>
|
||||
<p class="endnote">The structure match_results is accessed in 3/cla, 8/ws, 8/wm, 8/bf and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP9"></a><b>§9. </b>Match result objects are inherently ephemeral, and we can expect to be
|
||||
creating them and throwing them away frequently. This must be done
|
||||
|
@ -245,9 +245,9 @@ deallocate.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Regexp::create_mr is used in <a href="#SP14">§14</a>, 3/cla (<a href="3-cla.html#SP11">§11</a>, <a href="3-cla.html#SP12">§12</a>), 8/ws (<a href="8-ws.html#SP7_3_2">§7.3.2</a>, <a href="8-ws.html#SP7_3_3_2">§7.3.3.2</a>, <a href="8-ws.html#SP7_3_3_2_1">§7.3.3.2.1</a>, <a href="8-ws.html#SP7_2_2_1">§7.2.2.1</a>, <a href="8-ws.html#SP7_2_2_3">§7.2.2.3</a>), 8/bf (<a href="8-bf.html#SP3">§3</a>).</p>
|
||||
<p class="endnote">The function Regexp::create_mr is used in <a href="#SP14">§14</a>, 3/cla (<a href="3-cla.html#SP11">§11</a>, <a href="3-cla.html#SP12">§12</a>), 8/ws (<a href="8-ws.html#SP7_3_2">§7.3.2</a>, <a href="8-ws.html#SP7_3_3_2">§7.3.3.2</a>, <a href="8-ws.html#SP7_3_3_2_1">§7.3.3.2.1</a>, <a href="8-ws.html#SP7_2_1">§7.2.1</a>, <a href="8-ws.html#SP7_2_2_1">§7.2.2.1</a>, <a href="8-ws.html#SP7_2_2_3">§7.2.2.3</a>), 8/wm (<a href="8-wm.html#SP9">§9</a>), 8/bf (<a href="8-bf.html#SP3">§3</a>).</p>
|
||||
|
||||
<p class="endnote">The function Regexp::dispose_of is used in <a href="#SP10">§10</a>, <a href="#SP14">§14</a>, 3/cla (<a href="3-cla.html#SP11">§11</a>), 8/ws (<a href="8-ws.html#SP7_3_2">§7.3.2</a>, <a href="8-ws.html#SP7_3_3_2">§7.3.3.2</a>, <a href="8-ws.html#SP7_3_3_2_1">§7.3.3.2.1</a>, <a href="8-ws.html#SP7_2_2_1">§7.2.2.1</a>, <a href="8-ws.html#SP7_2_2_3">§7.2.2.3</a>), 8/bf (<a href="8-bf.html#SP3">§3</a>).</p>
|
||||
<p class="endnote">The function Regexp::dispose_of is used in <a href="#SP10">§10</a>, <a href="#SP14">§14</a>, 3/cla (<a href="3-cla.html#SP11">§11</a>), 8/ws (<a href="8-ws.html#SP7_3_2">§7.3.2</a>, <a href="8-ws.html#SP7_3_3_2">§7.3.3.2</a>, <a href="8-ws.html#SP7_3_3_2_1">§7.3.3.2.1</a>, <a href="8-ws.html#SP7_2_1">§7.2.1</a>, <a href="8-ws.html#SP7_2_2_1">§7.2.2.1</a>, <a href="8-ws.html#SP7_2_2_3">§7.2.2.3</a>), 8/wm (<a href="8-wm.html#SP9">§9</a>), 8/bf (<a href="8-bf.html#SP3">§3</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP10"></a><b>§10. </b>So, then: the matcher itself.
|
||||
</p>
|
||||
|
@ -294,7 +294,7 @@ deallocate.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Regexp::match is used in 3/cla (<a href="3-cla.html#SP11">§11</a>, <a href="3-cla.html#SP12">§12</a>), 8/ws (<a href="8-ws.html#SP7_3_2">§7.3.2</a>, <a href="8-ws.html#SP7_3_3_2">§7.3.3.2</a>, <a href="8-ws.html#SP7_3_3_2_1">§7.3.3.2.1</a>, <a href="8-ws.html#SP7_2_2_1">§7.2.2.1</a>, <a href="8-ws.html#SP7_2_2_3">§7.2.2.3</a>), 8/bf (<a href="8-bf.html#SP3">§3</a>).</p>
|
||||
<p class="endnote">The function Regexp::match is used in 3/cla (<a href="3-cla.html#SP11">§11</a>, <a href="3-cla.html#SP12">§12</a>), 8/ws (<a href="8-ws.html#SP7_3_2">§7.3.2</a>, <a href="8-ws.html#SP7_3_3_2">§7.3.3.2</a>, <a href="8-ws.html#SP7_3_3_2_1">§7.3.3.2.1</a>, <a href="8-ws.html#SP7_2_1">§7.2.1</a>, <a href="8-ws.html#SP7_2_2_1">§7.2.2.1</a>, <a href="8-ws.html#SP7_2_2_3">§7.2.2.3</a>), 8/wm (<a href="8-wm.html#SP9">§9</a>), 8/bf (<a href="8-bf.html#SP3">§3</a>).</p>
|
||||
|
||||
<p class="endnote">The function Regexp::match_from appears nowhere else.</p>
|
||||
|
||||
|
|
|
@ -499,7 +499,7 @@ at those positions may well not be, of course.)
|
|||
|
||||
<p class="endnote">The function Str::eq is used in 2/dl (<a href="2-dl.html#SP9">§9</a>), 2/dct (<a href="2-dct.html#SP7_3">§7.3</a>), 3/pth (<a href="3-pth.html#SP3">§3</a>), 3/fln (<a href="3-fln.html#SP11">§11</a>), 8/ws (<a href="8-ws.html#SP7_1">§7.1</a>), 8/bdfw (<a href="8-bdfw.html#SP6">§6</a>).</p>
|
||||
|
||||
<p class="endnote">The function Str::eq_insensitive appears nowhere else.</p>
|
||||
<p class="endnote">The function Str::eq_insensitive is used in 8/wm (<a href="8-wm.html#SP9">§9</a>, <a href="8-wm.html#SP9_1">§9.1</a>).</p>
|
||||
|
||||
<p class="endnote">The function Str::ne is used in 7/vn (<a href="7-vn.html#SP8">§8</a>), 8/bf (<a href="8-bf.html#SP8">§8</a>).</p>
|
||||
|
||||
|
@ -802,6 +802,16 @@ for the staff of a publishing house.)
|
|||
<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">Str::includes_at</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">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">, </span><span class="reserved">text_stream</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="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">pattern</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="reserved">if</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="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">i</span><span class="plain"> + </span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">pattern</span><span class="plain">) > </span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">line</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="identifier">LOOP_THROUGH_TEXT</span><span class="plain">(</span><span class="identifier">pos</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="functiontext">Str::get</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">) != </span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">line</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">++))</span>
|
||||
<span class="reserved">return</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="constant">TRUE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
@ -816,6 +826,8 @@ for the staff of a publishing house.)
|
|||
|
||||
<p class="endnote">The function Str::includes appears nowhere else.</p>
|
||||
|
||||
<p class="endnote">The function Str::includes_at appears nowhere else.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP26"></a><b>§26. Shim for literal storage. </b>This is where all of those I-literals created by Inweb are stored at run-time.
|
||||
Note that every instance of, say, <code class="display"><span class="extract">I"fish"</span></code> would return the same string,
|
||||
that is, the same <code class="display"><span class="extract">text_stream *</span></code> value. To prevent nasty accidents, this
|
||||
|
@ -866,7 +878,7 @@ is run just once per I-literal in the source code, when the program starts up.
|
|||
<p class="endnote">This code is used in <a href="#SP26">§26</a>.</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="4-ws.html">Back to 'Wide Strings.w'</a></li><li><a href="4-tf.html">Continue with 'Text Files'</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="4-ws.html">Back to 'Wide Strings'</a></li><li><a href="4-tf.html">Continue with 'Text Files'</a></li></ul><hr class="tocbar">
|
||||
<!--End of weave-->
|
||||
</main>
|
||||
</body>
|
||||
|
|
|
@ -525,7 +525,7 @@ trie in turn until one matches (if it does).
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Tries::log_avinue is used in 1/fnd (<a href="1-fnd.html#SP8_3">§8.3</a>).</p>
|
||||
<p class="endnote">The function Tries::log_avinue is used in 1/fm (<a href="1-fm.html#SP8_3">§8.3</a>).</p>
|
||||
|
||||
<p class="endnote">The function Tries::log appears nowhere else.</p>
|
||||
|
||||
|
|
|
@ -393,7 +393,7 @@ marks, and that will have to do.
|
|||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"><</span><span class="constant">0xC0</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="character">'?'</span><span class="plain">; </span><span class="comment"> malformed UTF-8</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"><</span><span class="constant">0xC0</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="character">'?'</span><span class="plain">; /* </span><span class="identifier">malformed</span><span class="plain"> </span><span class="identifier">UTF</span><span class="plain">-8 */</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"><</span><span class="constant">0xE0</span><span class="plain">) { </span><span class="identifier">c</span><span class="plain"> = </span><span class="identifier">c</span><span class="plain"> & </span><span class="constant">0x1f</span><span class="plain">; </span><span class="identifier">conts</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">; }</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"><</span><span class="constant">0xF0</span><span class="plain">) { </span><span class="identifier">c</span><span class="plain"> = </span><span class="identifier">c</span><span class="plain"> & </span><span class="constant">0xf</span><span class="plain">; </span><span class="identifier">conts</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">c</span><span class="plain"><</span><span class="constant">0xF8</span><span class="plain">) { </span><span class="identifier">c</span><span class="plain"> = </span><span class="identifier">c</span><span class="plain"> & </span><span class="constant">0x7</span><span class="plain">; </span><span class="identifier">conts</span><span class="plain"> = </span><span class="constant">3</span><span class="plain">; }</span>
|
||||
|
@ -402,7 +402,7 @@ marks, and that will have to do.
|
|||
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">conts</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="identifier">d</span><span class="plain"> = </span><span class="identifier">EOF</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">from</span><span class="plain">) </span><span class="identifier">d</span><span class="plain"> = </span><span class="identifier">fgetc</span><span class="plain">(</span><span class="identifier">from</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">or_from</span><span class="plain">) </span><span class="identifier">d</span><span class="plain"> = ((</span><span class="reserved">unsigned</span><span class="plain"> </span><span class="reserved">char</span><span class="plain">) *((*</span><span class="identifier">or_from</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="identifier">EOF</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="character">'?'</span><span class="plain">; </span><span class="comment"> malformed UTF-8</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">d</span><span class="plain"> == </span><span class="identifier">EOF</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="character">'?'</span><span class="plain">; /* </span><span class="identifier">malformed</span><span class="plain"> </span><span class="identifier">UTF</span><span class="plain">-8 */</span>
|
||||
<span class="identifier">c</span><span class="plain"> = </span><span class="identifier">c</span><span class="plain"> << </span><span class="constant">6</span><span class="plain">;</span>
|
||||
<span class="identifier">c</span><span class="plain"> = </span><span class="identifier">c</span><span class="plain"> + (</span><span class="identifier">d</span><span class="plain"> & </span><span class="constant">0x3F</span><span class="plain">);</span>
|
||||
<span class="identifier">conts</span><span class="plain">--;</span>
|
||||
|
@ -436,7 +436,7 @@ in scientific notation.
|
|||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c</span><span class="plain"> == </span><span class="constant">0xa1</span><span class="plain">) || (</span><span class="identifier">c</span><span class="plain"> == </span><span class="constant">0xa3</span><span class="plain">) || (</span><span class="identifier">c</span><span class="plain"> == </span><span class="constant">0xbf</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="identifier">c</span><span class="plain">; </span><span class="comment"> pound sign, inverted ! and ?</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> == </span><span class="constant">0xd7</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="character">'x'</span><span class="plain">; </span><span class="comment"> convert multiplication sign to lower case "x"</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> == </span><span class="constant">0xd7</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="character">'x'</span><span class="plain">; /* </span><span class="identifier">convert</span><span class="plain"> </span><span class="identifier">multiplication</span><span class="plain"> </span><span class="identifier">sign</span><span class="plain"> </span><span class="identifier">to</span><span class="plain"> </span><span class="identifier">lower</span><span class="plain"> </span><span class="reserved">case</span><span class="plain"> </span><span class="string">"x"</span><span class="plain"> */</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c</span><span class="plain"> >= </span><span class="constant">0xc0</span><span class="plain">) && (</span><span class="identifier">c</span><span class="plain"> <= </span><span class="constant">0xff</span><span class="plain">)) { </span><span class="comment"> accented West European letters, but...</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c</span><span class="plain"> != </span><span class="constant">0xd0</span><span class="plain">) && (</span><span class="identifier">c</span><span class="plain"> != </span><span class="constant">0xf0</span><span class="plain">) && </span><span class="comment"> not Icelandic eths</span>
|
||||
<span class="plain">(</span><span class="identifier">c</span><span class="plain"> != </span><span class="constant">0xde</span><span class="plain">) && (</span><span class="identifier">c</span><span class="plain"> != </span><span class="constant">0xfe</span><span class="plain">) && </span><span class="comment"> nor Icelandic thorns</span>
|
||||
|
@ -462,13 +462,13 @@ hyphens into em-rules when they are flanked by spaces, and so on.
|
|||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> == </span><span class="constant">0x85</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="character">'\x0d'</span><span class="plain">; </span><span class="comment"> NEL, or "next line"</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> == </span><span class="constant">0xa0</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="character">' '</span><span class="plain">; </span><span class="comment"> non-breaking space</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c</span><span class="plain"> >= </span><span class="constant">0x2000</span><span class="plain">) && (</span><span class="identifier">c</span><span class="plain"> <= </span><span class="constant">0x200a</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="character">' '</span><span class="plain">; </span><span class="comment"> space variants</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c</span><span class="plain"> >= </span><span class="constant">0x2010</span><span class="plain">) && (</span><span class="identifier">c</span><span class="plain"> <= </span><span class="constant">0x2014</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="character">'-'</span><span class="plain">; </span><span class="comment"> rules and dashes</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c</span><span class="plain"> >= </span><span class="constant">0x2018</span><span class="plain">) && (</span><span class="identifier">c</span><span class="plain"> <= </span><span class="constant">0x2019</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="character">'\''</span><span class="plain">; </span><span class="comment"> smart single quotes</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c</span><span class="plain"> >= </span><span class="constant">0x201c</span><span class="plain">) && (</span><span class="identifier">c</span><span class="plain"> <= </span><span class="constant">0x201d</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="character">'"'</span><span class="plain">; </span><span class="comment"> smart double quotes</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">c</span><span class="plain"> >= </span><span class="constant">0x2028</span><span class="plain">) && (</span><span class="identifier">c</span><span class="plain"> <= </span><span class="constant">0x2029</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="character">'\x0d'</span><span class="plain">; </span><span class="comment"> fancy newlines</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> == </span><span class="constant">0x85</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="character">'\x0d'</span><span class="plain">; /* </span><span class="identifier">NEL</span><span class="plain">, </span><span class="identifier">or</span><span class="plain"> </span><span class="string">"next line"</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">0xa0</span><span class="plain">) </span><span class="reserved">return</span><span class="plain"> </span><span class="character">' '</span><span class="plain">; /* </span><span class="identifier">non</span><span class="plain">-</span><span class="identifier">breaking</span><span class="plain"> </span><span class="identifier">space</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">0x2000</span><span class="plain">) && (</span><span class="identifier">c</span><span class="plain"> <= </span><span class="constant">0x200a</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="character">' '</span><span class="plain">; /* </span><span class="identifier">space</span><span class="plain"> </span><span class="identifier">variants</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">0x2010</span><span class="plain">) && (</span><span class="identifier">c</span><span class="plain"> <= </span><span class="constant">0x2014</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="character">'-'</span><span class="plain">; /* </span><span class="identifier">rules</span><span class="plain"> </span><span class="identifier">and</span><span class="plain"> </span><span class="identifier">dashes</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">0x2018</span><span class="plain">) && (</span><span class="identifier">c</span><span class="plain"> <= </span><span class="constant">0x2019</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="character">'\''</span><span class="plain">; /* </span><span class="identifier">smart</span><span class="plain"> </span><span class="identifier">single</span><span class="plain"> </span><span class="identifier">quotes</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">0x201c</span><span class="plain">) && (</span><span class="identifier">c</span><span class="plain"> <= </span><span class="constant">0x201d</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="character">'"'</span><span class="plain">; /* </span><span class="identifier">smart</span><span class="plain"> </span><span class="reserved">double</span><span class="plain"> </span><span class="identifier">quotes</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">0x2028</span><span class="plain">) && (</span><span class="identifier">c</span><span class="plain"> <= </span><span class="constant">0x2029</span><span class="plain">)) </span><span class="reserved">return</span><span class="plain"> </span><span class="character">'\x0d'</span><span class="plain">; /* </span><span class="identifier">fancy</span><span class="plain"> </span><span class="identifier">newlines</span><span class="plain"> */</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>Wide Strings.w</title>
|
||||
<title>Wide Strings</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">
|
||||
|
@ -23,8 +23,8 @@
|
|||
</nav>
|
||||
<main role="main">
|
||||
|
||||
<!--Weave of 'Wide Strings.w' 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.w</b></li></ul><p class="purpose">A minimal library for handling wide C strings.</p>
|
||||
<!--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>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1"></a><b>§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>.
|
||||
|
|
|
@ -480,9 +480,9 @@ images" at the ThreePress Consulting blog.)
|
|||
<span class="identifier">content</span><span class="plain">);</span>
|
||||
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<?xml version='1.0' encoding='utf-8'?>\n"</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<package xmlns=\"http:</span><span class="comment">www.idpf.org/2007/opf\"\n");</span>
|
||||
<span class="string">WRITE("</span><span class="identifier">xmlns:dc</span><span class="plain">=\</span><span class="string">"http:</span><span class="comment">purl.org/dc/elements/1.1/\"\n");</span>
|
||||
<span class="string">WRITE("</span><span class="identifier">unique</span><span class="plain">-</span><span class="identifier">identifier</span><span class="plain">=\</span><span class="string">"bookid\" version=\"2.0\">\n"</span><span class="plain">); </span><span class="constant">INDENT</span><span class="plain">;</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<package xmlns=\"http://www.idpf.org/2007/opf\"\n"</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"xmlns:dc=\"http://purl.org/dc/elements/1.1/\"\n"</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"unique-identifier=\"bookid\" version=\"2.0\">\n"</span><span class="plain">); </span><span class="constant">INDENT</span><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Write the OPF metadata</span> <span class="cwebmacronumber">7.2.1</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Write the OPF manifest</span> <span class="cwebmacronumber">7.2.2</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Write the OPF spine</span> <span class="cwebmacronumber">7.2.3</span>><span class="plain">;</span>
|
||||
|
@ -663,15 +663,15 @@ impaired people.
|
|||
<span class="identifier">toc</span><span class="plain">);</span>
|
||||
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<?xml version='1.0' encoding='utf-8'?>\n"</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<!DOCTYPE ncx PUBLIC \"-</span><span class="comment">NISO//DTD ncx 2005-1//EN\"\n");</span>
|
||||
<span class="string">WRITE("</span><span class="plain"> \</span><span class="string">"http:</span><span class="comment">www.daisy.org/z3986/2005/ncx-2005-1.dtd\">\n");</span>
|
||||
<span class="string">WRITE("</span><span class="plain"><</span><span class="identifier">ncx</span><span class="plain"> </span><span class="identifier">xmlns</span><span class="plain">=\</span><span class="string">"http:</span><span class="comment">www.daisy.org/z3986/2005/ncx/\" version=\"2005-1\">\n");</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<!DOCTYPE ncx PUBLIC \"-//NISO//DTD ncx 2005-1//EN\"\n"</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" \"http://www.daisy.org/z3986/2005/ncx-2005-1.dtd\">\n"</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<ncx xmlns=\"http://www.daisy.org/z3986/2005/ncx/\" version=\"2005-1\">\n"</span><span class="plain">);</span>
|
||||
|
||||
<span class="string">int depth = 1; </span><span class="comment"> there are surely at least sections</span>
|
||||
<span class="string">if (LinkedLists::len(B->ebook_chapter_list) > 0) depth = 2;</span>
|
||||
<span class="string">if (LinkedLists::len(B->ebook_volume_list) > 0) depth = 3;</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">depth</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">; </span><span class="comment"> there are surely at least sections</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">LinkedLists::len</span><span class="plain">(</span><span class="identifier">B</span><span class="plain">-></span><span class="element">ebook_chapter_list</span><span class="plain">) > </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">depth</span><span class="plain"> = </span><span class="constant">2</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">LinkedLists::len</span><span class="plain">(</span><span class="identifier">B</span><span class="plain">-></span><span class="element">ebook_volume_list</span><span class="plain">) > </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">depth</span><span class="plain"> = </span><span class="constant">3</span><span class="plain">;</span>
|
||||
|
||||
<<span class="cwebmacro">Write the NCX metadata</span> <span class="cwebmacronumber">7.3.1</span>><span class="string">;</span>
|
||||
<<span class="cwebmacro">Write the NCX metadata</span> <span class="cwebmacronumber">7.3.1</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Write the NCX navigation map</span> <span class="cwebmacronumber">7.3.2</span>><span class="plain">;</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"</ncx>\n"</span><span class="plain">);</span>
|
||||
|
||||
|
|
|
@ -268,17 +268,17 @@ of which are variadic and have to be written out the old-fashioned way:
|
|||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTML::begin_head</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">HTML_file_state</span><span class="plain"> *</span><span class="identifier">hs</span><span class="plain"> = </span><span class="functiontext">Streams::get_HTML_file_state</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">hs</span><span class="plain">) && (</span><span class="identifier">hs</span><span class="plain">-></span><span class="element">XHTML_flag</span><span class="plain">)) {</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<!DOCTYPE html PUBLIC \"-</span><span class="comment">W3C//DTD XHTML 1.1//EN\" ");</span>
|
||||
<span class="string">WRITE("</span><span class="plain">\</span><span class="string">"http:</span><span class="comment">www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\n");</span>
|
||||
<span class="string">HTML_OPEN_WITH("</span><span class="identifier">html</span><span class="string">", "</span><span class="identifier">xmlns</span><span class="plain">=\</span><span class="string">"http:</span><span class="comment">www.w3.org/1999/xhtml\"");</span>
|
||||
<span class="string">} else {</span>
|
||||
<span class="string">WRITE("</span><span class="plain"><!</span><span class="identifier">DOCTYPE</span><span class="plain"> </span><span class="identifier">html</span><span class="plain"> </span><span class="identifier">PUBLIC</span><span class="plain"> \</span><span class="string">"-</span><span class="comment">W3C//DTD HTML 4.01 Transitional//EN\" ");</span>
|
||||
<span class="string">WRITE("</span><span class="plain">\</span><span class="string">"http:</span><span class="comment">www.w3.org/TR/html4/loose.dtd\">\n");</span>
|
||||
<span class="string">HTML_OPEN("</span><span class="identifier">html</span><span class="string">");</span>
|
||||
<span class="string">}</span>
|
||||
<span class="string">WRITE("</span><span class="plain">\</span><span class="identifier">n</span><span class="string">");</span>
|
||||
<span class="string">HTML_OPEN("</span><span class="identifier">head</span><span class="string">");</span>
|
||||
<span class="string">HTML_TAG_WITH("</span><span class="identifier">meta</span><span class="string">", "</span><span class="identifier">http</span><span class="plain">-</span><span class="identifier">equiv</span><span class="plain">=\</span><span class="string">"Content-Type\" content=\"text/html; charset=UTF-8\""</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" "</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\n"</span><span class="plain">);</span>
|
||||
<span class="identifier">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"html"</span><span class="plain">, </span><span class="string">"xmlns=\"http://www.w3.org/1999/xhtml\""</span><span class="plain">);</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" "</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\"http://www.w3.org/TR/html4/loose.dtd\">\n"</span><span class="plain">);</span>
|
||||
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"html"</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\n"</span><span class="plain">);</span>
|
||||
<span class="identifier">HTML_OPEN</span><span class="plain">(</span><span class="string">"head"</span><span class="plain">);</span>
|
||||
<span class="identifier">HTML_TAG_WITH</span><span class="plain">(</span><span class="string">"meta"</span><span class="plain">, </span><span class="string">"http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\""</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">CSS_file</span><span class="plain">)</span>
|
||||
<span class="identifier">HTML_TAG_WITH</span><span class="plain">(</span><span class="string">"link"</span><span class="plain">, </span><span class="string">"href=\"%/f\" rel=\"stylesheet\" type=\"text/css\""</span><span class="plain">, </span><span class="identifier">CSS_file</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
|
|
@ -193,7 +193,7 @@ to catch this sort of slip.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function VersionNumbers::writer is used in 1/fnd (<a href="1-fnd.html#SP8_1">§8.1</a>).</p>
|
||||
<p class="endnote">The function VersionNumbers::writer is used in 1/fm (<a href="1-fm.html#SP8_1">§8.1</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP7"></a><b>§7. </b>Parsing is much more of a slog. The following returns a null version if
|
||||
the text <code class="display"><span class="extract">T</span></code> is in any respect malformed, i.e., if it deviates from the
|
||||
|
|
|
@ -111,6 +111,7 @@ convenient to store them directly here than to use a dictionary.
|
|||
<span class="identifier">bd</span><span class="plain"> = </span><span class="functiontext">Bibliographic::set_datum</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">-></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">Bibliographic::set_datum</span><span class="plain">(</span><span class="identifier">Wm</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Code In Commentary Notation"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"|"</span><span class="plain">);</span>
|
||||
<span class="identifier">bd</span><span class="plain"> = </span><span class="functiontext">Bibliographic::set_datum</span><span class="plain">(</span><span class="identifier">Wm</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Code In Code Comments Notation"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"|"</span><span class="plain">);</span>
|
||||
<span class="identifier">bd</span><span class="plain"> = </span><span class="functiontext">Bibliographic::set_datum</span><span class="plain">(</span><span class="identifier">Wm</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Cross-References Notation"</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"//"</span><span class="plain">);</span>
|
||||
<span class="identifier">bd</span><span class="plain"> = </span><span class="functiontext">Bibliographic::set_datum</span><span class="plain">(</span><span class="identifier">Wm</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Web Syntax Version"</span><span class="plain">, </span><span class="identifier">NULL</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
<!--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="toc"><li><a href="#SP1">§1. Creation</a></li><li><a href="#SP4">§4. Dependencies</a></li><li><a href="#SP5">§5. Searching</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="#SP1">§1. Creation</a></li><li><a href="#SP4">§4. Dependencies</a></li><li><a href="#SP5">§5. Searching</a></li><li><a href="#SP9">§9. Resolving cross-reference names</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1"></a><b>§1. Creation. </b>Each web of source material discovered by Inweb is given one of the following.
|
||||
Ordinarily these are found only when reading in a web for weaving, tangling
|
||||
|
@ -51,6 +51,7 @@ means.
|
|||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">linked_list</span><span class="plain"> *</span><span class="identifier">dependencies</span><span class="plain">; </span><span class="comment"> of <code class="display"><span class="extract">module</span></code>: which other modules does this need?</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">module_tag</span><span class="plain">;</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">origin_marker</span><span class="plain">; </span><span class="comment"> one of the <code class="display"><span class="extract">*_MOM</span></code> values above</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">linked_list</span><span class="plain"> *</span><span class="identifier">chapters_md</span><span class="plain">; </span><span class="comment"> of <code class="display"><span class="extract">chapter_md</span></code>: just the ones in this module</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">linked_list</span><span class="plain"> *</span><span class="identifier">sections_md</span><span class="plain">; </span><span class="comment"> of <code class="display"><span class="extract">section_md</span></code>: just the ones in this module</span>
|
||||
<span class="constant">MEMORY_MANAGEMENT</span>
|
||||
<span class="plain">} </span><span class="reserved">module</span><span class="plain">;</span>
|
||||
|
@ -70,6 +71,7 @@ means.
|
|||
<span class="identifier">M</span><span class="plain">-></span><span class="element">dependencies</span><span class="plain"> = </span><span class="identifier">NEW_LINKED_LIST</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="element">origin_marker</span><span class="plain"> = </span><span class="identifier">m</span><span class="plain">;</span>
|
||||
<span class="identifier">M</span><span class="plain">-></span><span class="element">module_tag</span><span class="plain"> = </span><span class="identifier">I</span><span class="string">"miscellaneous"</span><span class="plain">;</span>
|
||||
<span class="identifier">M</span><span class="plain">-></span><span class="element">chapters_md</span><span class="plain"> = </span><span class="identifier">NEW_LINKED_LIST</span><span class="plain">(</span><span class="reserved">chapter_md</span><span class="plain">);</span>
|
||||
<span class="identifier">M</span><span class="plain">-></span><span class="element">sections_md</span><span class="plain"> = </span><span class="identifier">NEW_LINKED_LIST</span><span class="plain">(</span><span class="reserved">section_md</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">M</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
@ -206,6 +208,143 @@ sought if it looks like a web.
|
|||
|
||||
<p class="endnote">The function WebModules::exists is used in <a href="#SP7">§7</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP9"></a><b>§9. Resolving cross-reference names. </b>Suppose we are in module <code class="display"><span class="extract">from_M</span></code> and want to understand which section of
|
||||
a relevant web <code class="display"><span class="extract">text</span></code> might refer to. It could be the name of a module,
|
||||
either this one or one dependent on it; or the name of a chapter in one
|
||||
of those, or the shortened forms of those; or the name of a section. It
|
||||
may match multiple possibilities: we return how many, and if this is
|
||||
positive, we write the module in which the first find was made in <code class="display"><span class="extract">*return M</span></code>,
|
||||
the section in <code class="display"><span class="extract">*return_Sm</span></code>, and set the flag <code class="display"><span class="extract">*named_as_module</span></code> according
|
||||
to whether the reference was a bare module name (say, "foundation") or not.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph">Note that we consider first the possibilities within <code class="display"><span class="extract">from_M</span></code>: we only
|
||||
look at other modules if there are none. Thus, an unambiguous result in
|
||||
<code class="display"><span class="extract">from_M</span></code> is good enough, even if there are other possibilities elsewhere.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph">A reference in the form <code class="display"><span class="extract">module: reference</span></code> is taken to be in the module
|
||||
of that name: for example, <code class="display"><span class="extract">"foundation: Web Modules"</span></code> would find the
|
||||
section of code you are now reading.
|
||||
</p>
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="functiontext">WebModules::named_reference</span><span class="plain">(</span><span class="reserved">module</span><span class="plain"> **</span><span class="identifier">return_M</span><span class="plain">, </span><span class="reserved">section_md</span><span class="plain"> **</span><span class="identifier">return_Sm</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="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">title</span><span class="plain">, </span><span class="reserved">module</span><span class="plain"> *</span><span class="identifier">from_M</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">list</span><span class="plain">) {</span>
|
||||
<span class="plain">*</span><span class="identifier">return_M</span><span class="plain"> = </span><span class="identifier">NULL</span><span class="plain">; *</span><span class="identifier">return_Sm</span><span class="plain"> = </span><span class="identifier">NULL</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">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">finds</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">from_M</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">0</span><span class="plain">;</span>
|
||||
<span class="reserved">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="functiontext">Regexp::create_mr</span><span class="plain">();</span>
|
||||
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">seek</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">Regexp::match</span><span class="plain">(&</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"(%C+?): *(%c+?) *"</span><span class="plain">)) {</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">M</span><span class="plain">, </span><span class="reserved">module</span><span class="plain">, </span><span class="identifier">from_M</span><span class="plain">-></span><span class="element">dependencies</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq_insensitive</span><span class="plain">(</span><span class="identifier">M</span><span class="plain">-></span><span class="element">module_name</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">seek</span><span class="plain"> = </span><span class="identifier">mr</span><span class="plain">.</span><span class="identifier">exp</span><span class="plain">[1];</span>
|
||||
<<span class="cwebmacro">Look for references to chapters or sections in M</span> <span class="cwebmacronumber">9.1</span>><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="functiontext">Regexp::dispose_of</span><span class="plain">(&</span><span class="identifier">mr</span><span class="plain">);</span>
|
||||
<span class="identifier">seek</span><span class="plain"> = </span><span class="identifier">text</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">stage</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">; ((</span><span class="identifier">finds</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) && (</span><span class="identifier">stage</span><span class="plain"> <= </span><span class="constant">2</span><span class="plain">)); </span><span class="identifier">stage</span><span class="plain">++) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">stage</span><span class="plain"> == </span><span class="constant">1</span><span class="plain">) {</span>
|
||||
<span class="identifier">M</span><span class="plain"> = </span><span class="identifier">from_M</span><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Look for references to chapters or sections in M</span> <span class="cwebmacronumber">9.1</span>><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">stage</span><span class="plain"> == </span><span class="constant">2</span><span class="plain">) {</span>
|
||||
<span class="identifier">LOOP_OVER_LINKED_LIST</span><span class="plain">(</span><span class="identifier">M</span><span class="plain">, </span><span class="reserved">module</span><span class="plain">, </span><span class="identifier">from_M</span><span class="plain">-></span><span class="element">dependencies</span><span class="plain">)</span>
|
||||
<<span class="cwebmacro">Look for references to chapters or sections in M</span> <span class="cwebmacronumber">9.1</span>><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">return</span><span class="plain"> </span><span class="identifier">finds</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function WebModules::named_reference appears nowhere else.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP9_1"></a><b>§9.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Look for references to chapters or sections in M</span> <span class="cwebmacronumber">9.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">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">"no module"</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq_insensitive</span><span class="plain">(</span><span class="identifier">M</span><span class="plain">-></span><span class="element">module_name</span><span class="plain">, </span><span class="identifier">seek</span><span class="plain">))</span>
|
||||
<<span class="cwebmacro">Found first section in module</span> <span class="cwebmacronumber">9.1.1</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">M</span><span class="plain">-></span><span class="element">chapters_md</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="functiontext">Str::eq_insensitive</span><span class="plain">(</span><span class="identifier">Cm</span><span class="plain">-></span><span class="element">ch_title</span><span class="plain">, </span><span class="identifier">seek</span><span class="plain">)) ||</span>
|
||||
<span class="plain">(</span><span class="functiontext">Str::eq_insensitive</span><span class="plain">(</span><span class="identifier">Cm</span><span class="plain">-></span><span class="element">ch_basic_title</span><span class="plain">, </span><span class="identifier">seek</span><span class="plain">)) ||</span>
|
||||
<span class="plain">(</span><span class="functiontext">Str::eq_insensitive</span><span class="plain">(</span><span class="identifier">Cm</span><span class="plain">-></span><span class="element">ch_decorated_title</span><span class="plain">, </span><span class="identifier">seek</span><span class="plain">)))</span>
|
||||
<<span class="cwebmacro">Found first section in chapter</span> <span class="cwebmacronumber">9.1.2</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">-></span><span class="element">sections_md</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq_insensitive</span><span class="plain">(</span><span class="identifier">Sm</span><span class="plain">-></span><span class="element">sect_title</span><span class="plain">, </span><span class="identifier">seek</span><span class="plain">))</span>
|
||||
<<span class="cwebmacro">Found section by name</span> <span class="cwebmacronumber">9.1.3</span>><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP9">§9</a> (three times).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP9_1_1"></a><b>§9.1.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Found first section in module</span> <span class="cwebmacronumber">9.1.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="identifier">finds</span><span class="plain">++;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">finds</span><span class="plain"> == </span><span class="constant">1</span><span class="plain">) {</span>
|
||||
<span class="plain">*</span><span class="identifier">return_M</span><span class="plain"> = </span><span class="identifier">M</span><span class="plain">; *</span><span class="identifier">return_Sm</span><span class="plain"> = </span><span class="identifier">FIRST_IN_LINKED_LIST</span><span class="plain">(</span><span class="reserved">section_md</span><span class="plain">, </span><span class="identifier">M</span><span class="plain">-></span><span class="element">sections_md</span><span class="plain">);</span>
|
||||
<span class="plain">*</span><span class="identifier">named_as_module</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">"the %S module"</span><span class="plain">, </span><span class="identifier">M</span><span class="plain">-></span><span class="element">module_name</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">list</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">"(%d) Module '%S'\n"</span><span class="plain">, </span><span class="identifier">finds</span><span class="plain">, </span><span class="identifier">M</span><span class="plain">-></span><span class="element">module_name</span><span class="plain">);</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP9_1">§9.1</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP9_1_2"></a><b>§9.1.2. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Found first section in chapter</span> <span class="cwebmacronumber">9.1.2</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="identifier">finds</span><span class="plain">++;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">finds</span><span class="plain"> == </span><span class="constant">1</span><span class="plain">) {</span>
|
||||
<span class="plain">*</span><span class="identifier">return_M</span><span class="plain"> = </span><span class="identifier">M</span><span class="plain">; *</span><span class="identifier">return_Sm</span><span class="plain"> = </span><span class="identifier">FIRST_IN_LINKED_LIST</span><span class="plain">(</span><span class="reserved">section_md</span><span class="plain">, </span><span class="identifier">Cm</span><span class="plain">-></span><span class="element">sections_md</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">Cm</span><span class="plain">-></span><span class="element">ch_title</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">list</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">"(%d) Chapter '%S'\n"</span><span class="plain">, </span><span class="identifier">finds</span><span class="plain">, </span><span class="identifier">Cm</span><span class="plain">-></span><span class="element">ch_title</span><span class="plain">);</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP9_1">§9.1</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP9_1_3"></a><b>§9.1.3. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Found section by name</span> <span class="cwebmacronumber">9.1.3</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="identifier">finds</span><span class="plain">++;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">finds</span><span class="plain"> == </span><span class="constant">1</span><span class="plain">) {</span>
|
||||
<span class="plain">*</span><span class="identifier">return_M</span><span class="plain"> = </span><span class="identifier">M</span><span class="plain">; *</span><span class="identifier">return_Sm</span><span class="plain"> = </span><span class="identifier">Sm</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">Sm</span><span class="plain">-></span><span class="element">sect_title</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">list</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">"(%d) Section '%S'\n"</span><span class="plain">, </span><span class="identifier">finds</span><span class="plain">, </span><span class="identifier">Sm</span><span class="plain">-></span><span class="element">sect_title</span><span class="plain">);</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP9_1">§9.1</a>.</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="8-bdfw.html">Back to 'Bibliographic Data for Webs'</a></li><li><a href="8-bf.html">Continue with 'Build Files'</a></li></ul><hr class="tocbar">
|
||||
<!--End of weave-->
|
||||
|
|
|
@ -91,6 +91,8 @@ produce the following metadata structure.
|
|||
<span class="reserved">typedef</span><span class="plain"> </span><span class="reserved">struct</span><span class="plain"> </span><span class="reserved">chapter_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">ch_range</span><span class="plain">; </span><span class="comment"> e.g., <code class="display"><span class="extract">P</span></code> for Preliminaries, <code class="display"><span class="extract">7</span></code> for Chapter 7, <code class="display"><span class="extract">C</span></code> for Appendix C</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">ch_title</span><span class="plain">; </span><span class="comment"> e.g., "Chapter 3: Fresh Water Fish"</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">ch_basic_title</span><span class="plain">; </span><span class="comment"> e.g., "Chapter 3"</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">ch_decorated_title</span><span class="plain">; </span><span class="comment"> e.g., "Fresh Water Fish"</span>
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">rubric</span><span class="plain">; </span><span class="comment"> optional; without double-quotation marks</span>
|
||||
|
||||
<span class="reserved">struct</span><span class="plain"> </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">ch_language_name</span><span class="plain">; </span><span class="comment"> in which most of the sections are written</span>
|
||||
|
@ -127,7 +129,7 @@ produce the following metadata structure.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The structure section_md is accessed in 5/htm and here.</p>
|
||||
<p class="endnote">The structure section_md is accessed in 5/htm, 8/wm and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP5"></a><b>§5. Reading from the file system. </b>Webs can be stored in two ways: as a directory containing a multitude of files,
|
||||
in which case the pathname <code class="display"><span class="extract">P</span></code> is supplied; or as a single file with everything
|
||||
|
@ -700,7 +702,17 @@ with the same language as the main web unless stated otherwise.
|
|||
<pre class="displaydefn">
|
||||
<span class="reserved">chapter_md</span><span class="plain"> *</span><span class="identifier">Cm</span><span class="plain"> = </span><span class="identifier">CREATE</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="element">ch_range</span><span class="plain"> = </span><span class="functiontext">Str::duplicate</span><span class="plain">(</span><span class="identifier">new_chapter_range</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">line</span><span class="plain"> == </span><span class="identifier">NULL</span><span class="plain">) </span><span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"Nullity!\n"</span><span class="plain">);</span>
|
||||
<span class="identifier">Cm</span><span class="plain">-></span><span class="element">ch_title</span><span class="plain"> = </span><span class="functiontext">Str::duplicate</span><span class="plain">(</span><span class="identifier">line</span><span class="plain">);</span>
|
||||
<span class="reserved">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="functiontext">Regexp::create_mr</span><span class="plain">();</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Regexp::match</span><span class="plain">(&</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">Cm</span><span class="plain">-></span><span class="element">ch_title</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"(%c*?): *(%c*)"</span><span class="plain">)) {</span>
|
||||
<span class="identifier">Cm</span><span class="plain">-></span><span class="element">ch_basic_title</span><span class="plain"> = </span><span class="functiontext">Str::duplicate</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">Cm</span><span class="plain">-></span><span class="element">ch_decorated_title</span><span class="plain"> = </span><span class="functiontext">Str::duplicate</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="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
||||
<span class="identifier">Cm</span><span class="plain">-></span><span class="element">ch_basic_title</span><span class="plain"> = </span><span class="functiontext">Str::duplicate</span><span class="plain">(</span><span class="identifier">Cm</span><span class="plain">-></span><span class="element">ch_title</span><span class="plain">);</span>
|
||||
<span class="identifier">Cm</span><span class="plain">-></span><span class="element">ch_decorated_title</span><span class="plain"> = </span><span class="functiontext">Str::new</span><span class="plain">();</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="functiontext">Regexp::dispose_of</span><span class="plain">(&</span><span class="identifier">mr</span><span class="plain">);</span>
|
||||
<span class="identifier">Cm</span><span class="plain">-></span><span class="element">rubric</span><span class="plain"> = </span><span class="functiontext">Str::new</span><span class="plain">();</span>
|
||||
<span class="identifier">Cm</span><span class="plain">-></span><span class="element">ch_language_name</span><span class="plain"> = </span><span class="identifier">language_name</span><span class="plain">;</span>
|
||||
<span class="identifier">Cm</span><span class="plain">-></span><span class="element">imported</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
|
||||
|
@ -708,6 +720,7 @@ with the same language as the main web unless stated otherwise.
|
|||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">RS</span><span class="plain">-></span><span class="element">main_web_not_module</span><span class="plain">) </span><span class="identifier">Cm</span><span class="plain">-></span><span class="identifier">imported</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
|
||||
|
||||
<span class="identifier">ADD_TO_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">RS</span><span class="plain">-></span><span class="element">Wm</span><span class="plain">-></span><span class="element">chapters_md</span><span class="plain">);</span>
|
||||
<span class="identifier">ADD_TO_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">RS</span><span class="plain">-></span><span class="element">reading_from</span><span class="plain">-></span><span class="element">chapters_md</span><span class="plain">);</span>
|
||||
<span class="identifier">RS</span><span class="plain">-></span><span class="element">chapter_being_scanned</span><span class="plain"> = </span><span class="identifier">Cm</span><span class="plain">;</span>
|
||||
</pre>
|
||||
|
||||
|
@ -728,7 +741,6 @@ we also read in and process its file.
|
|||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">section_md</span><span class="plain"> *</span><span class="identifier">Sm</span><span class="plain"> = </span><span class="identifier">CREATE</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">CREATE</span><span class="plain">(</span><span class="reserved">section_md</span><span class="plain">);</span>
|
||||
<<span class="cwebmacro">Initialise the section structure</span> <span class="cwebmacronumber">7.2.2.1</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Add the section to the web and the current chapter</span> <span class="cwebmacronumber">7.2.2.2</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Work out the language and tangle target for the section</span> <span class="cwebmacronumber">7.2.2.3</span>><span class="plain">;</span>
|
||||
|
|
|
@ -30,7 +30,7 @@
|
|||
<p><span class="purpose">Absolute basics.</span></p>
|
||||
<ul class="sectionlist">
|
||||
<li>
|
||||
<p><a href="1-fnd.html"><spon class="sectiontitle">Foundation</span></a> -
|
||||
<p><a href="1-fm.html"><spon class="sectiontitle">Foundation Module</span></a> -
|
||||
<span class="purpose">Starting up and shutting down.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
|
@ -128,7 +128,7 @@
|
|||
<span class="purpose">A minimal library for handling C-style strings.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p><a href="4-ws.html"><spon class="sectiontitle">Wide Strings.w</span></a> -
|
||||
<p><a href="4-ws.html"><spon class="sectiontitle">Wide Strings</span></a> -
|
||||
<span class="purpose">A minimal library for handling wide C strings.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
|
|
|
@ -517,7 +517,7 @@ source:
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Main::error_in_web is used in 1/cnf (<a href="1-cnf.html#SP5">§5</a>), 2/tp (<a href="2-tp.html#SP1_1_6_3">§1.1.6.3</a>, <a href="2-tp.html#SP1_1_6_4">§1.1.6.4</a>, <a href="2-tp.html#SP1_1_6_7">§1.1.6.7</a>, <a href="2-tp.html#SP1_1_6_7_1">§1.1.6.7.1</a>, <a href="2-tp.html#SP1_1_6_5_1">§1.1.6.5.1</a>, <a href="2-tp.html#SP1_1_6_5_1_1">§1.1.6.5.1.1</a>, <a href="2-tp.html#SP1_1_6_5_1_2">§1.1.6.5.1.2</a>, <a href="2-tp.html#SP1_1_6_5_1_3">§1.1.6.5.1.3</a>, <a href="2-tp.html#SP1_1_6_5_1_4">§1.1.6.5.1.4</a>, <a href="2-tp.html#SP1_1_6_5_1_7">§1.1.6.5.1.7</a>, <a href="2-tp.html#SP3">§3</a>), 2/ec (<a href="2-ec.html#SP3_1">§3.1</a>, <a href="2-ec.html#SP3_2">§3.2</a>, <a href="2-ec.html#SP3_3">§3.3</a>), 3/ta (<a href="3-ta.html#SP4_1">§4.1</a>), 3/tt (<a href="3-tt.html#SP1_1_1_1">§1.1.1.1</a>, <a href="3-tt.html#SP3_1">§3.1</a>), 4/lm (<a href="4-lm.html#SP8">§8</a>), 4/cl (<a href="4-cl.html#SP2">§2</a>, <a href="4-cl.html#SP2_1">§2.1</a>, <a href="4-cl.html#SP2_4_2_1">§2.4.2.1</a>, <a href="4-cl.html#SP2_4_2_5">§2.4.2.5</a>, <a href="4-cl.html#SP10">§10</a>).</p>
|
||||
<p class="endnote">The function Main::error_in_web is used in 1/cnf (<a href="1-cnf.html#SP5">§5</a>), 2/tp (<a href="2-tp.html#SP1_1_6_3">§1.1.6.3</a>, <a href="2-tp.html#SP1_1_6_4">§1.1.6.4</a>, <a href="2-tp.html#SP1_1_6_7">§1.1.6.7</a>, <a href="2-tp.html#SP1_1_6_7_1">§1.1.6.7.1</a>, <a href="2-tp.html#SP1_1_6_5_1">§1.1.6.5.1</a>, <a href="2-tp.html#SP1_1_6_5_1_1">§1.1.6.5.1.1</a>, <a href="2-tp.html#SP1_1_6_5_1_2">§1.1.6.5.1.2</a>, <a href="2-tp.html#SP1_1_6_5_1_3">§1.1.6.5.1.3</a>, <a href="2-tp.html#SP1_1_6_5_1_4">§1.1.6.5.1.4</a>, <a href="2-tp.html#SP1_1_6_5_1_7">§1.1.6.5.1.7</a>, <a href="2-tp.html#SP3">§3</a>), 2/ec (<a href="2-ec.html#SP3_1">§3.1</a>, <a href="2-ec.html#SP3_2">§3.2</a>, <a href="2-ec.html#SP3_3">§3.3</a>), 3/ta (<a href="3-ta.html#SP4_1">§4.1</a>), 3/tt (<a href="3-tt.html#SP1_1_1_1">§1.1.1.1</a>, <a href="3-tt.html#SP3_1">§3.1</a>), 4/lm (<a href="4-lm.html#SP8">§8</a>), 4/cl (<a href="4-cl.html#SP2">§2</a>, <a href="4-cl.html#SP2_1">§2.1</a>, <a href="4-cl.html#SP2_4_2_1">§2.4.2.1</a>, <a href="4-cl.html#SP2_4_2_5">§2.4.2.5</a>, <a href="4-cl.html#SP10">§10</a>), 5/fm (<a href="5-fm.html#SP24">§24</a>).</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="1-bsc.html">Back to 'Basics'</a></li><li><a href="1-cnf.html">Continue with 'Configuration'</a></li></ul><hr class="tocbar">
|
||||
|
|
|
@ -60,7 +60,7 @@ to such a name, and to read it in. This structure holds the result:
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The structure weave_pattern is accessed in 1/pc, 3/ts, 3/ti, 3/tw, 5/wf, 5/tf, 5/hf, 5/rtt and here.</p>
|
||||
<p class="endnote">The structure weave_pattern is accessed in 1/pc, 3/ts, 3/ti, 3/tw, 5/fm, 5/tf, 5/hf, 5/rtt and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b>When a given web needs a pattern with a given name, this is where it comes.
|
||||
</p>
|
||||
|
|
|
@ -76,7 +76,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/cl, 4/is, 5/wf, 5/ptf, 5/tf, 5/hf, 6/mkf, 6/rw and here.</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/cl, 4/is, 5/fm, 5/ptf, 5/tf, 5/hf, 6/mkf, 6/rw and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2"></a><b>§2. </b>And for a chapter:
|
||||
</p>
|
||||
|
@ -96,7 +96,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/wf, 5/ptf, 5/tf, 5/hf, 6/mkf, 6/rw and here.</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, 6/mkf, 6/rw and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP3"></a><b>§3. </b>And lastly for a section.
|
||||
</p>
|
||||
|
@ -134,7 +134,7 @@ 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/lm, 4/as, 4/cl, 4/is, 5/wf, 5/ptf, 5/tf, 5/hf, 6/mkf, 6/rw and here.</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/lm, 4/as, 4/cl, 4/is, 5/fm, 5/ptf, 5/tf, 5/hf, 6/mkf, 6/rw and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP4"></a><b>§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:
|
||||
|
|
|
@ -339,7 +339,7 @@ in Aho, Sethi and Ullman, "Compilers: Principles, Techniques and Tools"
|
|||
<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">Str::start</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">Str::get</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">)) {</span>
|
||||
<span class="reserved">case</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">Str::len</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">) == </span><span class="constant">1</span><span class="plain">) </span><span class="reserved">break</span><span class="plain">; </span><span class="comment"> an isolated minus sign is an ordinary word</span>
|
||||
<span class="reserved">case</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">Str::len</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">) == </span><span class="constant">1</span><span class="plain">) </span><span class="reserved">break</span><span class="plain">; /* </span><span class="identifier">an</span><span class="plain"> </span><span class="identifier">isolated</span><span class="plain"> </span><span class="identifier">minus</span><span class="plain"> </span><span class="identifier">sign</span><span class="plain"> </span><span class="identifier">is</span><span class="plain"> </span><span class="identifier">an</span><span class="plain"> </span><span class="identifier">ordinary</span><span class="plain"> </span><span class="identifier">word</span><span class="plain"> */</span>
|
||||
<span class="comment"> and otherwise fall into...</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="character">'0'</span><span class="plain">: </span><span class="reserved">case</span><span class="plain"> </span><span class="character">'1'</span><span class="plain">: </span><span class="reserved">case</span><span class="plain"> </span><span class="character">'2'</span><span class="plain">: </span><span class="reserved">case</span><span class="plain"> </span><span class="character">'3'</span><span class="plain">: </span><span class="reserved">case</span><span class="plain"> </span><span class="character">'4'</span><span class="plain">:</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="character">'5'</span><span class="plain">: </span><span class="reserved">case</span><span class="plain"> </span><span class="character">'6'</span><span class="plain">: </span><span class="reserved">case</span><span class="plain"> </span><span class="character">'7'</span><span class="plain">: </span><span class="reserved">case</span><span class="plain"> </span><span class="character">'8'</span><span class="plain">: </span><span class="reserved">case</span><span class="plain"> </span><span class="character">'9'</span><span class="plain">: {</span>
|
||||
|
|
|
@ -125,7 +125,7 @@ the call comes from Program Control).
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The structure weave_target is accessed in 3/ti, 3/tw, 4/is, 5/wf, 5/tf, 5/hf, 5/rtt and here.</p>
|
||||
<p class="endnote">The structure weave_target is accessed in 3/ti, 3/tw, 4/is, 5/fm, 5/tf, 5/hf, 5/rtt and here.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2_2"></a><b>§2.2. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Compile a set of instructions for the weaver</span> <span class="cwebmacronumber">2.2</span>> =
|
||||
|
|
|
@ -39,6 +39,8 @@ where to put the result: and so we arrive at the front door of the routine
|
|||
</p>
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">source_line</span><span class="plain"> *</span><span class="identifier">current_weave_line</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="functiontext">Weaver::weave_source</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"> = &</span><span class="identifier">TO_struct</span><span class="plain">;</span>
|
||||
|
@ -218,6 +220,7 @@ where to put the result: and so we arrive at the front door of the routine
|
|||
<pre class="displaydefn">
|
||||
<span class="reserved">paragraph</span><span class="plain"> *</span><span class="identifier">current_paragraph</span><span class="plain"> = </span><span class="identifier">NULL</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">S</span><span class="plain">-></span><span class="element">first_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">L</span><span class="plain">-></span><span class="element">next_line</span><span class="plain">) {</span>
|
||||
<span class="identifier">current_weave_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">Tags::tagged_with</span><span class="plain">(</span><span class="identifier">L</span><span class="plain">-></span><span class="element">owning_paragraph</span><span class="plain">, </span><span class="identifier">wv</span><span class="plain">-></span><span class="element">theme_match</span><span class="plain">)) &&</span>
|
||||
<span class="plain">(</span><span class="functiontext">LanguageMethods::skip_in_weaving</span><span class="plain">(</span><span class="identifier">S</span><span class="plain">-></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="constant">FALSE</span><span class="plain">)) {</span>
|
||||
<span class="identifier">lines_woven</span><span class="plain">++;</span>
|
||||
|
|
|
@ -194,7 +194,7 @@ files to crash Inweb.)
|
|||
<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"><</span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">line</span><span class="plain">); </span><span class="identifier">i</span><span class="plain">++) {</span>
|
||||
<span class="identifier">wchar_t</span><span class="plain"> </span><span class="identifier">c</span><span class="plain"> = </span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">line</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c_mode</span><span class="plain"> == </span><span class="constant">2</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">ACMESupport::text_at</span><span class="plain">(</span><span class="identifier">line</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">-></span><span class="element">multiline_comment_close</span><span class="plain">)) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::includes_at</span><span class="plain">(</span><span class="identifier">line</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">-></span><span class="element">multiline_comment_close</span><span class="plain">)) {</span>
|
||||
<span class="identifier">c_mode</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">; </span><span class="identifier">c_end</span><span class="plain"> = </span><span class="identifier">i</span><span class="plain">; </span><span class="identifier">i</span><span class="plain"> += </span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">-></span><span class="element">multiline_comment_close</span><span class="plain">) - </span><span class="constant">1</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
||||
|
@ -205,28 +205,30 @@ files to crash Inweb.)
|
|||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">q_mode</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">q_mode</span><span class="plain"> = </span><span class="constant">2</span><span class="plain">;</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">q_mode</span><span class="plain"> == </span><span class="constant">2</span><span class="plain">) </span><span class="identifier">q_mode</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> == </span><span class="functiontext">Str::get_first_char</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">-></span><span class="identifier">character_literal</span><span class="plain">)) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">q_mode</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">q_mode</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">;</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">q_mode</span><span class="plain"> == </span><span class="constant">1</span><span class="plain">) </span><span class="identifier">q_mode</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">ACMESupport::text_at</span><span class="plain">(</span><span class="identifier">line</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">-></span><span class="element">multiline_comment_open</span><span class="plain">)) {</span>
|
||||
<span class="identifier">c_mode</span><span class="plain"> = </span><span class="constant">2</span><span class="plain">; </span><span class="identifier">c_position</span><span class="plain"> = </span><span class="identifier">i</span><span class="plain">; </span><span class="identifier">non_white_space</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
|
||||
<span class="identifier">i</span><span class="plain"> += </span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">-></span><span class="element">multiline_comment_open</span><span class="plain">) - </span><span class="constant">1</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c_mode</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">ACMESupport::text_at</span><span class="plain">(</span><span class="identifier">line</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">-></span><span class="element">line_comment</span><span class="plain">)) {</span>
|
||||
<span class="identifier">c_mode</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">; </span><span class="identifier">c_position</span><span class="plain"> = </span><span class="identifier">i</span><span class="plain">; </span><span class="identifier">c_end</span><span class="plain"> = </span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">line</span><span class="plain">); </span><span class="identifier">non_white_space</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
|
||||
<span class="identifier">i</span><span class="plain"> += </span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">-></span><span class="element">line_comment</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">q_mode</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c</span><span class="plain"> == </span><span class="functiontext">Str::get_first_char</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">-></span><span class="identifier">character_literal</span><span class="plain">)) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">q_mode</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">q_mode</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">;</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="identifier">q_mode</span><span class="plain"> == </span><span class="constant">1</span><span class="plain">) </span><span class="identifier">q_mode</span><span class="plain"> = </span><span class="constant">0</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">ACMESupport::text_at</span><span class="plain">(</span><span class="identifier">line</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">-></span><span class="element">whole_line_comment</span><span class="plain">)) {</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">material_exists</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
|
||||
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">j</span><span class="plain">=0; </span><span class="identifier">j</span><span class="plain"><</span><span class="identifier">i</span><span class="plain">; </span><span class="identifier">j</span><span class="plain">++)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (!(</span><span class="functiontext">Characters::is_whitespace</span><span class="plain">(</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">line</span><span class="plain">, </span><span class="identifier">j</span><span class="plain">))))</span>
|
||||
<span class="identifier">material_exists</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">material_exists</span><span class="plain"> == </span><span class="constant">FALSE</span><span class="plain">) {</span>
|
||||
<span class="identifier">c_mode</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">; </span><span class="identifier">c_position</span><span class="plain"> = </span><span class="identifier">i</span><span class="plain">; </span><span class="identifier">c_end</span><span class="plain"> = </span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">line</span><span class="plain">);</span>
|
||||
<span class="identifier">non_white_space</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
|
||||
<span class="identifier">i</span><span class="plain"> += </span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">-></span><span class="element">whole_line_comment</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="functiontext">Str::includes_at</span><span class="plain">(</span><span class="identifier">line</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">-></span><span class="element">multiline_comment_open</span><span class="plain">)) {</span>
|
||||
<span class="identifier">c_mode</span><span class="plain"> = </span><span class="constant">2</span><span class="plain">; </span><span class="identifier">c_position</span><span class="plain"> = </span><span class="identifier">i</span><span class="plain">; </span><span class="identifier">non_white_space</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
|
||||
<span class="identifier">i</span><span class="plain"> += </span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">-></span><span class="element">multiline_comment_open</span><span class="plain">) - </span><span class="constant">1</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">c_mode</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::includes_at</span><span class="plain">(</span><span class="identifier">line</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">-></span><span class="element">line_comment</span><span class="plain">)) {</span>
|
||||
<span class="identifier">c_mode</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">; </span><span class="identifier">c_position</span><span class="plain"> = </span><span class="identifier">i</span><span class="plain">; </span><span class="identifier">c_end</span><span class="plain"> = </span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">line</span><span class="plain">); </span><span class="identifier">non_white_space</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
|
||||
<span class="identifier">i</span><span class="plain"> += </span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">-></span><span class="element">line_comment</span><span class="plain">) - </span><span class="constant">1</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::includes_at</span><span class="plain">(</span><span class="identifier">line</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">, </span><span class="identifier">pl</span><span class="plain">-></span><span class="element">whole_line_comment</span><span class="plain">)) {</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">material_exists</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
|
||||
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">j</span><span class="plain">=0; </span><span class="identifier">j</span><span class="plain"><</span><span class="identifier">i</span><span class="plain">; </span><span class="identifier">j</span><span class="plain">++)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (!(</span><span class="functiontext">Characters::is_whitespace</span><span class="plain">(</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">line</span><span class="plain">, </span><span class="identifier">j</span><span class="plain">))))</span>
|
||||
<span class="identifier">material_exists</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">material_exists</span><span class="plain"> == </span><span class="constant">FALSE</span><span class="plain">) {</span>
|
||||
<span class="identifier">c_mode</span><span class="plain"> = </span><span class="constant">1</span><span class="plain">; </span><span class="identifier">c_position</span><span class="plain"> = </span><span class="identifier">i</span><span class="plain">; </span><span class="identifier">c_end</span><span class="plain"> = </span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">line</span><span class="plain">);</span>
|
||||
<span class="identifier">non_white_space</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
|
||||
<span class="identifier">i</span><span class="plain"> += </span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">-></span><span class="element">whole_line_comment</span><span class="plain">) - </span><span class="constant">1</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
|
@ -244,16 +246,6 @@ files to crash Inweb.)
|
|||
<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">ACMESupport::text_at</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">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">, </span><span class="reserved">text_stream</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="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">pattern</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="reserved">if</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="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">i</span><span class="plain"> + </span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">pattern</span><span class="plain">) > </span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">line</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="identifier">LOOP_THROUGH_TEXT</span><span class="plain">(</span><span class="identifier">pos</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="functiontext">Str::get</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">) != </span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">line</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">++))</span>
|
||||
<span class="reserved">return</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="constant">TRUE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
@ -280,8 +272,6 @@ files to crash Inweb.)
|
|||
|
||||
<p class="endnote">The function ACMESupport::parse_comment is used in <a href="#SP1">§1</a>.</p>
|
||||
|
||||
<p class="endnote">The function ACMESupport::text_at is used in 4/tp (<a href="4-tp.html#SP2_2">§2.2</a>, <a href="4-tp.html#SP3">§3</a>, <a href="4-tp.html#SP5">§5</a>), 5/wf (<a href="5-wf.html#SP23">§23</a>), 5/hf (<a href="5-hf.html#SP10">§10</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP4"></a><b>§4. </b>This is here so that tangling the Standard Rules extension doesn't insert
|
||||
a spurious comment betraying Inweb's involvement in the process.
|
||||
</p>
|
||||
|
|
|
@ -310,7 +310,7 @@ the sake of an illustrative example, let's suppose that line is:
|
|||
<span class="functiontext">Str::trim_white_space</span><span class="plain">(</span><span class="identifier">p</span><span class="plain">);</span>
|
||||
<<span class="cwebmacro">Remove C type modifiers from the front of p</span> <span class="cwebmacronumber">2.2.3.1</span>><span class="plain">;</span>
|
||||
<span class="reserved">string_position</span><span class="plain"> </span><span class="identifier">pos</span><span class="plain"> = </span><span class="functiontext">Str::start</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">Str::get</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">) != </span><span class="character">'/'</span><span class="plain">) { </span><span class="comment"> a slash must introduce a comment here</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::get</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">) != </span><span class="character">'/'</span><span class="plain">) { /* </span><span class="identifier">a</span><span class="plain"> </span><span class="identifier">slash</span><span class="plain"> </span><span class="identifier">must</span><span class="plain"> </span><span class="identifier">introduce</span><span class="plain"> </span><span class="identifier">a</span><span class="plain"> </span><span class="identifier">comment</span><span class="plain"> </span><span class="identifier">here</span><span class="plain"> */</span>
|
||||
<<span class="cwebmacro">Move pos past the type name</span> <span class="cwebmacronumber">2.2.3.2</span>><span class="plain">;</span>
|
||||
<<span class="cwebmacro">Move pos past any typographical type modifiers</span> <span class="cwebmacronumber">2.2.3.3</span>><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::in_range</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">)) {</span>
|
||||
|
|
|
@ -343,7 +343,7 @@ adds generic method calls to give effect to the settings in the definition.
|
|||
|
||||
<span class="functiontext">Str::trim_white_space</span><span class="plain">(</span><span class="identifier">line</span><span class="plain">); </span><span class="comment"> ignore trailing space</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">line</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="comment"> ignore blank lines</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::get_first_char</span><span class="plain">(</span><span class="identifier">line</span><span class="plain">) == </span><span class="character">'#'</span><span class="plain">) </span><span class="reserved">return</span><span class="plain">; </span><span class="comment"> lines opening with <code class="display"><span class="extract">#</span></code> are comments</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::get_first_char</span><span class="plain">(</span><span class="identifier">line</span><span class="plain">) == </span><span class="character">'#'</span><span class="plain">) </span><span class="reserved">return</span><span class="plain">; /* </span><span class="identifier">lines</span><span class="plain"> </span><span class="identifier">opening</span><span class="plain"> </span><span class="identifier">with</span><span class="plain"> |#| </span><span class="identifier">are</span><span class="plain"> </span><span class="identifier">comments</span><span class="plain"> */</span>
|
||||
|
||||
<span class="reserved">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="functiontext">Regexp::create_mr</span><span class="plain">();</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">state</span><span class="plain">-></span><span class="identifier">current_block</span><span class="plain">) </span><<span class="cwebmacro">Syntax inside a colouring program</span> <span class="cwebmacronumber">8.2</span>>
|
||||
|
|
|
@ -173,26 +173,26 @@ its colouring program.
|
|||
<span class="reserved">if</span><span class="plain"> ((</span><span class="functiontext">Str::get_at</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="plain">(</span><span class="functiontext">Str::get_at</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">IDENTIFIER_COLOUR</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">Str::get_at</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="functiontext">ACMESupport::text_at</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="identifier">pl</span><span class="plain">-></span><span class="element">binary_literal_prefix</span><span class="plain">)) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::includes_at</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="identifier">pl</span><span class="plain">-></span><span class="element">binary_literal_prefix</span><span class="plain">)) {</span>
|
||||
<span class="identifier">base</span><span class="plain"> = </span><span class="constant">2</span><span class="plain">;</span>
|
||||
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">j</span><span class="plain">=0; </span><span class="identifier">j</span><span class="plain"><</span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">-></span><span class="element">binary_literal_prefix</span><span class="plain">); </span><span class="identifier">j</span><span class="plain">++)</span>
|
||||
<span class="functiontext">Str::put_at</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="identifier">j</span><span class="plain">, (</span><span class="reserved">char</span><span class="plain">) </span><span class="constant">CONSTANT_COLOUR</span><span class="plain">);</span>
|
||||
<span class="identifier">dec_possible</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
|
||||
<span class="reserved">continue</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">ACMESupport::text_at</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="identifier">pl</span><span class="plain">-></span><span class="element">octal_literal_prefix</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">Str::includes_at</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="identifier">pl</span><span class="plain">-></span><span class="element">octal_literal_prefix</span><span class="plain">)) {</span>
|
||||
<span class="identifier">base</span><span class="plain"> = </span><span class="constant">8</span><span class="plain">;</span>
|
||||
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">j</span><span class="plain">=0; </span><span class="identifier">j</span><span class="plain"><</span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">-></span><span class="element">octal_literal_prefix</span><span class="plain">); </span><span class="identifier">j</span><span class="plain">++)</span>
|
||||
<span class="functiontext">Str::put_at</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="identifier">j</span><span class="plain">, (</span><span class="reserved">char</span><span class="plain">) </span><span class="constant">CONSTANT_COLOUR</span><span class="plain">);</span>
|
||||
<span class="identifier">dec_possible</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
|
||||
<span class="reserved">continue</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">ACMESupport::text_at</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="identifier">pl</span><span class="plain">-></span><span class="element">hexadecimal_literal_prefix</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">Str::includes_at</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="identifier">pl</span><span class="plain">-></span><span class="element">hexadecimal_literal_prefix</span><span class="plain">)) {</span>
|
||||
<span class="identifier">base</span><span class="plain"> = </span><span class="constant">16</span><span class="plain">;</span>
|
||||
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">j</span><span class="plain">=0; </span><span class="identifier">j</span><span class="plain"><</span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">pl</span><span class="plain">-></span><span class="element">hexadecimal_literal_prefix</span><span class="plain">); </span><span class="identifier">j</span><span class="plain">++)</span>
|
||||
<span class="functiontext">Str::put_at</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="identifier">j</span><span class="plain">, (</span><span class="reserved">char</span><span class="plain">) </span><span class="constant">CONSTANT_COLOUR</span><span class="plain">);</span>
|
||||
<span class="identifier">dec_possible</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
|
||||
<span class="reserved">continue</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="functiontext">ACMESupport::text_at</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="identifier">pl</span><span class="plain">-></span><span class="element">negative_literal_prefix</span><span class="plain">)) &&</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="functiontext">Str::includes_at</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="identifier">pl</span><span class="plain">-></span><span class="element">negative_literal_prefix</span><span class="plain">)) &&</span>
|
||||
<span class="plain">(</span><span class="identifier">dec_possible</span><span class="plain">) && (</span><span class="identifier">base</span><span class="plain"> == </span><span class="constant">0</span><span class="plain">)) {</span>
|
||||
<span class="identifier">base</span><span class="plain"> = </span><span class="constant">10</span><span class="plain">;</span>
|
||||
<span class="functiontext">Str::put_at</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="reserved">char</span><span class="plain">) </span><span class="constant">CONSTANT_COLOUR</span><span class="plain">);</span>
|
||||
|
@ -314,7 +314,7 @@ rule across the whole snippet before moving on to the next.
|
|||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">L</span><span class="plain"> = </span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">block</span><span class="plain">-></span><span class="element">run_instance</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">L</span><span class="plain"> >= </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">count</span><span class="plain">=1, </span><span class="identifier">i</span><span class="plain">=</span><span class="identifier">from</span><span class="plain">; </span><span class="identifier">i</span><span class="plain"><=</span><span class="identifier">to</span><span class="plain"> - </span><span class="identifier">L</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">ACMESupport::text_at</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="identifier">block</span><span class="plain">-></span><span class="element">run_instance</span><span class="plain">)) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::includes_at</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="identifier">block</span><span class="plain">-></span><span class="element">run_instance</span><span class="plain">)) {</span>
|
||||
<span class="functiontext">Painter::execute_rule</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">i</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">+</span><span class="identifier">L</span><span class="plain">, </span><span class="identifier">count</span><span class="plain">++);</span>
|
||||
<span class="identifier">i</span><span class="plain"> += </span><span class="identifier">L</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
|
@ -422,7 +422,7 @@ rule across the whole snippet before moving on to the next.
|
|||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">rule</span><span class="plain">-></span><span class="identifier">match_prefix</span><span class="plain"> == </span><span class="constant">SPACED_RULE_PREFIX</span><span class="plain">) && (</span><span class="identifier">pos</span><span class="plain"> == </span><span class="identifier">from</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">if</span><span class="plain"> (</span><span class="functiontext">ACMESupport::text_at</span><span class="plain">(</span><span class="identifier">matter</span><span class="plain">,</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::includes_at</span><span class="plain">(</span><span class="identifier">matter</span><span class="plain">,</span>
|
||||
<span class="identifier">pos</span><span class="plain">-</span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">rule</span><span class="plain">-></span><span class="element">match_text</span><span class="plain">), </span><span class="identifier">rule</span><span class="plain">-></span><span class="element">match_text</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="constant">FALSE</span><span class="plain">;</span>
|
||||
<span class="identifier">rule</span><span class="plain">-></span><span class="element">fix_position</span><span class="plain"> = </span><span class="identifier">pos</span><span class="plain">-</span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">rule</span><span class="plain">-></span><span class="element">match_text</span><span class="plain">);</span>
|
||||
|
@ -435,7 +435,7 @@ rule across the whole snippet before moving on to the next.
|
|||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">rule</span><span class="plain">-></span><span class="identifier">match_prefix</span><span class="plain"> == </span><span class="constant">SPACED_RULE_SUFFIX</span><span class="plain">) && (</span><span class="identifier">pos</span><span class="plain"> == </span><span class="identifier">from</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">if</span><span class="plain"> (</span><span class="functiontext">ACMESupport::text_at</span><span class="plain">(</span><span class="identifier">matter</span><span class="plain">, </span><span class="identifier">pos</span><span class="plain">, </span><span class="identifier">rule</span><span class="plain">-></span><span class="element">match_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="functiontext">Str::includes_at</span><span class="plain">(</span><span class="identifier">matter</span><span class="plain">, </span><span class="identifier">pos</span><span class="plain">, </span><span class="identifier">rule</span><span class="plain">-></span><span class="element">match_text</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="constant">FALSE</span><span class="plain">;</span>
|
||||
<span class="identifier">rule</span><span class="plain">-></span><span class="element">fix_position</span><span class="plain"> = </span><span class="identifier">pos</span><span class="plain">;</span>
|
||||
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<title>Weave Formats</title>
|
||||
<title>Format Methods</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">
|
||||
|
@ -23,10 +23,10 @@
|
|||
</nav>
|
||||
<main role="main">
|
||||
|
||||
<!--Weave of 'Weave Formats' 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>Weave Formats</b></li></ul><p class="purpose">To characterise the different weaving output formats (text, typeset, web and so on).</p>
|
||||
<!--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="toc"><li><a href="#SP1">§1. Formats</a></li><li><a href="#SP3">§3. Creation</a></li><li><a href="#SP4">§4. Methods</a></li><li><a href="#SP29">§29. Post-processing</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="#SP1">§1. Formats</a></li><li><a href="#SP3">§3. Creation</a></li><li><a href="#SP4">§4. Methods</a></li><li><a href="#SP30">§30. Post-processing</a></li></ul><hr class="tocbar">
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1"></a><b>§1. Formats. </b>Exactly as in the previous chapter, each format expresses its behaviour
|
||||
through optional method calls.
|
||||
|
@ -61,7 +61,7 @@ through optional method calls.
|
|||
|
||||
<p class="endnote">The function Formats::create_weave_format is used in 5/ptf (<a href="5-ptf.html#SP1">§1</a>), 5/tf (<a href="5-tf.html#SP1_1">§1.1</a>, <a href="5-tf.html#SP1_2">§1.2</a>, <a href="5-tf.html#SP1_3">§1.3</a>), 5/hf (<a href="5-hf.html#SP1_1">§1.1</a>, <a href="5-hf.html#SP1_2">§1.2</a>).</p>
|
||||
|
||||
<p class="endnote">The function Formats::find_by_name is used in <a href="#SP31">§31</a>, 1/ptt (<a href="1-ptt.html#SP3_2">§3.2</a>).</p>
|
||||
<p class="endnote">The function Formats::find_by_name is used in <a href="#SP32">§32</a>, 1/ptt (<a href="1-ptt.html#SP3_2">§3.2</a>).</p>
|
||||
|
||||
<p class="endnote">The structure weave_format is accessed in 3/ts and here.</p>
|
||||
|
||||
|
@ -275,10 +275,11 @@ the benefit of the TeX format, and all other formats can leave them be.
|
|||
<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</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">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">-></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">PARAGRAPH_HEADING_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">TeX_macro</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">, </span><span class="identifier">heading_text</span><span class="plain">, </span><span class="identifier">chaptermark</span><span class="plain">, </span><span class="identifier">sectionmark</span><span class="plain">, </span><span class="identifier">weight</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">PARAGRAPH_HEADING_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">TeX_macro</span><span class="plain">, </span><span class="identifier">S</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">,</span>
|
||||
<span class="identifier">heading_text</span><span class="plain">, </span><span class="identifier">chaptermark</span><span class="plain">, </span><span class="identifier">sectionmark</span><span class="plain">, </span><span class="identifier">weight</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
|
@ -367,7 +368,7 @@ drably in a uniform <code class="display"><span class="extract">EXTRACT_COLOUR</
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Formats::url is used in <a href="#SP23">§23</a>, 5/hf (<a href="5-hf.html#SP10">§10</a>).</p>
|
||||
<p class="endnote">The function Formats::url is used in <a href="#SP23_2">§23.2</a>, <a href="#SP23_3_1">§23.3.1</a>, 5/hf (<a href="5-hf.html#SP10_1">§10.1</a>, <a href="5-hf.html#SP10_2_1">§10.2.1</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP13"></a><b>§13. </b>This method produces the <code class="display"><span class="extract">>> Example</span></code> bits of example source text, really
|
||||
a convenience for Inform 7 code commentary.
|
||||
|
@ -379,7 +380,8 @@ a convenience for Inform 7 code commentary.
|
|||
</pre>
|
||||
|
||||
<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="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</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">-></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>
|
||||
|
@ -610,7 +612,7 @@ nothing.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function Formats::change_colour is used in 5/tf (<a href="5-tf.html#SP8_2">§8.2</a>, <a href="5-tf.html#SP15">§15</a>), 5/hf (<a href="5-hf.html#SP10_1">§10.1</a>).</p>
|
||||
<p class="endnote">The function Formats::change_colour is used in 5/tf (<a href="5-tf.html#SP8_2">§8.2</a>, <a href="5-tf.html#SP15">§15</a>), 5/hf (<a href="5-hf.html#SP10_3">§10.3</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP23"></a><b>§23. </b>The following takes text, divides it up at stroke-mark boundaries —
|
||||
that is, <code class="display"><span class="extract">this is inside</span></code>, this is outside — and sends contiguous pieces
|
||||
|
@ -628,49 +630,23 @@ as appropriate.
|
|||
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">Formats::text_r</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">notation</span><span class="plain"> = </span><span class="functiontext">Bibliographic::get_datum</span><span class="plain">(</span><span class="identifier">wv</span><span class="plain">-></span><span class="element">weave_web</span><span class="plain">-></span><span class="element">md</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">Bibliographic::get_datum</span><span class="plain">(</span><span class="identifier">wv</span><span class="plain">-></span><span class="element">weave_web</span><span class="plain">-></span><span class="element">md</span><span class="plain">,</span>
|
||||
<span class="plain">(</span><span class="identifier">comments</span><span class="plain">)?(</span><span class="identifier">I</span><span class="string">"Code In Code Comments Notation"</span><span class="plain">):(</span><span class="identifier">I</span><span class="string">"Code In Commentary Notation"</span><span class="plain">));</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::ne</span><span class="plain">(</span><span class="identifier">notation</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Off"</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"> < </span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">id</span><span class="plain">); </span><span class="identifier">i</span><span class="plain">++) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">id</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">Str::len</span><span class="plain">(</span><span class="identifier">notation</span><span class="plain">) - </span><span class="constant">1</span><span class="plain">;</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">ACMESupport::text_at</span><span class="plain">(</span><span class="identifier">id</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">, </span><span class="identifier">notation</span><span class="plain">)) {</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">before</span><span class="plain">);</span>
|
||||
<span class="functiontext">Str::copy</span><span class="plain">(</span><span class="identifier">before</span><span class="plain">, </span><span class="identifier">id</span><span class="plain">); </span><span class="functiontext">Str::truncate</span><span class="plain">(</span><span class="identifier">before</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">);</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">after</span><span class="plain">);</span>
|
||||
<span class="functiontext">Str::substr</span><span class="plain">(</span><span class="identifier">after</span><span class="plain">, </span><span class="functiontext">Str::at</span><span class="plain">(</span><span class="identifier">id</span><span class="plain">, </span><span class="identifier">i</span><span class="plain"> + </span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">notation</span><span class="plain">)), </span><span class="functiontext">Str::end</span><span class="plain">(</span><span class="identifier">id</span><span class="plain">));</span>
|
||||
<span class="functiontext">Formats::text_r</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">Formats::text_r</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">FALSE:TRUE</span><span class="plain">, </span><span class="identifier">comments</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">before</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">after</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::ne</span><span class="plain">(</span><span class="identifier">code_in_comments_notation</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Off"</span><span class="plain">)) </span><<span class="cwebmacro">Split text and code extracts</span> <span class="cwebmacronumber">23.1</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="constant">FALSE</span><span class="plain">) </span><<span class="cwebmacro">Recognose hyperlinks</span> <span class="cwebmacronumber">23.2</span>><span class="plain">;</span>
|
||||
|
||||
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">xref_notation</span><span class="plain"> = </span><span class="functiontext">Bibliographic::get_datum</span><span class="plain">(</span><span class="identifier">wv</span><span class="plain">-></span><span class="element">weave_web</span><span class="plain">-></span><span class="element">md</span><span class="plain">,</span>
|
||||
<span class="identifier">I</span><span class="string">"Cross-References Notation"</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::ne</span><span class="plain">(</span><span class="identifier">xref_notation</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Off"</span><span class="plain">)) </span><<span class="cwebmacro">Recognise cross-references</span> <span class="cwebmacronumber">23.3</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="functiontext">Formats::source_fragment</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>
|
||||
<span class="functiontext">Formats::text_fragment</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">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"> < </span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">id</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">within</span><span class="plain"> == </span><span class="constant">FALSE</span><span class="plain">) &&</span>
|
||||
<span class="plain">((</span><span class="functiontext">ACMESupport::text_at</span><span class="plain">(</span><span class="identifier">id</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"http:</span><span class="comment">")) <code class="display"></code></span>
|
||||
<span class="string">(ACMESupport::text_at(id, i, I"</span><span class="identifier">https:</span><span class="comment">")))) {</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">before</span><span class="plain">);</span>
|
||||
<span class="functiontext">Str::copy</span><span class="plain">(</span><span class="identifier">before</span><span class="plain">, </span><span class="identifier">id</span><span class="plain">); </span><span class="functiontext">Str::truncate</span><span class="plain">(</span><span class="identifier">before</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">);</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">after</span><span class="plain">);</span>
|
||||
<span class="functiontext">Str::substr</span><span class="plain">(</span><span class="identifier">after</span><span class="plain">, </span><span class="functiontext">Str::at</span><span class="plain">(</span><span class="identifier">id</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">), </span><span class="functiontext">Str::end</span><span class="plain">(</span><span class="identifier">id</span><span class="plain">));</span>
|
||||
<span class="reserved">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="functiontext">Regexp::create_mr</span><span class="plain">();</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Regexp::match</span><span class="plain">(&</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">after</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"(https*:</span><span class="comment">%C+)(%c*)")) {</span>
|
||||
<span class="string">Formats::text_r(OUT, wv, before, within, comments);</span>
|
||||
<span class="string">Formats::url(OUT, wv, mr.exp[0], mr.exp[0], TRUE);</span>
|
||||
<span class="string">Formats::text_r(OUT, wv, mr.exp[1], within, comments);</span>
|
||||
<span class="string">return;</span>
|
||||
<span class="string">}</span>
|
||||
<span class="string">DISCARD_TEXT(before);</span>
|
||||
<span class="string">DISCARD_TEXT(after);</span>
|
||||
<span class="string">}</span>
|
||||
<span class="string">}</span>
|
||||
<span class="string">if (within) {</span>
|
||||
<span class="string">Formats::source_fragment(OUT, wv, id);</span>
|
||||
<span class="string">} else {</span>
|
||||
<span class="string">Formats::text_fragment(OUT, wv, id);</span>
|
||||
<span class="string">}</span>
|
||||
<span class="string">}</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
@ -679,9 +655,172 @@ as appropriate.
|
|||
|
||||
<p class="endnote">The function Formats::text_comment is used in 5/tf (<a href="5-tf.html#SP24_2">§24.2</a>), 5/hf (<a href="5-hf.html#SP10">§10</a>).</p>
|
||||
|
||||
<p class="endnote">The function Formats::text_r appears nowhere else.</p>
|
||||
<p class="endnote">The function Formats::text_r is used in <a href="#SP23_1">§23.1</a>, <a href="#SP23_2">§23.2</a>, <a href="#SP23_3_1">§23.3.1</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP24"></a><b>§24. </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="SP23_1"></a><b>§23.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Split text and code extracts</span> <span class="cwebmacronumber">23.1</span>> =
|
||||
</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">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain"> < </span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">id</span><span class="plain">); </span><span class="identifier">i</span><span class="plain">++) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">id</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">Str::len</span><span class="plain">(</span><span class="identifier">code_in_comments_notation</span><span class="plain">) - </span><span class="constant">1</span><span class="plain">;</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::includes_at</span><span class="plain">(</span><span class="identifier">id</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">, </span><span class="identifier">code_in_comments_notation</span><span class="plain">)) {</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">before</span><span class="plain">);</span>
|
||||
<span class="functiontext">Str::copy</span><span class="plain">(</span><span class="identifier">before</span><span class="plain">, </span><span class="identifier">id</span><span class="plain">); </span><span class="functiontext">Str::truncate</span><span class="plain">(</span><span class="identifier">before</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">);</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">after</span><span class="plain">);</span>
|
||||
<span class="functiontext">Str::substr</span><span class="plain">(</span><span class="identifier">after</span><span class="plain">, </span><span class="functiontext">Str::at</span><span class="plain">(</span><span class="identifier">id</span><span class="plain">,</span>
|
||||
<span class="identifier">i</span><span class="plain"> + </span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">code_in_comments_notation</span><span class="plain">)), </span><span class="functiontext">Str::end</span><span class="plain">(</span><span class="identifier">id</span><span class="plain">));</span>
|
||||
<span class="functiontext">Formats::text_r</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">Formats::text_r</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">FALSE:TRUE</span><span class="plain">, </span><span class="identifier">comments</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">before</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">after</span><span class="plain">);</span>
|
||||
<span class="reserved">return</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="#SP23">§23</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP23_2"></a><b>§23.2. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Recognose hyperlinks</span> <span class="cwebmacronumber">23.2</span>> =
|
||||
</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">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain"> < </span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">id</span><span class="plain">); </span><span class="identifier">i</span><span class="plain">++) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="functiontext">Str::includes_at</span><span class="plain">(</span><span class="identifier">id</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"http://"</span><span class="plain">)) ||</span>
|
||||
<span class="plain">(</span><span class="functiontext">Str::includes_at</span><span class="plain">(</span><span class="identifier">id</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"https://"</span><span class="plain">))) {</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">before</span><span class="plain">);</span>
|
||||
<span class="functiontext">Str::copy</span><span class="plain">(</span><span class="identifier">before</span><span class="plain">, </span><span class="identifier">id</span><span class="plain">); </span><span class="functiontext">Str::truncate</span><span class="plain">(</span><span class="identifier">before</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">);</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">after</span><span class="plain">);</span>
|
||||
<span class="functiontext">Str::substr</span><span class="plain">(</span><span class="identifier">after</span><span class="plain">, </span><span class="functiontext">Str::at</span><span class="plain">(</span><span class="identifier">id</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">), </span><span class="functiontext">Str::end</span><span class="plain">(</span><span class="identifier">id</span><span class="plain">));</span>
|
||||
<span class="reserved">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="functiontext">Regexp::create_mr</span><span class="plain">();</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Regexp::match</span><span class="plain">(&</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">after</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"(https*://%C+)(%c*)"</span><span class="plain">)) {</span>
|
||||
<span class="functiontext">Formats::text_r</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">Formats::url</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">mr</span><span class="plain">.</span><span class="element">exp</span><span class="plain">[0], </span><span class="identifier">mr</span><span class="plain">.</span><span class="element">exp</span><span class="plain">[0], </span><span class="constant">TRUE</span><span class="plain">);</span>
|
||||
<span class="functiontext">Formats::text_r</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">mr</span><span class="plain">.</span><span class="element">exp</span><span class="plain">[1], </span><span class="identifier">within</span><span class="plain">, </span><span class="identifier">comments</span><span class="plain">);</span>
|
||||
<span class="functiontext">Regexp::dispose_of</span><span class="plain">(&</span><span class="identifier">mr</span><span class="plain">);</span>
|
||||
<span class="reserved">return</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="functiontext">Regexp::dispose_of</span><span class="plain">(&</span><span class="identifier">mr</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">before</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">after</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="#SP23">§23</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP23_3"></a><b>§23.3. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Recognise cross-references</span> <span class="cwebmacronumber">23.3</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">N</span><span class="plain"> = </span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">xref_notation</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"> < </span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">id</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">within</span><span class="plain"> == </span><span class="constant">FALSE</span><span class="plain">) && (</span><span class="functiontext">Str::includes_at</span><span class="plain">(</span><span class="identifier">id</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">, </span><span class="identifier">xref_notation</span><span class="plain">))) {</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">j</span><span class="plain"> = </span><span class="identifier">i</span><span class="plain"> + </span><span class="identifier">N</span><span class="plain">+1;</span>
|
||||
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">j</span><span class="plain"> < </span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">id</span><span class="plain">)) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::includes_at</span><span class="plain">(</span><span class="identifier">id</span><span class="plain">, </span><span class="identifier">j</span><span class="plain">, </span><span class="identifier">xref_notation</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="constant">FALSE</span><span class="plain">;</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">before</span><span class="plain">);</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">reference</span><span class="plain">);</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">after</span><span class="plain">);</span>
|
||||
<span class="functiontext">Str::substr</span><span class="plain">(</span><span class="identifier">before</span><span class="plain">, </span><span class="functiontext">Str::start</span><span class="plain">(</span><span class="identifier">id</span><span class="plain">), </span><span class="functiontext">Str::at</span><span class="plain">(</span><span class="identifier">id</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">));</span>
|
||||
<span class="functiontext">Str::substr</span><span class="plain">(</span><span class="identifier">reference</span><span class="plain">, </span><span class="functiontext">Str::at</span><span class="plain">(</span><span class="identifier">id</span><span class="plain">, </span><span class="identifier">i</span><span class="plain"> + </span><span class="identifier">N</span><span class="plain">), </span><span class="functiontext">Str::at</span><span class="plain">(</span><span class="identifier">id</span><span class="plain">, </span><span class="identifier">j</span><span class="plain">));</span>
|
||||
<span class="functiontext">Str::substr</span><span class="plain">(</span><span class="identifier">after</span><span class="plain">, </span><span class="functiontext">Str::at</span><span class="plain">(</span><span class="identifier">id</span><span class="plain">, </span><span class="identifier">j</span><span class="plain"> + </span><span class="identifier">N</span><span class="plain">), </span><span class="functiontext">Str::end</span><span class="plain">(</span><span class="identifier">id</span><span class="plain">));</span>
|
||||
<<span class="cwebmacro">Attempt to resolve the cross-reference</span> <span class="cwebmacronumber">23.3.1</span>><span class="plain">;</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">before</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">reference</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">after</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">allow</span><span class="plain">) </span><span class="reserved">return</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">j</span><span class="plain">++;</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="#SP23">§23</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP23_3_1"></a><b>§23.3.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Attempt to resolve the cross-reference</span> <span class="cwebmacronumber">23.3.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<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">Formats::resolve_reference_in_weave</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">current_weave_line</span><span class="plain">)) {</span>
|
||||
<span class="functiontext">Formats::text_r</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">Formats::url</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">Formats::text_r</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>
|
||||
<span class="identifier">allow</span><span class="plain"> = </span><span class="constant">TRUE</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">url</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">title</span><span class="plain">);</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP23_3">§23.3</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP24"></a><b>§24. </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</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">WebModules::named_reference</span><span class="plain">(&</span><span class="identifier">found_M</span><span class="plain">, &</span><span class="identifier">found_Sm</span><span class="plain">, &</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">-></span><span class="identifier">weave_web</span><span class="plain">-></span><span class="element">md</span><span class="plain">-></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="functiontext">Main::error_in_web</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"> > </span><span class="constant">1</span><span class="plain">) {</span>
|
||||
<span class="functiontext">Main::error_in_web</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">WebModules::named_reference</span><span class="plain">(&</span><span class="identifier">found_M</span><span class="plain">, &</span><span class="identifier">found_Sm</span><span class="plain">, &</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">-></span><span class="identifier">weave_web</span><span class="plain">-></span><span class="element">md</span><span class="plain">-></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">-></span><span class="element">weave_web</span><span class="plain">-></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">-></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">-></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">-></span><span class="element">weave_web</span><span class="plain">-></span><span class="element">md</span><span class="plain">-></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">-></span><span class="element">module_name</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="functiontext">HTMLFormat::section_URL</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">) && (</span><span class="identifier">found_M</span><span class="plain"> != </span><span class="identifier">wv</span><span class="plain">-></span><span class="element">weave_web</span><span class="plain">-></span><span class="element">md</span><span class="plain">-></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">-></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="endnote">The function Formats::resolve_reference_in_weave is used in <a href="#SP23_3_1">§23.3.1</a>, 5/hf (<a href="5-hf.html#SP10_2_1">§10.2.1</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP25"></a><b>§25. </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
|
||||
|
@ -720,7 +859,7 @@ format does, because it wants to keep the formulae in all their glory.)
|
|||
|
||||
<p class="endnote">The function Formats::text_fragment is used in <a href="#SP23">§23</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP25"></a><b>§25. </b>The weaver has special typographical support for the stand-alone Inform
|
||||
<p class="inwebparagraph"><a id="SP26"></a><b>§26. </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>
|
||||
|
@ -749,7 +888,7 @@ should ignore it.
|
|||
|
||||
<p class="endnote">The function Formats::preform_document is used in 4/is (<a href="4-is.html#SP16">§16</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP26"></a><b>§26. </b>When the weaver adds one of its endnotes — "This function is used in...",
|
||||
<p class="inwebparagraph"><a id="SP27"></a><b>§27. </b>When the weaver adds one of its endnotes — "This function is used in...",
|
||||
or some such — 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>
|
||||
|
@ -771,7 +910,7 @@ or some such — it calls this method twice, once before the start, with
|
|||
|
||||
<p class="endnote">The function Formats::endnote is used in 2/tgs (<a href="2-tgs.html#SP7">§7</a>, <a href="2-tgs.html#SP7_1">§7.1</a>), 3/tw (<a href="3-tw.html#SP2_1">§2.1</a>, <a href="3-tw.html#SP2_2">§2.2</a>, <a href="3-tw.html#SP2_3">§2.3</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP27"></a><b>§27. </b>"Locale" here isn't used in the Unix sense. It means text which describes
|
||||
<p class="inwebparagraph"><a id="SP28"></a><b>§28. </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.)
|
||||
|
@ -795,7 +934,7 @@ is often used in endnotes.)
|
|||
|
||||
<p class="endnote">The function Formats::locale is used in 3/tw (<a href="3-tw.html#SP2_1">§2.1</a>, <a href="3-tw.html#SP2_2_1">§2.2.1</a>), 5/ptf (<a href="5-ptf.html#SP6">§6</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP28"></a><b>§28. </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="SP29"></a><b>§29. </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>
|
||||
|
||||
|
@ -817,7 +956,7 @@ intended for human eyes, and will be some sort of "End of weave" remark.
|
|||
|
||||
<p class="endnote">The function Formats::tail is used in 3/tw (<a href="3-tw.html#SP1_5">§1.5</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP29"></a><b>§29. Post-processing. </b>Consider what happens when Inweb makes a PDF, via TeX. The initial weave is
|
||||
<p class="inwebparagraph"><a id="SP30"></a><b>§30. 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
|
||||
|
@ -840,7 +979,7 @@ to turn TeX into PDF. The important method is this one:
|
|||
|
||||
<p class="endnote">The function Formats::post_process_weave is used in 3/ts (<a href="3-ts.html#SP2">§2</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP30"></a><b>§30. </b>Optionally, a fancy report can be printed out, to describe what has been
|
||||
<p class="inwebparagraph"><a id="SP31"></a><b>§31. </b>Optionally, a fancy report can be printed out, to describe what has been
|
||||
done:
|
||||
</p>
|
||||
|
||||
|
@ -860,7 +999,7 @@ done:
|
|||
|
||||
<p class="endnote">The function Formats::report_on_post_processing is used in 3/ts (<a href="3-ts.html#SP2_3">§2.3</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP31"></a><b>§31. </b>After post-processing, an index file is sometimes needed. For example, if a
|
||||
<p class="inwebparagraph"><a id="SP32"></a><b>§32. </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>
|
||||
|
@ -885,7 +1024,7 @@ to make an index page in HTML which provides annotated links to those PDFs.
|
|||
|
||||
<p class="endnote">The function Formats::index_pdfs appears nowhere else.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP32"></a><b>§32. </b>And in that index file, we may want to substitute in values for placeholder
|
||||
<p class="inwebparagraph"><a id="SP33"></a><b>§33. </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>
|
||||
|
|
@ -39,7 +39,7 @@
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function HTMLFormat::create is used in 5/wf (<a href="5-wf.html#SP3">§3</a>).</p>
|
||||
<p class="endnote">The function HTMLFormat::create is used in 5/fm (<a href="5-fm.html#SP3">§3</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1_1"></a><b>§1.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Create HTML</span> <span class="cwebmacronumber">1.1</span>> =
|
||||
|
@ -438,33 +438,25 @@ the page, and this drops one.
|
|||
<span class="plain">}</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">current_colour</span><span class="plain"> = -1, </span><span class="identifier">colour_wanted</span><span class="plain"> = </span><span class="constant">PLAIN_COLOUR</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"> < </span><span class="functiontext">Str::len</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="identifier">colour_wanted</span><span class="plain"> = </span><span class="functiontext">Str::get_at</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="cwebmacro">Adjust code colour as necessary</span> <span class="cwebmacronumber">10.1</span>><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="identifier">linked</span><span class="plain">) &&</span>
|
||||
<span class="plain">((</span><span class="functiontext">ACMESupport::text_at</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="identifier">I</span><span class="string">"http:</span><span class="comment">")) <code class="display"></code></span>
|
||||
<span class="string">(ACMESupport::text_at(matter, i, I"</span><span class="identifier">https:</span><span class="comment">")))) {</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">before</span><span class="plain">);</span>
|
||||
<span class="functiontext">Str::copy</span><span class="plain">(</span><span class="identifier">before</span><span class="plain">, </span><span class="identifier">matter</span><span class="plain">); </span><span class="functiontext">Str::truncate</span><span class="plain">(</span><span class="identifier">before</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">);</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">after</span><span class="plain">);</span>
|
||||
<span class="functiontext">Str::substr</span><span class="plain">(</span><span class="identifier">after</span><span class="plain">, </span><span class="functiontext">Str::at</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">Str::end</span><span class="plain">(</span><span class="identifier">matter</span><span class="plain">));</span>
|
||||
<span class="reserved">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="functiontext">Regexp::create_mr</span><span class="plain">();</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Regexp::match</span><span class="plain">(&</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">after</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"(https*:</span><span class="comment">%C+)(%c*)")) {</span>
|
||||
<span class="string">Formats::url(OUT, wv, mr.exp[0], mr.exp[0], TRUE);</span>
|
||||
<span class="string">i += Str::len(mr.exp[0]);</span>
|
||||
<span class="string">}</span>
|
||||
<span class="string">DISCARD_TEXT(before);</span>
|
||||
<span class="string">DISCARD_TEXT(after);</span>
|
||||
<span class="string">}</span>
|
||||
<span class="string">if (Str::get_at(matter, i) == '<') WRITE("</span><span class="plain">&</span><span class="identifier">lt</span><span class="plain">;</span><span class="string">");</span>
|
||||
<span class="string">else if (Str::get_at(matter, i) == '>') WRITE("</span><span class="plain">&</span><span class="identifier">gt</span><span class="plain">;</span><span class="string">");</span>
|
||||
<span class="string">else if (Str::get_at(matter, i) == '&') WRITE("</span><span class="plain">&</span><span class="identifier">amp</span><span class="plain">;</span><span class="string">");</span>
|
||||
<span class="string">else WRITE("</span><span class="plain">%</span><span class="identifier">c</span><span class="string">", Str::get_at(matter, i));</span>
|
||||
<span class="string">}</span>
|
||||
<span class="string">if (current_colour >= 0) HTML_CLOSE("</span><span class="identifier">span</span><span class="string">");</span>
|
||||
<span class="string">current_colour = -1;</span>
|
||||
<span class="string">if (finishes) {</span>
|
||||
<span class="string">if (Str::len(concluding_comment) > 0) {</span>
|
||||
<span class="string">if (!starts) WRITE("</span><span class="plain"> </span><span class="string">");</span>
|
||||
<span class="string">HTML_OPEN_WITH("</span><span class="identifier">span</span><span class="string">", "</span><span class="identifier">class</span><span class="plain">=\</span><span class="string">"comment\""</span><span class="plain">);</span>
|
||||
<span class="identifier">colour_wanted</span><span class="plain"> = </span><span class="functiontext">Str::get_at</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="cwebmacro">Adjust code colour as necessary</span> <span class="cwebmacronumber">10.3</span>><span class="plain">;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">linked</span><span class="plain">) {</span>
|
||||
<<span class="cwebmacro">Pick up hyperlinking at the eleventh hour</span> <span class="cwebmacronumber">10.1</span>><span class="plain">;</span>
|
||||
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">xref_notation</span><span class="plain"> = </span><span class="functiontext">Bibliographic::get_datum</span><span class="plain">(</span><span class="identifier">wv</span><span class="plain">-></span><span class="element">weave_web</span><span class="plain">-></span><span class="element">md</span><span class="plain">,</span>
|
||||
<span class="identifier">I</span><span class="string">"Cross-References Notation"</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::ne</span><span class="plain">(</span><span class="identifier">xref_notation</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Off"</span><span class="plain">))</span>
|
||||
<<span class="cwebmacro">Pick up cross-references at the eleventh hour</span> <span class="cwebmacronumber">10.2</span>><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::get_at</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="character">'<'</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::get_at</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="character">'>'</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&gt;"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::get_at</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="character">'&'</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&amp;"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%c"</span><span class="plain">, </span><span class="functiontext">Str::get_at</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="plain">}</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">current_colour</span><span class="plain"> >= </span><span class="constant">0</span><span class="plain">) </span><span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"span"</span><span class="plain">);</span>
|
||||
<span class="identifier">current_colour</span><span class="plain"> = -1;</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">finishes</span><span class="plain">) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">concluding_comment</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">starts</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">HTML_OPEN_WITH</span><span class="plain">(</span><span class="string">"span"</span><span class="plain">, </span><span class="string">"class=\"comment\""</span><span class="plain">);</span>
|
||||
<span class="functiontext">Formats::text_comment</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">concluding_comment</span><span class="plain">);</span>
|
||||
<span class="identifier">HTML_CLOSE</span><span class="plain">(</span><span class="string">"span"</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
|
@ -478,7 +470,79 @@ the page, and this drops one.
|
|||
<p class="endnote">The function HTMLFormat::source_code is used in <a href="#SP1_1_1">§1.1.1</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP10_1"></a><b>§10.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Adjust code colour as necessary</span> <span class="cwebmacronumber">10.1</span>> =
|
||||
<<span class="cwebmacrodefn">Pick up hyperlinking at the eleventh hour</span> <span class="cwebmacronumber">10.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="functiontext">Str::includes_at</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="identifier">I</span><span class="string">"http://"</span><span class="plain">)) ||</span>
|
||||
<span class="plain">(</span><span class="functiontext">Str::includes_at</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="identifier">I</span><span class="string">"https://"</span><span class="plain">))) {</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">before</span><span class="plain">);</span>
|
||||
<span class="functiontext">Str::copy</span><span class="plain">(</span><span class="identifier">before</span><span class="plain">, </span><span class="identifier">matter</span><span class="plain">); </span><span class="functiontext">Str::truncate</span><span class="plain">(</span><span class="identifier">before</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">);</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">after</span><span class="plain">);</span>
|
||||
<span class="functiontext">Str::substr</span><span class="plain">(</span><span class="identifier">after</span><span class="plain">, </span><span class="functiontext">Str::at</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">Str::end</span><span class="plain">(</span><span class="identifier">matter</span><span class="plain">));</span>
|
||||
<span class="reserved">match_results</span><span class="plain"> </span><span class="identifier">mr</span><span class="plain"> = </span><span class="functiontext">Regexp::create_mr</span><span class="plain">();</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Regexp::match</span><span class="plain">(&</span><span class="identifier">mr</span><span class="plain">, </span><span class="identifier">after</span><span class="plain">, </span><span class="identifier">L</span><span class="string">"(https*://%C+)(%c*)"</span><span class="plain">)) {</span>
|
||||
<span class="functiontext">Formats::url</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">mr</span><span class="plain">.</span><span class="element">exp</span><span class="plain">[0], </span><span class="identifier">mr</span><span class="plain">.</span><span class="element">exp</span><span class="plain">[0], </span><span class="constant">TRUE</span><span class="plain">);</span>
|
||||
<span class="identifier">i</span><span class="plain"> += </span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">mr</span><span class="plain">.</span><span class="element">exp</span><span class="plain">[0]);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">before</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">after</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP10">§10</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP10_2"></a><b>§10.2. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Pick up cross-references at the eleventh hour</span> <span class="cwebmacronumber">10.2</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<pre class="displaydefn">
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">N</span><span class="plain"> = </span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">xref_notation</span><span class="plain">);</span>
|
||||
<span class="reserved">if</span><span class="plain"> ((</span><span class="functiontext">Str::includes_at</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="identifier">xref_notation</span><span class="plain">))) {</span>
|
||||
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">j</span><span class="plain"> = </span><span class="identifier">i</span><span class="plain"> + </span><span class="identifier">N</span><span class="plain">+1;</span>
|
||||
<span class="reserved">while</span><span class="plain"> (</span><span class="identifier">j</span><span class="plain"> < </span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">matter</span><span class="plain">)) {</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::includes_at</span><span class="plain">(</span><span class="identifier">matter</span><span class="plain">, </span><span class="identifier">j</span><span class="plain">, </span><span class="identifier">xref_notation</span><span class="plain">)) {</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">reference</span><span class="plain">);</span>
|
||||
<span class="functiontext">Str::substr</span><span class="plain">(</span><span class="identifier">reference</span><span class="plain">, </span><span class="functiontext">Str::at</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="identifier">N</span><span class="plain">), </span><span class="functiontext">Str::at</span><span class="plain">(</span><span class="identifier">matter</span><span class="plain">, </span><span class="identifier">j</span><span class="plain">));</span>
|
||||
<<span class="cwebmacro">Attempt to resolve the cross-reference</span> <span class="cwebmacronumber">10.2.1</span>><span class="plain">;</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">reference</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">j</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="#SP10">§10</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP10_2_1"></a><b>§10.2.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Attempt to resolve the cross-reference</span> <span class="cwebmacronumber">10.2.1</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
<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">Formats::resolve_reference_in_weave</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">current_weave_line</span><span class="plain">)) {</span>
|
||||
<span class="functiontext">Formats::url</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="identifier">i</span><span class="plain"> = </span><span class="identifier">j</span><span class="plain"> + </span><span class="identifier">N</span><span class="plain">;</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">url</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">title</span><span class="plain">);</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">This code is used in <a href="#SP10_2">§10.2</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP10_3"></a><b>§10.3. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Adjust code colour as necessary</span> <span class="cwebmacronumber">10.3</span>> =
|
||||
</code></p>
|
||||
|
||||
|
||||
|
@ -733,7 +797,7 @@ the page, and this drops one.
|
|||
<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">char</span><span class="plain"> *</span><span class="identifier">cl</span><span class="plain"> = </span><span class="string">"plain"</span><span class="plain">;</span>
|
||||
<span class="reserved">switch</span><span class="plain"> (</span><span class="identifier">col</span><span class="plain">) {</span>
|
||||
<span class="reserved">case</span><span class="plain"> </span><span class="identifier">DEFINITION_COLOUR:</span><span class="plain"> </span><span class="identifier">cl</span><span class="plain"> = </span><span class="string">"cwebmacrotext"</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">DEFINITION_COLOUR:</span><span class="plain"> </span><span class="identifier">cl</span><span class="plain"> = </span><span class="string">"cwebmacrotext"</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">FUNCTION_COLOUR:</span><span class="plain"> </span><span class="identifier">cl</span><span class="plain"> = </span><span class="string">"functiontext"</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">IDENTIFIER_COLOUR:</span><span class="plain"> </span><span class="identifier">cl</span><span class="plain"> = </span><span class="string">"identifier"</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">ELEMENT_COLOUR:</span><span class="plain"> </span><span class="identifier">cl</span><span class="plain"> = </span><span class="string">"element"</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
|
||||
|
@ -823,6 +887,15 @@ the page, and this drops one.
|
|||
<p class="inwebparagraph"><a id="SP25"></a><b>§25. </b></p>
|
||||
|
||||
<pre class="display">
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTMLFormat::section_URL</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">from</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">Str::copy</span><span class="plain">(</span><span class="identifier">linkto</span><span class="plain">, </span><span class="identifier">from</span><span class="plain">-></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">pos</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">Str::get</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">) == </span><span class="character">'/'</span><span class="plain">) || (</span><span class="functiontext">Str::get</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">) == </span><span class="character">' '</span><span class="plain">))</span>
|
||||
<span class="functiontext">Str::put</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">, </span><span class="character">'-'</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">linkto</span><span class="plain">, </span><span class="string">".html"</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">linkto</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">HTMLFormat::xref</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">section</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">a_link</span><span class="plain">) {</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">linkto</span><span class="plain">);</span>
|
||||
|
@ -833,19 +906,24 @@ the page, and this drops one.
|
|||
<span class="functiontext">Str::put</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">, </span><span class="character">'-'</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">linkto</span><span class="plain">, </span><span class="string">".html"</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S%s%S"</span><span class="plain">, </span><span class="identifier">linkto</span><span class="plain">, (</span><span class="identifier">a_link</span><span class="plain">)?</span><span class="string">"#"</span><span class="plain">:</span><span class="string">""</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">-></span><span class="element">ornament</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">linkto</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">WRITE</span><span class="plain">(</span><span class="string">"%s%S"</span><span class="plain">, (</span><span class="identifier">a_link</span><span class="plain">)?</span><span class="string">"#"</span><span class="plain">:</span><span class="string">""</span><span class="plain">, </span><span class="identifier">P</span><span class="plain">-></span><span class="element">ornament</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">linkto</span><span class="plain">);</span>
|
||||
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"P"</span><span class="plain">);</span>
|
||||
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">N</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">-></span><span class="element">paragraph_number</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_THROUGH_TEXT</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">, </span><span class="identifier">N</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::get</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">) == </span><span class="character">'.'</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"_"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">PUT</span><span class="plain">(</span><span class="functiontext">Str::get</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">P</span><span class="plain">) {</span>
|
||||
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"P"</span><span class="plain">);</span>
|
||||
<span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">N</span><span class="plain"> = </span><span class="identifier">P</span><span class="plain">-></span><span class="element">paragraph_number</span><span class="plain">;</span>
|
||||
<span class="identifier">LOOP_THROUGH_TEXT</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">, </span><span class="identifier">N</span><span class="plain">)</span>
|
||||
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::get</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">) == </span><span class="character">'.'</span><span class="plain">) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"_"</span><span class="plain">);</span>
|
||||
<span class="reserved">else</span><span class="plain"> </span><span class="identifier">PUT</span><span class="plain">(</span><span class="functiontext">Str::get</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">));</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function HTMLFormat::section_URL is used in 5/fm (<a href="5-fm.html#SP24">§24</a>).</p>
|
||||
|
||||
<p class="endnote">The function HTMLFormat::xref is used in <a href="#SP8">§8</a>, <a href="#SP9">§9</a>, <a href="#SP24">§24</a>.</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP26"></a><b>§26. </b></p>
|
||||
|
|
|
@ -53,7 +53,7 @@
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function PlainText::create is used in 5/wf (<a href="5-wf.html#SP3">§3</a>).</p>
|
||||
<p class="endnote">The function PlainText::create is used in 5/fm (<a href="5-fm.html#SP3">§3</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP2"></a><b>§2. Methods. </b>For documentation, see "Weave Fornats".
|
||||
</p>
|
||||
|
@ -283,7 +283,7 @@
|
|||
<p class="endnote">The function PlainText::tail is used in <a href="#SP1">§1</a>.</p>
|
||||
|
||||
<hr class="tocbar">
|
||||
<ul class="toc"><li><a href="5-wf.html">Back to 'Weave Formats'</a></li><li><a href="5-tf.html">Continue with 'TeX Format'</a></li></ul><hr class="tocbar">
|
||||
<ul class="toc"><li><a href="5-fm.html">Back to 'Format Methods'</a></li><li><a href="5-tf.html">Continue with 'TeX Format'</a></li></ul><hr class="tocbar">
|
||||
<!--End of weave-->
|
||||
</main>
|
||||
</body>
|
||||
|
|
|
@ -40,7 +40,7 @@
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function TeX::create is used in 5/wf (<a href="5-wf.html#SP3">§3</a>).</p>
|
||||
<p class="endnote">The function TeX::create is used in 5/fm (<a href="5-fm.html#SP3">§3</a>).</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP1_1"></a><b>§1.1. </b><code class="display">
|
||||
<<span class="cwebmacrodefn">Create TeX format</span> <span class="cwebmacronumber">1.1</span>> =
|
||||
|
@ -857,7 +857,7 @@ To do this, the weaver calls the following.
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="endnote">The function TeX::remove_math_mode is used in 5/wf (<a href="5-wf.html#SP24">§24</a>).</p>
|
||||
<p class="endnote">The function TeX::remove_math_mode is used in 5/fm (<a href="5-fm.html#SP25">§25</a>).</p>
|
||||
|
||||
<p class="endnote">The function TeX::remove_math_mode_range is used in <a href="#SP28_1">§28.1</a>, <a href="#SP28_2">§28.2</a>, <a href="#SP28_3">§28.3</a>.</p>
|
||||
|
||||
|
|
|
@ -553,19 +553,19 @@ following a "prototype".
|
|||
<span class="plain">}</span>
|
||||
<span class="functiontext">Regexp::dispose_of</span><span class="plain">(&</span><span class="identifier">mr</span><span class="plain">);</span>
|
||||
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">tester</span><span class="plain">);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">tester</span><span class="plain">, </span><span class="string">"%p/%S</span>
|
||||
<span class="string">DISCARD_TEXT(leaf_pattern);</span>
|
||||
<span class="string">Filenames::write_extension(tester, F);</span>
|
||||
<span class="string">if (Dictionaries::find(patterns_done, tester) == NULL) {</span>
|
||||
<span class="string">WRITE_TO(Dictionaries::create_text(patterns_done, tester), "</span><span class="identifier">got</span><span class="plain"> </span><span class="identifier">this</span><span class="string">");</span>
|
||||
<span class="string">WRITE("</span><span class="plain"> </span><span class="string">");</span>
|
||||
<span class="string">LOOP_THROUGH_TEXT(pos, tester) {</span>
|
||||
<span class="string">wchar_t c = Str::get(pos);</span>
|
||||
<span class="string">if (c == ' ') PUT('\\');</span>
|
||||
<span class="string">PUT(c);</span>
|
||||
<span class="string">}</span>
|
||||
<span class="string">}</span>
|
||||
<span class="string">DISCARD_TEXT(tester);</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="identifier">tester</span><span class="plain">, </span><span class="string">"%p/%S/*"</span><span class="plain">, </span><span class="functiontext">Pathnames::up</span><span class="plain">(</span><span class="identifier">P</span><span class="plain">), </span><span class="identifier">leaf_pattern</span><span class="plain">);</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">leaf_pattern</span><span class="plain">);</span>
|
||||
<span class="functiontext">Filenames::write_extension</span><span class="plain">(</span><span class="identifier">tester</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">Dictionaries::find</span><span class="plain">(</span><span class="identifier">patterns_done</span><span class="plain">, </span><span class="identifier">tester</span><span class="plain">) == </span><span class="identifier">NULL</span><span class="plain">) {</span>
|
||||
<span class="identifier">WRITE_TO</span><span class="plain">(</span><span class="functiontext">Dictionaries::create_text</span><span class="plain">(</span><span class="identifier">patterns_done</span><span class="plain">, </span><span class="identifier">tester</span><span class="plain">), </span><span class="string">"got this"</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">LOOP_THROUGH_TEXT</span><span class="plain">(</span><span class="identifier">pos</span><span class="plain">, </span><span class="identifier">tester</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">Str::get</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">c</span><span class="plain"> == </span><span class="character">' '</span><span class="plain">) </span><span class="identifier">PUT</span><span class="plain">(</span><span class="character">'\\'</span><span class="plain">);</span>
|
||||
<span class="identifier">PUT</span><span class="plain">(</span><span class="identifier">c</span><span class="plain">);</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="plain">}</span>
|
||||
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">tester</span><span class="plain">);</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
|
|
@ -557,7 +557,74 @@ For example,
|
|||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP14"></a><b>§14. </b>Pictures must be in PNG, JPG or PDF format and can be included with lines
|
||||
<p class="inwebparagraph"><a id="SP14"></a><b>§14. </b>Cross-references are also allowed. These are normally written within <code class="display"><span class="extract">//</span></code>
|
||||
signs and are only available in the commentary of a web. They allow us to
|
||||
place cross-references like so:
|
||||
</p>
|
||||
|
||||
<pre class="display">
|
||||
<span class="plain">To see how cross-references are implemented, see //Format Methods//,</span>
|
||||
<span class="plain">or more generally the whole of //Chapter 5//; to decipher the text,</span>
|
||||
<span class="plain">Inweb uses code from //foundation// at //foundation: Web Modules//.</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph">To see how cross-references are implemented, see <a href="5-fm.html" class="internal">Format Methods</a>,
|
||||
or more generally the whole of <a href="5-fm.html" class="internal">Chapter 5: Formats</a>; to decipher the text,
|
||||
Inweb uses code from <a href="../foundation-module/1-fm.html" class="internal">the foundation module</a> at <a href="../foundation-module/8-wm.html" class="internal">Web Modules (in foundation)</a>.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph">What happened in that last sentence is that Inweb noticed the following:
|
||||
</p>
|
||||
|
||||
<ul class="items"><li>(a) "Format Methods" is the name of a section of code in the Inweb web;
|
||||
</li><li>(b) The web also has a "Chapter 5";
|
||||
</li><li>(c) It uses a module called "foundation";
|
||||
</li><li>(d) And that module has a section called "Web Modules".
|
||||
</li></ul>
|
||||
<p class="inwebparagraph">Inweb then made links accordingly. Chapters, which can be referred to either
|
||||
numerically, link to the first section in them; modules likewise.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph">Errors are thrown if these references are in any way ambiguous. They are not
|
||||
case sensitive.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph">Cross-references also work inside text extracts marked as <code class="display"><span class="extract">hyperlinked</span></code>.
|
||||
</p>
|
||||
|
||||
<pre class="display">
|
||||
<span class="plain">= (hyperlinked text)</span>
|
||||
<span class="plain">See the //Manual// for more on this.</span>
|
||||
<span class="plain">=</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph">produces:
|
||||
</p>
|
||||
|
||||
<pre class="display">
|
||||
<span class="plain">See the <a href="M-iti.html" class="internal">Manual</a> for more on this.</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="inwebparagraph">This notation may be inconvenient if you need <code class="display"><span class="extract">//</span></code> for something else, but it
|
||||
can be configured in the Contents page of a web, say like so:
|
||||
</p>
|
||||
|
||||
<pre class="display">
|
||||
<span class="element">Cross-References Notation</span><span class="plain">:</span><span class="string"> &&&</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph">It's also possible to disable cross-referencing entirely with:
|
||||
</p>
|
||||
|
||||
<pre class="display">
|
||||
<span class="element">Cross-References Notation</span><span class="plain">:</span><span class="string"> Off</span>
|
||||
</pre>
|
||||
|
||||
<p class="inwebparagraph"></p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP15"></a><b>§15. </b>Pictures must be in PNG, JPG or PDF format and can be included with lines
|
||||
like:
|
||||
</p>
|
||||
|
||||
|
@ -577,7 +644,7 @@ the web called <code class="display"><span class="extract">Figures</span></code>
|
|||
pathname <code class="display"><span class="extract">Figures/Fig_2_3.pdf</span></code>.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph"><a id="SP15"></a><b>§15. </b>Mathematical formulae can be typed in TeX notation between dollar signs,
|
||||
<p class="inwebparagraph"><a id="SP16"></a><b>§16. </b>Mathematical formulae can be typed in TeX notation between dollar signs,
|
||||
as usual for TeX formulae. This can of course only really be rendered if
|
||||
the weave is to TeX, but a few very approximate attempts are made by Inweb
|
||||
so that the HTML version may also make sense. For example, <code class="display"><span class="extract">$x \leq y$</span></code> would
|
||||
|
|
|
@ -32,6 +32,9 @@
|
|||
programming language project.
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph"><a href="1-ptt.html" class="internal">Patterns</a>
|
||||
</p>
|
||||
|
||||
<p class="inwebparagraph">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
|
||||
|
|
|
@ -176,8 +176,8 @@
|
|||
<p><span class="purpose">Weaving to a variety of different human-readable formats.</span></p>
|
||||
<ul class="sectionlist">
|
||||
<li>
|
||||
<p><a href="5-wf.html"><spon class="sectiontitle">Weave Formats</span></a> -
|
||||
<span class="purpose">To characterise the different weaving output formats (text, typeset, web and so on).</span></p>
|
||||
<p><a href="5-fm.html"><spon class="sectiontitle">Format Methods</span></a> -
|
||||
<span class="purpose">To characterise the relevant differences in behaviour between the various weaving formats offered, such as HTML, ePub, or TeX.</span></p>
|
||||
</li>
|
||||
<li>
|
||||
<p><a href="5-ptf.html"><spon class="sectiontitle">Plain Text Format</span></a> -
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
[Foundation::] Foundation.
|
||||
[Foundation::] Foundation Module.
|
||||
|
||||
Starting up and shutting down.
|
||||
|
|
@ -568,6 +568,16 @@ int Str::includes(text_stream *S, text_stream *T) {
|
|||
return FALSE;
|
||||
}
|
||||
|
||||
int Str::includes_at(text_stream *line, int i, text_stream *pattern) {
|
||||
if (Str::len(pattern) == 0) return FALSE;
|
||||
if (i < 0) return FALSE;
|
||||
if (i + Str::len(pattern) > Str::len(line)) return FALSE;
|
||||
LOOP_THROUGH_TEXT(pos, pattern)
|
||||
if (Str::get(pos) != Str::get_at(line, i++))
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@h Shim for literal storage.
|
||||
This is where all of those I-literals created by Inweb are stored at run-time.
|
||||
Note that every instance of, say, |I"fish"| would return the same string,
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
[Wide::] Wide Strings.w.
|
||||
[Wide::] Wide Strings.
|
||||
|
||||
A minimal library for handling wide C strings.
|
||||
|
||||
|
|
|
@ -70,6 +70,7 @@ void Bibliographic::initialise_data(web_md *Wm) {
|
|||
bd = Bibliographic::set_datum(Wm, I"TeX Mathematics Notation", I"On"); bd->on_or_off = TRUE;
|
||||
bd = Bibliographic::set_datum(Wm, I"Code In Commentary Notation", I"|");
|
||||
bd = Bibliographic::set_datum(Wm, I"Code In Code Comments Notation", I"|");
|
||||
bd = Bibliographic::set_datum(Wm, I"Cross-References Notation", I"//");
|
||||
bd = Bibliographic::set_datum(Wm, I"Web Syntax Version", NULL);
|
||||
}
|
||||
|
||||
|
|
|
@ -22,6 +22,7 @@ typedef struct module {
|
|||
struct linked_list *dependencies; /* of |module|: which other modules does this need? */
|
||||
struct text_stream *module_tag;
|
||||
int origin_marker; /* one of the |*_MOM| values above */
|
||||
struct linked_list *chapters_md; /* of |chapter_md|: just the ones in this module */
|
||||
struct linked_list *sections_md; /* of |section_md|: just the ones in this module */
|
||||
MEMORY_MANAGEMENT
|
||||
} module;
|
||||
|
@ -34,6 +35,7 @@ module *WebModules::new(text_stream *name, pathname *at, int m) {
|
|||
M->dependencies = NEW_LINKED_LIST(module);
|
||||
M->origin_marker = m;
|
||||
M->module_tag = I"miscellaneous";
|
||||
M->chapters_md = NEW_LINKED_LIST(chapter_md);
|
||||
M->sections_md = NEW_LINKED_LIST(section_md);
|
||||
return M;
|
||||
}
|
||||
|
@ -116,3 +118,93 @@ sought if it looks like a web.
|
|||
int WebModules::exists(pathname *P) {
|
||||
return WebMetadata::directory_looks_like_a_web(P);
|
||||
}
|
||||
|
||||
@h Resolving cross-reference names.
|
||||
Suppose we are in module |from_M| and want to understand which section of
|
||||
a relevant web |text| might refer to. It could be the name of a module,
|
||||
either this one or one dependent on it; or the name of a chapter in one
|
||||
of those, or the shortened forms of those; or the name of a section. It
|
||||
may match multiple possibilities: we return how many, and if this is
|
||||
positive, we write the module in which the first find was made in |*return M|,
|
||||
the section in |*return_Sm|, and set the flag |*named_as_module| according
|
||||
to whether the reference was a bare module name (say, "foundation") or not.
|
||||
|
||||
Note that we consider first the possibilities within |from_M|: we only
|
||||
look at other modules if there are none. Thus, an unambiguous result in
|
||||
|from_M| is good enough, even if there are other possibilities elsewhere.
|
||||
|
||||
A reference in the form |module: reference| is taken to be in the module
|
||||
of that name: for example, |"foundation: Web Modules"| would find the
|
||||
section of code you are now reading.
|
||||
|
||||
=
|
||||
int WebModules::named_reference(module **return_M, section_md **return_Sm,
|
||||
int *named_as_module, text_stream *title, module *from_M, text_stream *text, int list) {
|
||||
*return_M = NULL; *return_Sm = NULL; *named_as_module = FALSE;
|
||||
module *M;
|
||||
int finds = 0;
|
||||
if (from_M == NULL) return 0;
|
||||
match_results mr = Regexp::create_mr();
|
||||
text_stream *seek = text;
|
||||
if (Regexp::match(&mr, text, L"(%C+?): *(%c+?) *")) {
|
||||
LOOP_OVER_LINKED_LIST(M, module, from_M->dependencies)
|
||||
if (Str::eq_insensitive(M->module_name, mr.exp[0])) {
|
||||
seek = mr.exp[1];
|
||||
@<Look for references to chapters or sections in M@>;
|
||||
}
|
||||
}
|
||||
Regexp::dispose_of(&mr);
|
||||
seek = text;
|
||||
for (int stage = 1; ((finds == 0) && (stage <= 2)); stage++) {
|
||||
if (stage == 1) {
|
||||
M = from_M;
|
||||
@<Look for references to chapters or sections in M@>;
|
||||
}
|
||||
if (stage == 2) {
|
||||
LOOP_OVER_LINKED_LIST(M, module, from_M->dependencies)
|
||||
@<Look for references to chapters or sections in M@>;
|
||||
}
|
||||
}
|
||||
return finds;
|
||||
}
|
||||
|
||||
@<Look for references to chapters or sections in M@> =
|
||||
if (M == NULL) internal_error("no module");
|
||||
if (Str::eq_insensitive(M->module_name, seek))
|
||||
@<Found first section in module@>;
|
||||
chapter_md *Cm;
|
||||
section_md *Sm;
|
||||
LOOP_OVER_LINKED_LIST(Cm, chapter_md, M->chapters_md) {
|
||||
if ((Str::eq_insensitive(Cm->ch_title, seek)) ||
|
||||
(Str::eq_insensitive(Cm->ch_basic_title, seek)) ||
|
||||
(Str::eq_insensitive(Cm->ch_decorated_title, seek)))
|
||||
@<Found first section in chapter@>;
|
||||
LOOP_OVER_LINKED_LIST(Sm, section_md, Cm->sections_md)
|
||||
if (Str::eq_insensitive(Sm->sect_title, seek))
|
||||
@<Found section by name@>;
|
||||
}
|
||||
|
||||
@<Found first section in module@> =
|
||||
finds++;
|
||||
if (finds == 1) {
|
||||
*return_M = M; *return_Sm = FIRST_IN_LINKED_LIST(section_md, M->sections_md);
|
||||
*named_as_module = TRUE;
|
||||
WRITE_TO(title, "the %S module", M->module_name);
|
||||
}
|
||||
if (list) WRITE_TO(STDERR, "(%d) Module '%S'\n", finds, M->module_name);
|
||||
|
||||
@<Found first section in chapter@> =
|
||||
finds++;
|
||||
if (finds == 1) {
|
||||
*return_M = M; *return_Sm = FIRST_IN_LINKED_LIST(section_md, Cm->sections_md);
|
||||
WRITE_TO(title, "%S", Cm->ch_title);
|
||||
}
|
||||
if (list) WRITE_TO(STDERR, "(%d) Chapter '%S'\n", finds, Cm->ch_title);
|
||||
|
||||
@<Found section by name@> =
|
||||
finds++;
|
||||
if (finds == 1) {
|
||||
*return_M = M; *return_Sm = Sm;
|
||||
WRITE_TO(title, "%S", Sm->sect_title);
|
||||
}
|
||||
if (list) WRITE_TO(STDERR, "(%d) Section '%S'\n", finds, Sm->sect_title);
|
||||
|
|
|
@ -50,6 +50,8 @@ typedef struct web_md {
|
|||
typedef struct chapter_md {
|
||||
struct text_stream *ch_range; /* e.g., |P| for Preliminaries, |7| for Chapter 7, |C| for Appendix C */
|
||||
struct text_stream *ch_title; /* e.g., "Chapter 3: Fresh Water Fish" */
|
||||
struct text_stream *ch_basic_title; /* e.g., "Chapter 3" */
|
||||
struct text_stream *ch_decorated_title; /* e.g., "Fresh Water Fish" */
|
||||
struct text_stream *rubric; /* optional; without double-quotation marks */
|
||||
|
||||
struct text_stream *ch_language_name; /* in which most of the sections are written */
|
||||
|
@ -462,7 +464,17 @@ with the same language as the main web unless stated otherwise.
|
|||
@<Create the new chapter with these details@> =
|
||||
chapter_md *Cm = CREATE(chapter_md);
|
||||
Cm->ch_range = Str::duplicate(new_chapter_range);
|
||||
if (line == NULL) PRINT("Nullity!\n");
|
||||
Cm->ch_title = Str::duplicate(line);
|
||||
match_results mr = Regexp::create_mr();
|
||||
if (Regexp::match(&mr, Cm->ch_title, L"(%c*?): *(%c*)")) {
|
||||
Cm->ch_basic_title = Str::duplicate(mr.exp[0]);
|
||||
Cm->ch_decorated_title = Str::duplicate(mr.exp[1]);
|
||||
} else {
|
||||
Cm->ch_basic_title = Str::duplicate(Cm->ch_title);
|
||||
Cm->ch_decorated_title = Str::new();
|
||||
}
|
||||
Regexp::dispose_of(&mr);
|
||||
Cm->rubric = Str::new();
|
||||
Cm->ch_language_name = language_name;
|
||||
Cm->imported = TRUE;
|
||||
|
@ -470,6 +482,7 @@ with the same language as the main web unless stated otherwise.
|
|||
if (RS->main_web_not_module) Cm->imported = FALSE;
|
||||
|
||||
ADD_TO_LINKED_LIST(Cm, chapter_md, RS->Wm->chapters_md);
|
||||
ADD_TO_LINKED_LIST(Cm, chapter_md, RS->reading_from->chapters_md);
|
||||
RS->chapter_being_scanned = Cm;
|
||||
|
||||
@ That's enough on creating chapters. This is the more interesting business
|
||||
|
@ -478,7 +491,6 @@ we also read in and process its file.
|
|||
|
||||
@<Read about, and read in, a new section@> =
|
||||
section_md *Sm = CREATE(section_md);
|
||||
Sm = CREATE(section_md);
|
||||
@<Initialise the section structure@>;
|
||||
@<Add the section to the web and the current chapter@>;
|
||||
@<Work out the language and tangle target for the section@>;
|
||||
|
|
|
@ -6,7 +6,7 @@ Licence: Artistic License 2.0
|
|||
|
||||
Chapter 1: Setting Up
|
||||
"Absolute basics."
|
||||
Foundation
|
||||
Foundation Module
|
||||
POSIX Platforms ^"ifdef-PLATFORM_POSIX"
|
||||
Windows Platform ^"ifdef-PLATFORM_WINDOWS"
|
||||
|
||||
|
|
Loading…
Reference in a new issue