Improved TeX formulae conversion

This commit is contained in:
Graham Nelson 2019-03-17 12:53:52 +00:00
parent b7442dcb5f
commit b36172fc1e
75 changed files with 1082 additions and 223 deletions

View file

@ -523,7 +523,7 @@ void HTMLFormat::commentary_text(weave_format *self, text_stream *OUT, weave_tar
((Str::get_at(id, i+3) == ' ') || (Str::get_at(id, i+3) == '\n') ||
(Str::get_at(id, i+3) == 0))) {
WRITE(" —"); i+=2;
} else WRITE("%c", Str::get_at(id, i));
} else PUT(Str::get_at(id, i));
}
}

View file

@ -520,29 +520,242 @@ To do this, the weaver calls the following.
=
void TeX::remove_math_mode(OUTPUT_STREAM, text_stream *text) {
TEMPORARY_TEXT(math_matter);
TeX::remove_math_mode_range(math_matter, text, 0, Str::len(text)-1);
WRITE("%S", math_matter);
DISCARD_TEXT(math_matter);
}
void TeX::remove_math_mode_range(OUTPUT_STREAM, text_stream *text, int from, int to) {
for (int i=from; i <= to; i++) {
@<Remove the over construction@>;
}
for (int i=from; i <= to; i++) {
@<Remove the rm and it constructions@>;
@<Remove the sqrt constructions@>;
}
int math_mode = FALSE;
for (int i=0; i < Str::len(text); i++) {
for (int i=from; i <= to; i++) {
switch (Str::get_at(text, i)) {
case '$': math_mode = (math_mode)?FALSE:TRUE; break;
case '$':
if (Str::get_at(text, i+1) == '$') i++;
math_mode = (math_mode)?FALSE:TRUE; break;
case '~': if (math_mode) WRITE(" "); else WRITE("~"); break;
case '\\': @<Do something to strip out a TeX macro@>; break;
default: WRITE("%c", Str::get_at(text, i)); break;
default: PUT(Str::get_at(text, i)); break;
}
}
}
@ Here we remove |{{top}\over{bottom}}|, converting it to |((top) / (bottom))|.
@<Remove the over construction@> =
if ((Str::get_at(text, i) == '\\') &&
(Str::get_at(text, i+1) == 'o') && (Str::get_at(text, i+2) == 'v') &&
(Str::get_at(text, i+3) == 'e') && (Str::get_at(text, i+4) == 'r') &&
(Str::get_at(text, i+5) == '{')) {
int bl = 1;
int j = i-1;
for (; j >= from; j--) {
wchar_t c = Str::get_at(text, j);
if (c == '{') {
bl--;
if (bl == 0) break;
}
if (c == '}') bl++;
}
TeX::remove_math_mode_range(OUT, text, from, j-1);
WRITE("((");
TeX::remove_math_mode_range(OUT, text, j+2, i-2);
WRITE(") / (");
j=i+6; bl = 1;
for (; j <= to; j++) {
wchar_t c = Str::get_at(text, j);
if (c == '}') {
bl--;
if (bl == 0) break;
}
if (c == '{') bl++;
}
TeX::remove_math_mode_range(OUT, text, i+6, j-1);
WRITE("))");
TeX::remove_math_mode_range(OUT, text, j+2, to);
return;
}
@ Here we remove |{\rm text}|, converting it to |text|, and similarly |\it|.
@<Remove the rm and it constructions@> =
if ((Str::get_at(text, i) == '{') && (Str::get_at(text, i+1) == '\\') &&
(((Str::get_at(text, i+2) == 'r') && (Str::get_at(text, i+3) == 'm')) ||
((Str::get_at(text, i+2) == 'i') && (Str::get_at(text, i+3) == 't'))) &&
(Str::get_at(text, i+4) == ' ')) {
TeX::remove_math_mode_range(OUT, text, from, i-1);
int j=i+5;
for (; j <= to; j++)
if (Str::get_at(text, j) == '}')
break;
TeX::remove_math_mode_range(OUT, text, i+5, j-1);
TeX::remove_math_mode_range(OUT, text, j+1, to);
return;
}
@ Here we remove |\sqrt{N}|, converting it to |sqrt(N)|. As a special case,
we also look out for |{}^3\sqrt{N}| for cube root.
@<Remove the sqrt constructions@> =
if ((Str::get_at(text, i) == '\\') &&
(Str::get_at(text, i+1) == 's') && (Str::get_at(text, i+2) == 'q') &&
(Str::get_at(text, i+3) == 'r') && (Str::get_at(text, i+4) == 't') &&
(Str::get_at(text, i+5) == '{')) {
if ((Str::get_at(text, i-4) == '{') &&
(Str::get_at(text, i-3) == '}') &&
(Str::get_at(text, i-2) == '^') &&
(Str::get_at(text, i-1) == '3')) {
TeX::remove_math_mode_range(OUT, text, from, i-5);
WRITE(" curt(");
} else {
TeX::remove_math_mode_range(OUT, text, from, i-1);
WRITE(" sqrt(");
}
int j=i+6, bl = 1;
for (; j <= to; j++) {
wchar_t c = Str::get_at(text, j);
if (c == '}') {
bl--;
if (bl == 0) break;
}
if (c == '{') bl++;
}
TeX::remove_math_mode_range(OUT, text, i+6, j-1);
WRITE(")");
TeX::remove_math_mode_range(OUT, text, j+1, to);
return;
}
@<Do something to strip out a TeX macro@> =
TEMPORARY_TEXT(macro);
i++;
while ((i < Str::len(text)) && (Characters::isalpha(Str::get_at(text, i))))
PUT_TO(macro, Str::get_at(text, i++));
if (Str::eq(macro, I"leq")) WRITE("<=");
else if (Str::eq(macro, I"geq")) WRITE("<=");
else if (Str::eq(macro, I"neq")) WRITE("!=");
else {
if (Str::len(macro) > 0)
PRINT("[Passing through unknown TeX macro \\%S: on '%S']\n", macro, text);
WRITE("\\%S", macro);
}
if (Str::eq(macro, I"not")) @<Remove the not prefix@>
else @<Remove a general macro@>;
DISCARD_TEXT(macro);
i--;
@<Remove a general macro@> =
if (Str::eq(macro, I"leq")) WRITE("<=");
else if (Str::eq(macro, I"geq")) WRITE(">=");
else if (Str::eq(macro, I"sim")) WRITE("~");
else if (Str::eq(macro, I"hbox")) WRITE("");
else if (Str::eq(macro, I"left")) WRITE("");
else if (Str::eq(macro, I"right")) WRITE("");
else if (Str::eq(macro, I"Rightarrow")) WRITE("=>");
else if (Str::eq(macro, I"Leftrightarrow")) WRITE("<=>");
else if (Str::eq(macro, I"to")) WRITE("-->");
else if (Str::eq(macro, I"rightarrow")) WRITE("-->");
else if (Str::eq(macro, I"longrightarrow")) WRITE("-->");
else if (Str::eq(macro, I"leftarrow")) WRITE("<--");
else if (Str::eq(macro, I"longleftarrow")) WRITE("<--");
else if (Str::eq(macro, I"lbrace")) WRITE("{");
else if (Str::eq(macro, I"mid")) WRITE("|");
else if (Str::eq(macro, I"rbrace")) WRITE("}");
else if (Str::eq(macro, I"cdot")) WRITE(".");
else if (Str::eq(macro, I"cdots")) WRITE("...");
else if (Str::eq(macro, I"dots")) WRITE("...");
else if (Str::eq(macro, I"times")) WRITE("*");
else if (Str::eq(macro, I"quad")) WRITE(" ");
else if (Str::eq(macro, I"qquad")) WRITE(" ");
else if (Str::eq(macro, I"TeX")) WRITE("TeX");
else if (Str::eq(macro, I"neq")) WRITE("!=");
else if (Str::eq(macro, I"noteq")) WRITE("!=");
else if (Str::eq(macro, I"ell")) WRITE("l");
else if (Str::eq(macro, I"log")) WRITE("log");
else if (Str::eq(macro, I"exp")) WRITE("exp");
else if (Str::eq(macro, I"sin")) WRITE("sin");
else if (Str::eq(macro, I"cos")) WRITE("cos");
else if (Str::eq(macro, I"tan")) WRITE("tan");
else if (Str::eq(macro, I"top")) WRITE("T");
else if (Str::eq(macro, I"Alpha")) PUT((wchar_t) 0x0391);
else if (Str::eq(macro, I"Beta")) PUT((wchar_t) 0x0392);
else if (Str::eq(macro, I"Gamma")) PUT((wchar_t) 0x0393);
else if (Str::eq(macro, I"Delta")) PUT((wchar_t) 0x0394);
else if (Str::eq(macro, I"Epsilon")) PUT((wchar_t) 0x0395);
else if (Str::eq(macro, I"Zeta")) PUT((wchar_t) 0x0396);
else if (Str::eq(macro, I"Eta")) PUT((wchar_t) 0x0397);
else if (Str::eq(macro, I"Theta")) PUT((wchar_t) 0x0398);
else if (Str::eq(macro, I"Iota")) PUT((wchar_t) 0x0399);
else if (Str::eq(macro, I"Kappa")) PUT((wchar_t) 0x039A);
else if (Str::eq(macro, I"Lambda")) PUT((wchar_t) 0x039B);
else if (Str::eq(macro, I"Mu")) PUT((wchar_t) 0x039C);
else if (Str::eq(macro, I"Nu")) PUT((wchar_t) 0x039D);
else if (Str::eq(macro, I"Xi")) PUT((wchar_t) 0x039E);
else if (Str::eq(macro, I"Omicron")) PUT((wchar_t) 0x039F);
else if (Str::eq(macro, I"Pi")) PUT((wchar_t) 0x03A0);
else if (Str::eq(macro, I"Rho")) PUT((wchar_t) 0x03A1);
else if (Str::eq(macro, I"Varsigma")) PUT((wchar_t) 0x03A2);
else if (Str::eq(macro, I"Sigma")) PUT((wchar_t) 0x03A3);
else if (Str::eq(macro, I"Tau")) PUT((wchar_t) 0x03A4);
else if (Str::eq(macro, I"Upsilon")) PUT((wchar_t) 0x03A5);
else if (Str::eq(macro, I"Phi")) PUT((wchar_t) 0x03A6);
else if (Str::eq(macro, I"Chi")) PUT((wchar_t) 0x03A7);
else if (Str::eq(macro, I"Psi")) PUT((wchar_t) 0x03A8);
else if (Str::eq(macro, I"Omega")) PUT((wchar_t) 0x03A9);
else if (Str::eq(macro, I"alpha")) PUT((wchar_t) 0x03B1);
else if (Str::eq(macro, I"beta")) PUT((wchar_t) 0x03B2);
else if (Str::eq(macro, I"gamma")) PUT((wchar_t) 0x03B3);
else if (Str::eq(macro, I"delta")) PUT((wchar_t) 0x03B4);
else if (Str::eq(macro, I"epsilon")) PUT((wchar_t) 0x03B5);
else if (Str::eq(macro, I"zeta")) PUT((wchar_t) 0x03B6);
else if (Str::eq(macro, I"eta")) PUT((wchar_t) 0x03B7);
else if (Str::eq(macro, I"theta")) PUT((wchar_t) 0x03B8);
else if (Str::eq(macro, I"iota")) PUT((wchar_t) 0x03B9);
else if (Str::eq(macro, I"kappa")) PUT((wchar_t) 0x03BA);
else if (Str::eq(macro, I"lambda")) PUT((wchar_t) 0x03BB);
else if (Str::eq(macro, I"mu")) PUT((wchar_t) 0x03BC);
else if (Str::eq(macro, I"nu")) PUT((wchar_t) 0x03BD);
else if (Str::eq(macro, I"xi")) PUT((wchar_t) 0x03BE);
else if (Str::eq(macro, I"omicron")) PUT((wchar_t) 0x03BF);
else if (Str::eq(macro, I"pi")) PUT((wchar_t) 0x03C0);
else if (Str::eq(macro, I"rho")) PUT((wchar_t) 0x03C1);
else if (Str::eq(macro, I"varsigma")) PUT((wchar_t) 0x03C2);
else if (Str::eq(macro, I"sigma")) PUT((wchar_t) 0x03C3);
else if (Str::eq(macro, I"tau")) PUT((wchar_t) 0x03C4);
else if (Str::eq(macro, I"upsilon")) PUT((wchar_t) 0x03C5);
else if (Str::eq(macro, I"phi")) PUT((wchar_t) 0x03C6);
else if (Str::eq(macro, I"chi")) PUT((wchar_t) 0x03C7);
else if (Str::eq(macro, I"psi")) PUT((wchar_t) 0x03C8);
else if (Str::eq(macro, I"omega")) PUT((wchar_t) 0x03C9);
else if (Str::eq(macro, I"exists")) PUT((wchar_t) 0x2203);
else if (Str::eq(macro, I"in")) PUT((wchar_t) 0x2208);
else if (Str::eq(macro, I"forall")) PUT((wchar_t) 0x2200);
else if (Str::eq(macro, I"cap")) PUT((wchar_t) 0x2229);
else if (Str::eq(macro, I"emptyset")) PUT((wchar_t) 0x2205);
else if (Str::eq(macro, I"subseteq")) PUT((wchar_t) 0x2286);
else if (Str::eq(macro, I"land")) PUT((wchar_t) 0x2227);
else if (Str::eq(macro, I"lor")) PUT((wchar_t) 0x2228);
else if (Str::eq(macro, I"lnot")) PUT((wchar_t) 0x00AC);
else if (Str::eq(macro, I"sum")) PUT((wchar_t) 0x03A3);
else if (Str::eq(macro, I"prod")) PUT((wchar_t) 0x03A0);
else {
if (Str::len(macro) > 0)
PRINT("Passing through unknown TeX macro \\%S: %S", macro, text);
WRITE("\\%S", macro);
}
@ For Inform's purposes, we need to deal with just |\not\exists| and |\not\forall|.
@<Remove the not prefix@> =
if (Str::get_at(text, i) == '\\') {
Str::clear(macro);
i++;
while ((i < Str::len(text)) && (Characters::isalpha(Str::get_at(text, i))))
PUT_TO(macro, Str::get_at(text, i++));
if (Str::eq(macro, I"exists")) PUT((wchar_t) 0x2204);
else if (Str::eq(macro, I"forall")) { PUT((wchar_t) 0x00AC); PUT((wchar_t) 0x2200); }
else {
PRINT("Don't know how to apply '\\not' to '\\%S'\n", macro);
}
} else {
PRINT("Don't know how to apply '\\not' here\n");
}

View file

@ -16,6 +16,16 @@ compilers. Its main use since 2004 has been to build the Inform compiler and
its associated tools (see [ganelson/inform](https://github.com/ganelson/inform)),
including another general-purpose tool, [ganelson/intest](https://github.com/ganelson/intest).
## Licence
Except as noted, copyright in material in this repository (the "Package") is
held by Graham Nelson (the "Author"), who retains copyright so that there is
a single point of reference. As from the first date of this repository
becoming public, the Package is placed under the [Artistic License 2.0](https://opensource.org/licenses/Artistic-2.0).
This is a highly permissive licence, used by Perl among other notable projects,
recognised by the Open Source Initiative as open and by the Free Software
Foundation as free in both senses.
## Build Instructions
Inweb is itself a literate program. There is clearly a circularity here: to

View file

@ -1869,41 +1869,41 @@ void Streams__write_UTF8_string(text_stream *stream, char *c_string) ;
void Streams__write_as_wide_string(wchar_t *C_string, text_stream *stream, int buffer_size) ;
#line 553 "inweb/foundation-module/Chapter 2/Streams.w"
void Streams__write_as_ISO_string(char *C_string, text_stream *stream, int buffer_size) ;
#line 573 "inweb/foundation-module/Chapter 2/Streams.w"
#line 570 "inweb/foundation-module/Chapter 2/Streams.w"
void Streams__write_as_UTF8_string(char *C_string, text_stream *stream, int buffer_size) ;
#line 604 "inweb/foundation-module/Chapter 2/Streams.w"
#line 601 "inweb/foundation-module/Chapter 2/Streams.w"
int Streams__open_from_locale_string(text_stream *stream, char *C_string) ;
#line 613 "inweb/foundation-module/Chapter 2/Streams.w"
#line 610 "inweb/foundation-module/Chapter 2/Streams.w"
void Streams__write_as_locale_string(char *C_string, text_stream *stream, int buffer_size) ;
#line 622 "inweb/foundation-module/Chapter 2/Streams.w"
#line 619 "inweb/foundation-module/Chapter 2/Streams.w"
void Streams__write_locale_string(text_stream *stream, char *C_string) ;
#line 636 "inweb/foundation-module/Chapter 2/Streams.w"
#line 633 "inweb/foundation-module/Chapter 2/Streams.w"
void Streams__flush(text_stream *stream) ;
#line 644 "inweb/foundation-module/Chapter 2/Streams.w"
#line 641 "inweb/foundation-module/Chapter 2/Streams.w"
void Streams__close(text_stream *stream) ;
#line 695 "inweb/foundation-module/Chapter 2/Streams.w"
#line 692 "inweb/foundation-module/Chapter 2/Streams.w"
void Streams__putc(int c_int, text_stream *stream) ;
#line 791 "inweb/foundation-module/Chapter 2/Streams.w"
#line 788 "inweb/foundation-module/Chapter 2/Streams.w"
void Streams__literal(text_stream *stream, char *p) ;
#line 805 "inweb/foundation-module/Chapter 2/Streams.w"
#line 802 "inweb/foundation-module/Chapter 2/Streams.w"
void Streams__indent(text_stream *stream) ;
#line 810 "inweb/foundation-module/Chapter 2/Streams.w"
#line 807 "inweb/foundation-module/Chapter 2/Streams.w"
void Streams__outdent(text_stream *stream) ;
#line 819 "inweb/foundation-module/Chapter 2/Streams.w"
#line 816 "inweb/foundation-module/Chapter 2/Streams.w"
void Streams__set_indentation(text_stream *stream, int N) ;
#line 833 "inweb/foundation-module/Chapter 2/Streams.w"
#line 830 "inweb/foundation-module/Chapter 2/Streams.w"
int Streams__get_position(text_stream *stream) ;
#line 847 "inweb/foundation-module/Chapter 2/Streams.w"
#line 844 "inweb/foundation-module/Chapter 2/Streams.w"
int Streams__latest(text_stream *stream) ;
#line 863 "inweb/foundation-module/Chapter 2/Streams.w"
#line 860 "inweb/foundation-module/Chapter 2/Streams.w"
wchar_t Streams__get_char_at_index(text_stream *stream, int position) ;
#line 875 "inweb/foundation-module/Chapter 2/Streams.w"
#line 872 "inweb/foundation-module/Chapter 2/Streams.w"
void Streams__put_char_at_index(text_stream *stream, int position, wchar_t C) ;
#line 901 "inweb/foundation-module/Chapter 2/Streams.w"
#line 898 "inweb/foundation-module/Chapter 2/Streams.w"
void Streams__set_position(text_stream *stream, int position) ;
#line 925 "inweb/foundation-module/Chapter 2/Streams.w"
#line 922 "inweb/foundation-module/Chapter 2/Streams.w"
void Streams__copy(text_stream *to, text_stream *from) ;
#line 942 "inweb/foundation-module/Chapter 2/Streams.w"
#line 939 "inweb/foundation-module/Chapter 2/Streams.w"
void Streams__writer(OUTPUT_STREAM, char *format_string, void *vS) ;
#line 51 "inweb/foundation-module/Chapter 2/Writers and Loggers.w"
void Writers__log_escape_usage(void) ;
@ -3145,6 +3145,8 @@ void TeX__post_process_report(weave_format *self, weave_target *wv) ;
int TeX__post_process_substitute(weave_format *self, text_stream *OUT, weave_target *wv, text_stream *detail, weave_pattern *pattern) ;
#line 522 "inweb/Chapter 5/TeX Format.w"
void TeX__remove_math_mode(OUTPUT_STREAM, text_stream *text) ;
#line 529 "inweb/Chapter 5/TeX Format.w"
void TeX__remove_math_mode_range(OUTPUT_STREAM, text_stream *text, int from, int to) ;
#line 6 "inweb/Chapter 5/HTML Formats.w"
void HTMLFormat__create(void) ;
#line 58 "inweb/Chapter 5/HTML Formats.w"
@ -3530,6 +3532,99 @@ text_stream *TL_IS_296 = NULL;
text_stream *TL_IS_297 = NULL;
text_stream *TL_IS_298 = NULL;
text_stream *TL_IS_299 = NULL;
text_stream *TL_IS_300 = NULL;
text_stream *TL_IS_301 = NULL;
text_stream *TL_IS_302 = NULL;
text_stream *TL_IS_303 = NULL;
text_stream *TL_IS_304 = NULL;
text_stream *TL_IS_305 = NULL;
text_stream *TL_IS_306 = NULL;
text_stream *TL_IS_307 = NULL;
text_stream *TL_IS_308 = NULL;
text_stream *TL_IS_309 = NULL;
text_stream *TL_IS_310 = NULL;
text_stream *TL_IS_311 = NULL;
text_stream *TL_IS_312 = NULL;
text_stream *TL_IS_313 = NULL;
text_stream *TL_IS_314 = NULL;
text_stream *TL_IS_315 = NULL;
text_stream *TL_IS_316 = NULL;
text_stream *TL_IS_317 = NULL;
text_stream *TL_IS_318 = NULL;
text_stream *TL_IS_319 = NULL;
text_stream *TL_IS_320 = NULL;
text_stream *TL_IS_321 = NULL;
text_stream *TL_IS_322 = NULL;
text_stream *TL_IS_323 = NULL;
text_stream *TL_IS_324 = NULL;
text_stream *TL_IS_325 = NULL;
text_stream *TL_IS_326 = NULL;
text_stream *TL_IS_327 = NULL;
text_stream *TL_IS_328 = NULL;
text_stream *TL_IS_329 = NULL;
text_stream *TL_IS_330 = NULL;
text_stream *TL_IS_331 = NULL;
text_stream *TL_IS_332 = NULL;
text_stream *TL_IS_333 = NULL;
text_stream *TL_IS_334 = NULL;
text_stream *TL_IS_335 = NULL;
text_stream *TL_IS_336 = NULL;
text_stream *TL_IS_337 = NULL;
text_stream *TL_IS_338 = NULL;
text_stream *TL_IS_339 = NULL;
text_stream *TL_IS_340 = NULL;
text_stream *TL_IS_341 = NULL;
text_stream *TL_IS_342 = NULL;
text_stream *TL_IS_343 = NULL;
text_stream *TL_IS_344 = NULL;
text_stream *TL_IS_345 = NULL;
text_stream *TL_IS_346 = NULL;
text_stream *TL_IS_347 = NULL;
text_stream *TL_IS_348 = NULL;
text_stream *TL_IS_349 = NULL;
text_stream *TL_IS_350 = NULL;
text_stream *TL_IS_351 = NULL;
text_stream *TL_IS_352 = NULL;
text_stream *TL_IS_353 = NULL;
text_stream *TL_IS_354 = NULL;
text_stream *TL_IS_355 = NULL;
text_stream *TL_IS_356 = NULL;
text_stream *TL_IS_357 = NULL;
text_stream *TL_IS_358 = NULL;
text_stream *TL_IS_359 = NULL;
text_stream *TL_IS_360 = NULL;
text_stream *TL_IS_361 = NULL;
text_stream *TL_IS_362 = NULL;
text_stream *TL_IS_363 = NULL;
text_stream *TL_IS_364 = NULL;
text_stream *TL_IS_365 = NULL;
text_stream *TL_IS_366 = NULL;
text_stream *TL_IS_367 = NULL;
text_stream *TL_IS_368 = NULL;
text_stream *TL_IS_369 = NULL;
text_stream *TL_IS_370 = NULL;
text_stream *TL_IS_371 = NULL;
text_stream *TL_IS_372 = NULL;
text_stream *TL_IS_373 = NULL;
text_stream *TL_IS_374 = NULL;
text_stream *TL_IS_375 = NULL;
text_stream *TL_IS_376 = NULL;
text_stream *TL_IS_377 = NULL;
text_stream *TL_IS_378 = NULL;
text_stream *TL_IS_379 = NULL;
text_stream *TL_IS_380 = NULL;
text_stream *TL_IS_381 = NULL;
text_stream *TL_IS_382 = NULL;
text_stream *TL_IS_383 = NULL;
text_stream *TL_IS_384 = NULL;
text_stream *TL_IS_385 = NULL;
text_stream *TL_IS_386 = NULL;
text_stream *TL_IS_387 = NULL;
text_stream *TL_IS_388 = NULL;
text_stream *TL_IS_389 = NULL;
text_stream *TL_IS_390 = NULL;
text_stream *TL_IS_391 = NULL;
text_stream *TL_IS_392 = NULL;
void register_tangled_text_literals(void);
#line 57 "inweb/foundation-module/Chapter 2/Streams.w"
#define WRITE(args...) Writers__printf(OUT, args)
@ -4902,7 +4997,7 @@ void Streams__write_as_ISO_string(char *C_string, text_stream *stream, int buffe
C_string[i] = 0;
}
#line 573 "inweb/foundation-module/Chapter 2/Streams.w"
#line 570 "inweb/foundation-module/Chapter 2/Streams.w"
void Streams__write_as_UTF8_string(char *C_string, text_stream *stream, int buffer_size) {
if (buffer_size == 0) return;
if (stream == NULL) { C_string[0] = 0; return; }
@ -4931,7 +5026,7 @@ void Streams__write_as_UTF8_string(char *C_string, text_stream *stream, int buff
to[i] = 0;
}
#line 604 "inweb/foundation-module/Chapter 2/Streams.w"
#line 601 "inweb/foundation-module/Chapter 2/Streams.w"
int Streams__open_from_locale_string(text_stream *stream, char *C_string) {
#ifdef LOCALE_IS_UTF8
return Streams__open_from_UTF8_string(stream, C_string);
@ -4959,13 +5054,13 @@ void Streams__write_locale_string(text_stream *stream, char *C_string) {
#endif
}
#line 636 "inweb/foundation-module/Chapter 2/Streams.w"
#line 633 "inweb/foundation-module/Chapter 2/Streams.w"
void Streams__flush(text_stream *stream) {
if (stream == NULL) return;
if (stream->write_to_file) fflush(stream->write_to_file);
}
#line 644 "inweb/foundation-module/Chapter 2/Streams.w"
#line 641 "inweb/foundation-module/Chapter 2/Streams.w"
void Streams__close(text_stream *stream) {
if (stream == NULL) internal_error("tried to close NULL stream");
if (stream == &STDOUT_struct) internal_error("tried to close STDOUT stream");
@ -4978,7 +5073,7 @@ void Streams__close(text_stream *stream) {
stream->chars_capacity = -1; /* mark as closed */
if (stream->write_to_file)
{
#line 665 "inweb/foundation-module/Chapter 2/Streams.w"
#line 662 "inweb/foundation-module/Chapter 2/Streams.w"
if ((ferror(stream->write_to_file)) || (fclose(stream->write_to_file) == EOF))
Errors__fatal("The host computer reported an error trying to write a text file");
if (stream != DL)
@ -4989,11 +5084,11 @@ void Streams__close(text_stream *stream) {
stream->write_to_file = NULL;
}
#line 654 "inweb/foundation-module/Chapter 2/Streams.w"
#line 651 "inweb/foundation-module/Chapter 2/Streams.w"
;
if (stream->write_to_memory)
{
#line 684 "inweb/foundation-module/Chapter 2/Streams.w"
#line 681 "inweb/foundation-module/Chapter 2/Streams.w"
if ((stream->stream_flags) & MALLOCED_STRF) {
wchar_t *mem = stream->write_to_memory;
stream->write_to_memory = NULL;
@ -5002,11 +5097,11 @@ void Streams__close(text_stream *stream) {
}
}
#line 655 "inweb/foundation-module/Chapter 2/Streams.w"
#line 652 "inweb/foundation-module/Chapter 2/Streams.w"
;
}
#line 695 "inweb/foundation-module/Chapter 2/Streams.w"
#line 692 "inweb/foundation-module/Chapter 2/Streams.w"
void Streams__putc(int c_int, text_stream *stream) {
unsigned int c;
if (c_int >= 0) c = (unsigned int) c_int; else c = (unsigned int) (c_int + 256);
@ -5014,7 +5109,7 @@ void Streams__putc(int c_int, text_stream *stream) {
text_stream *first_stream = stream;
if (c != '\n')
{
#line 744 "inweb/foundation-module/Chapter 2/Streams.w"
#line 741 "inweb/foundation-module/Chapter 2/Streams.w"
if (first_stream->stream_flags & INDENT_PENDING_STRF) {
first_stream->stream_flags -= INDENT_PENDING_STRF;
int L = (first_stream->stream_flags & INDENTATION_MASK_STRF)/INDENTATION_BASE_STRF;
@ -5025,7 +5120,7 @@ void Streams__putc(int c_int, text_stream *stream) {
}
}
#line 700 "inweb/foundation-module/Chapter 2/Streams.w"
#line 697 "inweb/foundation-module/Chapter 2/Streams.w"
;
if (stream->stream_flags & READ_ONLY_STRF) internal_error("modifying read-only stream");
if ((stream->stream_flags) & USES_XML_ESCAPES_STRF) {
@ -5039,7 +5134,7 @@ void Streams__putc(int c_int, text_stream *stream) {
while (stream->stream_continues) stream = stream->stream_continues;
{
#line 771 "inweb/foundation-module/Chapter 2/Streams.w"
#line 768 "inweb/foundation-module/Chapter 2/Streams.w"
if (stream->chars_written + SPACE_AT_END_OF_STREAM >= stream->chars_capacity) {
if (stream->write_to_file) return; /* write nothing further */
if (stream->write_to_memory) {
@ -5058,13 +5153,13 @@ void Streams__putc(int c_int, text_stream *stream) {
}
}
#line 711 "inweb/foundation-module/Chapter 2/Streams.w"
#line 708 "inweb/foundation-module/Chapter 2/Streams.w"
;
if (stream->write_to_file) {
if (stream->stream_flags & FILE_ENCODING_UTF8_STRF)
{
#line 734 "inweb/foundation-module/Chapter 2/Streams.w"
#line 731 "inweb/foundation-module/Chapter 2/Streams.w"
if (c >= 0x800) {
fputc(0xE0 + (c >> 12), stream->write_to_file);
fputc(0x80 + ((c >> 6) & 0x3f), stream->write_to_file);
@ -5075,7 +5170,7 @@ void Streams__putc(int c_int, text_stream *stream) {
} else fputc((int) c, stream->write_to_file);
}
#line 714 "inweb/foundation-module/Chapter 2/Streams.w"
#line 711 "inweb/foundation-module/Chapter 2/Streams.w"
else if (stream->stream_flags & FILE_ENCODING_ISO_STRF) {
if (c >= 0x100) c = '?';
@ -5093,7 +5188,7 @@ void Streams__putc(int c_int, text_stream *stream) {
stream->chars_written++;
}
#line 791 "inweb/foundation-module/Chapter 2/Streams.w"
#line 788 "inweb/foundation-module/Chapter 2/Streams.w"
void Streams__literal(text_stream *stream, char *p) {
if (stream == NULL) return;
int i, x = ((stream->stream_flags) & USES_XML_ESCAPES_STRF);
@ -5102,7 +5197,7 @@ void Streams__literal(text_stream *stream, char *p) {
if (x) stream->stream_flags += USES_XML_ESCAPES_STRF;
}
#line 805 "inweb/foundation-module/Chapter 2/Streams.w"
#line 802 "inweb/foundation-module/Chapter 2/Streams.w"
void Streams__indent(text_stream *stream) {
if (stream == NULL) return;
stream->stream_flags += INDENTATION_BASE_STRF;
@ -5124,7 +5219,7 @@ void Streams__set_indentation(text_stream *stream, int N) {
stream->stream_flags += N*INDENTATION_BASE_STRF;
}
#line 833 "inweb/foundation-module/Chapter 2/Streams.w"
#line 830 "inweb/foundation-module/Chapter 2/Streams.w"
int Streams__get_position(text_stream *stream) {
int t = 0;
while (stream) {
@ -5134,7 +5229,7 @@ int Streams__get_position(text_stream *stream) {
return t;
}
#line 847 "inweb/foundation-module/Chapter 2/Streams.w"
#line 844 "inweb/foundation-module/Chapter 2/Streams.w"
int Streams__latest(text_stream *stream) {
if (stream == NULL) return 0;
if (stream->write_to_file) internal_error("stream_latest on file stream");
@ -5147,7 +5242,7 @@ int Streams__latest(text_stream *stream) {
return 0;
}
#line 863 "inweb/foundation-module/Chapter 2/Streams.w"
#line 860 "inweb/foundation-module/Chapter 2/Streams.w"
wchar_t Streams__get_char_at_index(text_stream *stream, int position) {
if (stream == NULL) internal_error("examining null stream");
if (stream->write_to_file) internal_error("examining file stream");
@ -5179,7 +5274,7 @@ void Streams__put_char_at_index(text_stream *stream, int position, wchar_t C) {
}
}
#line 901 "inweb/foundation-module/Chapter 2/Streams.w"
#line 898 "inweb/foundation-module/Chapter 2/Streams.w"
void Streams__set_position(text_stream *stream, int position) {
if (stream == NULL) return;
if (position < 0) position = 0; /* to simplify the implementation of backspacing */
@ -5200,7 +5295,7 @@ void Streams__set_position(text_stream *stream, int position) {
}
}
#line 925 "inweb/foundation-module/Chapter 2/Streams.w"
#line 922 "inweb/foundation-module/Chapter 2/Streams.w"
void Streams__copy(text_stream *to, text_stream *from) {
if ((from == NULL) || (to == NULL)) return;
if (from->write_to_file) internal_error("stream_copy from file stream");
@ -5214,7 +5309,7 @@ void Streams__copy(text_stream *to, text_stream *from) {
}
}
#line 942 "inweb/foundation-module/Chapter 2/Streams.w"
#line 939 "inweb/foundation-module/Chapter 2/Streams.w"
void Streams__writer(OUTPUT_STREAM, char *format_string, void *vS) {
text_stream *S = (text_stream *) vS;
Streams__copy(OUT, S);
@ -5308,7 +5403,7 @@ void Writers__printf(text_stream *stream, char *fmt, ...) {
case '%': {
int set = 0;
{
#line 163 "inweb/foundation-module/Chapter 2/Writers and Loggers.w"
#line 160 "inweb/foundation-module/Chapter 2/Writers and Loggers.w"
char format_string[8];
int esc_number = ' ';
int i = 0;
@ -5363,7 +5458,7 @@ void Writers__printf(text_stream *stream, char *fmt, ...) {
}
case DIRECT_ECAT:
{
#line 237 "inweb/foundation-module/Chapter 2/Writers and Loggers.w"
#line 234 "inweb/foundation-module/Chapter 2/Writers and Loggers.w"
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wformat-nonliteral"
switch (esc_number) {
@ -5395,7 +5490,7 @@ void Writers__printf(text_stream *stream, char *fmt, ...) {
#pragma clang diagnostic pop
}
#line 215 "inweb/foundation-module/Chapter 2/Writers and Loggers.w"
#line 212 "inweb/foundation-module/Chapter 2/Writers and Loggers.w"
; break;
case VACANT_ECAT:
WRITE_TO(STDERR, "*** Bad WRITE escape: <%s> ***\n", format_string);
@ -5413,7 +5508,7 @@ void Writers__printf(text_stream *stream, char *fmt, ...) {
if ((stream->stream_flags) & USES_LOG_ESCAPES_STRF)
{
#line 163 "inweb/foundation-module/Chapter 2/Writers and Loggers.w"
#line 160 "inweb/foundation-module/Chapter 2/Writers and Loggers.w"
char format_string[8];
int esc_number = ' ';
int i = 0;
@ -5468,7 +5563,7 @@ void Writers__printf(text_stream *stream, char *fmt, ...) {
}
case DIRECT_ECAT:
{
#line 237 "inweb/foundation-module/Chapter 2/Writers and Loggers.w"
#line 234 "inweb/foundation-module/Chapter 2/Writers and Loggers.w"
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wformat-nonliteral"
switch (esc_number) {
@ -5500,7 +5595,7 @@ void Writers__printf(text_stream *stream, char *fmt, ...) {
#pragma clang diagnostic pop
}
#line 215 "inweb/foundation-module/Chapter 2/Writers and Loggers.w"
#line 212 "inweb/foundation-module/Chapter 2/Writers and Loggers.w"
; break;
case VACANT_ECAT:
WRITE_TO(STDERR, "*** Bad WRITE escape: <%s> ***\n", format_string);
@ -5520,10 +5615,7 @@ void Writers__printf(text_stream *stream, char *fmt, ...) {
else Streams__putc(*p, stream);
break;
case '\n':
// if (stream->stream_flags & USES_I6_ESCAPES_STRF)
// Streams__putc('^', stream);
// else
Streams__putc(*p, stream);
Streams__putc(*p, stream);
break;
default: Streams__putc(*p, stream); break;
}
@ -18946,23 +19038,212 @@ int TeX__post_process_substitute(weave_format *self, text_stream *OUT,
#line 522 "inweb/Chapter 5/TeX Format.w"
void TeX__remove_math_mode(OUTPUT_STREAM, text_stream *text) {
TEMPORARY_TEXT(math_matter);
TeX__remove_math_mode_range(math_matter, text, 0, Str__len(text)-1);
WRITE("%S", math_matter);
DISCARD_TEXT(math_matter);
}
void TeX__remove_math_mode_range(OUTPUT_STREAM, text_stream *text, int from, int to) {
for (int i=from; i <= to; i++) {
if ((Str__get_at(text, i) == '\\') &&
(Str__get_at(text, i+1) == 'o') && (Str__get_at(text, i+2) == 'v') &&
(Str__get_at(text, i+3) == 'e') && (Str__get_at(text, i+4) == 'r') &&
(Str__get_at(text, i+5) == '{')) {
int bl = 1;
int j = i-1;
for (; j >= from; j--) {
wchar_t c = Str__get_at(text, j);
if (c == '{') {
bl--;
if (bl == 0) break;
}
if (c == '}') bl++;
}
TeX__remove_math_mode_range(OUT, text, from, j-1);
WRITE("((");
TeX__remove_math_mode_range(OUT, text, j+2, i-2);
WRITE(") / (");
j=i+6; bl = 1;
for (; j <= to; j++) {
wchar_t c = Str__get_at(text, j);
if (c == '}') {
bl--;
if (bl == 0) break;
}
if (c == '{') bl++;
}
TeX__remove_math_mode_range(OUT, text, i+6, j-1);
WRITE("))");
TeX__remove_math_mode_range(OUT, text, j+2, to);
return;
}
}
for (int i=from; i <= to; i++) {
if ((Str__get_at(text, i) == '{') && (Str__get_at(text, i+1) == '\\') &&
(((Str__get_at(text, i+2) == 'r') && (Str__get_at(text, i+3) == 'm')) ||
((Str__get_at(text, i+2) == 'i') && (Str__get_at(text, i+3) == 't'))) &&
(Str__get_at(text, i+4) == ' ')) {
TeX__remove_math_mode_range(OUT, text, from, i-1);
int j=i+5;
for (; j <= to; j++)
if (Str__get_at(text, j) == '}')
break;
TeX__remove_math_mode_range(OUT, text, i+5, j-1);
TeX__remove_math_mode_range(OUT, text, j+1, to);
return;
}
if ((Str__get_at(text, i) == '\\') &&
(Str__get_at(text, i+1) == 's') && (Str__get_at(text, i+2) == 'q') &&
(Str__get_at(text, i+3) == 'r') && (Str__get_at(text, i+4) == 't') &&
(Str__get_at(text, i+5) == '{')) {
if ((Str__get_at(text, i-4) == '{') &&
(Str__get_at(text, i-3) == '}') &&
(Str__get_at(text, i-2) == '^') &&
(Str__get_at(text, i-1) == '3')) {
TeX__remove_math_mode_range(OUT, text, from, i-5);
WRITE(" curt(");
} else {
TeX__remove_math_mode_range(OUT, text, from, i-1);
WRITE(" sqrt(");
}
int j=i+6, bl = 1;
for (; j <= to; j++) {
wchar_t c = Str__get_at(text, j);
if (c == '}') {
bl--;
if (bl == 0) break;
}
if (c == '{') bl++;
}
TeX__remove_math_mode_range(OUT, text, i+6, j-1);
WRITE(")");
TeX__remove_math_mode_range(OUT, text, j+1, to);
return;
}
}
int math_mode = FALSE;
for (int i=0; i < Str__len(text); i++) {
for (int i=from; i <= to; i++) {
switch (Str__get_at(text, i)) {
case '$': math_mode = (math_mode)?FALSE:TRUE; break;
case '~': if (math_mode) WRITE(" "); else WRITE("~"); break;
case '\\':
{
#line 534 "inweb/Chapter 5/TeX Format.w"
#line 619 "inweb/Chapter 5/TeX Format.w"
TEMPORARY_TEXT(macro);
i++;
while ((i < Str__len(text)) && (Characters__isalpha(Str__get_at(text, i))))
PUT_TO(macro, Str__get_at(text, i++));
if (Str__eq(macro, TL_IS_273)) WRITE("<=");
else if (Str__eq(macro, TL_IS_274)) WRITE("<=");
else if (Str__eq(macro, TL_IS_275)) WRITE("!=");
if (Str__eq(macro, TL_IS_273)) {
if (Str__get_at(text, i) == '\\') {
Str__clear(macro);
i++;
while ((i < Str__len(text)) && (Characters__isalpha(Str__get_at(text, i))))
PUT_TO(macro, Str__get_at(text, i++));
if (Str__eq(macro, TL_IS_274)) PUT((wchar_t) 0x2204);
else if (Str__eq(macro, TL_IS_275)) { PUT((wchar_t) 0x00AC); PUT((wchar_t) 0x2200); }
else {
PRINT("Don't know how to apply '\\not' to '\\%S'\n", macro);
}
} else {
PRINT("Don't know how to apply '\\not' here\n");
}
} else if (Str__eq(macro, TL_IS_276)) WRITE("<=");
else if (Str__eq(macro, TL_IS_277)) WRITE(">=");
else if (Str__eq(macro, TL_IS_278)) WRITE("~");
else if (Str__eq(macro, TL_IS_279)) WRITE("");
else if (Str__eq(macro, TL_IS_280)) WRITE("");
else if (Str__eq(macro, TL_IS_281)) WRITE("");
else if (Str__eq(macro, TL_IS_282)) WRITE("=>");
else if (Str__eq(macro, TL_IS_283)) WRITE("<=>");
else if (Str__eq(macro, TL_IS_284)) WRITE("-->");
else if (Str__eq(macro, TL_IS_285)) WRITE("-->");
else if (Str__eq(macro, TL_IS_286)) WRITE("-->");
else if (Str__eq(macro, TL_IS_287)) WRITE("<--");
else if (Str__eq(macro, TL_IS_288)) WRITE("<--");
else if (Str__eq(macro, TL_IS_289)) WRITE("{");
else if (Str__eq(macro, TL_IS_290)) WRITE("|");
else if (Str__eq(macro, TL_IS_291)) WRITE("}");
else if (Str__eq(macro, TL_IS_292)) WRITE(".");
else if (Str__eq(macro, TL_IS_293)) WRITE("...");
else if (Str__eq(macro, TL_IS_294)) WRITE("...");
else if (Str__eq(macro, TL_IS_295)) WRITE("*");
else if (Str__eq(macro, TL_IS_296)) WRITE(" ");
else if (Str__eq(macro, TL_IS_297)) WRITE(" ");
else if (Str__eq(macro, TL_IS_298)) WRITE("TeX");
else if (Str__eq(macro, TL_IS_299)) WRITE("!=");
else if (Str__eq(macro, TL_IS_300)) WRITE("!=");
else if (Str__eq(macro, TL_IS_301)) WRITE("l");
else if (Str__eq(macro, TL_IS_302)) WRITE("log");
else if (Str__eq(macro, TL_IS_303)) WRITE("exp");
else if (Str__eq(macro, TL_IS_304)) WRITE("sin");
else if (Str__eq(macro, TL_IS_305)) WRITE("cos");
else if (Str__eq(macro, TL_IS_306)) WRITE("tan");
else if (Str__eq(macro, TL_IS_307)) WRITE("T");
else if (Str__eq(macro, TL_IS_308)) PUT((wchar_t) 0x0391);
else if (Str__eq(macro, TL_IS_309)) PUT((wchar_t) 0x0392);
else if (Str__eq(macro, TL_IS_310)) PUT((wchar_t) 0x0393);
else if (Str__eq(macro, TL_IS_311)) PUT((wchar_t) 0x0394);
else if (Str__eq(macro, TL_IS_312)) PUT((wchar_t) 0x0395);
else if (Str__eq(macro, TL_IS_313)) PUT((wchar_t) 0x0396);
else if (Str__eq(macro, TL_IS_314)) PUT((wchar_t) 0x0397);
else if (Str__eq(macro, TL_IS_315)) PUT((wchar_t) 0x0398);
else if (Str__eq(macro, TL_IS_316)) PUT((wchar_t) 0x0399);
else if (Str__eq(macro, TL_IS_317)) PUT((wchar_t) 0x039A);
else if (Str__eq(macro, TL_IS_318)) PUT((wchar_t) 0x039B);
else if (Str__eq(macro, TL_IS_319)) PUT((wchar_t) 0x039C);
else if (Str__eq(macro, TL_IS_320)) PUT((wchar_t) 0x039D);
else if (Str__eq(macro, TL_IS_321)) PUT((wchar_t) 0x039E);
else if (Str__eq(macro, TL_IS_322)) PUT((wchar_t) 0x039F);
else if (Str__eq(macro, TL_IS_323)) PUT((wchar_t) 0x03A0);
else if (Str__eq(macro, TL_IS_324)) PUT((wchar_t) 0x03A1);
else if (Str__eq(macro, TL_IS_325)) PUT((wchar_t) 0x03A2);
else if (Str__eq(macro, TL_IS_326)) PUT((wchar_t) 0x03A3);
else if (Str__eq(macro, TL_IS_327)) PUT((wchar_t) 0x03A4);
else if (Str__eq(macro, TL_IS_328)) PUT((wchar_t) 0x03A5);
else if (Str__eq(macro, TL_IS_329)) PUT((wchar_t) 0x03A6);
else if (Str__eq(macro, TL_IS_330)) PUT((wchar_t) 0x03A7);
else if (Str__eq(macro, TL_IS_331)) PUT((wchar_t) 0x03A8);
else if (Str__eq(macro, TL_IS_332)) PUT((wchar_t) 0x03A9);
else if (Str__eq(macro, TL_IS_333)) PUT((wchar_t) 0x03B1);
else if (Str__eq(macro, TL_IS_334)) PUT((wchar_t) 0x03B2);
else if (Str__eq(macro, TL_IS_335)) PUT((wchar_t) 0x03B3);
else if (Str__eq(macro, TL_IS_336)) PUT((wchar_t) 0x03B4);
else if (Str__eq(macro, TL_IS_337)) PUT((wchar_t) 0x03B5);
else if (Str__eq(macro, TL_IS_338)) PUT((wchar_t) 0x03B6);
else if (Str__eq(macro, TL_IS_339)) PUT((wchar_t) 0x03B7);
else if (Str__eq(macro, TL_IS_340)) PUT((wchar_t) 0x03B8);
else if (Str__eq(macro, TL_IS_341)) PUT((wchar_t) 0x03B9);
else if (Str__eq(macro, TL_IS_342)) PUT((wchar_t) 0x03BA);
else if (Str__eq(macro, TL_IS_343)) PUT((wchar_t) 0x03BB);
else if (Str__eq(macro, TL_IS_344)) PUT((wchar_t) 0x03BC);
else if (Str__eq(macro, TL_IS_345)) PUT((wchar_t) 0x03BD);
else if (Str__eq(macro, TL_IS_346)) PUT((wchar_t) 0x03BE);
else if (Str__eq(macro, TL_IS_347)) PUT((wchar_t) 0x03BF);
else if (Str__eq(macro, TL_IS_348)) PUT((wchar_t) 0x03C0);
else if (Str__eq(macro, TL_IS_349)) PUT((wchar_t) 0x03C1);
else if (Str__eq(macro, TL_IS_350)) PUT((wchar_t) 0x03C2);
else if (Str__eq(macro, TL_IS_351)) PUT((wchar_t) 0x03C3);
else if (Str__eq(macro, TL_IS_352)) PUT((wchar_t) 0x03C4);
else if (Str__eq(macro, TL_IS_353)) PUT((wchar_t) 0x03C5);
else if (Str__eq(macro, TL_IS_354)) PUT((wchar_t) 0x03C6);
else if (Str__eq(macro, TL_IS_355)) PUT((wchar_t) 0x03C7);
else if (Str__eq(macro, TL_IS_356)) PUT((wchar_t) 0x03C8);
else if (Str__eq(macro, TL_IS_357)) PUT((wchar_t) 0x03C9);
else if (Str__eq(macro, TL_IS_358)) PUT((wchar_t) 0x2203);
else if (Str__eq(macro, TL_IS_359)) PUT((wchar_t) 0x2208);
else if (Str__eq(macro, TL_IS_360)) PUT((wchar_t) 0x2200);
else if (Str__eq(macro, TL_IS_361)) PUT((wchar_t) 0x2229);
else if (Str__eq(macro, TL_IS_362)) PUT((wchar_t) 0x2205);
else if (Str__eq(macro, TL_IS_363)) PUT((wchar_t) 0x2286);
else if (Str__eq(macro, TL_IS_364)) PUT((wchar_t) 0x2227);
else if (Str__eq(macro, TL_IS_365)) PUT((wchar_t) 0x2228);
else if (Str__eq(macro, TL_IS_366)) PUT((wchar_t) 0x00AC);
else if (Str__eq(macro, TL_IS_367)) PUT((wchar_t) 0x03A3);
else if (Str__eq(macro, TL_IS_368)) PUT((wchar_t) 0x03A0);
else {
if (Str__len(macro) > 0)
PRINT("[Passing through unknown TeX macro \\%S: on '%S']\n", macro, text);
PRINT("Passing through unknown TeX macro \\%S: %S", macro, text);
WRITE("\\%S", macro);
}
DISCARD_TEXT(macro);
@ -18970,9 +19251,9 @@ void TeX__remove_math_mode(OUTPUT_STREAM, text_stream *text) {
}
#line 527 "inweb/Chapter 5/TeX Format.w"
#line 612 "inweb/Chapter 5/TeX Format.w"
; break;
default: WRITE("%c", Str__get_at(text, i)); break;
default: PUT(Str__get_at(text, i)); break;
}
}
}
@ -18982,7 +19263,7 @@ void HTMLFormat__create(void) {
{
#line 12 "inweb/Chapter 5/HTML Formats.w"
weave_format *wf = Formats__create_weave_format(TL_IS_276, TL_IS_277);
weave_format *wf = Formats__create_weave_format(TL_IS_369, TL_IS_370);
METHOD_ADD(wf, TOP_FOR_MTID, HTMLFormat__top);
{
@ -19016,7 +19297,7 @@ void HTMLFormat__create(void) {
{
#line 17 "inweb/Chapter 5/HTML Formats.w"
weave_format *wf = Formats__create_weave_format(TL_IS_278, TL_IS_279);
weave_format *wf = Formats__create_weave_format(TL_IS_371, TL_IS_372);
METHOD_ADD(wf, TOP_FOR_MTID, HTMLFormat__top_EPUB);
{
@ -19130,9 +19411,9 @@ void HTMLFormat__breadcrumb(OUTPUT_STREAM, text_stream *text, text_stream *link)
#line 142 "inweb/Chapter 5/HTML Formats.w"
void HTMLFormat__top(weave_format *self, text_stream *OUT, weave_target *wv, text_stream *comment) {
HTML__declare_as_HTML(OUT, FALSE);
Indexer__cover_sheet_maker(OUT, wv->weave_web, TL_IS_280, wv, WEAVE_FIRST_HALF);
Indexer__cover_sheet_maker(OUT, wv->weave_web, TL_IS_373, wv, WEAVE_FIRST_HALF);
if (wv->self_contained == FALSE) {
filename *CSS = Patterns__obtain_filename(wv->pattern, TL_IS_281);
filename *CSS = Patterns__obtain_filename(wv->pattern, TL_IS_374);
Patterns__copy_file_into_weave(wv->weave_web, CSS);
}
HTML__comment(OUT, comment);
@ -19141,8 +19422,8 @@ void HTMLFormat__top(weave_format *self, text_stream *OUT, weave_target *wv, tex
void HTMLFormat__top_EPUB(weave_format *self, text_stream *OUT, weave_target *wv, text_stream *comment) {
HTML__declare_as_HTML(OUT, TRUE);
Epub__note_page(wv->weave_web->as_ebook, wv->weave_to, wv->booklet_title, TL_IS_282);
Indexer__cover_sheet_maker(OUT, wv->weave_web, TL_IS_283, wv, WEAVE_FIRST_HALF);
Epub__note_page(wv->weave_web->as_ebook, wv->weave_to, wv->booklet_title, TL_IS_375);
Indexer__cover_sheet_maker(OUT, wv->weave_web, TL_IS_376, wv, WEAVE_FIRST_HALF);
HTML__comment(OUT, comment);
html_in_para = HTML_OUT;
}
@ -19221,19 +19502,19 @@ void HTMLFormat__paragraph_heading(weave_format *self, text_stream *OUT,
} else {
if (wv->self_contained == FALSE) {
if (crumbs_dropped == FALSE) {
filename *C = Patterns__obtain_filename(wv->pattern, TL_IS_284);
filename *C = Patterns__obtain_filename(wv->pattern, TL_IS_377);
Patterns__copy_file_into_weave(wv->weave_web, C);
crumbs_dropped = TRUE;
}
HTML_OPEN_WITH("ul", "class=\"crumbs\"");
if (wv->docs_mode)
HTMLFormat__breadcrumb(OUT, TL_IS_285, TL_IS_286);
HTMLFormat__breadcrumb(OUT, TL_IS_378, TL_IS_379);
TEMPORARY_TEXT(titling);
WRITE_TO(titling, "%S", Bibliographic__get_datum(wv->weave_web, TL_IS_287));
text_stream *v = Bibliographic__get_datum(wv->weave_web, TL_IS_288);
WRITE_TO(titling, "%S", Bibliographic__get_datum(wv->weave_web, TL_IS_380));
text_stream *v = Bibliographic__get_datum(wv->weave_web, TL_IS_381);
if (Str__len(v) > 0) WRITE_TO(titling, " %S", v);
HTMLFormat__breadcrumb(OUT, titling, TL_IS_289);
HTMLFormat__breadcrumb(OUT, titling, TL_IS_382);
DISCARD_TEXT(titling);
if (wv->weave_web->chaptered) {
@ -19265,7 +19546,7 @@ void HTMLFormat__source_code(weave_format *self, text_stream *OUT, weave_target
WRITE("%S", prefatory);
HTML_CLOSE("span");
WRITE(" ");
if (Str__eq(prefatory, TL_IS_290)) {
if (Str__eq(prefatory, TL_IS_383)) {
match_results mr = Regexp__create_mr();
if (Regexp__match(&mr, matter, L"(%c*) from (%C+) *")) {
HTMLFormat__source_code(self, OUT, wv, 0, NULL, mr.exp[0], colouring,
@ -19363,7 +19644,7 @@ void HTMLFormat__figure(weave_format *self, text_stream *OUT, weave_target *wv,
HTML_CLOSE("center");
WRITE("\n");
filename *F = Filenames__in_folder(
Pathnames__subfolder(wv->weave_web->path_to_web, TL_IS_291),
Pathnames__subfolder(wv->weave_web->path_to_web, TL_IS_384),
figname);
Patterns__copy_file_into_weave(wv->weave_web, F);
}
@ -19516,7 +19797,7 @@ void HTMLFormat__commentary_text(weave_format *self, text_stream *OUT, weave_tar
((Str__get_at(id, i+3) == ' ') || (Str__get_at(id, i+3) == '\n') ||
(Str__get_at(id, i+3) == 0))) {
WRITE(" &mdash;"); i+=2;
} else WRITE("%c", Str__get_at(id, i));
} else PUT(Str__get_at(id, i));
}
}
@ -19597,8 +19878,8 @@ void HTMLFormat__tail(weave_format *self, text_stream *OUT, weave_target *wv,
}
HTML__comment(OUT, comment);
HTML__completed(OUT);
Bibliographic__set_datum(wv->weave_web, TL_IS_292, wv->booklet_title);
Indexer__cover_sheet_maker(OUT, wv->weave_web, TL_IS_293, wv, WEAVE_SECOND_HALF);
Bibliographic__set_datum(wv->weave_web, TL_IS_385, wv->booklet_title);
Indexer__cover_sheet_maker(OUT, wv->weave_web, TL_IS_386, wv, WEAVE_SECOND_HALF);
}
#line 612 "inweb/Chapter 5/HTML Formats.w"
@ -19615,9 +19896,9 @@ void HTMLFormat__sref(OUTPUT_STREAM, weave_target *wv, section *S) {
#line 625 "inweb/Chapter 5/HTML Formats.w"
int HTMLFormat__begin_weaving_EPUB(weave_format *wf, web *W, weave_pattern *pattern) {
TEMPORARY_TEXT(T)
WRITE_TO(T, "%S", Bibliographic__get_datum(W, TL_IS_294));
WRITE_TO(T, "%S", Bibliographic__get_datum(W, TL_IS_387));
W->as_ebook = Epub__new(T, "P");
filename *CSS = Patterns__obtain_filename(pattern, TL_IS_295);
filename *CSS = Patterns__obtain_filename(pattern, TL_IS_388);
Epub__use_CSS_throughout(W->as_ebook, CSS);
Epub__attach_metadata(W->as_ebook, L"identifier", T);
DISCARD_TEXT(T)
@ -19846,7 +20127,7 @@ void Makefiles__scan_makefile_line(text_stream *line, text_file_position *tfp, v
{
#line 86 "inweb/Chapter 6/Makefiles.w"
WRITE("%S", mr.exp[0]);
Makefiles__repeat(OUT, TL_IS_296, FALSE, mr.exp[1], FALSE, NULL, tfp, MS);
Makefiles__repeat(OUT, TL_IS_389, FALSE, mr.exp[1], FALSE, NULL, tfp, MS);
WRITE("%S\n", mr.exp[2]);
MS->last_line_was_blank = FALSE;
Regexp__dispose_of(&mr);
@ -19860,7 +20141,7 @@ void Makefiles__scan_makefile_line(text_stream *line, text_file_position *tfp, v
{
#line 103 "inweb/Chapter 6/Makefiles.w"
WRITE("INWEB = "); Makefiles__pathname_slashed(OUT, path_to_inweb); WRITE("/Tangled/inweb\n");
pathname *path_to_intest = Pathnames__subfolder(Pathnames__up(path_to_inweb), TL_IS_298);
pathname *path_to_intest = Pathnames__subfolder(Pathnames__up(path_to_inweb), TL_IS_391);
WRITE("INTEST = "); Makefiles__pathname_slashed(OUT, path_to_intest); WRITE("/Tangled/intest\n");
if (MS->for_web) {
WRITE("MYNAME = %S\n", Pathnames__directory_name(MS->for_web->path_to_web));
@ -19888,7 +20169,7 @@ void Makefiles__scan_makefile_line(text_stream *line, text_file_position *tfp, v
if (Regexp__match(&mr, line, L" *{platform-settings} *"))
{
#line 94 "inweb/Chapter 6/Makefiles.w"
filename *prototype = Filenames__in_folder(path_to_inweb, TL_IS_297);
filename *prototype = Filenames__in_folder(path_to_inweb, TL_IS_390);
MS->allow_commands = FALSE;
TextFiles__read(prototype, FALSE, "can't open make settings file",
TRUE, Makefiles__scan_makefile_line, NULL, MS);
@ -20077,7 +20358,7 @@ void Git__copy_gitignore_line(text_stream *line, text_file_position *tfp, void *
{
#line 44 "inweb/Chapter 6/Git Support.w"
filename *prototype =
Filenames__in_folder(path_to_inweb_materials, TL_IS_299);
Filenames__in_folder(path_to_inweb_materials, TL_IS_392);
TextFiles__read(prototype, FALSE, "can't open make settings file",
TRUE, Git__copy_gitignore_line, NULL, MS);
Regexp__dispose_of(&mr);
@ -20380,31 +20661,124 @@ void register_tangled_text_literals(void) {
TL_IS_270 = Str__literal(L"PDF");
TL_IS_271 = Str__literal(L".tex");
TL_IS_272 = Str__literal(L"inweb-macros.tex");
TL_IS_273 = Str__literal(L"leq");
TL_IS_274 = Str__literal(L"geq");
TL_IS_275 = Str__literal(L"neq");
TL_IS_276 = Str__literal(L"HTML");
TL_IS_277 = Str__literal(L".html");
TL_IS_278 = Str__literal(L"ePub");
TL_IS_279 = Str__literal(L".html");
TL_IS_280 = Str__literal(L"template");
TL_IS_281 = Str__literal(L"inweb.css");
TL_IS_282 = Str__literal(L"");
TL_IS_283 = Str__literal(L"template");
TL_IS_284 = Str__literal(L"crumbs.gif");
TL_IS_285 = Str__literal(L"&#9733;");
TL_IS_286 = Str__literal(L"../webs.html");
TL_IS_287 = Str__literal(L"Title");
TL_IS_288 = Str__literal(L"Version Number");
TL_IS_289 = Str__literal(L"index.html");
TL_IS_290 = Str__literal(L"enum");
TL_IS_291 = Str__literal(L"Figures");
TL_IS_292 = Str__literal(L"Booklet Title");
TL_IS_293 = Str__literal(L"template");
TL_IS_294 = Str__literal(L"Title");
TL_IS_295 = Str__literal(L"inweb.css");
TL_IS_296 = Str__literal(L" ");
TL_IS_297 = Str__literal(L"platform-settings.mk");
TL_IS_298 = Str__literal(L"intest");
TL_IS_299 = Str__literal(L"gitignorescript.txt");
TL_IS_273 = Str__literal(L"not");
TL_IS_274 = Str__literal(L"exists");
TL_IS_275 = Str__literal(L"forall");
TL_IS_276 = Str__literal(L"leq");
TL_IS_277 = Str__literal(L"geq");
TL_IS_278 = Str__literal(L"sim");
TL_IS_279 = Str__literal(L"hbox");
TL_IS_280 = Str__literal(L"left");
TL_IS_281 = Str__literal(L"right");
TL_IS_282 = Str__literal(L"Rightarrow");
TL_IS_283 = Str__literal(L"Leftrightarrow");
TL_IS_284 = Str__literal(L"to");
TL_IS_285 = Str__literal(L"rightarrow");
TL_IS_286 = Str__literal(L"longrightarrow");
TL_IS_287 = Str__literal(L"leftarrow");
TL_IS_288 = Str__literal(L"longleftarrow");
TL_IS_289 = Str__literal(L"lbrace");
TL_IS_290 = Str__literal(L"mid");
TL_IS_291 = Str__literal(L"rbrace");
TL_IS_292 = Str__literal(L"cdot");
TL_IS_293 = Str__literal(L"cdots");
TL_IS_294 = Str__literal(L"dots");
TL_IS_295 = Str__literal(L"times");
TL_IS_296 = Str__literal(L"quad");
TL_IS_297 = Str__literal(L"qquad");
TL_IS_298 = Str__literal(L"TeX");
TL_IS_299 = Str__literal(L"neq");
TL_IS_300 = Str__literal(L"noteq");
TL_IS_301 = Str__literal(L"ell");
TL_IS_302 = Str__literal(L"log");
TL_IS_303 = Str__literal(L"exp");
TL_IS_304 = Str__literal(L"sin");
TL_IS_305 = Str__literal(L"cos");
TL_IS_306 = Str__literal(L"tan");
TL_IS_307 = Str__literal(L"top");
TL_IS_308 = Str__literal(L"Alpha");
TL_IS_309 = Str__literal(L"Beta");
TL_IS_310 = Str__literal(L"Gamma");
TL_IS_311 = Str__literal(L"Delta");
TL_IS_312 = Str__literal(L"Epsilon");
TL_IS_313 = Str__literal(L"Zeta");
TL_IS_314 = Str__literal(L"Eta");
TL_IS_315 = Str__literal(L"Theta");
TL_IS_316 = Str__literal(L"Iota");
TL_IS_317 = Str__literal(L"Kappa");
TL_IS_318 = Str__literal(L"Lambda");
TL_IS_319 = Str__literal(L"Mu");
TL_IS_320 = Str__literal(L"Nu");
TL_IS_321 = Str__literal(L"Xi");
TL_IS_322 = Str__literal(L"Omicron");
TL_IS_323 = Str__literal(L"Pi");
TL_IS_324 = Str__literal(L"Rho");
TL_IS_325 = Str__literal(L"Varsigma");
TL_IS_326 = Str__literal(L"Sigma");
TL_IS_327 = Str__literal(L"Tau");
TL_IS_328 = Str__literal(L"Upsilon");
TL_IS_329 = Str__literal(L"Phi");
TL_IS_330 = Str__literal(L"Chi");
TL_IS_331 = Str__literal(L"Psi");
TL_IS_332 = Str__literal(L"Omega");
TL_IS_333 = Str__literal(L"alpha");
TL_IS_334 = Str__literal(L"beta");
TL_IS_335 = Str__literal(L"gamma");
TL_IS_336 = Str__literal(L"delta");
TL_IS_337 = Str__literal(L"epsilon");
TL_IS_338 = Str__literal(L"zeta");
TL_IS_339 = Str__literal(L"eta");
TL_IS_340 = Str__literal(L"theta");
TL_IS_341 = Str__literal(L"iota");
TL_IS_342 = Str__literal(L"kappa");
TL_IS_343 = Str__literal(L"lambda");
TL_IS_344 = Str__literal(L"mu");
TL_IS_345 = Str__literal(L"nu");
TL_IS_346 = Str__literal(L"xi");
TL_IS_347 = Str__literal(L"omicron");
TL_IS_348 = Str__literal(L"pi");
TL_IS_349 = Str__literal(L"rho");
TL_IS_350 = Str__literal(L"varsigma");
TL_IS_351 = Str__literal(L"sigma");
TL_IS_352 = Str__literal(L"tau");
TL_IS_353 = Str__literal(L"upsilon");
TL_IS_354 = Str__literal(L"phi");
TL_IS_355 = Str__literal(L"chi");
TL_IS_356 = Str__literal(L"psi");
TL_IS_357 = Str__literal(L"omega");
TL_IS_358 = Str__literal(L"exists");
TL_IS_359 = Str__literal(L"in");
TL_IS_360 = Str__literal(L"forall");
TL_IS_361 = Str__literal(L"cap");
TL_IS_362 = Str__literal(L"emptyset");
TL_IS_363 = Str__literal(L"subseteq");
TL_IS_364 = Str__literal(L"land");
TL_IS_365 = Str__literal(L"lor");
TL_IS_366 = Str__literal(L"lnot");
TL_IS_367 = Str__literal(L"sum");
TL_IS_368 = Str__literal(L"prod");
TL_IS_369 = Str__literal(L"HTML");
TL_IS_370 = Str__literal(L".html");
TL_IS_371 = Str__literal(L"ePub");
TL_IS_372 = Str__literal(L".html");
TL_IS_373 = Str__literal(L"template");
TL_IS_374 = Str__literal(L"inweb.css");
TL_IS_375 = Str__literal(L"");
TL_IS_376 = Str__literal(L"template");
TL_IS_377 = Str__literal(L"crumbs.gif");
TL_IS_378 = Str__literal(L"&#9733;");
TL_IS_379 = Str__literal(L"../webs.html");
TL_IS_380 = Str__literal(L"Title");
TL_IS_381 = Str__literal(L"Version Number");
TL_IS_382 = Str__literal(L"index.html");
TL_IS_383 = Str__literal(L"enum");
TL_IS_384 = Str__literal(L"Figures");
TL_IS_385 = Str__literal(L"Booklet Title");
TL_IS_386 = Str__literal(L"template");
TL_IS_387 = Str__literal(L"Title");
TL_IS_388 = Str__literal(L"inweb.css");
TL_IS_389 = Str__literal(L" ");
TL_IS_390 = Str__literal(L"platform-settings.mk");
TL_IS_391 = Str__literal(L"intest");
TL_IS_392 = Str__literal(L"gitignorescript.txt");
}

View file

@ -274,7 +274,7 @@ safety problems.
<hr class="tocbar">
<ul class="toc"><li><i>(This section begins Chapter 1: Setting Up.)</i></li><li><a href="1-pp.html">Continue with 'POSIX Platforms'</a></li></ul><hr class="tocbar">
<!--End of weave: 171 lines from a web of 9333-->
<!--End of weave: 171 lines from a web of 9327-->
</body>
</html>

View file

@ -548,7 +548,7 @@ actually running a one-line AppleScript here.
<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">
<!--End of weave: 324 lines from a web of 9333-->
<!--End of weave: 324 lines from a web of 9327-->
</body>
</html>

View file

@ -371,7 +371,7 @@ POSIX <code class="display"><span class="extract">sleep</span></code> is for sec
<hr class="tocbar">
<ul class="toc"><li><a href="1-pp.html">Back to 'POSIX Platforms'</a></li><li><i>(This section ends Chapter 1: Setting Up.)</i></li></ul><hr class="tocbar">
<!--End of weave: 236 lines from a web of 9333-->
<!--End of weave: 236 lines from a web of 9327-->
</body>
</html>

View file

@ -445,7 +445,7 @@ and free the memory when done:
<hr class="tocbar">
<ul class="toc"><li><a href="2-llas.html">Back to 'Linked Lists and Stacks'</a></li><li><i>(This section ends Chapter 2: Memory, Streams and Collections.)</i></li></ul><hr class="tocbar">
<!--End of weave: 288 lines from a web of 9333-->
<!--End of weave: 288 lines from a web of 9327-->
</body>
</html>

View file

@ -401,7 +401,7 @@ but weren't.
<hr class="tocbar">
<ul class="toc"><li><i>(This section begins Chapter 2: Memory, Streams and Collections.)</i></li><li><a href="2-mmr.html">Continue with 'Memory'</a></li></ul><hr class="tocbar">
<!--End of weave: 284 lines from a web of 9333-->
<!--End of weave: 284 lines from a web of 9327-->
</body>
</html>

View file

@ -278,7 +278,7 @@ preprocessor:
</pre>
<hr class="tocbar">
<ul class="toc"><li><a href="2-mth.html">Back to 'Methods'</a></li><li><a href="2-dct.html">Continue with 'Dictionaries'</a></li></ul><hr class="tocbar">
<!--End of weave: 217 lines from a web of 9333-->
<!--End of weave: 217 lines from a web of 9327-->
</body>
</html>

View file

@ -1307,7 +1307,7 @@ allocated objects above; so that leaves only humble <code class="display"><span
<hr class="tocbar">
<ul class="toc"><li><a href="2-dl.html">Back to 'Debugging Log'</a></li><li><a href="2-str.html">Continue with 'Streams'</a></li></ul><hr class="tocbar">
<!--End of weave: 932 lines from a web of 9333-->
<!--End of weave: 932 lines from a web of 9327-->
</body>
</html>

View file

@ -193,9 +193,9 @@ to a structure which has <code class="display"><span class="extract">METHOD_CALL
<span class="identifier">rval</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">method</span><span class="plain"> *</span><span class="identifier">M</span><span class="plain"> = </span><span class="identifier">upon</span><span class="plain">?(</span><span class="identifier">upon</span><span class="plain">-&gt;</span><span class="identifier">methods</span><span class="plain">-</span><span class="element">&gt;first_method</span><span class="plain">):</span><span class="identifier">NULL</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="identifier">M</span><span class="plain">-</span><span class="element">&gt;next_method</span><span class="plain">)</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">M</span><span class="plain">-</span><span class="element">&gt;method_id</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">rv</span><span class="plain"> = (*((</span><span class="identifier">id</span><span class="plain">##</span><span class="identifier">_type</span><span class="plain">) (</span><span class="identifier">M</span><span class="plain">-</span><span class="element">&gt;method_function</span><span class="plain">)))(</span><span class="identifier">upon</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">rv</span><span class="plain">) {</span>
<span class="identifier">rval</span><span class="plain"> = </span><span class="identifier">rv</span><span class="plain">;</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">method_rval_</span><span class="plain"> = (*((</span><span class="identifier">id</span><span class="plain">##</span><span class="identifier">_type</span><span class="plain">) (</span><span class="identifier">M</span><span class="plain">-</span><span class="element">&gt;method_function</span><span class="plain">)))(</span><span class="identifier">upon</span><span class="plain">);</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">method_rval_</span><span class="plain">) {</span>
<span class="identifier">rval</span><span class="plain"> = </span><span class="identifier">method_rval_</span><span class="plain">;</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
@ -211,7 +211,7 @@ to a structure which has <code class="display"><span class="extract">METHOD_CALL
</pre>
<hr class="tocbar">
<ul class="toc"><li><a href="2-wal.html">Back to 'Writers and Loggers'</a></li><li><a href="2-llas.html">Continue with 'Linked Lists and Stacks'</a></li></ul><hr class="tocbar">
<!--End of weave: 153 lines from a web of 9333-->
<!--End of weave: 153 lines from a web of 9327-->
</body>
</html>

View file

@ -768,9 +768,7 @@ ISO string:
<p class="endnote">The function Streams::write_as_ISO_string is used in <a href="#SP32">&#167;32</a>, 4/sm (<a href="4-sm.html#SP6">&#167;6</a>).</p>
<p class="inwebparagraph"><a id="SP31"></a><b>&#167;31. </b>Unicode code points outside the first page are flattened to <code class="display"><span class="extract">'?'</span></code> in an
ISO string:
</p>
<p class="inwebparagraph"><a id="SP31"></a><b>&#167;31. </b></p>
<pre class="display">
@ -1306,7 +1304,7 @@ to open similar ones again).
<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">
<!--End of weave: 947 lines from a web of 9333-->
<!--End of weave: 945 lines from a web of 9327-->
</body>
</html>

View file

@ -210,10 +210,7 @@ waiting for:
<span class="reserved">else</span><span class="plain"> </span><span class="functiontext">Streams::putc</span><span class="plain">(*</span><span class="identifier">p</span><span class="plain">, </span><span class="identifier">stream</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="character">'\</span><span class="plain">n</span><span class="character">'</span><span class="plain">:</span>
<span class="comment">if (stream-&gt;stream_flags &amp; USES_I6_ESCAPES_STRF)</span>
<span class="comment">Streams::putc('^', stream);</span>
<span class="comment">else</span>
<span class="functiontext">Streams::putc</span><span class="plain">(*</span><span class="identifier">p</span><span class="plain">, </span><span class="identifier">stream</span><span class="plain">);</span>
<span class="functiontext">Streams::putc</span><span class="plain">(*</span><span class="identifier">p</span><span class="plain">, </span><span class="identifier">stream</span><span class="plain">);</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">default</span><span class="plain">: </span><span class="functiontext">Streams::putc</span><span class="plain">(*</span><span class="identifier">p</span><span class="plain">, </span><span class="identifier">stream</span><span class="plain">); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
@ -356,7 +353,7 @@ file encodings, but expanding <code class="display"><span class="extract">%s</sp
<hr class="tocbar">
<ul class="toc"><li><a href="2-str.html">Back to 'Streams'</a></li><li><a href="2-mth.html">Continue with 'Methods'</a></li></ul><hr class="tocbar">
<!--End of weave: 268 lines from a web of 9333-->
<!--End of weave: 265 lines from a web of 9327-->
</body>
</html>

View file

@ -372,7 +372,7 @@ and in any case the code above contains much larger buffers than needed.)
<hr class="tocbar">
<ul class="toc"><li><a href="3-fln.html">Back to 'Filenames'</a></li><li><a href="3-shl.html">Continue with 'Shell'</a></li></ul><hr class="tocbar">
<!--End of weave: 236 lines from a web of 9333-->
<!--End of weave: 236 lines from a web of 9327-->
</body>
</html>

View file

@ -491,7 +491,7 @@ name and purpose.
<hr class="tocbar">
<ul class="toc"><li><a href="3-em.html">Back to 'Error Messages'</a></li><li><a href="3-pth.html">Continue with 'Pathnames'</a></li></ul><hr class="tocbar">
<!--End of weave: 354 lines from a web of 9333-->
<!--End of weave: 354 lines from a web of 9327-->
</body>
</html>

View file

@ -72,7 +72,7 @@ transcoded the other way.
<hr class="tocbar">
<ul class="toc"><li><a href="3-shl.html">Back to 'Shell'</a></li><li><a href="3-tm.html">Continue with 'Time'</a></li></ul><hr class="tocbar">
<!--End of weave: 45 lines from a web of 9333-->
<!--End of weave: 45 lines from a web of 9327-->
</body>
</html>

View file

@ -259,7 +259,7 @@ specify this at three levels of abstraction:
<hr class="tocbar">
<ul class="toc"><li><i>(This section begins Chapter 3: The Operating System.)</i></li><li><a href="3-cla.html">Continue with 'Command Line Arguments'</a></li></ul><hr class="tocbar">
<!--End of weave: 178 lines from a web of 9333-->
<!--End of weave: 178 lines from a web of 9327-->
</body>
</html>

View file

@ -354,7 +354,7 @@ when printed out.
<hr class="tocbar">
<ul class="toc"><li><a href="3-pth.html">Back to 'Pathnames'</a></li><li><a href="3-cf.html">Continue with 'Case-Insensitive Filenames'</a></li></ul><hr class="tocbar">
<!--End of weave: 264 lines from a web of 9333-->
<!--End of weave: 264 lines from a web of 9327-->
</body>
</html>

View file

@ -325,7 +325,7 @@ on the file system with that path.
<hr class="tocbar">
<ul class="toc"><li><a href="3-cla.html">Back to 'Command Line Arguments'</a></li><li><a href="3-fln.html">Continue with 'Filenames'</a></li></ul><hr class="tocbar">
<!--End of weave: 215 lines from a web of 9333-->
<!--End of weave: 215 lines from a web of 9327-->
</body>
</html>

View file

@ -186,7 +186,7 @@ all transcoded to UTF-8 in the most unlucky way imaginable.
<hr class="tocbar">
<ul class="toc"><li><a href="3-cf.html">Back to 'Case-Insensitive Filenames'</a></li><li><a href="3-drc.html">Continue with 'Directories'</a></li></ul><hr class="tocbar">
<!--End of weave: 126 lines from a web of 9333-->
<!--End of weave: 126 lines from a web of 9327-->
</body>
</html>

View file

@ -149,7 +149,7 @@ fairly low numbers, and this we now do.
<hr class="tocbar">
<ul class="toc"><li><a href="3-drc.html">Back to 'Directories'</a></li><li><i>(This section ends Chapter 3: The Operating System.)</i></li></ul><hr class="tocbar">
<!--End of weave: 112 lines from a web of 9333-->
<!--End of weave: 112 lines from a web of 9327-->
</body>
</html>

View file

@ -217,7 +217,7 @@ the more obvious accents from it.
<hr class="tocbar">
<ul class="toc"><li><i>(This section begins Chapter 4: Text Handling.)</i></li><li><a href="4-cst.html">Continue with 'C Strings'</a></li></ul><hr class="tocbar">
<!--End of weave: 152 lines from a web of 9333-->
<!--End of weave: 152 lines from a web of 9327-->
</body>
</html>

View file

@ -185,7 +185,7 @@ hand. This I think makes for opaque code. So:
<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">
<!--End of weave: 111 lines from a web of 9333-->
<!--End of weave: 111 lines from a web of 9327-->
</body>
</html>

View file

@ -634,7 +634,7 @@ For example,
<hr class="tocbar">
<ul class="toc"><li><a href="4-taa.html">Back to 'Tries and Avinues'</a></li><li><i>(This section ends Chapter 4: Text Handling.)</i></li></ul><hr class="tocbar">
<!--End of weave: 437 lines from a web of 9333-->
<!--End of weave: 437 lines from a web of 9327-->
</body>
</html>

View file

@ -878,7 +878,7 @@ is run just once per I-literal in the source code, when the program starts up.
<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">
<!--End of weave: 605 lines from a web of 9333-->
<!--End of weave: 605 lines from a web of 9327-->
</body>
</html>

View file

@ -523,7 +523,7 @@ trie in turn until one matches (if it does).
<hr class="tocbar">
<ul class="toc"><li><a href="4-tf.html">Back to 'Text Files'</a></li><li><a href="4-pm.html">Continue with 'Pattern Matching'</a></li></ul><hr class="tocbar">
<!--End of weave: 375 lines from a web of 9333-->
<!--End of weave: 375 lines from a web of 9327-->
</body>
</html>

View file

@ -470,7 +470,7 @@ hyphens into em-rules when they are flanked by spaces, and so on.
<hr class="tocbar">
<ul class="toc"><li><a href="4-sm.html">Back to 'String Manipulation'</a></li><li><a href="4-taa.html">Continue with 'Tries and Avinues'</a></li></ul><hr class="tocbar">
<!--End of weave: 305 lines from a web of 9333-->
<!--End of weave: 305 lines from a web of 9327-->
</body>
</html>

View file

@ -61,7 +61,7 @@ wrappers simply abstract the standard C library's handling.
<hr class="tocbar">
<ul class="toc"><li><a href="4-cst.html">Back to 'C Strings'</a></li><li><a href="4-sm.html">Continue with 'String Manipulation'</a></li></ul><hr class="tocbar">
<!--End of weave: 30 lines from a web of 9333-->
<!--End of weave: 30 lines from a web of 9327-->
</body>
</html>

View file

@ -908,7 +908,7 @@ impaired people.
<hr class="tocbar">
<ul class="toc"><li><a href="5-htm.html">Back to 'HTML'</a></li><li><i>(This section ends Chapter 5: Generating Websites.)</i></li></ul><hr class="tocbar">
<!--End of weave: 598 lines from a web of 9333-->
<!--End of weave: 598 lines from a web of 9327-->
</body>
</html>

View file

@ -1004,7 +1004,7 @@ need to run quickly.
<hr class="tocbar">
<ul class="toc"><li><i>(This section begins Chapter 5: Generating Websites.)</i></li><li><a href="5-ee.html">Continue with 'Epub Ebooks'</a></li></ul><hr class="tocbar">
<!--End of weave: 757 lines from a web of 9333-->
<!--End of weave: 757 lines from a web of 9327-->
</body>
</html>

View file

@ -326,7 +326,7 @@ or to system APIs.
<hr class="tocbar">
<ul class="toc"><li><i>(This section begins Chapter 6: Media.)</i></li><li><a href="6-id.html">Continue with 'Image Dimensions'</a></li></ul><hr class="tocbar">
<!--End of weave: 241 lines from a web of 9333-->
<!--End of weave: 241 lines from a web of 9327-->
</body>
</html>

View file

@ -121,7 +121,7 @@ first two words (section 11.2.2).
<hr class="tocbar">
<ul class="toc"><li><a href="6-bf.html">Back to 'Binary Files'</a></li><li><a href="6-sd.html">Continue with 'Sound Durations'</a></li></ul><hr class="tocbar">
<!--End of weave: 97 lines from a web of 9333-->
<!--End of weave: 97 lines from a web of 9327-->
</body>
</html>

View file

@ -366,7 +366,7 @@ officially support MIDI, which makes the question moot.
<hr class="tocbar">
<ul class="toc"><li><a href="6-id.html">Back to 'Image Dimensions'</a></li><li><i>(This section ends Chapter 6: Media.)</i></li></ul><hr class="tocbar">
<!--End of weave: 337 lines from a web of 9333-->
<!--End of weave: 337 lines from a web of 9327-->
</body>
</html>

View file

@ -79,7 +79,7 @@
<hr class="tocbar">
<ul class="toc"><li><i>(This section begins Sections.)</i></li><li><a href="S-ut.html">Continue with 'Unit Tests'</a></li></ul><hr class="tocbar">
<!--End of weave: 57 lines from a web of 9605-->
<!--End of weave: 57 lines from a web of 9599-->
</body>
</html>

View file

@ -276,7 +276,7 @@
<hr class="tocbar">
<ul class="toc"><li><a href="S-pc.html">Back to 'Program Control'</a></li><li><i>(This section ends Sections.)</i></li></ul><hr class="tocbar">
<!--End of weave: 215 lines from a web of 9605-->
<!--End of weave: 215 lines from a web of 9599-->
</body>
</html>

View file

@ -8,7 +8,7 @@
<body>
<ul class="crumbs"><li><a href="../webs.html">&#9733;</a></li><li><b>foundation-test </b></li></ul>
<p class="purpose">For testing the foundation module.</p>
<p class="purpose">Unit tests for the foundation module.</p>
<hr>
<ul class="sectionlist">
<li>

View file

@ -97,7 +97,7 @@ types.
<hr class="tocbar">
<ul class="toc"><li><i>(This section begins Chapter 1: Top Level.)</i></li><li><a href="1-pc.html">Continue with 'Program Control'</a></li></ul><hr class="tocbar">
<!--End of weave: 79 lines from a web of 21004-->
<!--End of weave: 79 lines from a web of 21211-->
</body>
</html>

View file

@ -368,7 +368,7 @@ Otherwise, a range is a chapter number/letter, or a section range.
<hr class="tocbar">
<ul class="toc"><li><a href="1-pc.html">Back to 'Program Control'</a></li><li><a href="1-ptt.html">Continue with 'Patterns'</a></li></ul><hr class="tocbar">
<!--End of weave: 299 lines from a web of 21004-->
<!--End of weave: 299 lines from a web of 21211-->
</body>
</html>

View file

@ -489,7 +489,7 @@ source:
<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">
<!--End of weave: 297 lines from a web of 21004-->
<!--End of weave: 297 lines from a web of 21211-->
</body>
</html>

View file

@ -321,7 +321,7 @@ for payloads to be copied into weave, we make good use of the above:
<hr class="tocbar">
<ul class="toc"><li><a href="1-cnf.html">Back to 'Configuration'</a></li><li><i>(This section ends Chapter 1: Top Level.)</i></li></ul><hr class="tocbar">
<!--End of weave: 196 lines from a web of 21004-->
<!--End of weave: 196 lines from a web of 21211-->
</body>
</html>

View file

@ -228,7 +228,7 @@ want to typeset the title in full caps to do so.)
<hr class="tocbar">
<ul class="toc"><li><i>(This section begins Chapter 2: Parsing a Web.)</i></li><li><a href="2-tr.html">Continue with 'The Reader'</a></li></ul><hr class="tocbar">
<!--End of weave: 151 lines from a web of 21004-->
<!--End of weave: 151 lines from a web of 21211-->
</body>
</html>

View file

@ -182,7 +182,7 @@ the code at the last line on which an <code class="display"><span class="extract
<hr class="tocbar">
<ul class="toc"><li><a href="2-tgs.html">Back to 'Tags'</a></li><li><a href="2-pn.html">Continue with 'Paragraph Numbering'</a></li></ul><hr class="tocbar">
<!--End of weave: 114 lines from a web of 21004-->
<!--End of weave: 114 lines from a web of 21211-->
</body>
</html>

View file

@ -175,7 +175,7 @@ some of these fell into disuse in version 2 syntax.
</pre>
<hr class="tocbar">
<ul class="toc"><li><a href="2-mdl.html">Back to 'Modules'</a></li><li><a href="2-tp.html">Continue with 'The Parser'</a></li></ul><hr class="tocbar">
<!--End of weave: 141 lines from a web of 21004-->
<!--End of weave: 141 lines from a web of 21211-->
</body>
</html>

View file

@ -217,7 +217,7 @@ module by name.
<hr class="tocbar">
<ul class="toc"><li><a href="2-tr.html">Back to 'The Reader'</a></li><li><a href="2-lc.html">Continue with 'Line Categories'</a></li></ul><hr class="tocbar">
<!--End of weave: 131 lines from a web of 21004-->
<!--End of weave: 131 lines from a web of 21211-->
</body>
</html>

View file

@ -76,7 +76,7 @@ much faster.
<hr class="tocbar">
<ul class="toc"><li><a href="2-tp.html">Back to 'The Parser'</a></li><li><a href="2-tgs.html">Continue with 'Tags'</a></li></ul><hr class="tocbar">
<!--End of weave: 45 lines from a web of 21004-->
<!--End of weave: 45 lines from a web of 21211-->
</body>
</html>

View file

@ -272,7 +272,7 @@ chosen by the author, so 2 it is.
<hr class="tocbar">
<ul class="toc"><li><a href="2-ec.html">Back to 'Enumerated Constants'</a></li><li><i>(This section ends Chapter 2: Parsing a Web.)</i></li></ul><hr class="tocbar">
<!--End of weave: 161 lines from a web of 21004-->
<!--End of weave: 161 lines from a web of 21211-->
</body>
</html>

View file

@ -243,7 +243,7 @@ doesn't specify a tag.)
<hr class="tocbar">
<ul class="toc"><li><a href="2-pm.html">Back to 'Paragraph Macros'</a></li><li><a href="2-ec.html">Continue with 'Enumerated Constants'</a></li></ul><hr class="tocbar">
<!--End of weave: 171 lines from a web of 21004-->
<!--End of weave: 171 lines from a web of 21211-->
</body>
</html>

View file

@ -1089,7 +1089,7 @@ when it comes to Inweb's exit code, so they will halt a make.
<hr class="tocbar">
<ul class="toc"><li><a href="2-lc.html">Back to 'Line Categories'</a></li><li><a href="2-pm.html">Continue with 'Paragraph Macros'</a></li></ul><hr class="tocbar">
<!--End of weave: 702 lines from a web of 21004-->
<!--End of weave: 702 lines from a web of 21211-->
</body>
</html>

View file

@ -1173,7 +1173,7 @@ get around the lack of some POSIX facilities on Windows.)
<hr class="tocbar">
<ul class="toc"><li><a href="2-bd.html">Back to 'Bibliographic Data'</a></li><li><a href="2-mdl.html">Continue with 'Modules'</a></li></ul><hr class="tocbar">
<!--End of weave: 807 lines from a web of 21004-->
<!--End of weave: 807 lines from a web of 21211-->
</body>
</html>

View file

@ -518,7 +518,7 @@ folder: failing that, we fall back on a default script belonging to Inweb.
<hr class="tocbar">
<ul class="toc"><li><i>(This section begins Chapter 3: Outputs.)</i></li><li><a href="3-ts.html">Continue with 'The Swarm'</a></li></ul><hr class="tocbar">
<!--End of weave: 366 lines from a web of 21004-->
<!--End of weave: 366 lines from a web of 21211-->
</body>
</html>

View file

@ -799,7 +799,7 @@ its square-bracketed parts.
<hr class="tocbar">
<ul class="toc"><li><a href="3-ts.html">Back to 'The Swarm'</a></li><li><a href="3-tw.html">Continue with 'The Weaver'</a></li></ul><hr class="tocbar">
<!--End of weave: 522 lines from a web of 21004-->
<!--End of weave: 522 lines from a web of 21211-->
</body>
</html>

View file

@ -257,7 +257,7 @@ generic <code class="display"><span class="extract">index.html</span></code> if
<hr class="tocbar">
<ul class="toc"><li><a href="3-ta.html">Back to 'The Analyser'</a></li><li><a href="3-ti.html">Continue with 'The Indexer'</a></li></ul><hr class="tocbar">
<!--End of weave: 177 lines from a web of 21004-->
<!--End of weave: 177 lines from a web of 21211-->
</body>
</html>

View file

@ -361,7 +361,7 @@ passes straight through. So <code class="display"><span class="extract">[[water]
<hr class="tocbar">
<ul class="toc"><li><a href="3-tw.html">Back to 'The Weaver'</a></li><li><i>(This section ends Chapter 3: Outputs.)</i></li></ul><hr class="tocbar">
<!--End of weave: 235 lines from a web of 21004-->
<!--End of weave: 235 lines from a web of 21211-->
</body>
</html>

View file

@ -1296,7 +1296,7 @@ marked as <code class="display"><span class="extract">@h</span></code> headings.
<hr class="tocbar">
<ul class="toc"><li><a href="3-ti.html">Back to 'The Indexer'</a></li><li><a href="3-tt.html">Continue with 'The Tangler'</a></li></ul><hr class="tocbar">
<!--End of weave: 824 lines from a web of 21004-->
<!--End of weave: 824 lines from a web of 21211-->
</body>
</html>

View file

@ -1524,7 +1524,7 @@ bibliographic variable, but don't do that.
<hr class="tocbar">
<ul class="toc"><li><a href="4-pl.html">Back to 'Programming Languages'</a></li><li><a href="4-is.html">Continue with 'InC Support'</a></li></ul><hr class="tocbar">
<!--End of weave: 1014 lines from a web of 21004-->
<!--End of weave: 1014 lines from a web of 21211-->
</body>
</html>

View file

@ -1536,7 +1536,7 @@ exists. We watch for it here:
<hr class="tocbar">
<ul class="toc"><li><a href="4-cl.html">Back to 'C-Like Languages'</a></li><li><a href="4-ps.html">Continue with 'Perl Support'</a></li></ul><hr class="tocbar">
<!--End of weave: 993 lines from a web of 21004-->
<!--End of weave: 993 lines from a web of 21211-->
</body>
</html>

View file

@ -89,7 +89,7 @@ a spurious comment betraying Inweb's involvement in the process.
<hr class="tocbar">
<ul class="toc"><li><a href="4-ps.html">Back to 'Perl Support'</a></li><li><i>(This section ends Chapter 4: Languages.)</i></li></ul><hr class="tocbar">
<!--End of weave: 51 lines from a web of 21004-->
<!--End of weave: 51 lines from a web of 21211-->
</body>
</html>

View file

@ -805,7 +805,7 @@ special treatment, and this method decides which.
<hr class="tocbar">
<ul class="toc"><li><i>(This section begins Chapter 4: Languages.)</i></li><li><a href="4-cl.html">Continue with 'C-Like Languages'</a></li></ul><hr class="tocbar">
<!--End of weave: 510 lines from a web of 21004-->
<!--End of weave: 510 lines from a web of 21211-->
</body>
</html>

View file

@ -146,7 +146,7 @@ principle overloading its comment notation <code class="display"><span class="ex
<hr class="tocbar">
<ul class="toc"><li><a href="4-is.html">Back to 'InC Support'</a></li><li><a href="4-is2.html">Continue with 'Inform Support'</a></li></ul><hr class="tocbar">
<!--End of weave: 94 lines from a web of 21004-->
<!--End of weave: 94 lines from a web of 21211-->
</body>
</html>

View file

@ -748,7 +748,7 @@ the page, and this drops one.
<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">+3) == </span><span class="character">' '</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">+3) == </span><span class="character">'\</span><span class="plain">n</span><span class="character">'</span><span class="plain">) ||</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">+3) == 0))) {</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" &amp;mdash;"</span><span class="plain">); </span><span class="identifier">i</span><span class="plain">+=2;</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">id</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">));</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_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="plain">}</span>
<span class="plain">}</span>
</pre>
@ -913,7 +913,7 @@ the page, and this drops one.
<hr class="tocbar">
<ul class="toc"><li><a href="5-tf.html">Back to 'TeX Format'</a></li><li><a href="5-rtt.html">Continue with 'Running Through TeX'</a></li></ul><hr class="tocbar">
<!--End of weave: 668 lines from a web of 21004-->
<!--End of weave: 668 lines from a web of 21211-->
</body>
</html>

View file

@ -285,7 +285,7 @@
<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">
<!--End of weave: 165 lines from a web of 21004-->
<!--End of weave: 165 lines from a web of 21211-->
</body>
</html>

View file

@ -277,7 +277,7 @@ for the user to find out what those errors were.
<hr class="tocbar">
<ul class="toc"><li><a href="5-hf.html">Back to 'HTML Formats'</a></li><li><i>(This section ends Chapter 5: Formats.)</i></li></ul><hr class="tocbar">
<!--End of weave: 178 lines from a web of 21004-->
<!--End of weave: 178 lines from a web of 21211-->
</body>
</html>

View file

@ -839,12 +839,29 @@ To do this, the weaver calls the following.
<pre class="display">
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">TeX::remove_math_mode</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text</span><span class="plain">) {</span>
<span class="identifier">TEMPORARY_TEXT</span><span class="plain">(</span><span class="identifier">math_matter</span><span class="plain">);</span>
<span class="functiontext">TeX::remove_math_mode_range</span><span class="plain">(</span><span class="identifier">math_matter</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">, 0, </span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">)-1);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"%S"</span><span class="plain">, </span><span class="identifier">math_matter</span><span class="plain">);</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">math_matter</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">void</span><span class="plain"> </span><span class="functiontext">TeX::remove_math_mode_range</span><span class="plain">(</span><span class="constant">OUTPUT_STREAM</span><span class="plain">, </span><span class="reserved">text_stream</span><span class="plain"> *</span><span class="identifier">text</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">from</span><span class="plain">, </span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">to</span><span class="plain">) {</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=</span><span class="identifier">from</span><span class="plain">; </span><span class="identifier">i</span><span class="plain"> &lt;= </span><span class="identifier">to</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) {</span>
&lt;<span class="cwebmacro">Remove the over construction</span> <span class="cwebmacronumber">28.1</span>&gt;<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">=</span><span class="identifier">from</span><span class="plain">; </span><span class="identifier">i</span><span class="plain"> &lt;= </span><span class="identifier">to</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) {</span>
&lt;<span class="cwebmacro">Remove the rm and it constructions</span> <span class="cwebmacronumber">28.2</span>&gt;<span class="plain">;</span>
&lt;<span class="cwebmacro">Remove the sqrt constructions</span> <span class="cwebmacronumber">28.3</span>&gt;<span class="plain">;</span>
<span class="plain">}</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">math_mode</span><span class="plain"> = </span><span class="constant">FALSE</span><span class="plain">;</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=0; </span><span class="identifier">i</span><span class="plain"> &lt; </span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">); </span><span class="identifier">i</span><span class="plain">++) {</span>
<span class="reserved">for</span><span class="plain"> (</span><span class="reserved">int</span><span class="plain"> </span><span class="identifier">i</span><span class="plain">=</span><span class="identifier">from</span><span class="plain">; </span><span class="identifier">i</span><span class="plain"> &lt;= </span><span class="identifier">to</span><span class="plain">; </span><span class="identifier">i</span><span class="plain">++) {</span>
<span class="reserved">switch</span><span class="plain"> (</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">)) {</span>
<span class="reserved">case</span><span class="plain"> </span><span class="character">'$'</span><span class="plain">: </span><span class="identifier">math_mode</span><span class="plain"> = (</span><span class="identifier">math_mode</span><span class="plain">)?</span><span class="constant">FALSE</span><span class="plain">:</span><span class="constant">TRUE</span><span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">case</span><span class="plain"> </span><span class="character">'\</span><span class="plain">\</span><span class="character">'</span><span class="plain">: </span>&lt;<span class="cwebmacro">Do something to strip out a TeX macro</span> <span class="cwebmacronumber">28.1</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">default</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">text</span><span class="plain">, </span><span class="identifier">i</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="character">'$'</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">text</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">+1) == </span><span class="character">'$'</span><span class="plain">) </span><span class="identifier">i</span><span class="plain">++;</span>
<span class="identifier">math_mode</span><span class="plain"> = (</span><span class="identifier">math_mode</span><span class="plain">)?</span><span class="constant">FALSE</span><span class="plain">:</span><span class="constant">TRUE</span><span class="plain">; </span><span class="reserved">break</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="identifier">math_mode</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">WRITE</span><span class="plain">(</span><span class="string">"~"</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="character">'\</span><span class="plain">\</span><span class="character">'</span><span class="plain">: </span>&lt;<span class="cwebmacro">Do something to strip out a TeX macro</span> <span class="cwebmacronumber">28.4</span>&gt;<span class="plain">; </span><span class="reserved">break</span><span class="plain">;</span>
<span class="reserved">default</span><span class="plain">: </span><span class="identifier">PUT</span><span class="plain">(</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">)); </span><span class="reserved">break</span><span class="plain">;</span>
<span class="plain">}</span>
<span class="plain">}</span>
<span class="plain">}</span>
@ -854,8 +871,132 @@ To do this, the weaver calls the following.
<p class="endnote">The function TeX::remove_math_mode is used in 5/wf (<a href="5-wf.html#SP23">&#167;23</a>).</p>
<p class="inwebparagraph"><a id="SP28_1"></a><b>&#167;28.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Do something to strip out a TeX macro</span> <span class="cwebmacronumber">28.1</span>&gt; =
<p class="endnote">The function TeX::remove_math_mode_range is used in <a href="#SP28_1">&#167;28.1</a>, <a href="#SP28_2">&#167;28.2</a>, <a href="#SP28_3">&#167;28.3</a>.</p>
<p class="inwebparagraph"><a id="SP28_1"></a><b>&#167;28.1. </b>Here we remove <code class="display"><span class="extract">{{top}\over{bottom}}</span></code>, converting it to <code class="display"><span class="extract">((top) / (bottom))</span></code>.
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Remove the over construction</span> <span class="cwebmacronumber">28.1</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">if</span><span class="plain"> ((</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">) == </span><span class="character">'\</span><span class="plain">\</span><span class="character">'</span><span class="plain">) &amp;&amp;</span>
<span class="plain">(</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">+1) == </span><span class="character">'o'</span><span class="plain">) &amp;&amp; (</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">+2) == </span><span class="character">'v'</span><span class="plain">) &amp;&amp;</span>
<span class="plain">(</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">+3) == </span><span class="character">'e'</span><span class="plain">) &amp;&amp; (</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">+4) == </span><span class="character">'r'</span><span class="plain">) &amp;&amp;</span>
<span class="plain">(</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">+5) == </span><span class="character">'{'</span><span class="plain">)) {</span>
<span class="reserved">int</span><span class="plain"> </span><span class="identifier">bl</span><span class="plain"> = 1;</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">-1;</span>
<span class="reserved">for</span><span class="plain"> (; </span><span class="identifier">j</span><span class="plain"> &gt;= </span><span class="identifier">from</span><span class="plain">; </span><span class="identifier">j</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">text</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="identifier">c</span><span class="plain"> == </span><span class="character">'{'</span><span class="plain">) {</span>
<span class="identifier">bl</span><span class="plain">--;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bl</span><span class="plain"> == 0) </span><span class="reserved">break</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="character">'}'</span><span class="plain">) </span><span class="identifier">bl</span><span class="plain">++;</span>
<span class="plain">}</span>
<span class="functiontext">TeX::remove_math_mode_range</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">j</span><span class="plain">-1);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"(("</span><span class="plain">);</span>
<span class="functiontext">TeX::remove_math_mode_range</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">j</span><span class="plain">+2, </span><span class="identifier">i</span><span class="plain">-2);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">") / ("</span><span class="plain">);</span>
<span class="identifier">j</span><span class="plain">=</span><span class="identifier">i</span><span class="plain">+6; </span><span class="identifier">bl</span><span class="plain"> = 1;</span>
<span class="reserved">for</span><span class="plain"> (; </span><span class="identifier">j</span><span class="plain"> &lt;= </span><span class="identifier">to</span><span class="plain">; </span><span class="identifier">j</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">text</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="identifier">c</span><span class="plain"> == </span><span class="character">'}'</span><span class="plain">) {</span>
<span class="identifier">bl</span><span class="plain">--;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bl</span><span class="plain"> == 0) </span><span class="reserved">break</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="character">'{'</span><span class="plain">) </span><span class="identifier">bl</span><span class="plain">++;</span>
<span class="plain">}</span>
<span class="functiontext">TeX::remove_math_mode_range</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">+6, </span><span class="identifier">j</span><span class="plain">-1);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"))"</span><span class="plain">);</span>
<span class="functiontext">TeX::remove_math_mode_range</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">j</span><span class="plain">+2, </span><span class="identifier">to</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP28">&#167;28</a>.</p>
<p class="inwebparagraph"><a id="SP28_2"></a><b>&#167;28.2. </b>Here we remove <code class="display"><span class="extract">{\rm text}</span></code>, converting it to <code class="display"><span class="extract">text</span></code>, and similarly <code class="display"><span class="extract">\it</span></code>.
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Remove the rm and it constructions</span> <span class="cwebmacronumber">28.2</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">if</span><span class="plain"> ((</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">) == </span><span class="character">'{'</span><span class="plain">) &amp;&amp; (</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">+1) == </span><span class="character">'\</span><span class="plain">\</span><span class="character">'</span><span class="plain">) &amp;&amp;</span>
<span class="plain">(((</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">+2) == </span><span class="character">'r'</span><span class="plain">) &amp;&amp; (</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">+3) == </span><span class="character">'m'</span><span class="plain">)) ||</span>
<span class="plain">((</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">+2) == </span><span class="character">'i'</span><span class="plain">) &amp;&amp; (</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">+3) == </span><span class="character">'t'</span><span class="plain">))) &amp;&amp;</span>
<span class="plain">(</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">+4) == </span><span class="character">' '</span><span class="plain">)) {</span>
<span class="functiontext">TeX::remove_math_mode_range</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">-1);</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">+5;</span>
<span class="reserved">for</span><span class="plain"> (; </span><span class="identifier">j</span><span class="plain"> &lt;= </span><span class="identifier">to</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">Str::get_at</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">j</span><span class="plain">) == </span><span class="character">'}'</span><span class="plain">)</span>
<span class="reserved">break</span><span class="plain">;</span>
<span class="functiontext">TeX::remove_math_mode_range</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">+5, </span><span class="identifier">j</span><span class="plain">-1);</span>
<span class="functiontext">TeX::remove_math_mode_range</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">j</span><span class="plain">+1, </span><span class="identifier">to</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP28">&#167;28</a>.</p>
<p class="inwebparagraph"><a id="SP28_3"></a><b>&#167;28.3. </b>Here we remove <code class="display"><span class="extract">\sqrt{N}</span></code>, converting it to <code class="display"><span class="extract">sqrt(N)</span></code>. As a special case,
we also look out for <code class="display"><span class="extract">{}^3\sqrt{N}</span></code> for cube root.
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Remove the sqrt constructions</span> <span class="cwebmacronumber">28.3</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">if</span><span class="plain"> ((</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">) == </span><span class="character">'\</span><span class="plain">\</span><span class="character">'</span><span class="plain">) &amp;&amp;</span>
<span class="plain">(</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">+1) == </span><span class="character">'s'</span><span class="plain">) &amp;&amp; (</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">+2) == </span><span class="character">'q'</span><span class="plain">) &amp;&amp;</span>
<span class="plain">(</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">+3) == </span><span class="character">'r'</span><span class="plain">) &amp;&amp; (</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">+4) == </span><span class="character">'t'</span><span class="plain">) &amp;&amp;</span>
<span class="plain">(</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">+5) == </span><span class="character">'{'</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">text</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">-4) == </span><span class="character">'{'</span><span class="plain">) &amp;&amp;</span>
<span class="plain">(</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">-3) == </span><span class="character">'}'</span><span class="plain">) &amp;&amp;</span>
<span class="plain">(</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">-2) == </span><span class="character">'^'</span><span class="plain">) &amp;&amp;</span>
<span class="plain">(</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">-1) == </span><span class="character">'3'</span><span class="plain">)) {</span>
<span class="functiontext">TeX::remove_math_mode_range</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">-5);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" curt("</span><span class="plain">);</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="functiontext">TeX::remove_math_mode_range</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">from</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">-1);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" sqrt("</span><span class="plain">);</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">+6, </span><span class="identifier">bl</span><span class="plain"> = 1;</span>
<span class="reserved">for</span><span class="plain"> (; </span><span class="identifier">j</span><span class="plain"> &lt;= </span><span class="identifier">to</span><span class="plain">; </span><span class="identifier">j</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">text</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="identifier">c</span><span class="plain"> == </span><span class="character">'}'</span><span class="plain">) {</span>
<span class="identifier">bl</span><span class="plain">--;</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="identifier">bl</span><span class="plain"> == 0) </span><span class="reserved">break</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="character">'{'</span><span class="plain">) </span><span class="identifier">bl</span><span class="plain">++;</span>
<span class="plain">}</span>
<span class="functiontext">TeX::remove_math_mode_range</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">+6, </span><span class="identifier">j</span><span class="plain">-1);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">")"</span><span class="plain">);</span>
<span class="functiontext">TeX::remove_math_mode_range</span><span class="plain">(</span><span class="identifier">OUT</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">j</span><span class="plain">+1, </span><span class="identifier">to</span><span class="plain">);</span>
<span class="reserved">return</span><span class="plain">;</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP28">&#167;28</a>.</p>
<p class="inwebparagraph"><a id="SP28_4"></a><b>&#167;28.4. </b><code class="display">
&lt;<span class="cwebmacrodefn">Do something to strip out a TeX macro</span> <span class="cwebmacronumber">28.4</span>&gt; =
</code></p>
@ -864,26 +1005,158 @@ To do this, the weaver calls the following.
<span class="identifier">i</span><span class="plain">++;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">i</span><span class="plain"> &lt; </span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">)) &amp;&amp; (</span><span class="functiontext">Characters::isalpha</span><span class="plain">(</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">))))</span>
<span class="identifier">PUT_TO</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">++));</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"leq"</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::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"geq"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&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::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"neq"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"!="</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">) &gt; 0)</span>
<span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"[Passing through unknown TeX macro \</span><span class="plain">\</span><span class="string">%S: on '%S']\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\</span><span class="plain">\</span><span class="string">%S"</span><span class="plain">, </span><span class="identifier">macro</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"not"</span><span class="plain">)) </span>&lt;<span class="cwebmacro">Remove the not prefix</span> <span class="cwebmacronumber">28.4.2</span>&gt;
<span class="reserved">else</span><span class="plain"> </span>&lt;<span class="cwebmacro">Remove a general macro</span> <span class="cwebmacronumber">28.4.1</span>&gt;<span class="plain">;</span>
<span class="identifier">DISCARD_TEXT</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">);</span>
<span class="identifier">i</span><span class="plain">--;</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP28">&#167;28</a>.</p>
<p class="inwebparagraph"><a id="SP28_4_1"></a><b>&#167;28.4.1. </b><code class="display">
&lt;<span class="cwebmacrodefn">Remove a general macro</span> <span class="cwebmacronumber">28.4.1</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"leq"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&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::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"geq"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&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::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"sim"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"~"</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"hbox"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">""</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"left"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">""</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"right"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">""</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Rightarrow"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"=&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::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Leftrightarrow"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&lt;=&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::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"to"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"--&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::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"rightarrow"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"--&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::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"longrightarrow"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"--&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::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"leftarrow"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&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::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"longleftarrow"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"&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::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"lbrace"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"{"</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"mid"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"|"</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"rbrace"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"}"</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"cdot"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"."</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"cdots"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"..."</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"dots"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"..."</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"times"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"*"</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"quad"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" "</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"qquad"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">" "</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"TeX"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"TeX"</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"neq"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"!="</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"noteq"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"!="</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"ell"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"l"</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"log"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"log"</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"exp"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"exp"</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"sin"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"sin"</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"cos"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"cos"</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"tan"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"tan"</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"top"</span><span class="plain">)) </span><span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"T"</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Alpha"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x0391</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Beta"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x0392</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Gamma"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x0393</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Delta"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x0394</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Epsilon"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x0395</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Zeta"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x0396</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Eta"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x0397</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Theta"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x0398</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Iota"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x0399</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Kappa"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x039A</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Lambda"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x039B</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Mu"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x039C</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Nu"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x039D</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Xi"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x039E</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Omicron"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x039F</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Pi"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03A0</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Rho"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03A1</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Varsigma"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03A2</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Sigma"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03A3</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Tau"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03A4</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Upsilon"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03A5</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Phi"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03A6</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Chi"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03A7</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Psi"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03A8</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"Omega"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03A9</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"alpha"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03B1</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"beta"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03B2</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"gamma"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03B3</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"delta"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03B4</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"epsilon"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03B5</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"zeta"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03B6</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"eta"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03B7</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"theta"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03B8</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"iota"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03B9</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"kappa"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03BA</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"lambda"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03BB</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"mu"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03BC</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"nu"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03BD</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"xi"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03BE</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"omicron"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03BF</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"pi"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03C0</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"rho"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03C1</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"varsigma"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03C2</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"sigma"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03C3</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"tau"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03C4</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"upsilon"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03C5</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"phi"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03C6</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"chi"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03C7</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"psi"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03C8</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"omega"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03C9</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"exists"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x2203</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"in"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x2208</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"forall"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x2200</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"cap"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x2229</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"emptyset"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x2205</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"subseteq"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x2286</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"land"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x2227</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"lor"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x2228</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"lnot"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x00AC</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"sum"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03A3</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"prod"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x03A0</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> {</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">) &gt; 0)</span>
<span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"Passing through unknown TeX macro \</span><span class="plain">\</span><span class="string">%S: %S"</span><span class="plain">, </span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">text</span><span class="plain">);</span>
<span class="identifier">WRITE</span><span class="plain">(</span><span class="string">"\</span><span class="plain">\</span><span class="string">%S"</span><span class="plain">, </span><span class="identifier">macro</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP28_4">&#167;28.4</a>.</p>
<p class="inwebparagraph"><a id="SP28_4_2"></a><b>&#167;28.4.2. </b>For Inform's purposes, we need to deal with just <code class="display"><span class="extract">\not\exists</span></code> and <code class="display"><span class="extract">\not\forall</span></code>.
</p>
<p class="macrodefinition"><code class="display">
&lt;<span class="cwebmacrodefn">Remove the not prefix</span> <span class="cwebmacronumber">28.4.2</span>&gt; =
</code></p>
<pre class="displaydefn">
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">) == </span><span class="character">'\</span><span class="plain">\</span><span class="character">'</span><span class="plain">) {</span>
<span class="functiontext">Str::clear</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">);</span>
<span class="identifier">i</span><span class="plain">++;</span>
<span class="reserved">while</span><span class="plain"> ((</span><span class="identifier">i</span><span class="plain"> &lt; </span><span class="functiontext">Str::len</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">)) &amp;&amp; (</span><span class="functiontext">Characters::isalpha</span><span class="plain">(</span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">))))</span>
<span class="identifier">PUT_TO</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="functiontext">Str::get_at</span><span class="plain">(</span><span class="identifier">text</span><span class="plain">, </span><span class="identifier">i</span><span class="plain">++));</span>
<span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"exists"</span><span class="plain">)) </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x2204</span><span class="plain">);</span>
<span class="reserved">else</span><span class="plain"> </span><span class="reserved">if</span><span class="plain"> (</span><span class="functiontext">Str::eq</span><span class="plain">(</span><span class="identifier">macro</span><span class="plain">, </span><span class="identifier">I</span><span class="string">"forall"</span><span class="plain">)) { </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x00AC</span><span class="plain">); </span><span class="identifier">PUT</span><span class="plain">((</span><span class="identifier">wchar_t</span><span class="plain">) 0</span><span class="identifier">x2200</span><span class="plain">); }</span>
<span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"Don't know how to apply '\</span><span class="plain">\</span><span class="string">not' to '\</span><span class="plain">\</span><span class="string">%S'\</span><span class="plain">n</span><span class="string">"</span><span class="plain">, </span><span class="identifier">macro</span><span class="plain">);</span>
<span class="plain">}</span>
<span class="plain">} </span><span class="reserved">else</span><span class="plain"> {</span>
<span class="identifier">PRINT</span><span class="plain">(</span><span class="string">"Don't know how to apply '\</span><span class="plain">\</span><span class="string">not' here\</span><span class="plain">n</span><span class="string">"</span><span class="plain">);</span>
<span class="plain">}</span>
</pre>
<p class="inwebparagraph"></p>
<p class="endnote">This code is used in <a href="#SP28_4">&#167;28.4</a>.</p>
<hr class="tocbar">
<ul class="toc"><li><a href="5-ptf.html">Back to 'Plain Text Format'</a></li><li><a href="5-hf.html">Continue with 'HTML Formats'</a></li></ul><hr class="tocbar">
<!--End of weave: 577 lines from a web of 21004-->
<!--End of weave: 791 lines from a web of 21211-->
</body>
</html>

View file

@ -839,7 +839,7 @@ text like <code class="display"><span class="extract">[[PDF Size]]</span></code>
<hr class="tocbar">
<ul class="toc"><li><i>(This section begins Chapter 5: Formats.)</i></li><li><a href="5-ptf.html">Continue with 'Plain Text Format'</a></li></ul><hr class="tocbar">
<!--End of weave: 540 lines from a web of 21004-->
<!--End of weave: 540 lines from a web of 21211-->
</body>
</html>

View file

@ -105,7 +105,7 @@ file by following a "prototype".
<hr class="tocbar">
<ul class="toc"><li><a href="6-mkf.html">Back to 'Makefiles'</a></li><li><i>(This section ends Chapter 6: Extras.)</i></li></ul><hr class="tocbar">
<!--End of weave: 62 lines from a web of 21004-->
<!--End of weave: 62 lines from a web of 21211-->
</body>
</html>

View file

@ -401,7 +401,7 @@ following a "prototype".
<hr class="tocbar">
<ul class="toc"><li><i>(This section begins Chapter 6: Extras.)</i></li><li><a href="6-gs.html">Continue with 'Git Support'</a></li></ul><hr class="tocbar">
<!--End of weave: 255 lines from a web of 21004-->
<!--End of weave: 255 lines from a web of 21211-->
</body>
</html>

View file

@ -313,7 +313,7 @@ a repetition, but happens just once, for the named chapter or section.
<hr class="tocbar">
<ul class="toc"><li><a href="P-tid.html">Back to 'The InC Dialect'</a></li><li><i>(This section ends Preliminaries.)</i></li></ul><hr class="tocbar">
<!--End of weave: 198 lines from a web of 21004-->
<!--End of weave: 198 lines from a web of 21211-->
</body>
</html>

View file

@ -505,7 +505,7 @@ be rendered in HTML as <code class="display"><span class="extract">x &lt;= y</sp
<hr class="tocbar">
<ul class="toc"><li><a href="P-wtaw.html">Back to 'Webs, Tangling and Weaving'</a></li><li><a href="P-tid.html">Continue with 'The InC Dialect'</a></li></ul><hr class="tocbar">
<!--End of weave: 312 lines from a web of 21004-->
<!--End of weave: 312 lines from a web of 21211-->
</body>
</html>

View file

@ -255,7 +255,7 @@ and, if desired, chapters.
</li></ul>
<hr class="tocbar">
<ul class="toc"><li><i>(This section begins Preliminaries.)</i></li><li><a href="P-wtaw.html">Continue with 'Webs, Tangling and Weaving'</a></li></ul><hr class="tocbar">
<!--End of weave: 193 lines from a web of 21004-->
<!--End of weave: 193 lines from a web of 21211-->
</body>
</html>

View file

@ -122,7 +122,7 @@ notation means, but for example:
<hr class="tocbar">
<ul class="toc"><li><a href="P-htwaw.html">Back to 'How to Write a Web'</a></li><li><a href="P-awwp.html">Continue with 'Advanced Weaving with Patterns'</a></li></ul><hr class="tocbar">
<!--End of weave: 70 lines from a web of 21004-->
<!--End of weave: 70 lines from a web of 21211-->
</body>
</html>

View file

@ -861,7 +861,7 @@ above them.
<hr class="tocbar">
<ul class="toc"><li><a href="P-iti.html">Back to 'Introduction to Inweb'</a></li><li><a href="P-htwaw.html">Continue with 'How to Write a Web'</a></li></ul><hr class="tocbar">
<!--End of weave: 554 lines from a web of 21004-->
<!--End of weave: 554 lines from a web of 21211-->
</body>
</html>

View file

@ -36,7 +36,7 @@ These pages showcase the woven form, and are for human eyes only.</p>
<li>
<p><a href="docs/webs.html"><spon class="sectiontitle">foundation-test</span></a> -
<span class="purpose">For testing the foundation module.</span></p>
<span class="purpose">Unit tests for the foundation module.</span></p>
</li>
</ul>

View file

@ -566,10 +566,7 @@ void Streams::write_as_ISO_string(char *C_string, text_stream *stream, int buffe
C_string[i] = 0;
}
@ Unicode code points outside the first page are flattened to |'?'| in an
ISO string:
=
@ =
void Streams::write_as_UTF8_string(char *C_string, text_stream *stream, int buffer_size) {
if (buffer_size == 0) return;
if (stream == NULL) { C_string[0] = 0; return; }

View file

@ -148,10 +148,7 @@ void Writers::printf(text_stream *stream, char *fmt, ...) {
else Streams::putc(*p, stream);
break;
case '\n':
// if (stream->stream_flags & USES_I6_ESCAPES_STRF)
// Streams::putc('^', stream);
// else
Streams::putc(*p, stream);
Streams::putc(*p, stream);
break;
default: Streams::putc(*p, stream); break;
}