diff --git a/Audio/SP014.mp3 b/Audio/SP014.mp3 new file mode 100644 index 0000000..7f4c41c Binary files /dev/null and b/Audio/SP014.mp3 differ diff --git a/Chapter 1/Basics.w b/Chapter 1/Basics.w index 51a02c5..86b361e 100755 --- a/Chapter 1/Basics.w +++ b/Chapter 1/Basics.w @@ -64,6 +64,7 @@ see //foundation: A Brief Guide to Foundation//. @e weave_endnote_node_MT @e weave_material_node_MT @e weave_figure_node_MT +@e weave_audio_node_MT @e weave_embed_node_MT @e weave_pmac_node_MT @e weave_vskip_node_MT @@ -146,6 +147,7 @@ ALLOCATE_INDIVIDUALLY(weave_paragraph_heading_node) ALLOCATE_INDIVIDUALLY(weave_endnote_node) ALLOCATE_INDIVIDUALLY(weave_material_node) ALLOCATE_INDIVIDUALLY(weave_figure_node) +ALLOCATE_INDIVIDUALLY(weave_audio_node) ALLOCATE_INDIVIDUALLY(weave_embed_node) ALLOCATE_INDIVIDUALLY(weave_pmac_node) ALLOCATE_INDIVIDUALLY(weave_vskip_node) diff --git a/Chapter 2/Line Categories.w b/Chapter 2/Line Categories.w index 1d777bd..188611a 100644 --- a/Chapter 2/Line Categories.w +++ b/Chapter 2/Line Categories.w @@ -154,6 +154,7 @@ some of these fell into disuse in version 2 syntax. @e PAGEBREAK_CMD @e GRAMMAR_INDEX_CMD @e FIGURE_CMD +@e AUDIO_CMD @e CAROUSEL_CMD @e CAROUSEL_ABOVE_CMD @e CAROUSEL_BELOW_CMD diff --git a/Chapter 2/The Parser.w b/Chapter 2/The Parser.w index a8d9944..e54a51b 100644 --- a/Chapter 2/The Parser.w +++ b/Chapter 2/The Parser.w @@ -375,6 +375,14 @@ division in the current section. code_lcat_for_body = COMMENT_BODY_LCAT; L->text_operand = Str::duplicate(mr2.exp[0]); comment_mode = TRUE; + } else if ((current_paragraph) && + (Regexp::match(&mr2, mr.exp[0], L"%(audio (%c+)%)"))) { + Tags::add_by_name(L->owning_paragraph, I"Audio"); + L->command_code = AUDIO_CMD; + L->category = COMMAND_LCAT; + code_lcat_for_body = COMMENT_BODY_LCAT; + L->text_operand = Str::duplicate(mr2.exp[0]); + comment_mode = TRUE; } else if ((current_paragraph) && (Regexp::match(&mr2, mr.exp[0], L"%(carousel%)"))) { Tags::add_by_name(L->owning_paragraph, I"Carousels"); diff --git a/Chapter 3/The Weaver.w b/Chapter 3/The Weaver.w index b2b6c22..84ecc96 100644 --- a/Chapter 3/The Weaver.w +++ b/Chapter 3/The Weaver.w @@ -279,6 +279,7 @@ at us; but we don't weave them into the output, that's for sure. if (L->command_code == GRAMMAR_INDEX_CMD) Trees::make_child(WeaveTree::grammar_index(tree), state->ap); if (L->command_code == FIGURE_CMD) @; + if (L->command_code == AUDIO_CMD) @; if (L->command_code == EMBED_CMD) @; if (L->command_code == CAROUSEL_CMD) @; if (L->command_code == CAROUSEL_ABOVE_CMD) @; @@ -294,6 +295,11 @@ at us; but we don't weave them into the output, that's for sure. text_stream *figname = Weaver::dimensions(L->text_operand, &w, &h, L); Trees::make_child(WeaveTree::figure(tree, figname, w, h), state->ap); +@ = + int w, h; + text_stream *figname = Weaver::dimensions(L->text_operand, &w, &h, L); + Trees::make_child(WeaveTree::audio(tree, figname, w), state->ap); + @ = int w, h; text_stream *ID = Weaver::dimensions(L->text_operand2, &w, &h, L); diff --git a/Chapter 5/Debugging Format.w b/Chapter 5/Debugging Format.w index e128615..f384f37 100644 --- a/Chapter 5/Debugging Format.w +++ b/Chapter 5/Debugging Format.w @@ -49,6 +49,7 @@ int Debugging::render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_paragraph_heading_node_type) @ else if (N->type == weave_endnote_node_type) @ else if (N->type == weave_figure_node_type) @ + else if (N->type == weave_audio_node_type) @ else if (N->type == weave_material_node_type) @ else if (N->type == weave_embed_node_type) @ else if (N->type == weave_pmac_node_type) @ @@ -140,6 +141,10 @@ int Debugging::render_visit(tree_node *N, void *state, int L) { weave_figure_node *C = RETRIEVE_POINTER_weave_figure_node(N->content); WRITE(" <%S> %d by %d", C->figname, C->w, C->h); +@ = + weave_audio_node *C = RETRIEVE_POINTER_weave_audio_node(N->content); + WRITE(" <%S> %d", C->audio_name, C->w); + @ = weave_material_node *C = RETRIEVE_POINTER_weave_material_node(N->content); WRITE(" "); diff --git a/Chapter 5/HTML Formats.w b/Chapter 5/HTML Formats.w index 5c6c4c9..17bd94f 100644 --- a/Chapter 5/HTML Formats.w +++ b/Chapter 5/HTML Formats.w @@ -104,6 +104,7 @@ int HTMLFormat::render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_paragraph_heading_node_type) @ else if (N->type == weave_endnote_node_type) @ else if (N->type == weave_figure_node_type) @ + else if (N->type == weave_audio_node_type) @ else if (N->type == weave_material_node_type) @ else if (N->type == weave_embed_node_type) @ else if (N->type == weave_pmac_node_type) @ @@ -249,6 +250,20 @@ int HTMLFormat::render_visit(tree_node *N, void *state, int L) { HTML_CLOSE("center"); WRITE("\n"); +@ = + weave_audio_node *C = RETRIEVE_POINTER_weave_audio_node(N->content); + filename *F = Filenames::in( + Pathnames::down(hrs->wv->weave_web->md->path_to_web, I"Audio"), + C->audio_name); + Patterns::copy_file_into_weave(hrs->wv->weave_web, F, NULL, NULL); + HTML_OPEN("center"); + WRITE("\n"); + HTML_CLOSE("center"); + WRITE("\n"); + @ = weave_material_node *C = RETRIEVE_POINTER_weave_material_node(N->content); paragraph *first_in_para = NULL; diff --git a/Chapter 5/Plain Text Format.w b/Chapter 5/Plain Text Format.w index 3626c9b..ae48a85 100644 --- a/Chapter 5/Plain Text Format.w +++ b/Chapter 5/Plain Text Format.w @@ -48,6 +48,7 @@ int PlainText::render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_paragraph_heading_node_type) @ else if (N->type == weave_endnote_node_type) @ else if (N->type == weave_figure_node_type) @ + else if (N->type == weave_audio_node_type) @ else if (N->type == weave_material_node_type) @ else if (N->type == weave_embed_node_type) @ else if (N->type == weave_pmac_node_type) @ diff --git a/Chapter 5/TeX Format.w b/Chapter 5/TeX Format.w index b92c954..4e073e8 100644 --- a/Chapter 5/TeX Format.w +++ b/Chapter 5/TeX Format.w @@ -88,6 +88,7 @@ int TeX::render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_paragraph_heading_node_type) @ else if (N->type == weave_endnote_node_type) @ else if (N->type == weave_figure_node_type) @ + else if (N->type == weave_audio_node_type) @ else if (N->type == weave_material_node_type) @ else if (N->type == weave_embed_node_type) @ else if (N->type == weave_pmac_node_type) @ diff --git a/Chapter 5/Weave Tree.w b/Chapter 5/Weave Tree.w index 529669b..f8db38b 100644 --- a/Chapter 5/Weave Tree.w +++ b/Chapter 5/Weave Tree.w @@ -77,6 +77,12 @@ typedef struct weave_figure_node { MEMORY_MANAGEMENT } weave_figure_node; +typedef struct weave_audio_node { + struct text_stream *audio_name; + int w; + MEMORY_MANAGEMENT +} weave_audio_node; + typedef struct weave_material_node { int material_type; int plainly; @@ -238,6 +244,7 @@ tree_node_type *weave_pagebreak_node_type = NULL; tree_node_type *weave_paragraph_heading_node_type = NULL; tree_node_type *weave_endnote_node_type = NULL; tree_node_type *weave_figure_node_type = NULL; +tree_node_type *weave_audio_node_type = NULL; tree_node_type *weave_material_node_type = NULL; tree_node_type *weave_embed_node_type = NULL; tree_node_type *weave_pmac_node_type = NULL; @@ -298,6 +305,8 @@ heterogeneous_tree *WeaveTree::new_tree(weave_order *wv) { Trees::new_node_type(I"endnote", weave_endnote_node_MT, NULL); weave_figure_node_type = Trees::new_node_type(I"figure", weave_figure_node_MT, NULL); + weave_audio_node_type = + Trees::new_node_type(I"audio", weave_audio_node_MT, NULL); weave_material_node_type = Trees::new_node_type(I"material", weave_material_node_MT, NULL); weave_embed_node_type = @@ -475,6 +484,15 @@ tree_node *WeaveTree::figure(heterogeneous_tree *tree, STORE_POINTER_weave_figure_node(C)); } +tree_node *WeaveTree::audio(heterogeneous_tree *tree, + text_stream *audio_name, int w) { + weave_audio_node *C = CREATE(weave_audio_node); + C->audio_name = Str::duplicate(audio_name); + C->w = w; + return Trees::new_node(tree, weave_audio_node_type, + STORE_POINTER_weave_audio_node(C)); +} + tree_node *WeaveTree::material(heterogeneous_tree *tree, int material_type, int plainly, programming_language *styling) { weave_material_node *C = CREATE(weave_material_node); diff --git a/Manual/How to Write a Web.w b/Manual/How to Write a Web.w index 0f56e40..b0e707a 100644 --- a/Manual/How to Write a Web.w +++ b/Manual/How to Write a Web.w @@ -476,6 +476,15 @@ correspond. If you really want to monkey with the aspect ratio, = (figure Whatever.jpg at 20 by 100) = +@h Audio. +To include audio samples, place them as MP3 files in the subdirectory |Audio| +of the web. For example, in the present web, += (text as Inweb) + = (audio SP014.mp3) += +produces Space Patrol episode 14, from 1953: "Brain Bank And Space Binoculars" -- += (audio SP014.mp3) + @h Carousels. A carousel is a slide-show of (usually but not always) figures; there's a set of slides with captions, only one of which is visible at a time. diff --git a/Tangled/inweb.c b/Tangled/inweb.c index dd1e110..77250e9 100644 --- a/Tangled/inweb.c +++ b/Tangled/inweb.c @@ -774,30 +774,31 @@ void __stdcall LeaveCriticalSection(struct Win32_Critical_Section* cs); #define weave_endnote_node_MT 86 #define weave_material_node_MT 87 #define weave_figure_node_MT 88 -#define weave_embed_node_MT 89 -#define weave_pmac_node_MT 90 -#define weave_vskip_node_MT 91 -#define weave_chapter_node_MT 92 -#define weave_section_node_MT 93 -#define weave_code_line_node_MT 94 -#define weave_function_usage_node_MT 95 -#define weave_commentary_node_MT 96 -#define weave_carousel_slide_node_MT 97 -#define weave_toc_node_MT 98 -#define weave_toc_line_node_MT 99 -#define weave_chapter_title_page_node_MT 100 -#define weave_defn_node_MT 101 -#define weave_source_code_node_MT 102 -#define weave_url_node_MT 103 -#define weave_footnote_cue_node_MT 104 -#define weave_begin_footnote_text_node_MT 105 -#define weave_display_line_node_MT 106 -#define weave_function_defn_node_MT 107 -#define weave_item_node_MT 108 -#define weave_grammar_index_node_MT 109 -#define weave_inline_node_MT 110 -#define weave_locale_node_MT 111 -#define weave_maths_node_MT 112 +#define weave_audio_node_MT 89 +#define weave_embed_node_MT 90 +#define weave_pmac_node_MT 91 +#define weave_vskip_node_MT 92 +#define weave_chapter_node_MT 93 +#define weave_section_node_MT 94 +#define weave_code_line_node_MT 95 +#define weave_function_usage_node_MT 96 +#define weave_commentary_node_MT 97 +#define weave_carousel_slide_node_MT 98 +#define weave_toc_node_MT 99 +#define weave_toc_line_node_MT 100 +#define weave_chapter_title_page_node_MT 101 +#define weave_defn_node_MT 102 +#define weave_source_code_node_MT 103 +#define weave_url_node_MT 104 +#define weave_footnote_cue_node_MT 105 +#define weave_begin_footnote_text_node_MT 106 +#define weave_display_line_node_MT 107 +#define weave_function_defn_node_MT 108 +#define weave_item_node_MT 109 +#define weave_grammar_index_node_MT 110 +#define weave_inline_node_MT 111 +#define weave_locale_node_MT 112 +#define weave_maths_node_MT 113 #define NO_MODE 0 #define ANALYSE_MODE 1 #define TANGLE_MODE 2 @@ -876,13 +877,14 @@ void __stdcall LeaveCriticalSection(struct Win32_Critical_Section* cs); #define PAGEBREAK_CMD 1 #define GRAMMAR_INDEX_CMD 2 #define FIGURE_CMD 3 -#define CAROUSEL_CMD 4 -#define CAROUSEL_ABOVE_CMD 5 -#define CAROUSEL_BELOW_CMD 6 -#define CAROUSEL_UNCAPTIONED_CMD 7 -#define CAROUSEL_END_CMD 8 -#define EMBED_CMD 9 -#define TAG_CMD 10 +#define AUDIO_CMD 4 +#define CAROUSEL_CMD 5 +#define CAROUSEL_ABOVE_CMD 6 +#define CAROUSEL_BELOW_CMD 7 +#define CAROUSEL_UNCAPTIONED_CMD 8 +#define CAROUSEL_END_CMD 9 +#define EMBED_CMD 10 +#define TAG_CMD 11 #define ORDINARY_WEIGHT 0 /* an ordinary paragraph has this "weight" */ #define SUBHEADING_WEIGHT 1 /* a heading paragraph */ #define BASIC_SECTIONCAT 1 @@ -999,7 +1001,7 @@ void __stdcall LeaveCriticalSection(struct Win32_Critical_Section* cs); #define POST_PROCESS_SUBSTITUTE_POS_MTID 44 #define NO_DEFINED_CLSW_VALUES 35 #define NO_DEFINED_DA_VALUES 4 -#define NO_DEFINED_MT_VALUES 113 +#define NO_DEFINED_MT_VALUES 114 #define NO_DEFINED_MREASON_VALUES 5 #define NO_DEFINED_MTID_VALUES 44 #define NO_DEFINED_CLSF_VALUES 5 @@ -1011,7 +1013,7 @@ void __stdcall LeaveCriticalSection(struct Win32_Critical_Section* cs); #define NO_DEFINED_MODE_VALUES 5 #define NO_DEFINED_SWM_VALUES 4 #define NO_DEFINED_LCAT_VALUES 26 -#define NO_DEFINED_CMD_VALUES 11 +#define NO_DEFINED_CMD_VALUES 12 #define NO_DEFINED_SECTIONCAT_VALUES 3 #define NO_DEFINED_MATERIAL_VALUES 6 #line 41 "inweb/foundation-module/Chapter 2/Debugging Log.w" @@ -1638,7 +1640,7 @@ typedef struct source_line { struct source_line *next_line; /* within the owning section's linked list */ struct paragraph *owning_paragraph; /* for lines falling under paragraphs; |NULL| if not */ } source_line; -#line 698 "inweb/Chapter 2/The Parser.w" +#line 706 "inweb/Chapter 2/The Parser.w" typedef struct paragraph { int above_bar; /* placed above the dividing bar in its section (in Version 1 syntax) */ int placed_early; /* should appear early in the tangled code */ @@ -1661,7 +1663,7 @@ typedef struct paragraph { struct section *under_section; MEMORY_MANAGEMENT } paragraph; -#line 809 "inweb/Chapter 2/The Parser.w" +#line 817 "inweb/Chapter 2/The Parser.w" typedef struct footnote { int footnote_cue_number; /* used only for |FOOTNOTE_TEXT_LCAT| lines */ int footnote_text_number; /* used only for |FOOTNOTE_TEXT_LCAT| lines */ @@ -1979,13 +1981,19 @@ typedef struct weave_figure_node { MEMORY_MANAGEMENT } weave_figure_node; #line 80 "inweb/Chapter 5/Weave Tree.w" +typedef struct weave_audio_node { + struct text_stream *audio_name; + int w; + MEMORY_MANAGEMENT +} weave_audio_node; +#line 86 "inweb/Chapter 5/Weave Tree.w" typedef struct weave_material_node { int material_type; int plainly; struct programming_language *styling; MEMORY_MANAGEMENT } weave_material_node; -#line 87 "inweb/Chapter 5/Weave Tree.w" +#line 93 "inweb/Chapter 5/Weave Tree.w" typedef struct weave_embed_node { struct text_stream *service; struct text_stream *ID; @@ -1993,130 +2001,130 @@ typedef struct weave_embed_node { int h; MEMORY_MANAGEMENT } weave_embed_node; -#line 95 "inweb/Chapter 5/Weave Tree.w" +#line 101 "inweb/Chapter 5/Weave Tree.w" typedef struct weave_pmac_node { struct para_macro *pmac; int defn; MEMORY_MANAGEMENT } weave_pmac_node; -#line 101 "inweb/Chapter 5/Weave Tree.w" +#line 107 "inweb/Chapter 5/Weave Tree.w" typedef struct weave_vskip_node { int in_comment; MEMORY_MANAGEMENT } weave_vskip_node; -#line 106 "inweb/Chapter 5/Weave Tree.w" +#line 112 "inweb/Chapter 5/Weave Tree.w" typedef struct weave_chapter_node { struct chapter *chap; MEMORY_MANAGEMENT } weave_chapter_node; -#line 111 "inweb/Chapter 5/Weave Tree.w" +#line 117 "inweb/Chapter 5/Weave Tree.w" typedef struct weave_section_node { struct section *sect; MEMORY_MANAGEMENT } weave_section_node; -#line 116 "inweb/Chapter 5/Weave Tree.w" +#line 122 "inweb/Chapter 5/Weave Tree.w" typedef struct weave_code_line_node { MEMORY_MANAGEMENT } weave_code_line_node; -#line 120 "inweb/Chapter 5/Weave Tree.w" +#line 126 "inweb/Chapter 5/Weave Tree.w" typedef struct weave_function_usage_node { struct text_stream *url; struct language_function *fn; MEMORY_MANAGEMENT } weave_function_usage_node; -#line 126 "inweb/Chapter 5/Weave Tree.w" +#line 132 "inweb/Chapter 5/Weave Tree.w" typedef struct weave_commentary_node { struct text_stream *text; int in_code; MEMORY_MANAGEMENT } weave_commentary_node; -#line 132 "inweb/Chapter 5/Weave Tree.w" +#line 138 "inweb/Chapter 5/Weave Tree.w" typedef struct weave_carousel_slide_node { struct text_stream *caption; int caption_command; MEMORY_MANAGEMENT } weave_carousel_slide_node; -#line 138 "inweb/Chapter 5/Weave Tree.w" +#line 144 "inweb/Chapter 5/Weave Tree.w" typedef struct weave_toc_node { struct text_stream *text1; MEMORY_MANAGEMENT } weave_toc_node; -#line 143 "inweb/Chapter 5/Weave Tree.w" +#line 149 "inweb/Chapter 5/Weave Tree.w" typedef struct weave_toc_line_node { struct text_stream *text1; struct text_stream *text2; struct paragraph *para; MEMORY_MANAGEMENT } weave_toc_line_node; -#line 150 "inweb/Chapter 5/Weave Tree.w" +#line 156 "inweb/Chapter 5/Weave Tree.w" typedef struct weave_chapter_title_page_node { MEMORY_MANAGEMENT } weave_chapter_title_page_node; -#line 154 "inweb/Chapter 5/Weave Tree.w" +#line 160 "inweb/Chapter 5/Weave Tree.w" typedef struct weave_defn_node { struct text_stream *keyword; MEMORY_MANAGEMENT } weave_defn_node; -#line 159 "inweb/Chapter 5/Weave Tree.w" +#line 165 "inweb/Chapter 5/Weave Tree.w" typedef struct weave_inline_node { MEMORY_MANAGEMENT } weave_inline_node; -#line 163 "inweb/Chapter 5/Weave Tree.w" +#line 169 "inweb/Chapter 5/Weave Tree.w" typedef struct weave_locale_node { struct paragraph *par1; struct paragraph *par2; MEMORY_MANAGEMENT } weave_locale_node; -#line 169 "inweb/Chapter 5/Weave Tree.w" +#line 175 "inweb/Chapter 5/Weave Tree.w" typedef struct weave_source_code_node { struct text_stream *matter; struct text_stream *colouring; MEMORY_MANAGEMENT } weave_source_code_node; -#line 175 "inweb/Chapter 5/Weave Tree.w" +#line 181 "inweb/Chapter 5/Weave Tree.w" typedef struct weave_url_node { struct text_stream *url; struct text_stream *content; int external; MEMORY_MANAGEMENT } weave_url_node; -#line 182 "inweb/Chapter 5/Weave Tree.w" +#line 188 "inweb/Chapter 5/Weave Tree.w" typedef struct weave_footnote_cue_node { struct text_stream *cue_text; MEMORY_MANAGEMENT } weave_footnote_cue_node; -#line 187 "inweb/Chapter 5/Weave Tree.w" +#line 193 "inweb/Chapter 5/Weave Tree.w" typedef struct weave_begin_footnote_text_node { struct text_stream *cue_text; MEMORY_MANAGEMENT } weave_begin_footnote_text_node; -#line 192 "inweb/Chapter 5/Weave Tree.w" +#line 198 "inweb/Chapter 5/Weave Tree.w" typedef struct weave_display_line_node { struct text_stream *text; MEMORY_MANAGEMENT } weave_display_line_node; -#line 197 "inweb/Chapter 5/Weave Tree.w" +#line 203 "inweb/Chapter 5/Weave Tree.w" typedef struct weave_function_defn_node { struct language_function *fn; MEMORY_MANAGEMENT } weave_function_defn_node; -#line 202 "inweb/Chapter 5/Weave Tree.w" +#line 208 "inweb/Chapter 5/Weave Tree.w" typedef struct weave_item_node { int depth; struct text_stream *label; MEMORY_MANAGEMENT } weave_item_node; -#line 208 "inweb/Chapter 5/Weave Tree.w" +#line 214 "inweb/Chapter 5/Weave Tree.w" typedef struct weave_grammar_index_node { MEMORY_MANAGEMENT } weave_grammar_index_node; -#line 212 "inweb/Chapter 5/Weave Tree.w" +#line 218 "inweb/Chapter 5/Weave Tree.w" typedef struct weave_maths_node { struct text_stream *content; int displayed; MEMORY_MANAGEMENT } weave_maths_node; -#line 218 "inweb/Chapter 5/Weave Tree.w" +#line 224 "inweb/Chapter 5/Weave Tree.w" typedef struct weave_verbatim_node { struct text_stream *content; MEMORY_MANAGEMENT @@ -3557,13 +3565,13 @@ source_line * Lines__new_source_line_in(text_stream *line, text_file_position *t char * Lines__category_name(int cat) ; #line 17 "inweb/Chapter 2/The Parser.w" void Parser__parse_web(web *W, int inweb_mode) ; -#line 791 "inweb/Chapter 2/The Parser.w" +#line 799 "inweb/Chapter 2/The Parser.w" text_stream * Parser__extract_purpose(text_stream *prologue, source_line *XL, section *S, source_line **adjust) ; -#line 863 "inweb/Chapter 2/The Parser.w" +#line 871 "inweb/Chapter 2/The Parser.w" int Parser__detect_footnote(web *W, text_stream *matter, text_stream *before, text_stream *cue, text_stream *after) ; -#line 906 "inweb/Chapter 2/The Parser.w" +#line 914 "inweb/Chapter 2/The Parser.w" footnote * Parser__find_footnote_in_para(paragraph *P, text_stream *cue) ; -#line 922 "inweb/Chapter 2/The Parser.w" +#line 930 "inweb/Chapter 2/The Parser.w" void Parser__wrong_version(int using, source_line *L, char *feature, int need) ; #line 20 "inweb/Chapter 2/Paragraph Macros.w" para_macro * Macros__create(section *S, paragraph *P, source_line *L, text_stream *name) ; @@ -3653,23 +3661,23 @@ void Collater__list_module(OUTPUT_STREAM, module *M, int list_this) ; int Weaver__weave(weave_order *wv) ; #line 42 "inweb/Chapter 3/The Weaver.w" int Weaver__weave_inner(weave_order *wv, heterogeneous_tree *tree, tree_node *body) ; -#line 560 "inweb/Chapter 3/The Weaver.w" +#line 566 "inweb/Chapter 3/The Weaver.w" void Weaver__show_endnotes_on_previous_paragraph(heterogeneous_tree *tree, weave_order *wv, tree_node *ap, paragraph *P) ; -#line 658 "inweb/Chapter 3/The Weaver.w" +#line 664 "inweb/Chapter 3/The Weaver.w" void Weaver__show_function_usage(heterogeneous_tree *tree, weave_order *wv, tree_node *ap, paragraph *P, language_function *fn, int as_list) ; -#line 724 "inweb/Chapter 3/The Weaver.w" -void Weaver__weave_subheading(heterogeneous_tree *tree, weave_order *wv, tree_node *ap, text_stream *text) ; #line 730 "inweb/Chapter 3/The Weaver.w" +void Weaver__weave_subheading(heterogeneous_tree *tree, weave_order *wv, tree_node *ap, text_stream *text) ; +#line 736 "inweb/Chapter 3/The Weaver.w" void Weaver__change_material(heterogeneous_tree *tree, weaver_state *state, int new_material, int plainly, programming_language *pl) ; -#line 742 "inweb/Chapter 3/The Weaver.w" +#line 748 "inweb/Chapter 3/The Weaver.w" void Weaver__change_material_for_para(heterogeneous_tree *tree, weaver_state *state) ; -#line 750 "inweb/Chapter 3/The Weaver.w" -void Weaver__figure(heterogeneous_tree *tree, weave_order *wv, tree_node *ap, text_stream *figname, int w, int h) ; #line 756 "inweb/Chapter 3/The Weaver.w" +void Weaver__figure(heterogeneous_tree *tree, weave_order *wv, tree_node *ap, text_stream *figname, int w, int h) ; +#line 762 "inweb/Chapter 3/The Weaver.w" void Weaver__commentary_text(heterogeneous_tree *tree, weave_order *wv, tree_node *ap, text_stream *matter) ; -#line 766 "inweb/Chapter 3/The Weaver.w" +#line 772 "inweb/Chapter 3/The Weaver.w" text_stream * Weaver__dimensions(text_stream *item, int *w, int *h, source_line *L) ; -#line 813 "inweb/Chapter 3/The Weaver.w" +#line 819 "inweb/Chapter 3/The Weaver.w" int Weaver__weave_table_of_contents(heterogeneous_tree *tree, tree_node *ap, section *S) ; #line 12 "inweb/Chapter 3/The Weaver of Text.w" void TextWeaver__commentary_text(heterogeneous_tree *tree, tree_node *ap, text_stream *matter) ; @@ -3923,95 +3931,97 @@ void InCSupport__new_tag_declared(programming_language *self, theme_tag *tag) ; void InCSupport__analyse_code(programming_language *self, web *W) ; #line 968 "inweb/Chapter 4/InC Support.w" int InCSupport__share_element(programming_language *self, text_stream *elname) ; -#line 267 "inweb/Chapter 5/Weave Tree.w" +#line 274 "inweb/Chapter 5/Weave Tree.w" heterogeneous_tree * WeaveTree__new_tree(weave_order *wv) ; -#line 360 "inweb/Chapter 5/Weave Tree.w" +#line 369 "inweb/Chapter 5/Weave Tree.w" tree_node * WeaveTree__document(heterogeneous_tree *tree, weave_order *wv) ; -#line 367 "inweb/Chapter 5/Weave Tree.w" +#line 376 "inweb/Chapter 5/Weave Tree.w" tree_node * WeaveTree__head(heterogeneous_tree *tree, text_stream *banner) ; -#line 374 "inweb/Chapter 5/Weave Tree.w" +#line 383 "inweb/Chapter 5/Weave Tree.w" tree_node * WeaveTree__body(heterogeneous_tree *tree) ; -#line 380 "inweb/Chapter 5/Weave Tree.w" +#line 389 "inweb/Chapter 5/Weave Tree.w" tree_node * WeaveTree__tail(heterogeneous_tree *tree, text_stream *rennab) ; -#line 387 "inweb/Chapter 5/Weave Tree.w" +#line 396 "inweb/Chapter 5/Weave Tree.w" tree_node * WeaveTree__verbatim(heterogeneous_tree *tree, text_stream *content) ; -#line 394 "inweb/Chapter 5/Weave Tree.w" +#line 403 "inweb/Chapter 5/Weave Tree.w" tree_node * WeaveTree__section_header(heterogeneous_tree *tree, section *S) ; -#line 401 "inweb/Chapter 5/Weave Tree.w" +#line 410 "inweb/Chapter 5/Weave Tree.w" tree_node * WeaveTree__section_footer(heterogeneous_tree *tree, section *S) ; -#line 408 "inweb/Chapter 5/Weave Tree.w" +#line 417 "inweb/Chapter 5/Weave Tree.w" tree_node * WeaveTree__chapter(heterogeneous_tree *tree, chapter *Ch) ; -#line 414 "inweb/Chapter 5/Weave Tree.w" +#line 423 "inweb/Chapter 5/Weave Tree.w" tree_node * WeaveTree__chapter_header(heterogeneous_tree *tree, chapter *Ch) ; -#line 421 "inweb/Chapter 5/Weave Tree.w" +#line 430 "inweb/Chapter 5/Weave Tree.w" tree_node * WeaveTree__chapter_footer(heterogeneous_tree *tree, chapter *Ch) ; -#line 428 "inweb/Chapter 5/Weave Tree.w" +#line 437 "inweb/Chapter 5/Weave Tree.w" tree_node * WeaveTree__purpose(heterogeneous_tree *tree, text_stream *P) ; -#line 435 "inweb/Chapter 5/Weave Tree.w" +#line 444 "inweb/Chapter 5/Weave Tree.w" tree_node * WeaveTree__subheading(heterogeneous_tree *tree, text_stream *P) ; -#line 442 "inweb/Chapter 5/Weave Tree.w" +#line 451 "inweb/Chapter 5/Weave Tree.w" tree_node * WeaveTree__pagebreak(heterogeneous_tree *tree) ; -#line 448 "inweb/Chapter 5/Weave Tree.w" +#line 457 "inweb/Chapter 5/Weave Tree.w" tree_node * WeaveTree__bar(heterogeneous_tree *tree) ; -#line 454 "inweb/Chapter 5/Weave Tree.w" +#line 463 "inweb/Chapter 5/Weave Tree.w" tree_node * WeaveTree__paragraph_heading(heterogeneous_tree *tree, paragraph *P, int no_skip) ; -#line 462 "inweb/Chapter 5/Weave Tree.w" +#line 471 "inweb/Chapter 5/Weave Tree.w" tree_node * WeaveTree__endnote(heterogeneous_tree *tree) ; -#line 468 "inweb/Chapter 5/Weave Tree.w" +#line 477 "inweb/Chapter 5/Weave Tree.w" tree_node * WeaveTree__figure(heterogeneous_tree *tree, text_stream *figname, int w, int h) ; -#line 478 "inweb/Chapter 5/Weave Tree.w" -tree_node * WeaveTree__material(heterogeneous_tree *tree, int material_type, int plainly, programming_language *styling) ; #line 487 "inweb/Chapter 5/Weave Tree.w" +tree_node * WeaveTree__audio(heterogeneous_tree *tree, text_stream *audio_name, int w) ; +#line 496 "inweb/Chapter 5/Weave Tree.w" +tree_node * WeaveTree__material(heterogeneous_tree *tree, int material_type, int plainly, programming_language *styling) ; +#line 505 "inweb/Chapter 5/Weave Tree.w" tree_node * WeaveTree__embed(heterogeneous_tree *tree, text_stream *service, text_stream *ID, int w, int h) ; -#line 502 "inweb/Chapter 5/Weave Tree.w" -tree_node * WeaveTree__pmac(heterogeneous_tree *tree, para_macro *pmac, int defn) ; -#line 514 "inweb/Chapter 5/Weave Tree.w" -tree_node * WeaveTree__vskip(heterogeneous_tree *tree, int in_comment) ; #line 520 "inweb/Chapter 5/Weave Tree.w" +tree_node * WeaveTree__pmac(heterogeneous_tree *tree, para_macro *pmac, int defn) ; +#line 532 "inweb/Chapter 5/Weave Tree.w" +tree_node * WeaveTree__vskip(heterogeneous_tree *tree, int in_comment) ; +#line 538 "inweb/Chapter 5/Weave Tree.w" tree_node * WeaveTree__section(heterogeneous_tree *tree, section *sect) ; -#line 526 "inweb/Chapter 5/Weave Tree.w" +#line 544 "inweb/Chapter 5/Weave Tree.w" tree_node * WeaveTree__code_line(heterogeneous_tree *tree) ; -#line 531 "inweb/Chapter 5/Weave Tree.w" +#line 549 "inweb/Chapter 5/Weave Tree.w" tree_node * WeaveTree__function_usage(heterogeneous_tree *tree, text_stream *url, language_function *fn) ; -#line 539 "inweb/Chapter 5/Weave Tree.w" +#line 557 "inweb/Chapter 5/Weave Tree.w" tree_node * WeaveTree__commentary(heterogeneous_tree *tree, text_stream *text, int in_code) ; -#line 546 "inweb/Chapter 5/Weave Tree.w" +#line 564 "inweb/Chapter 5/Weave Tree.w" tree_node * WeaveTree__carousel_slide(heterogeneous_tree *tree, text_stream *caption, int c) ; -#line 553 "inweb/Chapter 5/Weave Tree.w" +#line 571 "inweb/Chapter 5/Weave Tree.w" tree_node * WeaveTree__table_of_contents(heterogeneous_tree *tree, text_stream *text1) ; -#line 559 "inweb/Chapter 5/Weave Tree.w" +#line 577 "inweb/Chapter 5/Weave Tree.w" tree_node * WeaveTree__contents_line(heterogeneous_tree *tree, text_stream *text1, text_stream *text2, paragraph *P) ; -#line 568 "inweb/Chapter 5/Weave Tree.w" +#line 586 "inweb/Chapter 5/Weave Tree.w" tree_node * WeaveTree__weave_chapter_title_page_node(heterogeneous_tree *tree) ; -#line 573 "inweb/Chapter 5/Weave Tree.w" +#line 591 "inweb/Chapter 5/Weave Tree.w" tree_node * WeaveTree__weave_defn_node(heterogeneous_tree *tree, text_stream *keyword) ; -#line 583 "inweb/Chapter 5/Weave Tree.w" +#line 601 "inweb/Chapter 5/Weave Tree.w" tree_node * WeaveTree__source_code(heterogeneous_tree *tree, text_stream *matter, text_stream *colouring) ; -#line 594 "inweb/Chapter 5/Weave Tree.w" +#line 612 "inweb/Chapter 5/Weave Tree.w" tree_node * WeaveTree__url(heterogeneous_tree *tree, text_stream *url, text_stream *content, int external) ; -#line 603 "inweb/Chapter 5/Weave Tree.w" +#line 621 "inweb/Chapter 5/Weave Tree.w" tree_node * WeaveTree__footnote_cue(heterogeneous_tree *tree, text_stream *cue) ; -#line 609 "inweb/Chapter 5/Weave Tree.w" +#line 627 "inweb/Chapter 5/Weave Tree.w" tree_node * WeaveTree__footnote(heterogeneous_tree *tree, text_stream *cue) ; -#line 619 "inweb/Chapter 5/Weave Tree.w" +#line 637 "inweb/Chapter 5/Weave Tree.w" tree_node * WeaveTree__function_defn(heterogeneous_tree *tree, language_function *fn) ; -#line 629 "inweb/Chapter 5/Weave Tree.w" +#line 647 "inweb/Chapter 5/Weave Tree.w" tree_node * WeaveTree__display_line(heterogeneous_tree *tree, text_stream *text) ; -#line 648 "inweb/Chapter 5/Weave Tree.w" +#line 666 "inweb/Chapter 5/Weave Tree.w" tree_node * WeaveTree__weave_item_node(heterogeneous_tree *tree, int depth, text_stream *label) ; -#line 655 "inweb/Chapter 5/Weave Tree.w" +#line 673 "inweb/Chapter 5/Weave Tree.w" tree_node * WeaveTree__grammar_index(heterogeneous_tree *tree) ; -#line 660 "inweb/Chapter 5/Weave Tree.w" +#line 678 "inweb/Chapter 5/Weave Tree.w" tree_node * WeaveTree__inline(heterogeneous_tree *tree) ; -#line 665 "inweb/Chapter 5/Weave Tree.w" +#line 683 "inweb/Chapter 5/Weave Tree.w" tree_node * WeaveTree__locale(heterogeneous_tree *tree, paragraph *par1, paragraph *par2) ; -#line 672 "inweb/Chapter 5/Weave Tree.w" -tree_node * WeaveTree__mathematics(heterogeneous_tree *tree, text_stream *content, int displayed) ; -#line 679 "inweb/Chapter 5/Weave Tree.w" -void WeaveTree__show(text_stream *OUT, heterogeneous_tree *T) ; -#line 686 "inweb/Chapter 5/Weave Tree.w" -void WeaveTree__prune(heterogeneous_tree *T) ; #line 690 "inweb/Chapter 5/Weave Tree.w" +tree_node * WeaveTree__mathematics(heterogeneous_tree *tree, text_stream *content, int displayed) ; +#line 697 "inweb/Chapter 5/Weave Tree.w" +void WeaveTree__show(text_stream *OUT, heterogeneous_tree *T) ; +#line 704 "inweb/Chapter 5/Weave Tree.w" +void WeaveTree__prune(heterogeneous_tree *T) ; +#line 708 "inweb/Chapter 5/Weave Tree.w" int WeaveTree__prune_visit(tree_node *N, void *state) ; #line 18 "inweb/Chapter 5/Format Methods.w" weave_format * Formats__create_weave_format(text_stream *name, text_stream *ext) ; @@ -4045,21 +4055,21 @@ void PlainText__create(void) ; void PlainText__render(weave_format *self, text_stream *OUT, heterogeneous_tree *tree) ; #line 32 "inweb/Chapter 5/Plain Text Format.w" int PlainText__render_visit(tree_node *N, void *state, int L) ; -#line 221 "inweb/Chapter 5/Plain Text Format.w" +#line 222 "inweb/Chapter 5/Plain Text Format.w" void PlainText__subheading(weave_format *self, text_stream *OUT, weave_order *wv, int level, text_stream *comment, text_stream *head) ; -#line 228 "inweb/Chapter 5/Plain Text Format.w" +#line 229 "inweb/Chapter 5/Plain Text Format.w" void PlainText__toc(weave_format *self, text_stream *OUT, weave_order *wv, int stage, text_stream *text1, text_stream *text2, paragraph *P) ; -#line 239 "inweb/Chapter 5/Plain Text Format.w" +#line 240 "inweb/Chapter 5/Plain Text Format.w" void PlainText__chapter_title_page(weave_format *self, text_stream *OUT, weave_order *wv, chapter *C) ; -#line 249 "inweb/Chapter 5/Plain Text Format.w" +#line 250 "inweb/Chapter 5/Plain Text Format.w" void PlainText__para_macro(weave_format *self, text_stream *OUT, weave_order *wv, para_macro *pmac, int defn) ; -#line 257 "inweb/Chapter 5/Plain Text Format.w" +#line 258 "inweb/Chapter 5/Plain Text Format.w" void PlainText__blank_line(weave_format *self, text_stream *OUT, weave_order *wv, int in_comment) ; -#line 263 "inweb/Chapter 5/Plain Text Format.w" +#line 264 "inweb/Chapter 5/Plain Text Format.w" void PlainText__endnote(weave_format *self, text_stream *OUT, weave_order *wv, int end) ; -#line 269 "inweb/Chapter 5/Plain Text Format.w" +#line 270 "inweb/Chapter 5/Plain Text Format.w" void PlainText__commentary_text(weave_format *self, text_stream *OUT, weave_order *wv, text_stream *id) ; -#line 275 "inweb/Chapter 5/Plain Text Format.w" +#line 276 "inweb/Chapter 5/Plain Text Format.w" void PlainText__locale(weave_format *self, text_stream *OUT, weave_order *wv, paragraph *par1, paragraph *par2) ; #line 9 "inweb/Chapter 5/TeX Format.w" void TeX__create(void) ; @@ -4073,51 +4083,51 @@ void TeX__render_PDF(weave_format *self, text_stream *OUT, heterogeneous_tree * void TeX__render_inner(weave_format *self, text_stream *OUT, heterogeneous_tree *tree, int as_dvi, int as_pdf) ; #line 72 "inweb/Chapter 5/TeX Format.w" int TeX__render_visit(tree_node *N, void *state, int L) ; -#line 342 "inweb/Chapter 5/TeX Format.w" +#line 343 "inweb/Chapter 5/TeX Format.w" int TeX__preserve_math_mode(weave_format *self, weave_order *wv, text_stream *matter, text_stream *id) ; -#line 347 "inweb/Chapter 5/TeX Format.w" +#line 348 "inweb/Chapter 5/TeX Format.w" int TeX__yes(weave_format *self, weave_order *wv) ; -#line 352 "inweb/Chapter 5/TeX Format.w" +#line 353 "inweb/Chapter 5/TeX Format.w" void TeX__subheading(weave_format *self, text_stream *OUT, weave_order *wv, int level, text_stream *comment, text_stream *head) ; -#line 368 "inweb/Chapter 5/TeX Format.w" +#line 369 "inweb/Chapter 5/TeX Format.w" void TeX__toc(weave_format *self, text_stream *OUT, weave_order *wv, int stage, text_stream *text1, text_stream *text2, paragraph *P) ; -#line 387 "inweb/Chapter 5/TeX Format.w" +#line 388 "inweb/Chapter 5/TeX Format.w" void TeX__chapter_title_page(weave_format *self, text_stream *OUT, weave_order *wv, chapter *C) ; -#line 400 "inweb/Chapter 5/TeX Format.w" +#line 401 "inweb/Chapter 5/TeX Format.w" void TeX__paragraph_heading(weave_format *self, text_stream *OUT, weave_order *wv, section *S, paragraph *P, text_stream *heading_text, int weight, int no_skip) ; -#line 497 "inweb/Chapter 5/TeX Format.w" +#line 498 "inweb/Chapter 5/TeX Format.w" void TeX__source_code(weave_format *self, text_stream *OUT, weave_order *wv, text_stream *matter, text_stream *colouring, int starts) ; -#line 527 "inweb/Chapter 5/TeX Format.w" +#line 528 "inweb/Chapter 5/TeX Format.w" void TeX__inline_code(weave_format *self, text_stream *OUT, weave_order *wv, int enter) ; -#line 533 "inweb/Chapter 5/TeX Format.w" +#line 534 "inweb/Chapter 5/TeX Format.w" void TeX__change_colour_PDF(weave_format *self, text_stream *OUT, weave_order *wv, int col, int in_code) ; -#line 557 "inweb/Chapter 5/TeX Format.w" +#line 558 "inweb/Chapter 5/TeX Format.w" void TeX__para_macro_PDF_1(weave_format *self, text_stream *OUT, weave_order *wv, para_macro *pmac, int defn) ; -#line 566 "inweb/Chapter 5/TeX Format.w" +#line 567 "inweb/Chapter 5/TeX Format.w" void TeX__para_macro(weave_format *self, text_stream *OUT, weave_order *wv, para_macro *pmac, int defn) ; -#line 575 "inweb/Chapter 5/TeX Format.w" +#line 576 "inweb/Chapter 5/TeX Format.w" void TeX__para_macro_PDF_2(weave_format *self, text_stream *OUT, weave_order *wv, para_macro *pmac, int defn) ; -#line 584 "inweb/Chapter 5/TeX Format.w" +#line 585 "inweb/Chapter 5/TeX Format.w" void TeX__after_definitions(weave_format *self, text_stream *OUT, weave_order *wv) ; -#line 589 "inweb/Chapter 5/TeX Format.w" +#line 590 "inweb/Chapter 5/TeX Format.w" void TeX__commentary_text(weave_format *self, text_stream *OUT, weave_order *wv, text_stream *id) ; -#line 612 "inweb/Chapter 5/TeX Format.w" +#line 613 "inweb/Chapter 5/TeX Format.w" void TeX__locale(weave_format *self, text_stream *OUT, weave_order *wv, paragraph *par1, paragraph *par2) ; -#line 619 "inweb/Chapter 5/TeX Format.w" +#line 620 "inweb/Chapter 5/TeX Format.w" void TeX__tail(weave_format *self, text_stream *OUT, weave_order *wv, text_stream *comment, section *S) ; -#line 629 "inweb/Chapter 5/TeX Format.w" +#line 630 "inweb/Chapter 5/TeX Format.w" int TeX__preform_document(weave_format *self, text_stream *OUT, web *W, weave_order *wv, chapter *C, section *S, source_line *L, text_stream *matter, text_stream *concluding_comment) ; -#line 710 "inweb/Chapter 5/TeX Format.w" +#line 711 "inweb/Chapter 5/TeX Format.w" void TeX__post_process_PDF(weave_format *self, weave_order *wv, int open) ; -#line 713 "inweb/Chapter 5/TeX Format.w" +#line 714 "inweb/Chapter 5/TeX Format.w" void TeX__post_process_DVI(weave_format *self, weave_order *wv, int open) ; -#line 718 "inweb/Chapter 5/TeX Format.w" +#line 719 "inweb/Chapter 5/TeX Format.w" void TeX__post_process_report(weave_format *self, weave_order *wv) ; -#line 723 "inweb/Chapter 5/TeX Format.w" +#line 724 "inweb/Chapter 5/TeX Format.w" int TeX__post_process_substitute(weave_format *self, text_stream *OUT, weave_order *wv, text_stream *detail, weave_pattern *pattern) ; -#line 736 "inweb/Chapter 5/TeX Format.w" +#line 737 "inweb/Chapter 5/TeX Format.w" void TeX__remove_math_mode(OUTPUT_STREAM, text_stream *text) ; -#line 743 "inweb/Chapter 5/TeX Format.w" +#line 744 "inweb/Chapter 5/TeX Format.w" void TeX__remove_math_mode_range(OUTPUT_STREAM, text_stream *text, int from, int to) ; #line 9 "inweb/Chapter 5/HTML Formats.w" void HTMLFormat__create(void) ; @@ -4129,19 +4139,19 @@ void HTMLFormat__render(weave_format *self, text_stream *OUT, heterogeneous_tre void HTMLFormat__render_EPUB(weave_format *self, text_stream *OUT, heterogeneous_tree *tree) ; #line 84 "inweb/Chapter 5/HTML Formats.w" int HTMLFormat__render_visit(tree_node *N, void *state, int L) ; -#line 697 "inweb/Chapter 5/HTML Formats.w" +#line 712 "inweb/Chapter 5/HTML Formats.w" int HTMLFormat__interior_material(tree_node *N) ; -#line 711 "inweb/Chapter 5/HTML Formats.w" +#line 726 "inweb/Chapter 5/HTML Formats.w" void HTMLFormat__go_to_depth(HTML_render_state *hrs, int from_depth, int to_depth) ; -#line 729 "inweb/Chapter 5/HTML Formats.w" +#line 744 "inweb/Chapter 5/HTML Formats.w" void HTMLFormat__paragraph_number(text_stream *OUT, paragraph *P) ; -#line 742 "inweb/Chapter 5/HTML Formats.w" +#line 757 "inweb/Chapter 5/HTML Formats.w" void HTMLFormat__change_colour(text_stream *OUT, int col, colour_scheme *cs) ; -#line 766 "inweb/Chapter 5/HTML Formats.w" +#line 781 "inweb/Chapter 5/HTML Formats.w" void HTMLFormat__escape_text(text_stream *OUT, text_stream *id) ; -#line 778 "inweb/Chapter 5/HTML Formats.w" -int HTMLFormat__begin_weaving_EPUB(weave_format *wf, web *W, weave_pattern *pattern) ; #line 793 "inweb/Chapter 5/HTML Formats.w" +int HTMLFormat__begin_weaving_EPUB(weave_format *wf, web *W, weave_pattern *pattern) ; +#line 808 "inweb/Chapter 5/HTML Formats.w" void HTMLFormat__end_weaving_EPUB(weave_format *wf, web *W, weave_pattern *pattern) ; #line 9 "inweb/Chapter 5/Debugging Format.w" void Debugging__create(void) ; @@ -4149,11 +4159,11 @@ void Debugging__create(void) ; void Debugging__render(weave_format *self, text_stream *OUT, heterogeneous_tree *tree) ; #line 31 "inweb/Chapter 5/Debugging Format.w" int Debugging__render_visit(tree_node *N, void *state, int L) ; -#line 258 "inweb/Chapter 5/Debugging Format.w" +#line 263 "inweb/Chapter 5/Debugging Format.w" void Debugging__show_text(text_stream *OUT, text_stream *text, int limit) ; -#line 269 "inweb/Chapter 5/Debugging Format.w" -void Debugging__show_para(text_stream *OUT, paragraph *P) ; #line 274 "inweb/Chapter 5/Debugging Format.w" +void Debugging__show_para(text_stream *OUT, paragraph *P) ; +#line 279 "inweb/Chapter 5/Debugging Format.w" void Debugging__show_mat(text_stream *OUT, int m) ; #line 20 "inweb/Chapter 5/Weave Plugins.w" weave_plugin * WeavePlugins__new(text_stream *name) ; @@ -4844,6 +4854,9 @@ text_stream *TL_IS_588 = NULL; text_stream *TL_IS_589 = NULL; text_stream *TL_IS_590 = NULL; text_stream *TL_IS_591 = NULL; +text_stream *TL_IS_592 = NULL; +text_stream *TL_IS_593 = NULL; +text_stream *TL_IS_594 = NULL; void register_tangled_text_literals(void); #line 57 "inweb/foundation-module/Chapter 2/Streams.w" #define WRITE(args...) Writers__printf(OUT, args) @@ -14374,7 +14387,7 @@ void BuildFiles__increment(text_stream *T) { } } -#line 95 "inweb/Chapter 1/Basics.w" +#line 96 "inweb/Chapter 1/Basics.w" ALLOCATE_IN_ARRAYS(source_line, 1000) ALLOCATE_INDIVIDUALLY(breadcrumb_request) ALLOCATE_INDIVIDUALLY(chapter) @@ -14429,6 +14442,7 @@ ALLOCATE_INDIVIDUALLY(weave_paragraph_heading_node) ALLOCATE_INDIVIDUALLY(weave_endnote_node) ALLOCATE_INDIVIDUALLY(weave_material_node) ALLOCATE_INDIVIDUALLY(weave_figure_node) +ALLOCATE_INDIVIDUALLY(weave_audio_node) ALLOCATE_INDIVIDUALLY(weave_embed_node) ALLOCATE_INDIVIDUALLY(weave_pmac_node) ALLOCATE_INDIVIDUALLY(weave_vskip_node) @@ -15984,7 +15998,7 @@ char *Lines__category_name(int cat) { return "(?unknown)"; } -#line 164 "inweb/Chapter 2/Line Categories.w" +#line 165 "inweb/Chapter 2/Line Categories.w" #line 17 "inweb/Chapter 2/The Parser.w" void Parser__parse_web(web *W, int inweb_mode) { @@ -16252,15 +16266,15 @@ void Parser__parse_web(web *W, int inweb_mode) { (Regexp__match(&mr2, mr.exp[0], L"%((%c*?) *text%)"))) { { -#line 440 "inweb/Chapter 2/The Parser.w" +#line 448 "inweb/Chapter 2/The Parser.w" match_results mr3 = Regexp__create_mr(); while (TRUE) { if (Regexp__match(&mr3, mr2.exp[0], L" *(%C+) *(%c*?)")) { - if (Str__eq(mr3.exp[0], TL_IS_169)) L->plainer = TRUE; - else if (Str__eq(mr3.exp[0], TL_IS_170)) L->enable_hyperlinks = TRUE; + if (Str__eq(mr3.exp[0], TL_IS_170)) L->plainer = TRUE; + else if (Str__eq(mr3.exp[0], TL_IS_171)) L->enable_hyperlinks = TRUE; else { Main__error_in_web( - TL_IS_171, L); + TL_IS_172, L); } } else break; Str__clear(mr2.exp[0]); @@ -16278,15 +16292,15 @@ void Parser__parse_web(web *W, int inweb_mode) { (Regexp__match(&mr2, mr.exp[0], L"%((%c*?) *text as code%)"))) { { -#line 440 "inweb/Chapter 2/The Parser.w" +#line 448 "inweb/Chapter 2/The Parser.w" match_results mr3 = Regexp__create_mr(); while (TRUE) { if (Regexp__match(&mr3, mr2.exp[0], L" *(%C+) *(%c*?)")) { - if (Str__eq(mr3.exp[0], TL_IS_169)) L->plainer = TRUE; - else if (Str__eq(mr3.exp[0], TL_IS_170)) L->enable_hyperlinks = TRUE; + if (Str__eq(mr3.exp[0], TL_IS_170)) L->plainer = TRUE; + else if (Str__eq(mr3.exp[0], TL_IS_171)) L->enable_hyperlinks = TRUE; else { Main__error_in_web( - TL_IS_171, L); + TL_IS_172, L); } } else break; Str__clear(mr2.exp[0]); @@ -16304,15 +16318,15 @@ void Parser__parse_web(web *W, int inweb_mode) { (Regexp__match(&mr2, mr.exp[0], L"%((%c*?) *text as (%c+)%)"))) { { -#line 440 "inweb/Chapter 2/The Parser.w" +#line 448 "inweb/Chapter 2/The Parser.w" match_results mr3 = Regexp__create_mr(); while (TRUE) { if (Regexp__match(&mr3, mr2.exp[0], L" *(%C+) *(%c*?)")) { - if (Str__eq(mr3.exp[0], TL_IS_169)) L->plainer = TRUE; - else if (Str__eq(mr3.exp[0], TL_IS_170)) L->enable_hyperlinks = TRUE; + if (Str__eq(mr3.exp[0], TL_IS_170)) L->plainer = TRUE; + else if (Str__eq(mr3.exp[0], TL_IS_171)) L->enable_hyperlinks = TRUE; else { Main__error_in_web( - TL_IS_171, L); + TL_IS_172, L); } } else break; Str__clear(mr2.exp[0]); @@ -16330,15 +16344,15 @@ void Parser__parse_web(web *W, int inweb_mode) { (Regexp__match(&mr2, mr.exp[0], L"%((%c*?) *text from (%c+) as code%)"))) { { -#line 440 "inweb/Chapter 2/The Parser.w" +#line 448 "inweb/Chapter 2/The Parser.w" match_results mr3 = Regexp__create_mr(); while (TRUE) { if (Regexp__match(&mr3, mr2.exp[0], L" *(%C+) *(%c*?)")) { - if (Str__eq(mr3.exp[0], TL_IS_169)) L->plainer = TRUE; - else if (Str__eq(mr3.exp[0], TL_IS_170)) L->enable_hyperlinks = TRUE; + if (Str__eq(mr3.exp[0], TL_IS_170)) L->plainer = TRUE; + else if (Str__eq(mr3.exp[0], TL_IS_171)) L->enable_hyperlinks = TRUE; else { Main__error_in_web( - TL_IS_171, L); + TL_IS_172, L); } } else break; Str__clear(mr2.exp[0]); @@ -16352,7 +16366,7 @@ void Parser__parse_web(web *W, int inweb_mode) { code_pl_for_body = S->sect_language; { -#line 456 "inweb/Chapter 2/The Parser.w" +#line 464 "inweb/Chapter 2/The Parser.w" L->category = BEGIN_CODE_LCAT; pathname *P = W->md->path_to_web; filename *F = Filenames__from_text_relative(P, mr2.exp[1]); @@ -16366,7 +16380,7 @@ void Parser__parse_web(web *W, int inweb_mode) { latest->next_line = TL; latest = TL; } - source_line *EEL = Lines__new_source_line_in(TL_IS_172, &(L->source), S); + source_line *EEL = Lines__new_source_line_in(TL_IS_173, &(L->source), S); EEL->next_line = latest->next_line; latest->next_line = EEL; code_lcat_for_body = TEXT_EXTRACT_LCAT; @@ -16379,15 +16393,15 @@ void Parser__parse_web(web *W, int inweb_mode) { (Regexp__match(&mr2, mr.exp[0], L"%((%c*?) *text from (%c+) as (%c+)%)"))) { { -#line 440 "inweb/Chapter 2/The Parser.w" +#line 448 "inweb/Chapter 2/The Parser.w" match_results mr3 = Regexp__create_mr(); while (TRUE) { if (Regexp__match(&mr3, mr2.exp[0], L" *(%C+) *(%c*?)")) { - if (Str__eq(mr3.exp[0], TL_IS_169)) L->plainer = TRUE; - else if (Str__eq(mr3.exp[0], TL_IS_170)) L->enable_hyperlinks = TRUE; + if (Str__eq(mr3.exp[0], TL_IS_170)) L->plainer = TRUE; + else if (Str__eq(mr3.exp[0], TL_IS_171)) L->enable_hyperlinks = TRUE; else { Main__error_in_web( - TL_IS_171, L); + TL_IS_172, L); } } else break; Str__clear(mr2.exp[0]); @@ -16401,7 +16415,7 @@ void Parser__parse_web(web *W, int inweb_mode) { code_pl_for_body = Languages__find_by_name(mr2.exp[2], W); { -#line 456 "inweb/Chapter 2/The Parser.w" +#line 464 "inweb/Chapter 2/The Parser.w" L->category = BEGIN_CODE_LCAT; pathname *P = W->md->path_to_web; filename *F = Filenames__from_text_relative(P, mr2.exp[1]); @@ -16415,7 +16429,7 @@ void Parser__parse_web(web *W, int inweb_mode) { latest->next_line = TL; latest = TL; } - source_line *EEL = Lines__new_source_line_in(TL_IS_172, &(L->source), S); + source_line *EEL = Lines__new_source_line_in(TL_IS_173, &(L->source), S); EEL->next_line = latest->next_line; latest->next_line = EEL; code_lcat_for_body = TEXT_EXTRACT_LCAT; @@ -16428,15 +16442,15 @@ void Parser__parse_web(web *W, int inweb_mode) { (Regexp__match(&mr2, mr.exp[0], L"%((%c*?) *text from (%c+)%)"))) { { -#line 440 "inweb/Chapter 2/The Parser.w" +#line 448 "inweb/Chapter 2/The Parser.w" match_results mr3 = Regexp__create_mr(); while (TRUE) { if (Regexp__match(&mr3, mr2.exp[0], L" *(%C+) *(%c*?)")) { - if (Str__eq(mr3.exp[0], TL_IS_169)) L->plainer = TRUE; - else if (Str__eq(mr3.exp[0], TL_IS_170)) L->enable_hyperlinks = TRUE; + if (Str__eq(mr3.exp[0], TL_IS_170)) L->plainer = TRUE; + else if (Str__eq(mr3.exp[0], TL_IS_171)) L->enable_hyperlinks = TRUE; else { Main__error_in_web( - TL_IS_171, L); + TL_IS_172, L); } } else break; Str__clear(mr2.exp[0]); @@ -16450,7 +16464,7 @@ void Parser__parse_web(web *W, int inweb_mode) { code_pl_for_body = NULL; { -#line 456 "inweb/Chapter 2/The Parser.w" +#line 464 "inweb/Chapter 2/The Parser.w" L->category = BEGIN_CODE_LCAT; pathname *P = W->md->path_to_web; filename *F = Filenames__from_text_relative(P, mr2.exp[1]); @@ -16464,7 +16478,7 @@ void Parser__parse_web(web *W, int inweb_mode) { latest->next_line = TL; latest = TL; } - source_line *EEL = Lines__new_source_line_in(TL_IS_172, &(L->source), S); + source_line *EEL = Lines__new_source_line_in(TL_IS_173, &(L->source), S); EEL->next_line = latest->next_line; latest->next_line = EEL; code_lcat_for_body = TEXT_EXTRACT_LCAT; @@ -16482,8 +16496,16 @@ void Parser__parse_web(web *W, int inweb_mode) { L->text_operand = Str__duplicate(mr2.exp[0]); comment_mode = TRUE; } else if ((current_paragraph) && - (Regexp__match(&mr2, mr.exp[0], L"%(carousel%)"))) { + (Regexp__match(&mr2, mr.exp[0], L"%(audio (%c+)%)"))) { Tags__add_by_name(L->owning_paragraph, TL_IS_161); + L->command_code = AUDIO_CMD; + L->category = COMMAND_LCAT; + code_lcat_for_body = COMMENT_BODY_LCAT; + L->text_operand = Str__duplicate(mr2.exp[0]); + comment_mode = TRUE; + } else if ((current_paragraph) && + (Regexp__match(&mr2, mr.exp[0], L"%(carousel%)"))) { + Tags__add_by_name(L->owning_paragraph, TL_IS_162); L->command_code = CAROUSEL_UNCAPTIONED_CMD; L->category = COMMAND_LCAT; code_lcat_for_body = COMMENT_BODY_LCAT; @@ -16491,7 +16513,7 @@ void Parser__parse_web(web *W, int inweb_mode) { comment_mode = TRUE; } else if ((current_paragraph) && (Regexp__match(&mr2, mr.exp[0], L"%(carousel \"(%c+)\" below%)"))) { - Tags__add_by_name(L->owning_paragraph, TL_IS_162); + Tags__add_by_name(L->owning_paragraph, TL_IS_163); L->command_code = CAROUSEL_BELOW_CMD; L->category = COMMAND_LCAT; code_lcat_for_body = COMMENT_BODY_LCAT; @@ -16499,7 +16521,7 @@ void Parser__parse_web(web *W, int inweb_mode) { comment_mode = TRUE; } else if ((current_paragraph) && (Regexp__match(&mr2, mr.exp[0], L"%(carousel \"(%c+)\" above%)"))) { - Tags__add_by_name(L->owning_paragraph, TL_IS_163); + Tags__add_by_name(L->owning_paragraph, TL_IS_164); L->command_code = CAROUSEL_ABOVE_CMD; L->category = COMMAND_LCAT; code_lcat_for_body = COMMENT_BODY_LCAT; @@ -16507,7 +16529,7 @@ void Parser__parse_web(web *W, int inweb_mode) { comment_mode = TRUE; } else if ((current_paragraph) && (Regexp__match(&mr2, mr.exp[0], L"%(carousel \"(%c+)\"%)"))) { - Tags__add_by_name(L->owning_paragraph, TL_IS_164); + Tags__add_by_name(L->owning_paragraph, TL_IS_165); L->command_code = CAROUSEL_CMD; L->category = COMMAND_LCAT; code_lcat_for_body = COMMENT_BODY_LCAT; @@ -16515,7 +16537,7 @@ void Parser__parse_web(web *W, int inweb_mode) { comment_mode = TRUE; } else if ((current_paragraph) && (Regexp__match(&mr2, mr.exp[0], L"%(carousel end%)"))) { - Tags__add_by_name(L->owning_paragraph, TL_IS_165); + Tags__add_by_name(L->owning_paragraph, TL_IS_166); L->command_code = CAROUSEL_END_CMD; L->category = COMMAND_LCAT; code_lcat_for_body = COMMENT_BODY_LCAT; @@ -16523,7 +16545,7 @@ void Parser__parse_web(web *W, int inweb_mode) { } else if ((current_paragraph) && ((Regexp__match(&mr2, mr.exp[0], L"%(embedded (%C+) video (%c+)%)")) || (Regexp__match(&mr2, mr.exp[0], L"%(embedded (%C+) audio (%c+)%)")))) { - Tags__add_by_name(L->owning_paragraph, TL_IS_166); + Tags__add_by_name(L->owning_paragraph, TL_IS_167); L->command_code = EMBED_CMD; L->category = COMMAND_LCAT; code_lcat_for_body = COMMENT_BODY_LCAT; @@ -16531,10 +16553,10 @@ void Parser__parse_web(web *W, int inweb_mode) { L->text_operand2 = Str__duplicate(mr2.exp[1]); comment_mode = TRUE; } else { - Main__error_in_web(TL_IS_167, L); + Main__error_in_web(TL_IS_168, L); } } else if (Regexp__match(&mr, L->text, L"= *%C%c*")) { - Main__error_in_web(TL_IS_168, L); + Main__error_in_web(TL_IS_169, L); } code_plainness_for_body = L->plainer; hyperlink_body = L->enable_hyperlinks; @@ -16563,12 +16585,12 @@ void Parser__parse_web(web *W, int inweb_mode) { } { -#line 482 "inweb/Chapter 2/The Parser.w" +#line 490 "inweb/Chapter 2/The Parser.w" extract_mode = FALSE; if (Str__eq_wide_string(command_text, L"Purpose:")) { -#line 530 "inweb/Chapter 2/The Parser.w" - if (before_bar == FALSE) Main__error_in_web(TL_IS_174, L); +#line 538 "inweb/Chapter 2/The Parser.w" + if (before_bar == FALSE) Main__error_in_web(TL_IS_175, L); if (S->md->using_syntax >= V2_SYNTAX) Parser__wrong_version(S->md->using_syntax, L, "'@Purpose'", V1_SYNTAX); L->category = PURPOSE_LCAT; @@ -16577,14 +16599,14 @@ void Parser__parse_web(web *W, int inweb_mode) { S->sect_purpose = Parser__extract_purpose(remainder, L->next_line, L->owning_section, &L); } -#line 483 "inweb/Chapter 2/The Parser.w" +#line 491 "inweb/Chapter 2/The Parser.w" else if (Str__eq_wide_string(command_text, L"Interface:")) { -#line 539 "inweb/Chapter 2/The Parser.w" +#line 547 "inweb/Chapter 2/The Parser.w" if (S->md->using_syntax >= V2_SYNTAX) Parser__wrong_version(S->md->using_syntax, L, "'@Interface'", V1_SYNTAX); - if (before_bar == FALSE) Main__error_in_web(TL_IS_175, L); + if (before_bar == FALSE) Main__error_in_web(TL_IS_176, L); L->category = INTERFACE_LCAT; L->owning_paragraph = NULL; L->is_commentary = TRUE; @@ -16597,14 +16619,14 @@ void Parser__parse_web(web *W, int inweb_mode) { } } -#line 484 "inweb/Chapter 2/The Parser.w" +#line 492 "inweb/Chapter 2/The Parser.w" else if (Str__eq_wide_string(command_text, L"Definitions:")) { -#line 554 "inweb/Chapter 2/The Parser.w" +#line 562 "inweb/Chapter 2/The Parser.w" if (S->md->using_syntax >= V2_SYNTAX) Parser__wrong_version(S->md->using_syntax, L, "'@Definitions' headings", V1_SYNTAX); - if (before_bar == FALSE) Main__error_in_web(TL_IS_176, L); + if (before_bar == FALSE) Main__error_in_web(TL_IS_177, L); L->category = DEFINITIONS_LCAT; L->owning_paragraph = NULL; L->is_commentary = TRUE; @@ -16612,14 +16634,14 @@ void Parser__parse_web(web *W, int inweb_mode) { next_par_number = 1; } -#line 485 "inweb/Chapter 2/The Parser.w" +#line 493 "inweb/Chapter 2/The Parser.w" else if (Regexp__match(&mr, command_text, L"----+")) { -#line 567 "inweb/Chapter 2/The Parser.w" +#line 575 "inweb/Chapter 2/The Parser.w" if (S->md->using_syntax >= V2_SYNTAX) Parser__wrong_version(S->md->using_syntax, L, "the bar '----...'", V1_SYNTAX); - if (before_bar == FALSE) Main__error_in_web(TL_IS_177, L); + if (before_bar == FALSE) Main__error_in_web(TL_IS_178, L); L->category = BAR_LCAT; L->owning_paragraph = NULL; L->is_commentary = TRUE; @@ -16629,14 +16651,14 @@ void Parser__parse_web(web *W, int inweb_mode) { next_par_number = 1; } -#line 486 "inweb/Chapter 2/The Parser.w" +#line 494 "inweb/Chapter 2/The Parser.w" else if ((Str__eq_wide_string(command_text, L"c")) || (Str__eq_wide_string(command_text, L"x")) || ((S->md->using_syntax == V1_SYNTAX) && (Str__eq_wide_string(command_text, L"e")))) { -#line 585 "inweb/Chapter 2/The Parser.w" +#line 593 "inweb/Chapter 2/The Parser.w" if (S->md->using_syntax > V1_SYNTAX) Parser__wrong_version(S->md->using_syntax, L, "'@c' and '@x'", V1_SYNTAX); L->category = BEGIN_CODE_LCAT; @@ -16650,11 +16672,11 @@ void Parser__parse_web(web *W, int inweb_mode) { hyperlink_body = FALSE; } -#line 490 "inweb/Chapter 2/The Parser.w" +#line 498 "inweb/Chapter 2/The Parser.w" else if (Str__eq_wide_string(command_text, L"d")) { -#line 601 "inweb/Chapter 2/The Parser.w" +#line 609 "inweb/Chapter 2/The Parser.w" L->category = BEGIN_DEFINITION_LCAT; code_lcat_for_body = CONT_DEFINITION_LCAT; code_pl_for_body = NULL; @@ -16672,14 +16694,14 @@ void Parser__parse_web(web *W, int inweb_mode) { Regexp__dispose_of(&mr); } -#line 491 "inweb/Chapter 2/The Parser.w" +#line 499 "inweb/Chapter 2/The Parser.w" else if (Str__eq_wide_string(command_text, L"define")) { if (S->md->using_syntax < V2_SYNTAX) Parser__wrong_version(S->md->using_syntax, L, "'@define' for definitions (use '@d' instead)", V2_SYNTAX); { -#line 601 "inweb/Chapter 2/The Parser.w" +#line 609 "inweb/Chapter 2/The Parser.w" L->category = BEGIN_DEFINITION_LCAT; code_lcat_for_body = CONT_DEFINITION_LCAT; code_pl_for_body = NULL; @@ -16696,101 +16718,101 @@ void Parser__parse_web(web *W, int inweb_mode) { L->is_commentary = FALSE; Regexp__dispose_of(&mr); -} -#line 495 "inweb/Chapter 2/The Parser.w" -; - } else if (Str__eq_wide_string(command_text, L"default")) { - if (S->md->using_syntax < V2_SYNTAX) - Parser__wrong_version(S->md->using_syntax, L, "'@default' for definitions", V2_SYNTAX); - L->default_defn = TRUE; - -{ -#line 601 "inweb/Chapter 2/The Parser.w" - L->category = BEGIN_DEFINITION_LCAT; - code_lcat_for_body = CONT_DEFINITION_LCAT; - code_pl_for_body = NULL; - match_results mr = Regexp__create_mr(); - if (Regexp__match(&mr, remainder, L"(%C+) (%c+)")) { - L->text_operand = Str__duplicate(mr.exp[0]); /* name of term defined */ - L->text_operand2 = Str__duplicate(mr.exp[1]); /* Value */ - } else { - L->text_operand = Str__duplicate(remainder); /* name of term defined */ - L->text_operand2 = Str__new(); /* no value given */ - } - Analyser__mark_reserved_word_at_line(L, L->text_operand, CONSTANT_COLOUR); - comment_mode = FALSE; - L->is_commentary = FALSE; - Regexp__dispose_of(&mr); - -} -#line 500 "inweb/Chapter 2/The Parser.w" -; - } else if (Str__eq_wide_string(command_text, L"enum")) -{ -#line 621 "inweb/Chapter 2/The Parser.w" - L->category = BEGIN_DEFINITION_LCAT; - text_stream *from = NULL; - match_results mr = Regexp__create_mr(); - L->text_operand = Str__duplicate(remainder); /* name of term defined */ - TEMPORARY_TEXT(before); - TEMPORARY_TEXT(after); - if (LanguageMethods__parse_comment(S->sect_language, L->text_operand, - before, after)) { - Str__copy(L->text_operand, before); - } - DISCARD_TEXT(before); - DISCARD_TEXT(after); - Str__trim_white_space(L->text_operand); - if (Regexp__match(&mr, L->text_operand, L"(%C+) from (%c+)")) { - from = mr.exp[1]; - Str__copy(L->text_operand, mr.exp[0]); - } else if (Regexp__match(&mr, L->text_operand, L"(%C+) (%c+)")) { - Main__error_in_web(TL_IS_178, L); - } - L->text_operand2 = Str__new(); - if (inweb_mode == TANGLE_MODE) - Enumerations__define(L->text_operand2, L->text_operand, from, L); - Analyser__mark_reserved_word_at_line(L, L->text_operand, CONSTANT_COLOUR); - comment_mode = FALSE; - L->is_commentary = FALSE; - Regexp__dispose_of(&mr); - -} -#line 501 "inweb/Chapter 2/The Parser.w" - - else if ((Str__eq_wide_string(command_text, L"e")) && (S->md->using_syntax >= V2_SYNTAX)) - -{ -#line 621 "inweb/Chapter 2/The Parser.w" - L->category = BEGIN_DEFINITION_LCAT; - text_stream *from = NULL; - match_results mr = Regexp__create_mr(); - L->text_operand = Str__duplicate(remainder); /* name of term defined */ - TEMPORARY_TEXT(before); - TEMPORARY_TEXT(after); - if (LanguageMethods__parse_comment(S->sect_language, L->text_operand, - before, after)) { - Str__copy(L->text_operand, before); - } - DISCARD_TEXT(before); - DISCARD_TEXT(after); - Str__trim_white_space(L->text_operand); - if (Regexp__match(&mr, L->text_operand, L"(%C+) from (%c+)")) { - from = mr.exp[1]; - Str__copy(L->text_operand, mr.exp[0]); - } else if (Regexp__match(&mr, L->text_operand, L"(%C+) (%c+)")) { - Main__error_in_web(TL_IS_178, L); - } - L->text_operand2 = Str__new(); - if (inweb_mode == TANGLE_MODE) - Enumerations__define(L->text_operand2, L->text_operand, from, L); - Analyser__mark_reserved_word_at_line(L, L->text_operand, CONSTANT_COLOUR); - comment_mode = FALSE; - L->is_commentary = FALSE; - Regexp__dispose_of(&mr); - } #line 503 "inweb/Chapter 2/The Parser.w" +; + } else if (Str__eq_wide_string(command_text, L"default")) { + if (S->md->using_syntax < V2_SYNTAX) + Parser__wrong_version(S->md->using_syntax, L, "'@default' for definitions", V2_SYNTAX); + L->default_defn = TRUE; + +{ +#line 609 "inweb/Chapter 2/The Parser.w" + L->category = BEGIN_DEFINITION_LCAT; + code_lcat_for_body = CONT_DEFINITION_LCAT; + code_pl_for_body = NULL; + match_results mr = Regexp__create_mr(); + if (Regexp__match(&mr, remainder, L"(%C+) (%c+)")) { + L->text_operand = Str__duplicate(mr.exp[0]); /* name of term defined */ + L->text_operand2 = Str__duplicate(mr.exp[1]); /* Value */ + } else { + L->text_operand = Str__duplicate(remainder); /* name of term defined */ + L->text_operand2 = Str__new(); /* no value given */ + } + Analyser__mark_reserved_word_at_line(L, L->text_operand, CONSTANT_COLOUR); + comment_mode = FALSE; + L->is_commentary = FALSE; + Regexp__dispose_of(&mr); + +} +#line 508 "inweb/Chapter 2/The Parser.w" +; + } else if (Str__eq_wide_string(command_text, L"enum")) +{ +#line 629 "inweb/Chapter 2/The Parser.w" + L->category = BEGIN_DEFINITION_LCAT; + text_stream *from = NULL; + match_results mr = Regexp__create_mr(); + L->text_operand = Str__duplicate(remainder); /* name of term defined */ + TEMPORARY_TEXT(before); + TEMPORARY_TEXT(after); + if (LanguageMethods__parse_comment(S->sect_language, L->text_operand, + before, after)) { + Str__copy(L->text_operand, before); + } + DISCARD_TEXT(before); + DISCARD_TEXT(after); + Str__trim_white_space(L->text_operand); + if (Regexp__match(&mr, L->text_operand, L"(%C+) from (%c+)")) { + from = mr.exp[1]; + Str__copy(L->text_operand, mr.exp[0]); + } else if (Regexp__match(&mr, L->text_operand, L"(%C+) (%c+)")) { + Main__error_in_web(TL_IS_179, L); + } + L->text_operand2 = Str__new(); + if (inweb_mode == TANGLE_MODE) + Enumerations__define(L->text_operand2, L->text_operand, from, L); + Analyser__mark_reserved_word_at_line(L, L->text_operand, CONSTANT_COLOUR); + comment_mode = FALSE; + L->is_commentary = FALSE; + Regexp__dispose_of(&mr); + +} +#line 509 "inweb/Chapter 2/The Parser.w" + + else if ((Str__eq_wide_string(command_text, L"e")) && (S->md->using_syntax >= V2_SYNTAX)) + +{ +#line 629 "inweb/Chapter 2/The Parser.w" + L->category = BEGIN_DEFINITION_LCAT; + text_stream *from = NULL; + match_results mr = Regexp__create_mr(); + L->text_operand = Str__duplicate(remainder); /* name of term defined */ + TEMPORARY_TEXT(before); + TEMPORARY_TEXT(after); + if (LanguageMethods__parse_comment(S->sect_language, L->text_operand, + before, after)) { + Str__copy(L->text_operand, before); + } + DISCARD_TEXT(before); + DISCARD_TEXT(after); + Str__trim_white_space(L->text_operand); + if (Regexp__match(&mr, L->text_operand, L"(%C+) from (%c+)")) { + from = mr.exp[1]; + Str__copy(L->text_operand, mr.exp[0]); + } else if (Regexp__match(&mr, L->text_operand, L"(%C+) (%c+)")) { + Main__error_in_web(TL_IS_179, L); + } + L->text_operand2 = Str__new(); + if (inweb_mode == TANGLE_MODE) + Enumerations__define(L->text_operand2, L->text_operand, from, L); + Analyser__mark_reserved_word_at_line(L, L->text_operand, CONSTANT_COLOUR); + comment_mode = FALSE; + L->is_commentary = FALSE; + Regexp__dispose_of(&mr); + +} +#line 511 "inweb/Chapter 2/The Parser.w" else { int weight = -1, new_page = FALSE; @@ -16812,7 +16834,7 @@ void Parser__parse_web(web *W, int inweb_mode) { } if (weight >= 0) { -#line 673 "inweb/Chapter 2/The Parser.w" +#line 681 "inweb/Chapter 2/The Parser.w" comment_mode = TRUE; L->is_commentary = TRUE; L->category = PARAGRAPH_START_LCAT; @@ -16831,7 +16853,7 @@ void Parser__parse_web(web *W, int inweb_mode) { } { -#line 722 "inweb/Chapter 2/The Parser.w" +#line 730 "inweb/Chapter 2/The Parser.w" paragraph *P = CREATE(paragraph); if (S->md->using_syntax > V1_SYNTAX) { P->above_bar = FALSE; @@ -16844,9 +16866,9 @@ void Parser__parse_web(web *W, int inweb_mode) { } P->heading_text = Str__duplicate(L->text_operand); if ((S->md->using_syntax == V1_SYNTAX) && (before_bar)) - P->ornament = Str__duplicate(TL_IS_179); - else P->ornament = Str__duplicate(TL_IS_180); + else + P->ornament = Str__duplicate(TL_IS_181); WRITE_TO(P->paragraph_number, "%d", next_par_number++); P->parent_paragraph = NULL; P->next_child_number = 1; @@ -16866,7 +16888,7 @@ void Parser__parse_web(web *W, int inweb_mode) { current_paragraph = P; } -#line 689 "inweb/Chapter 2/The Parser.w" +#line 697 "inweb/Chapter 2/The Parser.w" ; L->owning_paragraph = current_paragraph; @@ -16874,9 +16896,9 @@ void Parser__parse_web(web *W, int inweb_mode) { Regexp__dispose_of(&mr); } -#line 522 "inweb/Chapter 2/The Parser.w" +#line 530 "inweb/Chapter 2/The Parser.w" - else Main__error_in_web(TL_IS_173, L); + else Main__error_in_web(TL_IS_174, L); } } @@ -16892,7 +16914,7 @@ void Parser__parse_web(web *W, int inweb_mode) { ; if (comment_mode) { -#line 758 "inweb/Chapter 2/The Parser.w" +#line 766 "inweb/Chapter 2/The Parser.w" match_results mr = Regexp__create_mr(); if (Regexp__match(&mr, L->text, L">> (%c+)")) { L->category = SOURCE_DISPLAY_LCAT; @@ -16905,7 +16927,7 @@ void Parser__parse_web(web *W, int inweb_mode) { ; if (comment_mode == FALSE) { -#line 770 "inweb/Chapter 2/The Parser.w" +#line 778 "inweb/Chapter 2/The Parser.w" if ((L->category != BEGIN_DEFINITION_LCAT) && (L->category != COMMAND_LCAT)) { L->category = code_lcat_for_body; L->plainer = code_plainness_for_body; @@ -16965,7 +16987,7 @@ void Parser__parse_web(web *W, int inweb_mode) { LOOP_OVER_LINKED_LIST(P, paragraph, S->paragraphs) { -#line 818 "inweb/Chapter 2/The Parser.w" +#line 826 "inweb/Chapter 2/The Parser.w" int next_footnote_in_para = 1; footnote *current_text = NULL; TEMPORARY_TEXT(before); @@ -16983,7 +17005,7 @@ void Parser__parse_web(web *W, int inweb_mode) { if (this_is_a_cue == FALSE) { -#line 842 "inweb/Chapter 2/The Parser.w" +#line 850 "inweb/Chapter 2/The Parser.w" L->category = FOOTNOTE_TEXT_LCAT; footnote *F = CREATE(footnote); F->footnote_cue_number = Str__atoi(cue, 0); @@ -17003,7 +17025,7 @@ void Parser__parse_web(web *W, int inweb_mode) { current_text = F; } -#line 833 "inweb/Chapter 2/The Parser.w" +#line 841 "inweb/Chapter 2/The Parser.w" ; } L->footnote_text = current_text; @@ -17028,9 +17050,9 @@ void Parser__parse_web(web *W, int inweb_mode) { LanguageMethods__further_parsing(W, W->main_language); } -#line 720 "inweb/Chapter 2/The Parser.w" +#line 728 "inweb/Chapter 2/The Parser.w" -#line 791 "inweb/Chapter 2/The Parser.w" +#line 799 "inweb/Chapter 2/The Parser.w" text_stream *Parser__extract_purpose(text_stream *prologue, source_line *XL, section *S, source_line **adjust) { text_stream *P = Str__duplicate(prologue); while ((XL) && (XL->next_line) && (XL->owning_section == S) && @@ -17046,16 +17068,16 @@ text_stream *Parser__extract_purpose(text_stream *prologue, source_line *XL, sec return P; } -#line 816 "inweb/Chapter 2/The Parser.w" +#line 824 "inweb/Chapter 2/The Parser.w" -#line 863 "inweb/Chapter 2/The Parser.w" +#line 871 "inweb/Chapter 2/The Parser.w" int Parser__detect_footnote(web *W, text_stream *matter, text_stream *before, text_stream *cue, text_stream *after) { text_stream *fn_on_notation = - Bibliographic__get_datum(W->md, TL_IS_181); - text_stream *fn_off_notation = Bibliographic__get_datum(W->md, TL_IS_182); - if (Str__ne(fn_on_notation, TL_IS_183)) { + text_stream *fn_off_notation = + Bibliographic__get_datum(W->md, TL_IS_183); + if (Str__ne(fn_on_notation, TL_IS_184)) { int N1 = Str__len(fn_on_notation); int N2 = Str__len(fn_off_notation); if ((N1 > 0) && (N2 > 0)) @@ -17102,7 +17124,7 @@ footnote *Parser__find_footnote_in_para(paragraph *P, text_stream *cue) { return NULL; } -#line 922 "inweb/Chapter 2/The Parser.w" +#line 930 "inweb/Chapter 2/The Parser.w" void Parser__wrong_version(int using, source_line *L, char *feature, int need) { TEMPORARY_TEXT(warning); WRITE_TO(warning, "%s is a feature available only in version %d syntax (you're using version %d)", @@ -17147,10 +17169,10 @@ theme_tag *Tags__find_by_name(text_stream *name, int creating_if_necessary) { tag->tag_name = Str__duplicate(name); tag->ifdef_positive = NOT_APPLICABLE; tag->ifdef_symbol = Str__new(); - if (Str__prefix_eq(name, TL_IS_184, 6)) { + if (Str__prefix_eq(name, TL_IS_185, 6)) { Str__substr(tag->ifdef_symbol, Str__at(name, 6), Str__end(name)); tag->ifdef_positive = TRUE; - } else if (Str__prefix_eq(name, TL_IS_185, 7)) { + } else if (Str__prefix_eq(name, TL_IS_186, 7)) { Str__substr(tag->ifdef_symbol, Str__at(name, 7), Str__end(name)); tag->ifdef_positive = FALSE; } @@ -17245,20 +17267,20 @@ void Tags__show_endnote_on_ifdefs(heterogeneous_tree *tree, tree_node *ap, parag if (d++ == 0) { tree_node *E = WeaveTree__endnote(tree); Trees__make_child(E, ap); ap = E; - TextWeaver__commentary_text(tree, ap, TL_IS_187); - } else { TextWeaver__commentary_text(tree, ap, TL_IS_188); + } else { + TextWeaver__commentary_text(tree, ap, TL_IS_189); } } else { - TextWeaver__commentary_text(tree, ap, TL_IS_189); + TextWeaver__commentary_text(tree, ap, TL_IS_190); } TextWeaver__commentary_text(tree, ap, pt->the_tag->ifdef_symbol); } if (c > 0) { - if (c == 1) TextWeaver__commentary_text(tree, ap, TL_IS_190); - else TextWeaver__commentary_text(tree, ap, TL_IS_191); - if (sense) TextWeaver__commentary_text(tree, ap, TL_IS_192); - else TextWeaver__commentary_text(tree, ap, TL_IS_193); + if (c == 1) TextWeaver__commentary_text(tree, ap, TL_IS_191); + else TextWeaver__commentary_text(tree, ap, TL_IS_192); + if (sense) TextWeaver__commentary_text(tree, ap, TL_IS_193); + else TextWeaver__commentary_text(tree, ap, TL_IS_194); } } @@ -17277,26 +17299,26 @@ void Tags__show_endnote_on_ifdefs(heterogeneous_tree *tree, tree_node *ap, parag if (d++ == 0) { tree_node *E = WeaveTree__endnote(tree); Trees__make_child(E, ap); ap = E; - TextWeaver__commentary_text(tree, ap, TL_IS_187); - } else { TextWeaver__commentary_text(tree, ap, TL_IS_188); + } else { + TextWeaver__commentary_text(tree, ap, TL_IS_189); } } else { - TextWeaver__commentary_text(tree, ap, TL_IS_189); + TextWeaver__commentary_text(tree, ap, TL_IS_190); } TextWeaver__commentary_text(tree, ap, pt->the_tag->ifdef_symbol); } if (c > 0) { - if (c == 1) TextWeaver__commentary_text(tree, ap, TL_IS_190); - else TextWeaver__commentary_text(tree, ap, TL_IS_191); - if (sense) TextWeaver__commentary_text(tree, ap, TL_IS_192); - else TextWeaver__commentary_text(tree, ap, TL_IS_193); + if (c == 1) TextWeaver__commentary_text(tree, ap, TL_IS_191); + else TextWeaver__commentary_text(tree, ap, TL_IS_192); + if (sense) TextWeaver__commentary_text(tree, ap, TL_IS_193); + else TextWeaver__commentary_text(tree, ap, TL_IS_194); } } #line 139 "inweb/Chapter 2/Tags.w" ; - if (d > 0) TextWeaver__commentary_text(tree, ap, TL_IS_186); + if (d > 0) TextWeaver__commentary_text(tree, ap, TL_IS_187); } #line 22 "inweb/Chapter 2/Enumerated Constants.w" @@ -17320,7 +17342,7 @@ void Enumerations__define(OUTPUT_STREAM, text_stream *symbol, match_results mr = Regexp__create_mr(); if (Regexp__match(&mr, symbol, L"%c*_(%C+?)")) Str__copy(pf, mr.exp[0]); else { - Main__error_in_web(TL_IS_194, L); + Main__error_in_web(TL_IS_195, L); WRITE_TO(pf, "BOGUS"); } Regexp__dispose_of(&mr); @@ -17336,7 +17358,7 @@ void Enumerations__define(OUTPUT_STREAM, text_stream *symbol, if (es->stub) WRITE("(%S+", es->stub); WRITE("%d", es->next_free_value++); if (es->stub) WRITE(")"); - } else Main__error_in_web(TL_IS_195, L); + } else Main__error_in_web(TL_IS_196, L); } #line 45 "inweb/Chapter 2/Enumerated Constants.w" @@ -17344,7 +17366,7 @@ void Enumerations__define(OUTPUT_STREAM, text_stream *symbol, else { #line 70 "inweb/Chapter 2/Enumerated Constants.w" - if (es) Main__error_in_web(TL_IS_196, L); + if (es) Main__error_in_web(TL_IS_197, L); else { es = CREATE(enumeration_set); es->postfix = Str__duplicate(pf); @@ -17634,7 +17656,7 @@ void Analyser__analyse_code(web *W) { if ((L->category == INTERFACE_BODY_LCAT) && (L->interface_line_identified == FALSE) && (Regexp__string_is_white_space(L->text) == FALSE)) - Main__error_in_web(TL_IS_197, L); + Main__error_in_web(TL_IS_198, L); } #line 109 "inweb/Chapter 3/The Analyser.w" @@ -17838,23 +17860,23 @@ void Analyser__analyse_find(web *W, source_line *L, text_stream *identifier, int #line 385 "inweb/Chapter 3/The Analyser.w" void Analyser__write_makefile(web *W, filename *F, module_search *I) { - filename *prototype = Filenames__in(W->md->path_to_web, TL_IS_198); + filename *prototype = Filenames__in(W->md->path_to_web, TL_IS_199); if (!(TextFiles__exists(prototype))) - prototype = Filenames__in(path_to_inweb_materials, TL_IS_199); + prototype = Filenames__in(path_to_inweb_materials, TL_IS_200); Makefiles__write(W, prototype, F, I); } void Analyser__write_gitignore(web *W, filename *F) { - filename *prototype = Filenames__in(W->md->path_to_web, TL_IS_200); + filename *prototype = Filenames__in(W->md->path_to_web, TL_IS_201); if (!(TextFiles__exists(prototype))) - prototype = Filenames__in(path_to_inweb_materials, TL_IS_201); + prototype = Filenames__in(path_to_inweb_materials, TL_IS_202); Git__write_gitignore(W, prototype, F); } #line 19 "inweb/Chapter 3/The Collater.w" void Collater__for_web_and_pattern(text_stream *OUT, web *W, weave_pattern *pattern, filename *F, filename *into) { - Collater__collate(OUT, W, TL_IS_202, F, pattern, NULL, NULL, NULL, into); + Collater__collate(OUT, W, TL_IS_203, F, pattern, NULL, NULL, NULL, into); } void Collater__for_order(text_stream *OUT, weave_order *wv, @@ -18348,7 +18370,7 @@ void Collater__process(text_stream *OUT, collater_state *cls) { #line 563 "inweb/Chapter 3/The Collater.w" ; WRITE_TO(substituted, ""); - } else if (Str__eq(url, TL_IS_203)) { + } else if (Str__eq(url, TL_IS_204)) { WRITE_TO(substituted, "", url); WRITE_TO(substituted, ""); @@ -18449,7 +18471,7 @@ void Collater__process(text_stream *OUT, collater_state *cls) { #line 563 "inweb/Chapter 3/The Collater.w" ; WRITE_TO(substituted, ""); - } else if (Str__eq(url, TL_IS_203)) { + } else if (Str__eq(url, TL_IS_204)) { WRITE_TO(substituted, "", url); WRITE_TO(substituted, ""); @@ -18564,7 +18586,7 @@ void Collater__list_module(OUTPUT_STREAM, module *M, int list_this) { WRITE("
  • %S - ", M->module_name); TEMPORARY_TEXT(url); WRITE_TO(url, "%p", M->module_location); - Readme__write_var(OUT, url, TL_IS_204); + Readme__write_var(OUT, url, TL_IS_205); DISCARD_TEXT(url); WRITE("

  • "); } @@ -18581,7 +18603,7 @@ int Weaver__weave(weave_order *wv) { tree_node *H = WeaveTree__head(tree, banner); DISCARD_TEXT(banner); tree_node *B = WeaveTree__body(tree); - tree_node *T = WeaveTree__tail(tree, TL_IS_205); + tree_node *T = WeaveTree__tail(tree, TL_IS_206); Trees__make_child(H, tree->root); Trees__make_child(B, tree->root); Trees__make_child(T, tree->root); @@ -18695,7 +18717,7 @@ int Weaver__weave_inner(weave_order *wv, heterogeneous_tree *tree, tree_node *bo continue; } if (LLL->category == DEFINITIONS_LCAT) { - Weaver__weave_subheading(tree, wv, state->ap, TL_IS_206); + Weaver__weave_subheading(tree, wv, state->ap, TL_IS_207); state->next_heading_without_vertical_skip = TRUE; state->horizontal_rule_just_drawn = FALSE; continue; @@ -18735,7 +18757,7 @@ int Weaver__weave_inner(weave_order *wv, heterogeneous_tree *tree, tree_node *bo source_line *L = LLL; if ((L->category != HEADING_START_LCAT) && (L->category != PARAGRAPH_START_LCAT)) - Main__error_in_web(TL_IS_207, L); /* should never happen */ + Main__error_in_web(TL_IS_208, L); /* should never happen */ { @@ -18797,38 +18819,37 @@ int Weaver__weave_inner(weave_order *wv, heterogeneous_tree *tree, tree_node *bo Trees__make_child(WeaveTree__grammar_index(tree), state->ap); if (L->command_code == FIGURE_CMD) { -#line 293 "inweb/Chapter 3/The Weaver.w" +#line 294 "inweb/Chapter 3/The Weaver.w" int w, h; text_stream *figname = Weaver__dimensions(L->text_operand, &w, &h, L); Trees__make_child(WeaveTree__figure(tree, figname, w, h), state->ap); } #line 281 "inweb/Chapter 3/The Weaver.w" +; + if (L->command_code == AUDIO_CMD) +{ +#line 299 "inweb/Chapter 3/The Weaver.w" + int w, h; + text_stream *figname = Weaver__dimensions(L->text_operand, &w, &h, L); + Trees__make_child(WeaveTree__audio(tree, figname, w), state->ap); + +} +#line 282 "inweb/Chapter 3/The Weaver.w" ; if (L->command_code == EMBED_CMD) { -#line 298 "inweb/Chapter 3/The Weaver.w" +#line 304 "inweb/Chapter 3/The Weaver.w" int w, h; text_stream *ID = Weaver__dimensions(L->text_operand2, &w, &h, L); Trees__make_child(WeaveTree__embed(tree, L->text_operand, ID, w, h), state->ap); } -#line 282 "inweb/Chapter 3/The Weaver.w" +#line 283 "inweb/Chapter 3/The Weaver.w" ; if (L->command_code == CAROUSEL_CMD) { -#line 303 "inweb/Chapter 3/The Weaver.w" - tree_node *C = WeaveTree__carousel_slide(tree, L->text_operand, L->command_code); - Trees__make_child(C, state->para_node); - state->ap = C; - state->carousel_node = C; - -} -#line 283 "inweb/Chapter 3/The Weaver.w" -; - if (L->command_code == CAROUSEL_ABOVE_CMD) -{ -#line 303 "inweb/Chapter 3/The Weaver.w" +#line 309 "inweb/Chapter 3/The Weaver.w" tree_node *C = WeaveTree__carousel_slide(tree, L->text_operand, L->command_code); Trees__make_child(C, state->para_node); state->ap = C; @@ -18837,9 +18858,9 @@ int Weaver__weave_inner(weave_order *wv, heterogeneous_tree *tree, tree_node *bo } #line 284 "inweb/Chapter 3/The Weaver.w" ; - if (L->command_code == CAROUSEL_BELOW_CMD) + if (L->command_code == CAROUSEL_ABOVE_CMD) { -#line 303 "inweb/Chapter 3/The Weaver.w" +#line 309 "inweb/Chapter 3/The Weaver.w" tree_node *C = WeaveTree__carousel_slide(tree, L->text_operand, L->command_code); Trees__make_child(C, state->para_node); state->ap = C; @@ -18848,9 +18869,9 @@ int Weaver__weave_inner(weave_order *wv, heterogeneous_tree *tree, tree_node *bo } #line 285 "inweb/Chapter 3/The Weaver.w" ; - if (L->command_code == CAROUSEL_UNCAPTIONED_CMD) + if (L->command_code == CAROUSEL_BELOW_CMD) { -#line 303 "inweb/Chapter 3/The Weaver.w" +#line 309 "inweb/Chapter 3/The Weaver.w" tree_node *C = WeaveTree__carousel_slide(tree, L->text_operand, L->command_code); Trees__make_child(C, state->para_node); state->ap = C; @@ -18859,14 +18880,25 @@ int Weaver__weave_inner(weave_order *wv, heterogeneous_tree *tree, tree_node *bo } #line 286 "inweb/Chapter 3/The Weaver.w" ; - if (L->command_code == CAROUSEL_END_CMD) + if (L->command_code == CAROUSEL_UNCAPTIONED_CMD) { #line 309 "inweb/Chapter 3/The Weaver.w" + tree_node *C = WeaveTree__carousel_slide(tree, L->text_operand, L->command_code); + Trees__make_child(C, state->para_node); + state->ap = C; + state->carousel_node = C; + +} +#line 287 "inweb/Chapter 3/The Weaver.w" +; + if (L->command_code == CAROUSEL_END_CMD) +{ +#line 315 "inweb/Chapter 3/The Weaver.w" state->ap = state->para_node; state->carousel_node = NULL; } -#line 287 "inweb/Chapter 3/The Weaver.w" +#line 288 "inweb/Chapter 3/The Weaver.w" ; /* Otherwise assume it was a tangler command, and ignore it here */ continue; @@ -18892,21 +18924,21 @@ int Weaver__weave_inner(weave_order *wv, heterogeneous_tree *tree, tree_node *bo TEMPORARY_TEXT(matter); Str__copy(matter, L->text); if (L->is_commentary) { -#line 317 "inweb/Chapter 3/The Weaver.w" +#line 323 "inweb/Chapter 3/The Weaver.w" { -#line 329 "inweb/Chapter 3/The Weaver.w" +#line 335 "inweb/Chapter 3/The Weaver.w" if (L->category == SOURCE_DISPLAY_LCAT) { Trees__make_child(WeaveTree__display_line(tree, L->text_operand), state->ap); continue; } } -#line 317 "inweb/Chapter 3/The Weaver.w" +#line 323 "inweb/Chapter 3/The Weaver.w" ; { -#line 338 "inweb/Chapter 3/The Weaver.w" +#line 344 "inweb/Chapter 3/The Weaver.w" if (Regexp__string_is_white_space(matter)) { if ((L->next_line) && (L->next_line->category == COMMENT_BODY_LCAT)) { match_results mr = Regexp__create_mr(); @@ -18919,19 +18951,19 @@ int Weaver__weave_inner(weave_order *wv, heterogeneous_tree *tree, tree_node *bo } } -#line 318 "inweb/Chapter 3/The Weaver.w" +#line 324 "inweb/Chapter 3/The Weaver.w" ; { -#line 353 "inweb/Chapter 3/The Weaver.w" +#line 359 "inweb/Chapter 3/The Weaver.w" match_results mr = Regexp__create_mr(); if (Regexp__match(&mr, matter, L"%(...%) (%c*)")) { /* continue single */ Weaver__change_material(tree, state, COMMENTARY_MATERIAL, FALSE, NULL); - Trees__make_child(WeaveTree__weave_item_node(tree, 1, TL_IS_208), state->ap); + Trees__make_child(WeaveTree__weave_item_node(tree, 1, TL_IS_209), state->ap); Str__copy(matter, mr.exp[0]); } else if (Regexp__match(&mr, matter, L"%(-...%) (%c*)")) { /* continue double */ Weaver__change_material(tree, state, COMMENTARY_MATERIAL, FALSE, NULL); - Trees__make_child(WeaveTree__weave_item_node(tree, 2, TL_IS_209), state->ap); + Trees__make_child(WeaveTree__weave_item_node(tree, 2, TL_IS_210), state->ap); Str__copy(matter, mr.exp[0]); } else if (Regexp__match(&mr, matter, L"%((%i+)%) (%c*)")) { /* begin single */ Weaver__change_material(tree, state, COMMENTARY_MATERIAL, FALSE, NULL); @@ -18945,11 +18977,11 @@ int Weaver__weave_inner(weave_order *wv, heterogeneous_tree *tree, tree_node *bo Regexp__dispose_of(&mr); } -#line 319 "inweb/Chapter 3/The Weaver.w" +#line 325 "inweb/Chapter 3/The Weaver.w" ; { -#line 377 "inweb/Chapter 3/The Weaver.w" +#line 383 "inweb/Chapter 3/The Weaver.w" match_results mr = Regexp__create_mr(); if (Regexp__match(&mr, matter, L"\t|(%c*)|(%c*?)")) { TEMPORARY_TEXT(original); @@ -18970,22 +19002,22 @@ int Weaver__weave_inner(weave_order *wv, heterogeneous_tree *tree, tree_node *bo Regexp__dispose_of(&mr); } -#line 320 "inweb/Chapter 3/The Weaver.w" +#line 326 "inweb/Chapter 3/The Weaver.w" ; { -#line 397 "inweb/Chapter 3/The Weaver.w" +#line 403 "inweb/Chapter 3/The Weaver.w" if (L->category == FOOTNOTE_TEXT_LCAT) { Weaver__change_material(tree, state, FOOTNOTES_MATERIAL, FALSE, NULL); footnote *F = L->footnote_text; tree_node *FN = WeaveTree__footnote(tree, F->cue_text); Trees__make_child(FN, state->material_node); - if (F->cued_already == FALSE) Main__error_in_web(TL_IS_210, L); + if (F->cued_already == FALSE) Main__error_in_web(TL_IS_211, L); state->ap = FN; } } -#line 321 "inweb/Chapter 3/The Weaver.w" +#line 327 "inweb/Chapter 3/The Weaver.w" ; WRITE_TO(matter, "\n"); Weaver__commentary_text(tree, wv, state->ap, matter); @@ -18996,10 +19028,10 @@ int Weaver__weave_inner(weave_order *wv, heterogeneous_tree *tree, tree_node *bo else { -#line 412 "inweb/Chapter 3/The Weaver.w" +#line 418 "inweb/Chapter 3/The Weaver.w" { -#line 448 "inweb/Chapter 3/The Weaver.w" +#line 454 "inweb/Chapter 3/The Weaver.w" if (state->kind_of_material != CODE_MATERIAL) { int will_be = CODE_MATERIAL; if (L->category == MACRO_DEFINITION_LCAT) @@ -19019,11 +19051,11 @@ int Weaver__weave_inner(weave_order *wv, heterogeneous_tree *tree, tree_node *bo } } -#line 412 "inweb/Chapter 3/The Weaver.w" +#line 418 "inweb/Chapter 3/The Weaver.w" ; { -#line 470 "inweb/Chapter 3/The Weaver.w" +#line 476 "inweb/Chapter 3/The Weaver.w" if (state->line_break_pending) { Trees__make_child(WeaveTree__vskip(tree, FALSE), state->ap); state->line_break_pending = FALSE; @@ -19034,7 +19066,7 @@ int Weaver__weave_inner(weave_order *wv, heterogeneous_tree *tree, tree_node *bo } } -#line 413 "inweb/Chapter 3/The Weaver.w" +#line 419 "inweb/Chapter 3/The Weaver.w" ; Str__rectify_indentation(matter, 4); @@ -19043,7 +19075,7 @@ int Weaver__weave_inner(weave_order *wv, heterogeneous_tree *tree, tree_node *bo TEMPORARY_TEXT(concluding_comment); { -#line 484 "inweb/Chapter 3/The Weaver.w" +#line 490 "inweb/Chapter 3/The Weaver.w" TEMPORARY_TEXT(part_before_comment); TEMPORARY_TEXT(part_within_comment); programming_language *pl = S->sect_language; @@ -19057,27 +19089,27 @@ int Weaver__weave_inner(weave_order *wv, heterogeneous_tree *tree, tree_node *bo DISCARD_TEXT(part_within_comment); } -#line 419 "inweb/Chapter 3/The Weaver.w" +#line 425 "inweb/Chapter 3/The Weaver.w" ; { -#line 499 "inweb/Chapter 3/The Weaver.w" +#line 505 "inweb/Chapter 3/The Weaver.w" if (L->category == BEGIN_DEFINITION_LCAT) { match_results mr = Regexp__create_mr(); if ((Regexp__match(&mr, matter, L"@d (%c*)")) || (Regexp__match(&mr, matter, L"@define (%c*)"))) { - Str__copy(prefatory, TL_IS_211); + Str__copy(prefatory, TL_IS_212); Str__copy(matter, mr.exp[0]); } else if ((Regexp__match(&mr, matter, L"@e (%c*)")) || (Regexp__match(&mr, matter, L"@enum (%c*)"))) { - Str__copy(prefatory, TL_IS_212); + Str__copy(prefatory, TL_IS_213); Str__copy(matter, mr.exp[0]); } Regexp__dispose_of(&mr); } } -#line 420 "inweb/Chapter 3/The Weaver.w" +#line 426 "inweb/Chapter 3/The Weaver.w" ; tree_node *CL = WeaveTree__code_line(tree); @@ -19088,7 +19120,7 @@ int Weaver__weave_inner(weave_order *wv, heterogeneous_tree *tree, tree_node *bo { -#line 514 "inweb/Chapter 3/The Weaver.w" +#line 520 "inweb/Chapter 3/The Weaver.w" TEMPORARY_TEXT(OUT); int taken = LanguageMethods__weave_code_line(OUT, S->sect_language, wv, W, C, S, L, matter, concluding_comment); @@ -19100,7 +19132,7 @@ int Weaver__weave_inner(weave_order *wv, heterogeneous_tree *tree, tree_node *bo if (taken) goto ClumsyLabel; } -#line 428 "inweb/Chapter 3/The Weaver.w" +#line 434 "inweb/Chapter 3/The Weaver.w" ; TEMPORARY_TEXT(colouring); @@ -19108,7 +19140,7 @@ int Weaver__weave_inner(weave_order *wv, heterogeneous_tree *tree, tree_node *bo { -#line 525 "inweb/Chapter 3/The Weaver.w" +#line 531 "inweb/Chapter 3/The Weaver.w" match_results mr = Regexp__create_mr(); while (Regexp__match(&mr, matter, L"(%c*?)%@%<(%c*?)%@%>(%c*)")) { para_macro *pmac = Macros__find_by_name(mr.exp[1], S); @@ -19140,7 +19172,7 @@ int Weaver__weave_inner(weave_order *wv, heterogeneous_tree *tree, tree_node *bo } -#line 433 "inweb/Chapter 3/The Weaver.w" +#line 439 "inweb/Chapter 3/The Weaver.w" ; TextWeaver__source_code(tree, CL, matter, colouring, L->enable_hyperlinks); if (Str__len(concluding_comment) > 0) @@ -19208,7 +19240,7 @@ int Weaver__weave_inner(weave_order *wv, heterogeneous_tree *tree, tree_node *bo #line 127 "inweb/Chapter 3/The Weaver.w" -#line 560 "inweb/Chapter 3/The Weaver.w" +#line 566 "inweb/Chapter 3/The Weaver.w" void Weaver__show_endnotes_on_previous_paragraph(heterogeneous_tree *tree, weave_order *wv, tree_node *ap, paragraph *P) { tree_node *body = ap; @@ -19216,33 +19248,33 @@ void Weaver__show_endnotes_on_previous_paragraph(heterogeneous_tree *tree, if (P->defines_macro) { -#line 575 "inweb/Chapter 3/The Weaver.w" +#line 581 "inweb/Chapter 3/The Weaver.w" tree_node *E = WeaveTree__endnote(tree); Trees__make_child(E, body); ap = E; - TextWeaver__commentary_text(tree, ap, TL_IS_213); + TextWeaver__commentary_text(tree, ap, TL_IS_214); int ct = 0; macro_usage *mu; LOOP_OVER_LINKED_LIST(mu, macro_usage, P->defines_macro->macro_usages) ct++; - if (ct == 1) TextWeaver__commentary_text(tree, ap, TL_IS_214); + if (ct == 1) TextWeaver__commentary_text(tree, ap, TL_IS_215); else { int k = 0, used_flag = FALSE; LOOP_OVER_LINKED_LIST(mu, macro_usage, P->defines_macro->macro_usages) if (P != mu->used_in_paragraph) { if (used_flag) { - if (k < ct-1) TextWeaver__commentary_text(tree, ap, TL_IS_215); - else TextWeaver__commentary_text(tree, ap, TL_IS_216); + if (k < ct-1) TextWeaver__commentary_text(tree, ap, TL_IS_216); + else TextWeaver__commentary_text(tree, ap, TL_IS_217); } else { - TextWeaver__commentary_text(tree, ap, TL_IS_217); + TextWeaver__commentary_text(tree, ap, TL_IS_218); } Trees__make_child(WeaveTree__locale(tree, mu->used_in_paragraph, NULL), ap); used_flag = TRUE; k++; switch (mu->multiplicity) { case 1: break; - case 2: TextWeaver__commentary_text(tree, ap, TL_IS_218); break; - case 3: TextWeaver__commentary_text(tree, ap, TL_IS_219); break; - case 4: TextWeaver__commentary_text(tree, ap, TL_IS_220); break; - case 5: TextWeaver__commentary_text(tree, ap, TL_IS_221); break; + case 2: TextWeaver__commentary_text(tree, ap, TL_IS_219); break; + case 3: TextWeaver__commentary_text(tree, ap, TL_IS_220); break; + case 4: TextWeaver__commentary_text(tree, ap, TL_IS_221); break; + case 5: TextWeaver__commentary_text(tree, ap, TL_IS_222); break; default: { TEMPORARY_TEXT(mt); WRITE_TO(mt, " (%d times)", mu->multiplicity); @@ -19253,30 +19285,30 @@ void Weaver__show_endnotes_on_previous_paragraph(heterogeneous_tree *tree, } } } - TextWeaver__commentary_text(tree, ap, TL_IS_222); + TextWeaver__commentary_text(tree, ap, TL_IS_223); } -#line 565 "inweb/Chapter 3/The Weaver.w" +#line 571 "inweb/Chapter 3/The Weaver.w" ; language_function *fn; LOOP_OVER_LINKED_LIST(fn, language_function, P->functions) { -#line 614 "inweb/Chapter 3/The Weaver.w" +#line 620 "inweb/Chapter 3/The Weaver.w" if (fn->usage_described == FALSE) Weaver__show_function_usage(tree, wv, ap, P, fn, FALSE); } -#line 568 "inweb/Chapter 3/The Weaver.w" +#line 574 "inweb/Chapter 3/The Weaver.w" ; language_type *st; LOOP_OVER_LINKED_LIST(st, language_type, P->structures) { -#line 618 "inweb/Chapter 3/The Weaver.w" +#line 624 "inweb/Chapter 3/The Weaver.w" tree_node *E = WeaveTree__endnote(tree); Trees__make_child(E, body); ap = E; - TextWeaver__commentary_text(tree, ap, TL_IS_223); + TextWeaver__commentary_text(tree, ap, TL_IS_224); TextWeaver__commentary_text(tree, ap, st->structure_name); section *S; @@ -19300,25 +19332,25 @@ void Weaver__show_endnotes_on_previous_paragraph(heterogeneous_tree *tree, usage_count++; if (S != P->under_section) external++; } - if (external == 0) TextWeaver__commentary_text(tree, ap, TL_IS_224); + if (external == 0) TextWeaver__commentary_text(tree, ap, TL_IS_225); else { - TextWeaver__commentary_text(tree, ap, TL_IS_225); + TextWeaver__commentary_text(tree, ap, TL_IS_226); int c = 0; LOOP_OVER(S, section) if ((S->scratch_flag) && (S != P->under_section)) { - if (c++ > 0) TextWeaver__commentary_text(tree, ap, TL_IS_226); + if (c++ > 0) TextWeaver__commentary_text(tree, ap, TL_IS_227); TextWeaver__commentary_text(tree, ap, S->md->sect_range); } - if (P->under_section->scratch_flag) TextWeaver__commentary_text(tree, ap, TL_IS_227); + if (P->under_section->scratch_flag) TextWeaver__commentary_text(tree, ap, TL_IS_228); } - TextWeaver__commentary_text(tree, ap, TL_IS_228); + TextWeaver__commentary_text(tree, ap, TL_IS_229); } -#line 571 "inweb/Chapter 3/The Weaver.w" +#line 577 "inweb/Chapter 3/The Weaver.w" ; } -#line 658 "inweb/Chapter 3/The Weaver.w" +#line 664 "inweb/Chapter 3/The Weaver.w" void Weaver__show_function_usage(heterogeneous_tree *tree, weave_order *wv, tree_node *ap, paragraph *P, language_function *fn, int as_list) { tree_node *body = ap; @@ -19329,7 +19361,7 @@ void Weaver__show_function_usage(heterogeneous_tree *tree, weave_order *wv, if (as_list == FALSE) { tree_node *E = WeaveTree__endnote(tree); Trees__make_child(E, body); ap = E; - TextWeaver__commentary_text(tree, ap, TL_IS_229); + TextWeaver__commentary_text(tree, ap, TL_IS_230); TextWeaver__commentary_text(tree, ap, fn->function_name); } int used_flag = FALSE; @@ -19341,9 +19373,9 @@ void Weaver__show_function_usage(heterogeneous_tree *tree, weave_order *wv, (P->under_section == hteu->usage_recorded_at->under_section)) { -#line 697 "inweb/Chapter 3/The Weaver.w" +#line 703 "inweb/Chapter 3/The Weaver.w" if (as_list == FALSE) { - if (used_flag == FALSE) TextWeaver__commentary_text(tree, ap, TL_IS_234); + if (used_flag == FALSE) TextWeaver__commentary_text(tree, ap, TL_IS_235); } used_flag = TRUE; section *S = hteu->usage_recorded_at->under_section; @@ -19351,31 +19383,31 @@ void Weaver__show_function_usage(heterogeneous_tree *tree, weave_order *wv, count_under = 0; if (last_cited_in) { if (as_list == FALSE) { - if (last_cited_in != P->under_section) TextWeaver__commentary_text(tree, ap, TL_IS_235); - else TextWeaver__commentary_text(tree, ap, TL_IS_236); + if (last_cited_in != P->under_section) TextWeaver__commentary_text(tree, ap, TL_IS_236); + else TextWeaver__commentary_text(tree, ap, TL_IS_237); } else { - if (last_cited_in != P->under_section) TextWeaver__commentary_text(tree, ap, TL_IS_237); - else TextWeaver__commentary_text(tree, ap, TL_IS_238); + if (last_cited_in != P->under_section) TextWeaver__commentary_text(tree, ap, TL_IS_238); + else TextWeaver__commentary_text(tree, ap, TL_IS_239); } } TextWeaver__commentary_text(tree, ap, hteu->usage_recorded_at->under_section->md->sect_title); - if (as_list == FALSE) TextWeaver__commentary_text(tree, ap, TL_IS_239); - else TextWeaver__commentary_text(tree, ap, TL_IS_240); + if (as_list == FALSE) TextWeaver__commentary_text(tree, ap, TL_IS_240); + else TextWeaver__commentary_text(tree, ap, TL_IS_241); } - if (count_under++ > 0) TextWeaver__commentary_text(tree, ap, TL_IS_241); + if (count_under++ > 0) TextWeaver__commentary_text(tree, ap, TL_IS_242); Trees__make_child(WeaveTree__locale(tree, hteu->usage_recorded_at, NULL), ap); last_cited_in = hteu->usage_recorded_at->under_section; } -#line 678 "inweb/Chapter 3/The Weaver.w" +#line 684 "inweb/Chapter 3/The Weaver.w" ; LOOP_OVER_LINKED_LIST(hteu, hash_table_entry_usage, hte->usages) if (P->under_section != hteu->usage_recorded_at->under_section) { -#line 697 "inweb/Chapter 3/The Weaver.w" +#line 703 "inweb/Chapter 3/The Weaver.w" if (as_list == FALSE) { - if (used_flag == FALSE) TextWeaver__commentary_text(tree, ap, TL_IS_234); + if (used_flag == FALSE) TextWeaver__commentary_text(tree, ap, TL_IS_235); } used_flag = TRUE; section *S = hteu->usage_recorded_at->under_section; @@ -19383,39 +19415,39 @@ void Weaver__show_function_usage(heterogeneous_tree *tree, weave_order *wv, count_under = 0; if (last_cited_in) { if (as_list == FALSE) { - if (last_cited_in != P->under_section) TextWeaver__commentary_text(tree, ap, TL_IS_235); - else TextWeaver__commentary_text(tree, ap, TL_IS_236); + if (last_cited_in != P->under_section) TextWeaver__commentary_text(tree, ap, TL_IS_236); + else TextWeaver__commentary_text(tree, ap, TL_IS_237); } else { - if (last_cited_in != P->under_section) TextWeaver__commentary_text(tree, ap, TL_IS_237); - else TextWeaver__commentary_text(tree, ap, TL_IS_238); + if (last_cited_in != P->under_section) TextWeaver__commentary_text(tree, ap, TL_IS_238); + else TextWeaver__commentary_text(tree, ap, TL_IS_239); } } TextWeaver__commentary_text(tree, ap, hteu->usage_recorded_at->under_section->md->sect_title); - if (as_list == FALSE) TextWeaver__commentary_text(tree, ap, TL_IS_239); - else TextWeaver__commentary_text(tree, ap, TL_IS_240); + if (as_list == FALSE) TextWeaver__commentary_text(tree, ap, TL_IS_240); + else TextWeaver__commentary_text(tree, ap, TL_IS_241); } - if (count_under++ > 0) TextWeaver__commentary_text(tree, ap, TL_IS_241); + if (count_under++ > 0) TextWeaver__commentary_text(tree, ap, TL_IS_242); Trees__make_child(WeaveTree__locale(tree, hteu->usage_recorded_at, NULL), ap); last_cited_in = hteu->usage_recorded_at->under_section; } -#line 681 "inweb/Chapter 3/The Weaver.w" +#line 687 "inweb/Chapter 3/The Weaver.w" ; if (used_flag == FALSE) { if (as_list == FALSE) { - TextWeaver__commentary_text(tree, ap, TL_IS_230); - } else { TextWeaver__commentary_text(tree, ap, TL_IS_231); + } else { + TextWeaver__commentary_text(tree, ap, TL_IS_232); } } if (as_list == FALSE) { if ((last_cited_in != P->under_section) && (last_cited_in)) - TextWeaver__commentary_text(tree, ap, TL_IS_232); - TextWeaver__commentary_text(tree, ap, TL_IS_233); + TextWeaver__commentary_text(tree, ap, TL_IS_233); + TextWeaver__commentary_text(tree, ap, TL_IS_234); } } -#line 724 "inweb/Chapter 3/The Weaver.w" +#line 730 "inweb/Chapter 3/The Weaver.w" void Weaver__weave_subheading(heterogeneous_tree *tree, weave_order *wv, tree_node *ap, text_stream *text) { tree_node *D = WeaveTree__subheading(tree, text); @@ -19453,7 +19485,7 @@ void Weaver__commentary_text(heterogeneous_tree *tree, weave_order *wv, TextWeaver__commentary_text(tree, ap, matter); } -#line 766 "inweb/Chapter 3/The Weaver.w" +#line 772 "inweb/Chapter 3/The Weaver.w" text_stream *Weaver__dimensions(text_stream *item, int *w, int *h, source_line *L) { int sv = L->owning_section->md->using_syntax; *w = -1; *h = -1; @@ -19496,7 +19528,7 @@ text_stream *Weaver__dimensions(text_stream *item, int *w, int *h, source_line * return use; } -#line 813 "inweb/Chapter 3/The Weaver.w" +#line 819 "inweb/Chapter 3/The Weaver.w" int Weaver__weave_table_of_contents(heterogeneous_tree *tree, tree_node *ap, section *S) { int noteworthy = 0; @@ -19535,8 +19567,8 @@ void TextWeaver__commentary_r(heterogeneous_tree *tree, tree_node *ap, text_stre weave_order *wv = C->wv; text_stream *code_in_comments_notation = Bibliographic__get_datum(wv->weave_web->md, - (in_code)?(TL_IS_242):(TL_IS_243)); - if (Str__ne(code_in_comments_notation, TL_IS_244)) + (in_code)?(TL_IS_243):(TL_IS_244)); + if (Str__ne(code_in_comments_notation, TL_IS_245)) { #line 52 "inweb/Chapter 3/The Weaver of Text.w" for (int i=0; i < Str__len(matter); i++) { @@ -19563,8 +19595,8 @@ void TextWeaver__commentary_r(heterogeneous_tree *tree, tree_node *ap, text_stre { #line 69 "inweb/Chapter 3/The Weaver of Text.w" for (int i=0; i < Str__len(matter); i++) { - if ((Str__includes_at(matter, i, TL_IS_251)) || - (Str__includes_at(matter, i, TL_IS_252))) { + if ((Str__includes_at(matter, i, TL_IS_252)) || + (Str__includes_at(matter, i, TL_IS_253))) { TEMPORARY_TEXT(before); Str__copy(before, matter); Str__truncate(before, i); TEMPORARY_TEXT(after); @@ -19589,8 +19621,8 @@ void TextWeaver__commentary_r(heterogeneous_tree *tree, tree_node *ap, text_stre int display_flag = TRUE; text_stream *tex_notation = Bibliographic__get_datum(wv->weave_web->md, - TL_IS_245); - if (Str__ne(tex_notation, TL_IS_246)) + TL_IS_246); + if (Str__ne(tex_notation, TL_IS_247)) { #line 91 "inweb/Chapter 3/The Weaver of Text.w" int N = Str__len(tex_notation); @@ -19625,8 +19657,8 @@ void TextWeaver__commentary_r(heterogeneous_tree *tree, tree_node *ap, text_stre ; display_flag = FALSE; tex_notation = Bibliographic__get_datum(wv->weave_web->md, - TL_IS_247); - if (Str__ne(tex_notation, TL_IS_248)) + TL_IS_248); + if (Str__ne(tex_notation, TL_IS_249)) { #line 91 "inweb/Chapter 3/The Weaver of Text.w" int N = Str__len(tex_notation); @@ -19661,8 +19693,8 @@ void TextWeaver__commentary_r(heterogeneous_tree *tree, tree_node *ap, text_stre ; text_stream *xref_notation = Bibliographic__get_datum(wv->weave_web->md, - TL_IS_249); - if (Str__ne(xref_notation, TL_IS_250)) + TL_IS_250); + if (Str__ne(xref_notation, TL_IS_251)) { #line 142 "inweb/Chapter 3/The Weaver of Text.w" int N = Str__len(xref_notation); @@ -19730,7 +19762,7 @@ void TextWeaver__commentary_r(heterogeneous_tree *tree, tree_node *ap, text_stre Trees__make_child(WeaveTree__footnote_cue(tree, F->cue_text), ap); TextWeaver__commentary_r(tree, ap, after, within, in_code); } else { - Main__error_in_web(TL_IS_253, wv->current_weave_line); + Main__error_in_web(TL_IS_254, wv->current_weave_line); } } DISCARD_TEXT(before); @@ -19774,8 +19806,8 @@ void TextWeaver__source_code(heterogeneous_tree *tree, tree_node *ap, { #line 233 "inweb/Chapter 3/The Weaver of Text.w" - if ((Str__includes_at(matter, i, TL_IS_256)) || - (Str__includes_at(matter, i, TL_IS_257))) { + if ((Str__includes_at(matter, i, TL_IS_257)) || + (Str__includes_at(matter, i, TL_IS_258))) { TEMPORARY_TEXT(after); Str__substr(after, Str__at(matter, i), Str__end(matter)); match_results mr = Regexp__create_mr(); @@ -19793,8 +19825,8 @@ void TextWeaver__source_code(heterogeneous_tree *tree, tree_node *ap, #line 209 "inweb/Chapter 3/The Weaver of Text.w" ; text_stream *xref_notation = Bibliographic__get_datum(wv->weave_web->md, - TL_IS_254); - if (Str__ne(xref_notation, TL_IS_255)) + TL_IS_255); + if (Str__ne(xref_notation, TL_IS_256)) { #line 249 "inweb/Chapter 3/The Weaver of Text.w" @@ -19930,7 +19962,7 @@ void Tangler__tangle(web *W, tangle_target *target, filename *dest_file) { { #line 87 "inweb/Chapter 3/The Tangler.w" - if (L->owning_paragraph == NULL) Main__error_in_web(TL_IS_258, L); + if (L->owning_paragraph == NULL) Main__error_in_web(TL_IS_259, L); else Tags__open_ifdefs(OUT, L->owning_paragraph); LanguageMethods__start_definition(OUT, lang, L->text_operand, @@ -19952,7 +19984,7 @@ void Tangler__tangle(web *W, tangle_target *target, filename *dest_file) { { #line 87 "inweb/Chapter 3/The Tangler.w" - if (L->owning_paragraph == NULL) Main__error_in_web(TL_IS_258, L); + if (L->owning_paragraph == NULL) Main__error_in_web(TL_IS_259, L); else Tags__open_ifdefs(OUT, L->owning_paragraph); LanguageMethods__start_definition(OUT, lang, L->text_operand, @@ -20073,7 +20105,7 @@ void Tangler__tangle_line(OUTPUT_STREAM, text_stream *original, section *S, sour LanguageMethods__after_macro_expansion(OUT, lang, pmac); LanguageMethods__insert_line_marker(OUT, lang, L); } else { - Main__error_in_web(TL_IS_259, L); + Main__error_in_web(TL_IS_260, L); WRITE_TO(STDERR, "Macro is '%S'\n", temp); LanguageMethods__comment(OUT, lang, temp); /* recover by putting macro name in comment */ } @@ -20142,7 +20174,7 @@ programming_language *Languages__find_by_name(text_stream *lname, web *W) { #line 26 "inweb/Chapter 4/Programming Languages.w" filename *F = NULL; if (W) { - pathname *P = Pathnames__down(W->md->path_to_web, TL_IS_260); + pathname *P = Pathnames__down(W->md->path_to_web, TL_IS_261); { #line 39 "inweb/Chapter 4/Programming Languages.w" @@ -20189,7 +20221,7 @@ programming_language *Languages__find_by_name(text_stream *lname, web *W) { #line 50 "inweb/Chapter 4/Programming Languages.w" programming_language *Languages__default(web *W) { - return Languages__find_by_name(TL_IS_261, W); + return Languages__find_by_name(TL_IS_262, W); } void Languages__show(OUTPUT_STREAM) { @@ -20231,7 +20263,7 @@ void Languages__read_definitions(pathname *P) { } pathname *Languages__default_directory(void) { - return Pathnames__down(path_to_inweb, TL_IS_262); + return Pathnames__down(path_to_inweb, TL_IS_263); } #line 144 "inweb/Chapter 4/Programming Languages.w" @@ -20291,7 +20323,7 @@ programming_language *Languages__read_definition(filename *F) { { #line 215 "inweb/Chapter 4/Programming Languages.w" if (pl->C_like) CLike__make_c_like(pl); - if (Str__eq(pl->language_name, TL_IS_263)) InCSupport__add_features(pl); + if (Str__eq(pl->language_name, TL_IS_264)) InCSupport__add_features(pl); ACMESupport__add_fallbacks(pl); } @@ -20313,7 +20345,7 @@ void Languages__read_definition_line(text_stream *line, text_file_position *tfp, if (state->current_block) { #line 323 "inweb/Chapter 4/Programming Languages.w" - if (Str__eq(line, TL_IS_295)) { + if (Str__eq(line, TL_IS_296)) { state->current_block = state->current_block->parent; } else if (Regexp__match(&mr, line, L"characters {")) { colouring_rule *rule = Languages__new_rule(state->current_block); @@ -20329,7 +20361,7 @@ void Languages__read_definition_line(text_stream *line, text_file_position *tfp, } else if (Regexp__match(&mr, line, L"runs of (%c+) {")) { colouring_rule *rule = Languages__new_rule(state->current_block); int r = UNQUOTED_COLOUR; - if (Str__ne(mr.exp[0], TL_IS_296)) r = Languages__colour(mr.exp[0], tfp); + if (Str__ne(mr.exp[0], TL_IS_297)) r = Languages__colour(mr.exp[0], tfp); rule->execute_block = Languages__new_block(state->current_block, r); state->current_block = rule->execute_block; } else if (Regexp__match(&mr, line, L"instances of (%c+) {")) { @@ -20384,66 +20416,66 @@ void Languages__read_definition_line(text_stream *line, text_file_position *tfp, Languages__reserved(pl, Languages__text(mr.exp[0], tfp, FALSE), RESERVED_COLOUR, tfp); } else if (Regexp__match(&mr, line, L"(%c+) *: *(%c+?)")) { text_stream *key = mr.exp[0], *value = Str__duplicate(mr.exp[1]); - if (Str__eq(key, TL_IS_264)) pl->language_name = Languages__text(value, tfp, TRUE); - else if (Str__eq(key, TL_IS_265)) - pl->language_details = Languages__text(value, tfp, TRUE); + if (Str__eq(key, TL_IS_265)) pl->language_name = Languages__text(value, tfp, TRUE); else if (Str__eq(key, TL_IS_266)) - pl->file_extension = Languages__text(value, tfp, TRUE); + pl->language_details = Languages__text(value, tfp, TRUE); else if (Str__eq(key, TL_IS_267)) - pl->line_comment = Languages__text(value, tfp, TRUE); + pl->file_extension = Languages__text(value, tfp, TRUE); else if (Str__eq(key, TL_IS_268)) - pl->whole_line_comment = Languages__text(value, tfp, TRUE); + pl->line_comment = Languages__text(value, tfp, TRUE); else if (Str__eq(key, TL_IS_269)) - pl->multiline_comment_open = Languages__text(value, tfp, TRUE); + pl->whole_line_comment = Languages__text(value, tfp, TRUE); else if (Str__eq(key, TL_IS_270)) - pl->multiline_comment_close = Languages__text(value, tfp, TRUE); + pl->multiline_comment_open = Languages__text(value, tfp, TRUE); else if (Str__eq(key, TL_IS_271)) - pl->string_literal = Languages__text(value, tfp, TRUE); + pl->multiline_comment_close = Languages__text(value, tfp, TRUE); else if (Str__eq(key, TL_IS_272)) - pl->string_literal_escape = Languages__text(value, tfp, TRUE); + pl->string_literal = Languages__text(value, tfp, TRUE); else if (Str__eq(key, TL_IS_273)) - pl->character_literal = Languages__text(value, tfp, TRUE); + pl->string_literal_escape = Languages__text(value, tfp, TRUE); else if (Str__eq(key, TL_IS_274)) - pl->character_literal_escape = Languages__text(value, tfp, TRUE); + pl->character_literal = Languages__text(value, tfp, TRUE); else if (Str__eq(key, TL_IS_275)) - pl->binary_literal_prefix = Languages__text(value, tfp, TRUE); + pl->character_literal_escape = Languages__text(value, tfp, TRUE); else if (Str__eq(key, TL_IS_276)) - pl->octal_literal_prefix = Languages__text(value, tfp, TRUE); + pl->binary_literal_prefix = Languages__text(value, tfp, TRUE); else if (Str__eq(key, TL_IS_277)) - pl->hexadecimal_literal_prefix = Languages__text(value, tfp, TRUE); + pl->octal_literal_prefix = Languages__text(value, tfp, TRUE); else if (Str__eq(key, TL_IS_278)) - pl->negative_literal_prefix = Languages__text(value, tfp, TRUE); + pl->hexadecimal_literal_prefix = Languages__text(value, tfp, TRUE); else if (Str__eq(key, TL_IS_279)) - pl->shebang = Languages__text(value, tfp, TRUE); + pl->negative_literal_prefix = Languages__text(value, tfp, TRUE); else if (Str__eq(key, TL_IS_280)) - pl->line_marker = Languages__text(value, tfp, TRUE); + pl->shebang = Languages__text(value, tfp, TRUE); else if (Str__eq(key, TL_IS_281)) - pl->before_macro_expansion = Languages__text(value, tfp, TRUE); + pl->line_marker = Languages__text(value, tfp, TRUE); else if (Str__eq(key, TL_IS_282)) - pl->after_macro_expansion = Languages__text(value, tfp, TRUE); + pl->before_macro_expansion = Languages__text(value, tfp, TRUE); else if (Str__eq(key, TL_IS_283)) - pl->start_definition = Languages__text(value, tfp, TRUE); + pl->after_macro_expansion = Languages__text(value, tfp, TRUE); else if (Str__eq(key, TL_IS_284)) - pl->prolong_definition = Languages__text(value, tfp, TRUE); + pl->start_definition = Languages__text(value, tfp, TRUE); else if (Str__eq(key, TL_IS_285)) - pl->end_definition = Languages__text(value, tfp, TRUE); + pl->prolong_definition = Languages__text(value, tfp, TRUE); else if (Str__eq(key, TL_IS_286)) - pl->start_ifdef = Languages__text(value, tfp, TRUE); + pl->end_definition = Languages__text(value, tfp, TRUE); else if (Str__eq(key, TL_IS_287)) - pl->start_ifndef = Languages__text(value, tfp, TRUE); + pl->start_ifdef = Languages__text(value, tfp, TRUE); else if (Str__eq(key, TL_IS_288)) - pl->end_ifdef = Languages__text(value, tfp, TRUE); + pl->start_ifndef = Languages__text(value, tfp, TRUE); else if (Str__eq(key, TL_IS_289)) - pl->end_ifndef = Languages__text(value, tfp, TRUE); + pl->end_ifdef = Languages__text(value, tfp, TRUE); else if (Str__eq(key, TL_IS_290)) - pl->C_like = Languages__boolean(value, tfp); + pl->end_ifndef = Languages__text(value, tfp, TRUE); else if (Str__eq(key, TL_IS_291)) - pl->suppress_disclaimer = Languages__boolean(value, tfp); + pl->C_like = Languages__boolean(value, tfp); else if (Str__eq(key, TL_IS_292)) - pl->supports_namespaces = Languages__boolean(value, tfp); + pl->suppress_disclaimer = Languages__boolean(value, tfp); else if (Str__eq(key, TL_IS_293)) - Languages__regexp(pl->function_notation, value, tfp); + pl->supports_namespaces = Languages__boolean(value, tfp); else if (Str__eq(key, TL_IS_294)) + Languages__regexp(pl->function_notation, value, tfp); + else if (Str__eq(key, TL_IS_295)) Languages__regexp(pl->type_notation, value, tfp); else { Errors__in_text_file("unknown property name before ':'", tfp); @@ -20553,7 +20585,7 @@ void Languages__parse_rule(language_reader_state *state, text_stream *premiss, { #line 533 "inweb/Chapter 4/Programming Languages.w" - if (Str__eq(action, TL_IS_297)) { + if (Str__eq(action, TL_IS_298)) { rule->execute_block = Languages__new_block(state->current_block, WHOLE_LINE_CRULE_RUN); state->current_block = rule->execute_block; @@ -20566,7 +20598,7 @@ void Languages__parse_rule(language_reader_state *state, text_stream *premiss, rule->set_prefix_to_colour = rule->set_to_colour; } else if (Str__get_first_char(action) == '!') { rule->set_to_colour = Languages__colour(action, tfp); - } else if (Str__eq(action, TL_IS_298)) { + } else if (Str__eq(action, TL_IS_299)) { rule->debug = TRUE; } else { Errors__in_text_file("action after '=>' illegible", tfp); @@ -20601,17 +20633,17 @@ int Languages__colour(text_stream *T, text_file_position *tfp) { Errors__in_text_file("colour names must begin with !", tfp); return PLAIN_COLOUR; } - if (Str__eq(T, TL_IS_299)) return STRING_COLOUR; - else if (Str__eq(T, TL_IS_300)) return FUNCTION_COLOUR; - else if (Str__eq(T, TL_IS_301)) return DEFINITION_COLOUR; - else if (Str__eq(T, TL_IS_302)) return RESERVED_COLOUR; - else if (Str__eq(T, TL_IS_303)) return ELEMENT_COLOUR; - else if (Str__eq(T, TL_IS_304)) return IDENTIFIER_COLOUR; - else if (Str__eq(T, TL_IS_305)) return CHARACTER_COLOUR; - else if (Str__eq(T, TL_IS_306)) return CONSTANT_COLOUR; - else if (Str__eq(T, TL_IS_307)) return PLAIN_COLOUR; - else if (Str__eq(T, TL_IS_308)) return EXTRACT_COLOUR; - else if (Str__eq(T, TL_IS_309)) return COMMENT_COLOUR; + if (Str__eq(T, TL_IS_300)) return STRING_COLOUR; + else if (Str__eq(T, TL_IS_301)) return FUNCTION_COLOUR; + else if (Str__eq(T, TL_IS_302)) return DEFINITION_COLOUR; + else if (Str__eq(T, TL_IS_303)) return RESERVED_COLOUR; + else if (Str__eq(T, TL_IS_304)) return ELEMENT_COLOUR; + else if (Str__eq(T, TL_IS_305)) return IDENTIFIER_COLOUR; + else if (Str__eq(T, TL_IS_306)) return CHARACTER_COLOUR; + else if (Str__eq(T, TL_IS_307)) return CONSTANT_COLOUR; + else if (Str__eq(T, TL_IS_308)) return PLAIN_COLOUR; + else if (Str__eq(T, TL_IS_309)) return EXTRACT_COLOUR; + else if (Str__eq(T, TL_IS_310)) return COMMENT_COLOUR; else { Errors__in_text_file("no such !colour", tfp); return PLAIN_COLOUR; @@ -20620,8 +20652,8 @@ int Languages__colour(text_stream *T, text_file_position *tfp) { #line 624 "inweb/Chapter 4/Programming Languages.w" int Languages__boolean(text_stream *T, text_file_position *tfp) { - if (Str__eq(T, TL_IS_310)) return TRUE; - else if (Str__eq(T, TL_IS_311)) return FALSE; + if (Str__eq(T, TL_IS_311)) return TRUE; + else if (Str__eq(T, TL_IS_312)) return FALSE; else { Errors__in_text_file("must be true or false", tfp); return FALSE; @@ -20679,7 +20711,6 @@ text_stream *Languages__text(text_stream *T, text_file_position *tfp, int allow) } if (bareword) { int rw = FALSE; - if (Str__eq(V, TL_IS_312)) rw = TRUE; if (Str__eq(V, TL_IS_313)) rw = TRUE; if (Str__eq(V, TL_IS_314)) rw = TRUE; if (Str__eq(V, TL_IS_315)) rw = TRUE; @@ -20701,6 +20732,7 @@ text_stream *Languages__text(text_stream *T, text_file_position *tfp, int allow) if (Str__eq(V, TL_IS_331)) rw = TRUE; if (Str__eq(V, TL_IS_332)) rw = TRUE; if (Str__eq(V, TL_IS_333)) rw = TRUE; + if (Str__eq(V, TL_IS_334)) rw = TRUE; if (rw) { TEMPORARY_TEXT(err); @@ -20799,7 +20831,7 @@ language_type *Functions__new_struct(web *W, text_stream *name, source_line *L) { #line 40 "inweb/Chapter 4/Types and Functions.w" - Tags__add_by_name(L->owning_paragraph, TL_IS_334); + Tags__add_by_name(L->owning_paragraph, TL_IS_335); ADD_TO_LINKED_LIST(str, language_type, W->language_types); ADD_TO_LINKED_LIST(str, language_type, L->owning_paragraph->structures); @@ -20912,7 +20944,7 @@ language_function *Functions__new_function(text_stream *fname, source_line *L) { fn->within_namespace = TRUE; } else if ((Str__eq_wide_string(fname, L"main")) && (Str__eq_wide_string(ambient_namespace, L"Main::"))) - declared_namespace = TL_IS_335; + declared_namespace = TL_IS_336; if ((Str__ne(declared_namespace, ambient_namespace)) && (L->owning_paragraph->placed_very_early == FALSE)) { TEMPORARY_TEXT(err_mess); @@ -21008,7 +21040,7 @@ void LanguageMethods__disclaimer(text_stream *OUT, programming_language *pl, web int rv = FALSE; IMETHOD_CALLV(rv, pl, SUPPRESS_DISCLAIMER_TAN_MTID); if (rv == FALSE) - LanguageMethods__comment(OUT, pl, TL_IS_336); + LanguageMethods__comment(OUT, pl, TL_IS_337); } #line 127 "inweb/Chapter 4/Language Methods.w" @@ -21031,7 +21063,7 @@ void LanguageMethods__start_definition(OUTPUT_STREAM, programming_language *pl, int rv = FALSE; IMETHOD_CALL(rv, pl, START_DEFN_TAN_MTID, OUT, term, start, S, L); if (rv == FALSE) - Main__error_in_web(TL_IS_337, L); + Main__error_in_web(TL_IS_338, L); } void LanguageMethods__prolong_definition(OUTPUT_STREAM, programming_language *pl, @@ -21039,7 +21071,7 @@ void LanguageMethods__prolong_definition(OUTPUT_STREAM, programming_language *pl int rv = FALSE; IMETHOD_CALL(rv, pl, PROLONG_DEFN_TAN_MTID, OUT, more, S, L); if (rv == FALSE) - Main__error_in_web(TL_IS_338, L); + Main__error_in_web(TL_IS_339, L); } void LanguageMethods__end_definition(OUTPUT_STREAM, programming_language *pl, @@ -21491,7 +21523,7 @@ void ACMESupport__parse_functions(programming_language *self, web *W) { #line 267 "inweb/Chapter 4/ACME Support.w" void ACMESupport__post_analysis(programming_language *self, web *W) { int check_namespaces = FALSE; - if (Str__eq_wide_string(Bibliographic__get_datum(W->md, TL_IS_339), L"On")) + if (Str__eq_wide_string(Bibliographic__get_datum(W->md, TL_IS_340), L"On")) check_namespaces = TRUE; language_function *fn; LOOP_OVER(fn, language_function) { @@ -21511,11 +21543,11 @@ void ACMESupport__post_analysis(programming_language *self, web *W) { && (fn->call_freely == FALSE)) { if (fn->within_namespace) Main__error_in_web( - TL_IS_340, + TL_IS_341, fn->function_header_at); else Main__error_in_web( - TL_IS_341, + TL_IS_342, fn->function_header_at); } } @@ -21988,7 +22020,7 @@ void CLike__parse_types(programming_language *self, web *W) { if (Regexp__match(&mr, L->text, L"typedef struct (%i+) %c*{%c*")) { current_str = Functions__new_struct(W, mr.exp[0], L); - Tags__add_by_name(L->owning_paragraph, TL_IS_342); + Tags__add_by_name(L->owning_paragraph, TL_IS_343); } else if ((Str__get_first_char(L->text) == '}') && (current_str)) { current_str->typedef_ends = L; current_str = NULL; @@ -22123,14 +22155,14 @@ void CLike__parse_functions(programming_language *self, web *W) { if ((Regexp__match(&mr, L->text, L" *#ifn*def %c+")) || (Regexp__match(&mr, L->text, L" *#IFN*DEF %c+"))) { if (cc_sp >= MAX_CONDITIONAL_COMPILATION_STACK) - Main__error_in_web(TL_IS_344, L); + Main__error_in_web(TL_IS_345, L); else cc_stack[cc_sp++] = L; } if ((Regexp__match(&mr, L->text, L" *#endif *")) || (Regexp__match(&mr, L->text, L" *#ENDIF *"))) { if (cc_sp <= 0) - Main__error_in_web(TL_IS_345, L); + Main__error_in_web(TL_IS_346, L); else cc_sp--; } @@ -22224,7 +22256,7 @@ void CLike__parse_functions(programming_language *self, web *W) { ; } if (cc_sp > 0) - Main__error_in_web(TL_IS_343, NULL); + Main__error_in_web(TL_IS_344, NULL); } #line 314 "inweb/Chapter 4/C-Like Languages.w" @@ -22905,8 +22937,8 @@ preform_nonterminal *InCSupport__nonterminal_by_name(text_stream *name) { #line 764 "inweb/Chapter 4/InC Support.w" text_stream *InCSupport__nonterminal_variable_identifier(text_stream *name) { - if (Str__eq_wide_string(name, L"r")) return TL_IS_350; - if (Str__eq_wide_string(name, L"rp")) return TL_IS_351; + if (Str__eq_wide_string(name, L"r")) return TL_IS_351; + if (Str__eq_wide_string(name, L"rp")) return TL_IS_352; nonterminal_variable *ntv; LOOP_OVER(ntv, nonterminal_variable) if (Str__eq(ntv->ntv_name, name)) @@ -22918,7 +22950,7 @@ text_stream *InCSupport__nonterminal_variable_identifier(text_stream *name) { void InCSupport__additional_tangling(programming_language *self, web *W, tangle_target *target) { if (NUMBER_CREATED(preform_nonterminal) > 0) { pathname *P = Reader__tangled_folder(W); - filename *Syntax = Filenames__in(P, TL_IS_352); + filename *Syntax = Filenames__in(P, TL_IS_353); text_stream TO_struct; text_stream *OUT = &TO_struct; @@ -22929,8 +22961,8 @@ void InCSupport__additional_tangling(programming_language *self, web *W, tangle_ WRITE("[Preform syntax generated by inweb: do not edit.]\n\n"); - if (Bibliographic__data_exists(W->md, TL_IS_353)) - WRITE("language %S\n", Bibliographic__get_datum(W->md, TL_IS_354)); + if (Bibliographic__data_exists(W->md, TL_IS_354)) + WRITE("language %S\n", Bibliographic__get_datum(W->md, TL_IS_355)); { @@ -23121,19 +23153,19 @@ int InCSupport__share_element(programming_language *self, text_stream *elname) { #line 79 "inweb/Chapter 5/Weave Tree.w" -#line 86 "inweb/Chapter 5/Weave Tree.w" +#line 85 "inweb/Chapter 5/Weave Tree.w" -#line 94 "inweb/Chapter 5/Weave Tree.w" +#line 92 "inweb/Chapter 5/Weave Tree.w" #line 100 "inweb/Chapter 5/Weave Tree.w" -#line 105 "inweb/Chapter 5/Weave Tree.w" +#line 106 "inweb/Chapter 5/Weave Tree.w" -#line 110 "inweb/Chapter 5/Weave Tree.w" +#line 111 "inweb/Chapter 5/Weave Tree.w" -#line 115 "inweb/Chapter 5/Weave Tree.w" +#line 116 "inweb/Chapter 5/Weave Tree.w" -#line 119 "inweb/Chapter 5/Weave Tree.w" +#line 121 "inweb/Chapter 5/Weave Tree.w" #line 125 "inweb/Chapter 5/Weave Tree.w" @@ -23141,39 +23173,41 @@ int InCSupport__share_element(programming_language *self, text_stream *elname) { #line 137 "inweb/Chapter 5/Weave Tree.w" -#line 142 "inweb/Chapter 5/Weave Tree.w" +#line 143 "inweb/Chapter 5/Weave Tree.w" -#line 149 "inweb/Chapter 5/Weave Tree.w" +#line 148 "inweb/Chapter 5/Weave Tree.w" -#line 153 "inweb/Chapter 5/Weave Tree.w" +#line 155 "inweb/Chapter 5/Weave Tree.w" -#line 158 "inweb/Chapter 5/Weave Tree.w" +#line 159 "inweb/Chapter 5/Weave Tree.w" -#line 162 "inweb/Chapter 5/Weave Tree.w" +#line 164 "inweb/Chapter 5/Weave Tree.w" #line 168 "inweb/Chapter 5/Weave Tree.w" #line 174 "inweb/Chapter 5/Weave Tree.w" -#line 181 "inweb/Chapter 5/Weave Tree.w" +#line 180 "inweb/Chapter 5/Weave Tree.w" -#line 186 "inweb/Chapter 5/Weave Tree.w" +#line 187 "inweb/Chapter 5/Weave Tree.w" -#line 191 "inweb/Chapter 5/Weave Tree.w" +#line 192 "inweb/Chapter 5/Weave Tree.w" -#line 196 "inweb/Chapter 5/Weave Tree.w" +#line 197 "inweb/Chapter 5/Weave Tree.w" -#line 201 "inweb/Chapter 5/Weave Tree.w" +#line 202 "inweb/Chapter 5/Weave Tree.w" #line 207 "inweb/Chapter 5/Weave Tree.w" -#line 211 "inweb/Chapter 5/Weave Tree.w" +#line 213 "inweb/Chapter 5/Weave Tree.w" #line 217 "inweb/Chapter 5/Weave Tree.w" -#line 222 "inweb/Chapter 5/Weave Tree.w" +#line 223 "inweb/Chapter 5/Weave Tree.w" -#line 224 "inweb/Chapter 5/Weave Tree.w" +#line 228 "inweb/Chapter 5/Weave Tree.w" + +#line 230 "inweb/Chapter 5/Weave Tree.w" tree_type *weave_tree_type = NULL; tree_node_type *weave_document_node_type = NULL; tree_node_type *weave_head_node_type = NULL; @@ -23191,6 +23225,7 @@ tree_node_type *weave_pagebreak_node_type = NULL; tree_node_type *weave_paragraph_heading_node_type = NULL; tree_node_type *weave_endnote_node_type = NULL; tree_node_type *weave_figure_node_type = NULL; +tree_node_type *weave_audio_node_type = NULL; tree_node_type *weave_material_node_type = NULL; tree_node_type *weave_embed_node_type = NULL; tree_node_type *weave_pmac_node_type = NULL; @@ -23219,91 +23254,93 @@ tree_node_type *weave_maths_node_type = NULL; heterogeneous_tree *WeaveTree__new_tree(weave_order *wv) { if (weave_tree_type == NULL) { - weave_tree_type = Trees__new_type(TL_IS_355, NULL); + weave_tree_type = Trees__new_type(TL_IS_356, NULL); weave_document_node_type = - Trees__new_node_type(TL_IS_356, weave_document_node_MT, NULL); + Trees__new_node_type(TL_IS_357, weave_document_node_MT, NULL); weave_head_node_type = - Trees__new_node_type(TL_IS_357, weave_head_node_MT, NULL); + Trees__new_node_type(TL_IS_358, weave_head_node_MT, NULL); weave_body_node_type = - Trees__new_node_type(TL_IS_358, weave_body_node_MT, NULL); + Trees__new_node_type(TL_IS_359, weave_body_node_MT, NULL); weave_tail_node_type = - Trees__new_node_type(TL_IS_359, weave_tail_node_MT, NULL); + Trees__new_node_type(TL_IS_360, weave_tail_node_MT, NULL); weave_chapter_footer_node_type = - Trees__new_node_type(TL_IS_360, weave_chapter_footer_node_MT, NULL); + Trees__new_node_type(TL_IS_361, weave_chapter_footer_node_MT, NULL); weave_chapter_header_node_type = - Trees__new_node_type(TL_IS_361, weave_chapter_header_node_MT, NULL); + Trees__new_node_type(TL_IS_362, weave_chapter_header_node_MT, NULL); weave_section_footer_node_type = - Trees__new_node_type(TL_IS_362, weave_section_footer_node_MT, NULL); + Trees__new_node_type(TL_IS_363, weave_section_footer_node_MT, NULL); weave_section_header_node_type = - Trees__new_node_type(TL_IS_363, weave_section_header_node_MT, NULL); + Trees__new_node_type(TL_IS_364, weave_section_header_node_MT, NULL); weave_section_purpose_node_type = - Trees__new_node_type(TL_IS_364, weave_section_purpose_node_MT, NULL); + Trees__new_node_type(TL_IS_365, weave_section_purpose_node_MT, NULL); weave_subheading_node_type = - Trees__new_node_type(TL_IS_365, weave_subheading_node_MT, NULL); + Trees__new_node_type(TL_IS_366, weave_subheading_node_MT, NULL); weave_bar_node_type = - Trees__new_node_type(TL_IS_366, weave_bar_node_MT, NULL); + Trees__new_node_type(TL_IS_367, weave_bar_node_MT, NULL); weave_pagebreak_node_type = - Trees__new_node_type(TL_IS_367, weave_pagebreak_node_MT, NULL); + Trees__new_node_type(TL_IS_368, weave_pagebreak_node_MT, NULL); weave_paragraph_heading_node_type = - Trees__new_node_type(TL_IS_368, weave_paragraph_heading_node_MT, NULL); + Trees__new_node_type(TL_IS_369, weave_paragraph_heading_node_MT, NULL); weave_endnote_node_type = - Trees__new_node_type(TL_IS_369, weave_endnote_node_MT, NULL); + Trees__new_node_type(TL_IS_370, weave_endnote_node_MT, NULL); weave_figure_node_type = - Trees__new_node_type(TL_IS_370, weave_figure_node_MT, NULL); + Trees__new_node_type(TL_IS_371, weave_figure_node_MT, NULL); + weave_audio_node_type = + Trees__new_node_type(TL_IS_372, weave_audio_node_MT, NULL); weave_material_node_type = - Trees__new_node_type(TL_IS_371, weave_material_node_MT, NULL); + Trees__new_node_type(TL_IS_373, weave_material_node_MT, NULL); weave_embed_node_type = - Trees__new_node_type(TL_IS_372, weave_embed_node_MT, NULL); + Trees__new_node_type(TL_IS_374, weave_embed_node_MT, NULL); weave_pmac_node_type = - Trees__new_node_type(TL_IS_373, weave_pmac_node_MT, NULL); + Trees__new_node_type(TL_IS_375, weave_pmac_node_MT, NULL); weave_vskip_node_type = - Trees__new_node_type(TL_IS_374, weave_vskip_node_MT, NULL); + Trees__new_node_type(TL_IS_376, weave_vskip_node_MT, NULL); weave_chapter_node_type = - Trees__new_node_type(TL_IS_375, weave_chapter_node_MT, NULL); + Trees__new_node_type(TL_IS_377, weave_chapter_node_MT, NULL); weave_section_node_type = - Trees__new_node_type(TL_IS_376, weave_section_node_MT, NULL); + Trees__new_node_type(TL_IS_378, weave_section_node_MT, NULL); weave_code_line_node_type = - Trees__new_node_type(TL_IS_377, weave_code_line_node_MT, NULL); + Trees__new_node_type(TL_IS_379, weave_code_line_node_MT, NULL); weave_function_usage_node_type = - Trees__new_node_type(TL_IS_378, weave_function_usage_node_MT, NULL); + Trees__new_node_type(TL_IS_380, weave_function_usage_node_MT, NULL); weave_commentary_node_type = - Trees__new_node_type(TL_IS_379, weave_commentary_node_MT, NULL); + Trees__new_node_type(TL_IS_381, weave_commentary_node_MT, NULL); weave_carousel_slide_node_type = - Trees__new_node_type(TL_IS_380, weave_carousel_slide_node_MT, NULL); + Trees__new_node_type(TL_IS_382, weave_carousel_slide_node_MT, NULL); weave_toc_node_type = - Trees__new_node_type(TL_IS_381, weave_toc_node_MT, NULL); + Trees__new_node_type(TL_IS_383, weave_toc_node_MT, NULL); weave_toc_line_node_type = - Trees__new_node_type(TL_IS_382, weave_toc_line_node_MT, NULL); + Trees__new_node_type(TL_IS_384, weave_toc_line_node_MT, NULL); weave_chapter_title_page_node_type = - Trees__new_node_type(TL_IS_383, weave_chapter_title_page_node_MT, NULL); + Trees__new_node_type(TL_IS_385, weave_chapter_title_page_node_MT, NULL); weave_defn_node_type = - Trees__new_node_type(TL_IS_384, weave_defn_node_MT, NULL); + Trees__new_node_type(TL_IS_386, weave_defn_node_MT, NULL); weave_source_code_node_type = - Trees__new_node_type(TL_IS_385, weave_source_code_node_MT, NULL); + Trees__new_node_type(TL_IS_387, weave_source_code_node_MT, NULL); weave_url_node_type = - Trees__new_node_type(TL_IS_386, weave_url_node_MT, NULL); + Trees__new_node_type(TL_IS_388, weave_url_node_MT, NULL); weave_footnote_cue_node_type = - Trees__new_node_type(TL_IS_387, weave_footnote_cue_node_MT, NULL); + Trees__new_node_type(TL_IS_389, weave_footnote_cue_node_MT, NULL); weave_begin_footnote_text_node_type = - Trees__new_node_type(TL_IS_388, weave_begin_footnote_text_node_MT, NULL); + Trees__new_node_type(TL_IS_390, weave_begin_footnote_text_node_MT, NULL); weave_display_line_node_type = - Trees__new_node_type(TL_IS_389, weave_display_line_node_MT, NULL); + Trees__new_node_type(TL_IS_391, weave_display_line_node_MT, NULL); weave_function_defn_node_type = - Trees__new_node_type(TL_IS_390, weave_function_defn_node_MT, NULL); + Trees__new_node_type(TL_IS_392, weave_function_defn_node_MT, NULL); weave_item_node_type = - Trees__new_node_type(TL_IS_391, weave_item_node_MT, NULL); + Trees__new_node_type(TL_IS_393, weave_item_node_MT, NULL); weave_grammar_index_node_type = - Trees__new_node_type(TL_IS_392, weave_grammar_index_node_MT, NULL); + Trees__new_node_type(TL_IS_394, weave_grammar_index_node_MT, NULL); weave_inline_node_type = - Trees__new_node_type(TL_IS_393, weave_inline_node_MT, NULL); + Trees__new_node_type(TL_IS_395, weave_inline_node_MT, NULL); weave_locale_node_type = - Trees__new_node_type(TL_IS_394, weave_locale_node_MT, NULL); + Trees__new_node_type(TL_IS_396, weave_locale_node_MT, NULL); weave_maths_node_type = - Trees__new_node_type(TL_IS_395, weave_maths_node_MT, NULL); + Trees__new_node_type(TL_IS_397, weave_maths_node_MT, NULL); weave_verbatim_node_type = - Trees__new_node_type(TL_IS_396, weave_verbatim_node_MT, NULL); + Trees__new_node_type(TL_IS_398, weave_verbatim_node_MT, NULL); } heterogeneous_tree *tree = Trees__new(weave_tree_type); Trees__make_root(tree, WeaveTree__document(tree, wv)); @@ -23428,6 +23465,15 @@ tree_node *WeaveTree__figure(heterogeneous_tree *tree, STORE_POINTER_weave_figure_node(C)); } +tree_node *WeaveTree__audio(heterogeneous_tree *tree, + text_stream *audio_name, int w) { + weave_audio_node *C = CREATE(weave_audio_node); + C->audio_name = Str__duplicate(audio_name); + C->w = w; + return Trees__new_node(tree, weave_audio_node_type, + STORE_POINTER_weave_audio_node(C)); +} + tree_node *WeaveTree__material(heterogeneous_tree *tree, int material_type, int plainly, programming_language *styling) { weave_material_node *C = CREATE(weave_material_node); @@ -23447,7 +23493,7 @@ tree_node *WeaveTree__embed(heterogeneous_tree *tree, return Trees__new_node(tree, weave_embed_node_type, STORE_POINTER_weave_embed_node(C)); } -#line 502 "inweb/Chapter 5/Weave Tree.w" +#line 520 "inweb/Chapter 5/Weave Tree.w" tree_node *WeaveTree__pmac(heterogeneous_tree *tree, para_macro *pmac, int defn) { weave_pmac_node *C = CREATE(weave_pmac_node); C->pmac = pmac; @@ -23455,7 +23501,7 @@ tree_node *WeaveTree__pmac(heterogeneous_tree *tree, para_macro *pmac, int defn) return Trees__new_node(tree, weave_pmac_node_type, STORE_POINTER_weave_pmac_node(C)); } -#line 514 "inweb/Chapter 5/Weave Tree.w" +#line 532 "inweb/Chapter 5/Weave Tree.w" tree_node *WeaveTree__vskip(heterogeneous_tree *tree, int in_comment) { weave_vskip_node *C = CREATE(weave_vskip_node); C->in_comment = in_comment; @@ -23521,7 +23567,7 @@ tree_node *WeaveTree__weave_defn_node(heterogeneous_tree *tree, text_stream *key return Trees__new_node(tree, weave_defn_node_type, STORE_POINTER_weave_defn_node(C)); } -#line 583 "inweb/Chapter 5/Weave Tree.w" +#line 601 "inweb/Chapter 5/Weave Tree.w" tree_node *WeaveTree__source_code(heterogeneous_tree *tree, text_stream *matter, text_stream *colouring) { if (Str__len(colouring) != Str__len(matter)) internal_error("bad source segment"); @@ -23554,21 +23600,21 @@ tree_node *WeaveTree__footnote(heterogeneous_tree *tree, text_stream *cue) { return Trees__new_node(tree, weave_begin_footnote_text_node_type, STORE_POINTER_weave_begin_footnote_text_node(C)); } -#line 619 "inweb/Chapter 5/Weave Tree.w" +#line 637 "inweb/Chapter 5/Weave Tree.w" tree_node *WeaveTree__function_defn(heterogeneous_tree *tree, language_function *fn) { weave_function_defn_node *C = CREATE(weave_function_defn_node); C->fn = fn; return Trees__new_node(tree, weave_function_defn_node_type, STORE_POINTER_weave_function_defn_node(C)); } -#line 629 "inweb/Chapter 5/Weave Tree.w" +#line 647 "inweb/Chapter 5/Weave Tree.w" tree_node *WeaveTree__display_line(heterogeneous_tree *tree, text_stream *text) { weave_display_line_node *C = CREATE(weave_display_line_node); C->text = Str__duplicate(text); return Trees__new_node(tree, weave_display_line_node_type, STORE_POINTER_weave_display_line_node(C)); } -#line 648 "inweb/Chapter 5/Weave Tree.w" +#line 666 "inweb/Chapter 5/Weave Tree.w" tree_node *WeaveTree__weave_item_node(heterogeneous_tree *tree, int depth, text_stream *label) { weave_item_node *C = CREATE(weave_item_node); C->depth = depth; @@ -23680,7 +23726,7 @@ void Formats__render(text_stream *OUT, heterogeneous_tree *tree, filename *into) filename *F = Patterns__obtain_filename(C->wv->pattern, template); TEMPORARY_TEXT(interior); VMETHOD_CALL(wf, RENDER_FOR_MTID, interior, tree); - Bibliographic__set_datum(C->wv->weave_web->md, TL_IS_397, interior); + Bibliographic__set_datum(C->wv->weave_web->md, TL_IS_399, interior); if (F) Collater__for_order(OUT, C->wv, F, into); else WRITE("%S", interior); DISCARD_TEXT(interior); @@ -23754,7 +23800,7 @@ int Formats__substitute_post_processing_data(OUTPUT_STREAM, weave_order *wv, #line 9 "inweb/Chapter 5/Plain Text Format.w" void PlainText__create(void) { - weave_format *wf = Formats__create_weave_format(TL_IS_398, TL_IS_399); + weave_format *wf = Formats__create_weave_format(TL_IS_400, TL_IS_401); METHOD_ADD(wf, RENDER_FOR_MTID, PlainText__render); METHOD_ADD(wf, CHAPTER_TP_FOR_MTID, PlainText__chapter_title_page); } @@ -23774,7 +23820,7 @@ int PlainText__render_visit(tree_node *N, void *state, int L) { text_stream *OUT = prs->OUT; if (N->type == weave_document_node_type) { -#line 124 "inweb/Chapter 5/Plain Text Format.w" +#line 125 "inweb/Chapter 5/Plain Text Format.w" ; } @@ -23782,7 +23828,7 @@ int PlainText__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_head_node_type) { -#line 81 "inweb/Chapter 5/Plain Text Format.w" +#line 82 "inweb/Chapter 5/Plain Text Format.w" weave_head_node *C = RETRIEVE_POINTER_weave_head_node(N->content); WRITE("[%S]\n", C->banner); @@ -23791,7 +23837,7 @@ int PlainText__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_body_node_type) { -#line 124 "inweb/Chapter 5/Plain Text Format.w" +#line 125 "inweb/Chapter 5/Plain Text Format.w" ; } @@ -23799,7 +23845,7 @@ int PlainText__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_tail_node_type) { -#line 85 "inweb/Chapter 5/Plain Text Format.w" +#line 86 "inweb/Chapter 5/Plain Text Format.w" weave_tail_node *C = RETRIEVE_POINTER_weave_tail_node(N->content); WRITE("[%S]\n", C->rennab); @@ -23808,7 +23854,7 @@ int PlainText__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_verbatim_node_type) { -#line 120 "inweb/Chapter 5/Plain Text Format.w" +#line 121 "inweb/Chapter 5/Plain Text Format.w" weave_verbatim_node *C = RETRIEVE_POINTER_weave_verbatim_node(N->content); WRITE("%S", C->content); @@ -23817,7 +23863,7 @@ int PlainText__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_chapter_header_node_type) { -#line 89 "inweb/Chapter 5/Plain Text Format.w" +#line 90 "inweb/Chapter 5/Plain Text Format.w" weave_chapter_header_node *C = RETRIEVE_POINTER_weave_chapter_header_node(N->content); WRITE("%S\n\n", C->chap->md->ch_title); @@ -23826,7 +23872,7 @@ int PlainText__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_chapter_footer_node_type) { -#line 124 "inweb/Chapter 5/Plain Text Format.w" +#line 125 "inweb/Chapter 5/Plain Text Format.w" ; } @@ -23834,7 +23880,7 @@ int PlainText__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_section_header_node_type) { -#line 93 "inweb/Chapter 5/Plain Text Format.w" +#line 94 "inweb/Chapter 5/Plain Text Format.w" weave_section_header_node *C = RETRIEVE_POINTER_weave_section_header_node(N->content); WRITE("%S\n\n", C->sect->md->sect_title); @@ -23843,7 +23889,7 @@ int PlainText__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_section_footer_node_type) { -#line 124 "inweb/Chapter 5/Plain Text Format.w" +#line 125 "inweb/Chapter 5/Plain Text Format.w" ; } @@ -23851,7 +23897,7 @@ int PlainText__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_section_purpose_node_type) { -#line 97 "inweb/Chapter 5/Plain Text Format.w" +#line 98 "inweb/Chapter 5/Plain Text Format.w" weave_section_purpose_node *C = RETRIEVE_POINTER_weave_section_purpose_node(N->content); PlainText__subheading(prs->wv->format, OUT, prs->wv, 2, C->purpose, NULL); @@ -23860,7 +23906,7 @@ int PlainText__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_subheading_node_type) { -#line 101 "inweb/Chapter 5/Plain Text Format.w" +#line 102 "inweb/Chapter 5/Plain Text Format.w" weave_subheading_node *C = RETRIEVE_POINTER_weave_subheading_node(N->content); PlainText__subheading(prs->wv->format, OUT, prs->wv, 1, C->text, NULL); @@ -23869,7 +23915,7 @@ int PlainText__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_bar_node_type) { -#line 105 "inweb/Chapter 5/Plain Text Format.w" +#line 106 "inweb/Chapter 5/Plain Text Format.w" WRITE("\n----------------------------------------------------------------------\n\n"); } @@ -23877,7 +23923,7 @@ int PlainText__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_pagebreak_node_type) { -#line 108 "inweb/Chapter 5/Plain Text Format.w" +#line 109 "inweb/Chapter 5/Plain Text Format.w" ; } @@ -23885,7 +23931,7 @@ int PlainText__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_paragraph_heading_node_type) { -#line 111 "inweb/Chapter 5/Plain Text Format.w" +#line 112 "inweb/Chapter 5/Plain Text Format.w" weave_paragraph_heading_node *C = RETRIEVE_POINTER_weave_paragraph_heading_node(N->content); WRITE("\n"); PlainText__locale(prs->wv->format, OUT, prs->wv, C->para, NULL); @@ -23896,7 +23942,7 @@ int PlainText__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_endnote_node_type) { -#line 117 "inweb/Chapter 5/Plain Text Format.w" +#line 118 "inweb/Chapter 5/Plain Text Format.w" WRITE("\n"); } @@ -23904,105 +23950,113 @@ int PlainText__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_figure_node_type) { -#line 124 "inweb/Chapter 5/Plain Text Format.w" +#line 125 "inweb/Chapter 5/Plain Text Format.w" ; } #line 50 "inweb/Chapter 5/Plain Text Format.w" - else if (N->type == weave_material_node_type) + else if (N->type == weave_audio_node_type) { -#line 124 "inweb/Chapter 5/Plain Text Format.w" +#line 125 "inweb/Chapter 5/Plain Text Format.w" ; } #line 51 "inweb/Chapter 5/Plain Text Format.w" - else if (N->type == weave_embed_node_type) + else if (N->type == weave_material_node_type) { -#line 127 "inweb/Chapter 5/Plain Text Format.w" - weave_embed_node *C = RETRIEVE_POINTER_weave_embed_node(N->content); - WRITE("[See %S video with ID %S.]\n", C->service, C->ID); +#line 125 "inweb/Chapter 5/Plain Text Format.w" + ; } #line 52 "inweb/Chapter 5/Plain Text Format.w" - else if (N->type == weave_pmac_node_type) + else if (N->type == weave_embed_node_type) { -#line 131 "inweb/Chapter 5/Plain Text Format.w" - weave_pmac_node *C = RETRIEVE_POINTER_weave_pmac_node(N->content); - PlainText__para_macro(prs->wv->format, OUT, prs->wv, C->pmac, C->defn); +#line 128 "inweb/Chapter 5/Plain Text Format.w" + weave_embed_node *C = RETRIEVE_POINTER_weave_embed_node(N->content); + WRITE("[See %S video with ID %S.]\n", C->service, C->ID); } #line 53 "inweb/Chapter 5/Plain Text Format.w" - else if (N->type == weave_vskip_node_type) + else if (N->type == weave_pmac_node_type) { -#line 135 "inweb/Chapter 5/Plain Text Format.w" - WRITE("\n"); +#line 132 "inweb/Chapter 5/Plain Text Format.w" + weave_pmac_node *C = RETRIEVE_POINTER_weave_pmac_node(N->content); + PlainText__para_macro(prs->wv->format, OUT, prs->wv, C->pmac, C->defn); } #line 54 "inweb/Chapter 5/Plain Text Format.w" - else if (N->type == weave_chapter_node_type) + else if (N->type == weave_vskip_node_type) { -#line 124 "inweb/Chapter 5/Plain Text Format.w" - ; +#line 136 "inweb/Chapter 5/Plain Text Format.w" + WRITE("\n"); } #line 55 "inweb/Chapter 5/Plain Text Format.w" - else if (N->type == weave_section_node_type) + else if (N->type == weave_chapter_node_type) { -#line 138 "inweb/Chapter 5/Plain Text Format.w" - weave_section_node *C = RETRIEVE_POINTER_weave_section_node(N->content); - LOG("It was %d\n", C->allocation_id); +#line 125 "inweb/Chapter 5/Plain Text Format.w" + ; } #line 56 "inweb/Chapter 5/Plain Text Format.w" + else if (N->type == weave_section_node_type) +{ +#line 139 "inweb/Chapter 5/Plain Text Format.w" + weave_section_node *C = RETRIEVE_POINTER_weave_section_node(N->content); + LOG("It was %d\n", C->allocation_id); + +} +#line 57 "inweb/Chapter 5/Plain Text Format.w" + else if (N->type == weave_code_line_node_type) { -#line 142 "inweb/Chapter 5/Plain Text Format.w" +#line 143 "inweb/Chapter 5/Plain Text Format.w" for (tree_node *M = N->child; M; M = M->next) Trees__traverse_from(M, &PlainText__render_visit, (void *) prs, L+1); WRITE("\n"); return FALSE; } -#line 57 "inweb/Chapter 5/Plain Text Format.w" +#line 58 "inweb/Chapter 5/Plain Text Format.w" else if (N->type == weave_function_usage_node_type) { -#line 148 "inweb/Chapter 5/Plain Text Format.w" +#line 149 "inweb/Chapter 5/Plain Text Format.w" weave_function_usage_node *C = RETRIEVE_POINTER_weave_function_usage_node(N->content); WRITE("%S", C->fn->function_name); } -#line 58 "inweb/Chapter 5/Plain Text Format.w" +#line 59 "inweb/Chapter 5/Plain Text Format.w" else if (N->type == weave_commentary_node_type) { -#line 152 "inweb/Chapter 5/Plain Text Format.w" +#line 153 "inweb/Chapter 5/Plain Text Format.w" weave_commentary_node *C = RETRIEVE_POINTER_weave_commentary_node(N->content); if (C->in_code) WRITE(" /* "); PlainText__commentary_text(prs->wv->format, OUT, prs->wv, C->text); if (C->in_code) WRITE(" */ "); } -#line 59 "inweb/Chapter 5/Plain Text Format.w" +#line 60 "inweb/Chapter 5/Plain Text Format.w" else if (N->type == weave_carousel_slide_node_type) { -#line 124 "inweb/Chapter 5/Plain Text Format.w" +#line 125 "inweb/Chapter 5/Plain Text Format.w" ; } -#line 60 "inweb/Chapter 5/Plain Text Format.w" +#line 61 "inweb/Chapter 5/Plain Text Format.w" else if (N->type == weave_toc_node_type) { -#line 158 "inweb/Chapter 5/Plain Text Format.w" +#line 159 "inweb/Chapter 5/Plain Text Format.w" weave_toc_node *C = RETRIEVE_POINTER_weave_toc_node(N->content); WRITE("%S.", C->text1); for (tree_node *M = N->child; M; M = M->next) { @@ -24013,149 +24067,149 @@ int PlainText__render_visit(tree_node *N, void *state, int L) { return FALSE; } -#line 61 "inweb/Chapter 5/Plain Text Format.w" +#line 62 "inweb/Chapter 5/Plain Text Format.w" else if (N->type == weave_toc_line_node_type) { -#line 168 "inweb/Chapter 5/Plain Text Format.w" +#line 169 "inweb/Chapter 5/Plain Text Format.w" weave_toc_line_node *C = RETRIEVE_POINTER_weave_toc_line_node(N->content); WRITE("%S %S", C->text1, C->text2); } -#line 62 "inweb/Chapter 5/Plain Text Format.w" +#line 63 "inweb/Chapter 5/Plain Text Format.w" else if (N->type == weave_chapter_title_page_node_type) { -#line 172 "inweb/Chapter 5/Plain Text Format.w" +#line 173 "inweb/Chapter 5/Plain Text Format.w" weave_chapter_title_page_node *C = RETRIEVE_POINTER_weave_chapter_title_page_node(N->content); LOG("It was %d\n", C->allocation_id); } -#line 63 "inweb/Chapter 5/Plain Text Format.w" +#line 64 "inweb/Chapter 5/Plain Text Format.w" else if (N->type == weave_defn_node_type) { -#line 176 "inweb/Chapter 5/Plain Text Format.w" +#line 177 "inweb/Chapter 5/Plain Text Format.w" weave_defn_node *C = RETRIEVE_POINTER_weave_defn_node(N->content); WRITE("%S ", C->keyword); } -#line 64 "inweb/Chapter 5/Plain Text Format.w" +#line 65 "inweb/Chapter 5/Plain Text Format.w" else if (N->type == weave_source_code_node_type) { -#line 180 "inweb/Chapter 5/Plain Text Format.w" +#line 181 "inweb/Chapter 5/Plain Text Format.w" weave_source_code_node *C = RETRIEVE_POINTER_weave_source_code_node(N->content); WRITE("%S", C->matter); } -#line 65 "inweb/Chapter 5/Plain Text Format.w" +#line 66 "inweb/Chapter 5/Plain Text Format.w" else if (N->type == weave_url_node_type) { -#line 184 "inweb/Chapter 5/Plain Text Format.w" +#line 185 "inweb/Chapter 5/Plain Text Format.w" weave_url_node *C = RETRIEVE_POINTER_weave_url_node(N->content); WRITE("%S", C->url); } -#line 66 "inweb/Chapter 5/Plain Text Format.w" +#line 67 "inweb/Chapter 5/Plain Text Format.w" else if (N->type == weave_footnote_cue_node_type) { -#line 188 "inweb/Chapter 5/Plain Text Format.w" +#line 189 "inweb/Chapter 5/Plain Text Format.w" weave_footnote_cue_node *C = RETRIEVE_POINTER_weave_footnote_cue_node(N->content); WRITE("[%S]", C->cue_text); } -#line 67 "inweb/Chapter 5/Plain Text Format.w" +#line 68 "inweb/Chapter 5/Plain Text Format.w" else if (N->type == weave_begin_footnote_text_node_type) { -#line 192 "inweb/Chapter 5/Plain Text Format.w" +#line 193 "inweb/Chapter 5/Plain Text Format.w" weave_begin_footnote_text_node *C = RETRIEVE_POINTER_weave_begin_footnote_text_node(N->content); LOG("It was %d\n", C->allocation_id); } -#line 68 "inweb/Chapter 5/Plain Text Format.w" +#line 69 "inweb/Chapter 5/Plain Text Format.w" else if (N->type == weave_display_line_node_type) { -#line 196 "inweb/Chapter 5/Plain Text Format.w" +#line 197 "inweb/Chapter 5/Plain Text Format.w" weave_display_line_node *C = RETRIEVE_POINTER_weave_display_line_node(N->content); WRITE(" %S\n", C->text); } -#line 69 "inweb/Chapter 5/Plain Text Format.w" +#line 70 "inweb/Chapter 5/Plain Text Format.w" else if (N->type == weave_function_defn_node_type) { -#line 200 "inweb/Chapter 5/Plain Text Format.w" +#line 201 "inweb/Chapter 5/Plain Text Format.w" weave_function_defn_node *C = RETRIEVE_POINTER_weave_function_defn_node(N->content); WRITE("%S", C->fn->function_name); return TRUE; } -#line 70 "inweb/Chapter 5/Plain Text Format.w" +#line 71 "inweb/Chapter 5/Plain Text Format.w" else if (N->type == weave_item_node_type) { -#line 205 "inweb/Chapter 5/Plain Text Format.w" +#line 206 "inweb/Chapter 5/Plain Text Format.w" weave_item_node *C = RETRIEVE_POINTER_weave_item_node(N->content); if (C->depth == 1) WRITE("%-4s ", C->label); else WRITE("%-8s ", C->label); } -#line 71 "inweb/Chapter 5/Plain Text Format.w" +#line 72 "inweb/Chapter 5/Plain Text Format.w" else if (N->type == weave_grammar_index_node_type) { -#line 124 "inweb/Chapter 5/Plain Text Format.w" - ; - -} -#line 72 "inweb/Chapter 5/Plain Text Format.w" - - else if (N->type == weave_inline_node_type) -{ -#line 124 "inweb/Chapter 5/Plain Text Format.w" +#line 125 "inweb/Chapter 5/Plain Text Format.w" ; } #line 73 "inweb/Chapter 5/Plain Text Format.w" + else if (N->type == weave_inline_node_type) +{ +#line 125 "inweb/Chapter 5/Plain Text Format.w" + ; + +} +#line 74 "inweb/Chapter 5/Plain Text Format.w" + else if (N->type == weave_locale_node_type) { -#line 210 "inweb/Chapter 5/Plain Text Format.w" +#line 211 "inweb/Chapter 5/Plain Text Format.w" weave_locale_node *C = RETRIEVE_POINTER_weave_locale_node(N->content); WRITE("%S%S", C->par1->ornament, C->par1->paragraph_number); if (C->par2) WRITE("-%S", C->par2->paragraph_number); } -#line 74 "inweb/Chapter 5/Plain Text Format.w" +#line 75 "inweb/Chapter 5/Plain Text Format.w" else if (N->type == weave_maths_node_type) { -#line 215 "inweb/Chapter 5/Plain Text Format.w" +#line 216 "inweb/Chapter 5/Plain Text Format.w" weave_maths_node *C = RETRIEVE_POINTER_weave_maths_node(N->content); if (C->displayed) WRITE("\n"); WRITE("%S", C->content); if (C->displayed) WRITE("\n\n"); } -#line 75 "inweb/Chapter 5/Plain Text Format.w" +#line 76 "inweb/Chapter 5/Plain Text Format.w" else internal_error("unable to render unknown node"); return TRUE; } -#line 221 "inweb/Chapter 5/Plain Text Format.w" +#line 222 "inweb/Chapter 5/Plain Text Format.w" void PlainText__subheading(weave_format *self, text_stream *OUT, weave_order *wv, int level, text_stream *comment, text_stream *head) { WRITE("%S:\n", comment); if ((level == 2) && (head)) WRITE("%S\n\n", head); } -#line 228 "inweb/Chapter 5/Plain Text Format.w" +#line 229 "inweb/Chapter 5/Plain Text Format.w" void PlainText__toc(weave_format *self, text_stream *OUT, weave_order *wv, int stage, text_stream *text1, text_stream *text2, paragraph *P) { switch (stage) { @@ -24166,7 +24220,7 @@ void PlainText__toc(weave_format *self, text_stream *OUT, weave_order *wv, int s } } -#line 239 "inweb/Chapter 5/Plain Text Format.w" +#line 240 "inweb/Chapter 5/Plain Text Format.w" void PlainText__chapter_title_page(weave_format *self, text_stream *OUT, weave_order *wv, chapter *C) { WRITE("%S\n\n", C->md->rubric); @@ -24176,7 +24230,7 @@ void PlainText__chapter_title_page(weave_format *self, text_stream *OUT, S->md->sect_range, S->md->sect_title, S->sect_purpose); } -#line 249 "inweb/Chapter 5/Plain Text Format.w" +#line 250 "inweb/Chapter 5/Plain Text Format.w" void PlainText__para_macro(weave_format *self, text_stream *OUT, weave_order *wv, para_macro *pmac, int defn) { WRITE("<%S (%S)>%s", @@ -24184,25 +24238,25 @@ void PlainText__para_macro(weave_format *self, text_stream *OUT, weave_order *wv (defn)?" =":""); } -#line 257 "inweb/Chapter 5/Plain Text Format.w" +#line 258 "inweb/Chapter 5/Plain Text Format.w" void PlainText__blank_line(weave_format *self, text_stream *OUT, weave_order *wv, int in_comment) { WRITE("\n"); } -#line 263 "inweb/Chapter 5/Plain Text Format.w" +#line 264 "inweb/Chapter 5/Plain Text Format.w" void PlainText__endnote(weave_format *self, text_stream *OUT, weave_order *wv, int end) { WRITE("\n"); } -#line 269 "inweb/Chapter 5/Plain Text Format.w" +#line 270 "inweb/Chapter 5/Plain Text Format.w" void PlainText__commentary_text(weave_format *self, text_stream *OUT, weave_order *wv, text_stream *id) { WRITE("%S", id); } -#line 275 "inweb/Chapter 5/Plain Text Format.w" +#line 276 "inweb/Chapter 5/Plain Text Format.w" void PlainText__locale(weave_format *self, text_stream *OUT, weave_order *wv, paragraph *par1, paragraph *par2) { WRITE("%S%S", par1->ornament, par1->paragraph_number); @@ -24214,7 +24268,7 @@ void TeX__create(void) { { #line 16 "inweb/Chapter 5/TeX Format.w" - weave_format *wf = Formats__create_weave_format(TL_IS_400, TL_IS_401); + weave_format *wf = Formats__create_weave_format(TL_IS_402, TL_IS_403); METHOD_ADD(wf, RENDER_FOR_MTID, TeX__render_TeX); { @@ -24233,7 +24287,7 @@ void TeX__create(void) { { #line 21 "inweb/Chapter 5/TeX Format.w" - weave_format *wf = Formats__create_weave_format(TL_IS_402, TL_IS_403); + weave_format *wf = Formats__create_weave_format(TL_IS_404, TL_IS_405); METHOD_ADD(wf, RENDER_FOR_MTID, TeX__render_DVI); { @@ -24255,7 +24309,7 @@ void TeX__create(void) { { #line 29 "inweb/Chapter 5/TeX Format.w" - weave_format *wf = Formats__create_weave_format(TL_IS_404, TL_IS_405); + weave_format *wf = Formats__create_weave_format(TL_IS_406, TL_IS_407); METHOD_ADD(wf, RENDER_FOR_MTID, TeX__render_PDF); { @@ -24303,7 +24357,7 @@ int TeX__render_visit(tree_node *N, void *state, int L) { text_stream *OUT = trs->OUT; if (N->type == weave_document_node_type) { -#line 203 "inweb/Chapter 5/TeX Format.w" +#line 204 "inweb/Chapter 5/TeX Format.w" ; } @@ -24311,13 +24365,13 @@ int TeX__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_head_node_type) { -#line 121 "inweb/Chapter 5/TeX Format.w" +#line 122 "inweb/Chapter 5/TeX Format.w" weave_head_node *C = RETRIEVE_POINTER_weave_head_node(N->content); WRITE("%% %S\n", C->banner); { -#line 331 "inweb/Chapter 5/TeX Format.w" - filename *Macros = Patterns__obtain_filename(trs->wv->pattern, TL_IS_407); +#line 332 "inweb/Chapter 5/TeX Format.w" + filename *Macros = Patterns__obtain_filename(trs->wv->pattern, TL_IS_409); FILE *MACROS = Filenames__fopen(Macros, "r"); if (MACROS == NULL) Errors__fatal_with_file("can't open file of TeX macros", Macros); while (TRUE) { @@ -24328,7 +24382,7 @@ int TeX__render_visit(tree_node *N, void *state, int L) { fclose(MACROS); } -#line 123 "inweb/Chapter 5/TeX Format.w" +#line 124 "inweb/Chapter 5/TeX Format.w" ; } @@ -24336,7 +24390,7 @@ int TeX__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_body_node_type) { -#line 203 "inweb/Chapter 5/TeX Format.w" +#line 204 "inweb/Chapter 5/TeX Format.w" ; } @@ -24344,7 +24398,7 @@ int TeX__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_tail_node_type) { -#line 126 "inweb/Chapter 5/TeX Format.w" +#line 127 "inweb/Chapter 5/TeX Format.w" weave_tail_node *C = RETRIEVE_POINTER_weave_tail_node(N->content); WRITE("%% %S\n", C->rennab); WRITE("\\end\n"); @@ -24354,7 +24408,7 @@ int TeX__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_verbatim_node_type) { -#line 199 "inweb/Chapter 5/TeX Format.w" +#line 200 "inweb/Chapter 5/TeX Format.w" weave_verbatim_node *C = RETRIEVE_POINTER_weave_verbatim_node(N->content); WRITE("%S", C->content); @@ -24363,7 +24417,7 @@ int TeX__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_chapter_header_node_type) { -#line 131 "inweb/Chapter 5/TeX Format.w" +#line 132 "inweb/Chapter 5/TeX Format.w" weave_chapter_header_node *C = RETRIEVE_POINTER_weave_chapter_header_node(N->content); TeX__paragraph_heading(trs->wv->format, OUT, trs->wv, FIRST_IN_LINKED_LIST(section, C->chap->sections), NULL, C->chap->md->ch_title, 3, FALSE); @@ -24372,7 +24426,7 @@ int TeX__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_chapter_footer_node_type) { -#line 203 "inweb/Chapter 5/TeX Format.w" +#line 204 "inweb/Chapter 5/TeX Format.w" ; } @@ -24380,7 +24434,7 @@ int TeX__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_section_header_node_type) { -#line 135 "inweb/Chapter 5/TeX Format.w" +#line 136 "inweb/Chapter 5/TeX Format.w" weave_section_header_node *C = RETRIEVE_POINTER_weave_section_header_node(N->content); TeX__paragraph_heading(trs->wv->format, OUT, trs->wv, C->sect, NULL, C->sect->md->sect_title, 2, FALSE); @@ -24389,7 +24443,7 @@ int TeX__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_section_footer_node_type) { -#line 203 "inweb/Chapter 5/TeX Format.w" +#line 204 "inweb/Chapter 5/TeX Format.w" ; } @@ -24397,7 +24451,7 @@ int TeX__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_section_purpose_node_type) { -#line 139 "inweb/Chapter 5/TeX Format.w" +#line 140 "inweb/Chapter 5/TeX Format.w" weave_section_purpose_node *C = RETRIEVE_POINTER_weave_section_purpose_node(N->content); TeX__subheading(trs->wv->format, OUT, trs->wv, 2, C->purpose, NULL); @@ -24406,7 +24460,7 @@ int TeX__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_subheading_node_type) { -#line 143 "inweb/Chapter 5/TeX Format.w" +#line 144 "inweb/Chapter 5/TeX Format.w" weave_subheading_node *C = RETRIEVE_POINTER_weave_subheading_node(N->content); TeX__subheading(trs->wv->format, OUT, trs->wv, 1, C->text, NULL); @@ -24415,7 +24469,7 @@ int TeX__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_bar_node_type) { -#line 147 "inweb/Chapter 5/TeX Format.w" +#line 148 "inweb/Chapter 5/TeX Format.w" WRITE("\\par\\medskip\\noindent\\hrule\\medskip\\noindent\n"); } @@ -24423,7 +24477,7 @@ int TeX__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_pagebreak_node_type) { -#line 150 "inweb/Chapter 5/TeX Format.w" +#line 151 "inweb/Chapter 5/TeX Format.w" WRITE("\\vfill\\eject\n"); } @@ -24431,16 +24485,16 @@ int TeX__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_paragraph_heading_node_type) { -#line 153 "inweb/Chapter 5/TeX Format.w" +#line 154 "inweb/Chapter 5/TeX Format.w" weave_paragraph_heading_node *C = RETRIEVE_POINTER_weave_paragraph_heading_node(N->content); - TeX__paragraph_heading(trs->wv->format, OUT, trs->wv, C->para->under_section, C->para, TL_IS_406, 0, FALSE); + TeX__paragraph_heading(trs->wv->format, OUT, trs->wv, C->para->under_section, C->para, TL_IS_408, 0, FALSE); } #line 88 "inweb/Chapter 5/TeX Format.w" else if (N->type == weave_endnote_node_type) { -#line 157 "inweb/Chapter 5/TeX Format.w" +#line 158 "inweb/Chapter 5/TeX Format.w" WRITE("\\par\\noindent\\penalty10000\n"); WRITE("{\\usagefont "); for (tree_node *M = N->child; M; M = M->next) @@ -24453,7 +24507,7 @@ int TeX__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_figure_node_type) { -#line 172 "inweb/Chapter 5/TeX Format.w" +#line 173 "inweb/Chapter 5/TeX Format.w" if (trs->as_PDF) { weave_figure_node *C = RETRIEVE_POINTER_weave_figure_node(N->content); WRITE("\\pdfximage"); @@ -24471,9 +24525,17 @@ int TeX__render_visit(tree_node *N, void *state, int L) { } #line 90 "inweb/Chapter 5/TeX Format.w" + else if (N->type == weave_audio_node_type) +{ +#line 204 "inweb/Chapter 5/TeX Format.w" + ; + +} +#line 91 "inweb/Chapter 5/TeX Format.w" + else if (N->type == weave_material_node_type) { -#line 187 "inweb/Chapter 5/TeX Format.w" +#line 188 "inweb/Chapter 5/TeX Format.w" if (N->child) { weave_material_node *C = RETRIEVE_POINTER_weave_material_node(N->content); if ((C->material_type != COMMENTARY_MATERIAL) && (C->material_type != ENDNOTES_MATERIAL)) @@ -24486,20 +24548,20 @@ int TeX__render_visit(tree_node *N, void *state, int L) { return FALSE; } -#line 91 "inweb/Chapter 5/TeX Format.w" +#line 92 "inweb/Chapter 5/TeX Format.w" else if (N->type == weave_embed_node_type) { -#line 206 "inweb/Chapter 5/TeX Format.w" +#line 207 "inweb/Chapter 5/TeX Format.w" weave_embed_node *C = RETRIEVE_POINTER_weave_embed_node(N->content); LOG("It was %d\n", C->allocation_id); } -#line 92 "inweb/Chapter 5/TeX Format.w" +#line 93 "inweb/Chapter 5/TeX Format.w" else if (N->type == weave_pmac_node_type) { -#line 210 "inweb/Chapter 5/TeX Format.w" +#line 211 "inweb/Chapter 5/TeX Format.w" weave_pmac_node *C = RETRIEVE_POINTER_weave_pmac_node(N->content); if (trs->as_PDF) TeX__para_macro_PDF_1(trs->wv->format, OUT, trs->wv, C->pmac, C->defn); @@ -24508,38 +24570,38 @@ int TeX__render_visit(tree_node *N, void *state, int L) { TeX__para_macro_PDF_2(trs->wv->format, OUT, trs->wv, C->pmac, C->defn); } -#line 93 "inweb/Chapter 5/TeX Format.w" +#line 94 "inweb/Chapter 5/TeX Format.w" else if (N->type == weave_vskip_node_type) { -#line 218 "inweb/Chapter 5/TeX Format.w" +#line 219 "inweb/Chapter 5/TeX Format.w" weave_vskip_node *C = RETRIEVE_POINTER_weave_vskip_node(N->content); if (C->in_comment) WRITE("\\smallskip\\par\\noindent%%\n"); else WRITE("\\smallskip\n"); } -#line 94 "inweb/Chapter 5/TeX Format.w" +#line 95 "inweb/Chapter 5/TeX Format.w" else if (N->type == weave_chapter_node_type) { -#line 203 "inweb/Chapter 5/TeX Format.w" +#line 204 "inweb/Chapter 5/TeX Format.w" ; -} -#line 95 "inweb/Chapter 5/TeX Format.w" - - else if (N->type == weave_section_node_type) -{ -#line 223 "inweb/Chapter 5/TeX Format.w" - weave_section_node *C = RETRIEVE_POINTER_weave_section_node(N->content); - LOG("It was %d\n", C->allocation_id); - } #line 96 "inweb/Chapter 5/TeX Format.w" + else if (N->type == weave_section_node_type) +{ +#line 224 "inweb/Chapter 5/TeX Format.w" + weave_section_node *C = RETRIEVE_POINTER_weave_section_node(N->content); + LOG("It was %d\n", C->allocation_id); + +} +#line 97 "inweb/Chapter 5/TeX Format.w" + else if (N->type == weave_code_line_node_type) { -#line 227 "inweb/Chapter 5/TeX Format.w" +#line 228 "inweb/Chapter 5/TeX Format.w" for (tree_node *M = N->child; M; M = M->next) Trees__traverse_from(M, &TeX__render_visit, (void *) trs, L+1); WRITE("|"); @@ -24547,39 +24609,39 @@ int TeX__render_visit(tree_node *N, void *state, int L) { return FALSE; } -#line 97 "inweb/Chapter 5/TeX Format.w" +#line 98 "inweb/Chapter 5/TeX Format.w" else if (N->type == weave_function_usage_node_type) { -#line 234 "inweb/Chapter 5/TeX Format.w" +#line 235 "inweb/Chapter 5/TeX Format.w" weave_function_usage_node *C = RETRIEVE_POINTER_weave_function_usage_node(N->content); WRITE("%S", C->fn->function_name); } -#line 98 "inweb/Chapter 5/TeX Format.w" +#line 99 "inweb/Chapter 5/TeX Format.w" else if (N->type == weave_commentary_node_type) { -#line 238 "inweb/Chapter 5/TeX Format.w" +#line 239 "inweb/Chapter 5/TeX Format.w" weave_commentary_node *C = RETRIEVE_POINTER_weave_commentary_node(N->content); if (C->in_code) WRITE(" \\hfill{\\ttninepoint\\it "); TeX__commentary_text(NULL, OUT, trs->wv, C->text); if (C->in_code) WRITE("}"); } -#line 99 "inweb/Chapter 5/TeX Format.w" +#line 100 "inweb/Chapter 5/TeX Format.w" else if (N->type == weave_carousel_slide_node_type) { -#line 203 "inweb/Chapter 5/TeX Format.w" +#line 204 "inweb/Chapter 5/TeX Format.w" ; } -#line 100 "inweb/Chapter 5/TeX Format.w" +#line 101 "inweb/Chapter 5/TeX Format.w" else if (N->type == weave_toc_node_type) { -#line 244 "inweb/Chapter 5/TeX Format.w" +#line 245 "inweb/Chapter 5/TeX Format.w" WRITE("\\medskip\\hrule\\smallskip\\par\\noindent{\\usagefont "); for (tree_node *M = N->child; M; M = M->next) { Trees__traverse_from(M, &HTMLFormat__render_visit, (void *) trs, L+1); @@ -24589,38 +24651,38 @@ int TeX__render_visit(tree_node *N, void *state, int L) { return FALSE; } -#line 101 "inweb/Chapter 5/TeX Format.w" +#line 102 "inweb/Chapter 5/TeX Format.w" else if (N->type == weave_toc_line_node_type) { -#line 253 "inweb/Chapter 5/TeX Format.w" +#line 254 "inweb/Chapter 5/TeX Format.w" weave_toc_line_node *C = RETRIEVE_POINTER_weave_toc_line_node(N->content); WRITE("%S~%S", C->text1, C->text2); } -#line 102 "inweb/Chapter 5/TeX Format.w" +#line 103 "inweb/Chapter 5/TeX Format.w" else if (N->type == weave_chapter_title_page_node_type) { -#line 257 "inweb/Chapter 5/TeX Format.w" +#line 258 "inweb/Chapter 5/TeX Format.w" weave_chapter_title_page_node *C = RETRIEVE_POINTER_weave_chapter_title_page_node(N->content); LOG("It was %d\n", C->allocation_id); } -#line 103 "inweb/Chapter 5/TeX Format.w" +#line 104 "inweb/Chapter 5/TeX Format.w" else if (N->type == weave_defn_node_type) { -#line 261 "inweb/Chapter 5/TeX Format.w" +#line 262 "inweb/Chapter 5/TeX Format.w" weave_defn_node *C = RETRIEVE_POINTER_weave_defn_node(N->content); WRITE("{\\ninebf %S} ", C->keyword); } -#line 104 "inweb/Chapter 5/TeX Format.w" +#line 105 "inweb/Chapter 5/TeX Format.w" else if (N->type == weave_source_code_node_type) { -#line 265 "inweb/Chapter 5/TeX Format.w" +#line 266 "inweb/Chapter 5/TeX Format.w" weave_source_code_node *C = RETRIEVE_POINTER_weave_source_code_node(N->content); int starts = FALSE; if (N == N->parent->child) starts = TRUE; @@ -24628,57 +24690,57 @@ int TeX__render_visit(tree_node *N, void *state, int L) { C->matter, C->colouring, starts); } -#line 105 "inweb/Chapter 5/TeX Format.w" +#line 106 "inweb/Chapter 5/TeX Format.w" else if (N->type == weave_url_node_type) { -#line 272 "inweb/Chapter 5/TeX Format.w" +#line 273 "inweb/Chapter 5/TeX Format.w" weave_url_node *C = RETRIEVE_POINTER_weave_url_node(N->content); WRITE("%S", C->url); } -#line 106 "inweb/Chapter 5/TeX Format.w" +#line 107 "inweb/Chapter 5/TeX Format.w" else if (N->type == weave_footnote_cue_node_type) { -#line 276 "inweb/Chapter 5/TeX Format.w" +#line 277 "inweb/Chapter 5/TeX Format.w" weave_footnote_cue_node *C = RETRIEVE_POINTER_weave_footnote_cue_node(N->content); WRITE("[%S]", C->cue_text); } -#line 107 "inweb/Chapter 5/TeX Format.w" +#line 108 "inweb/Chapter 5/TeX Format.w" else if (N->type == weave_begin_footnote_text_node_type) { -#line 280 "inweb/Chapter 5/TeX Format.w" +#line 281 "inweb/Chapter 5/TeX Format.w" weave_begin_footnote_text_node *C = RETRIEVE_POINTER_weave_begin_footnote_text_node(N->content); LOG("It was %d\n", C->allocation_id); } -#line 108 "inweb/Chapter 5/TeX Format.w" +#line 109 "inweb/Chapter 5/TeX Format.w" else if (N->type == weave_display_line_node_type) { -#line 284 "inweb/Chapter 5/TeX Format.w" +#line 285 "inweb/Chapter 5/TeX Format.w" weave_display_line_node *C = RETRIEVE_POINTER_weave_display_line_node(N->content); WRITE("\\quotesource{%S}\n", C->text); } -#line 109 "inweb/Chapter 5/TeX Format.w" +#line 110 "inweb/Chapter 5/TeX Format.w" else if (N->type == weave_function_defn_node_type) { -#line 288 "inweb/Chapter 5/TeX Format.w" +#line 289 "inweb/Chapter 5/TeX Format.w" weave_function_defn_node *C = RETRIEVE_POINTER_weave_function_defn_node(N->content); WRITE("%S", C->fn->function_name); return TRUE; } -#line 110 "inweb/Chapter 5/TeX Format.w" +#line 111 "inweb/Chapter 5/TeX Format.w" else if (N->type == weave_item_node_type) { -#line 293 "inweb/Chapter 5/TeX Format.w" +#line 294 "inweb/Chapter 5/TeX Format.w" weave_item_node *C = RETRIEVE_POINTER_weave_item_node(N->content); if (Str__len(C->label) > 0) { if (C->depth == 1) WRITE("\\item{(%S)}", C->label); @@ -24689,19 +24751,19 @@ int TeX__render_visit(tree_node *N, void *state, int L) { } } -#line 111 "inweb/Chapter 5/TeX Format.w" +#line 112 "inweb/Chapter 5/TeX Format.w" else if (N->type == weave_grammar_index_node_type) { -#line 303 "inweb/Chapter 5/TeX Format.w" +#line 304 "inweb/Chapter 5/TeX Format.w" InCSupport__weave_grammar_index(OUT); } -#line 112 "inweb/Chapter 5/TeX Format.w" +#line 113 "inweb/Chapter 5/TeX Format.w" else if (N->type == weave_inline_node_type) { -#line 306 "inweb/Chapter 5/TeX Format.w" +#line 307 "inweb/Chapter 5/TeX Format.w" WRITE("|"); for (tree_node *M = N->child; M; M = M->next) Trees__traverse_from(M, &HTMLFormat__render_visit, (void *) trs, L+1); @@ -24709,34 +24771,34 @@ int TeX__render_visit(tree_node *N, void *state, int L) { return FALSE; } -#line 113 "inweb/Chapter 5/TeX Format.w" +#line 114 "inweb/Chapter 5/TeX Format.w" else if (N->type == weave_locale_node_type) { -#line 313 "inweb/Chapter 5/TeX Format.w" +#line 314 "inweb/Chapter 5/TeX Format.w" weave_locale_node *C = RETRIEVE_POINTER_weave_locale_node(N->content); WRITE("$\\%S$%S", C->par1->ornament, C->par1->paragraph_number); if (C->par2) WRITE("-%S", C->par2->paragraph_number); } -#line 114 "inweb/Chapter 5/TeX Format.w" +#line 115 "inweb/Chapter 5/TeX Format.w" else if (N->type == weave_maths_node_type) { -#line 318 "inweb/Chapter 5/TeX Format.w" +#line 319 "inweb/Chapter 5/TeX Format.w" weave_maths_node *C = RETRIEVE_POINTER_weave_maths_node(N->content); if (C->displayed) WRITE("$$"); else WRITE("$"); WRITE("%S", C->content); if (C->displayed) WRITE("$$"); else WRITE("$"); } -#line 115 "inweb/Chapter 5/TeX Format.w" +#line 116 "inweb/Chapter 5/TeX Format.w" else internal_error("unable to render unknown node"); return TRUE; } -#line 342 "inweb/Chapter 5/TeX Format.w" +#line 343 "inweb/Chapter 5/TeX Format.w" int TeX__preserve_math_mode(weave_format *self, weave_order *wv, text_stream *matter, text_stream *id) { return TRUE; @@ -24746,7 +24808,7 @@ int TeX__yes(weave_format *self, weave_order *wv) { return TRUE; } -#line 352 "inweb/Chapter 5/TeX Format.w" +#line 353 "inweb/Chapter 5/TeX Format.w" void TeX__subheading(weave_format *self, text_stream *OUT, weave_order *wv, int level, text_stream *comment, text_stream *head) { switch (level) { @@ -24762,7 +24824,7 @@ void TeX__subheading(weave_format *self, text_stream *OUT, weave_order *wv, } } -#line 368 "inweb/Chapter 5/TeX Format.w" +#line 369 "inweb/Chapter 5/TeX Format.w" void TeX__toc(weave_format *self, text_stream *OUT, weave_order *wv, int stage, text_stream *text1, text_stream *text2, paragraph *P) { switch (stage) { @@ -24781,7 +24843,7 @@ void TeX__toc(weave_format *self, text_stream *OUT, weave_order *wv, int stage, } } -#line 387 "inweb/Chapter 5/TeX Format.w" +#line 388 "inweb/Chapter 5/TeX Format.w" void TeX__chapter_title_page(weave_format *self, text_stream *OUT, weave_order *wv, chapter *C) { WRITE("%S\\medskip\n", C->md->rubric); @@ -24793,37 +24855,37 @@ void TeX__chapter_title_page(weave_format *self, text_stream *OUT, weave_order * } } -#line 399 "inweb/Chapter 5/TeX Format.w" +#line 400 "inweb/Chapter 5/TeX Format.w" text_stream *P_literal = NULL; void TeX__paragraph_heading(weave_format *self, text_stream *OUT, weave_order *wv, section *S, paragraph *P, text_stream *heading_text, int weight, int no_skip) { text_stream *TeX_macro = NULL; { -#line 444 "inweb/Chapter 5/TeX Format.w" +#line 445 "inweb/Chapter 5/TeX Format.w" switch (weight) { - case 0: TeX_macro = TL_IS_408; break; - case 1: TeX_macro = TL_IS_409; break; - case 2: TeX_macro = TL_IS_410; break; - default: TeX_macro = TL_IS_411; break; + case 0: TeX_macro = TL_IS_410; break; + case 1: TeX_macro = TL_IS_411; break; + case 2: TeX_macro = TL_IS_412; break; + default: TeX_macro = TL_IS_413; break; } if (wv->theme_match) { switch (weight) { - case 0: TeX_macro = TL_IS_412; break; - case 1: TeX_macro = TL_IS_413; break; - case 2: TeX_macro = TL_IS_414; break; - default: TeX_macro = TL_IS_415; break; + case 0: TeX_macro = TL_IS_414; break; + case 1: TeX_macro = TL_IS_415; break; + case 2: TeX_macro = TL_IS_416; break; + default: TeX_macro = TL_IS_417; break; } } if (no_skip) { switch (weight) { - case 0: TeX_macro = TL_IS_416; break; - case 1: TeX_macro = TL_IS_417; break; + case 0: TeX_macro = TL_IS_418; break; + case 1: TeX_macro = TL_IS_419; break; } } } -#line 403 "inweb/Chapter 5/TeX Format.w" +#line 404 "inweb/Chapter 5/TeX Format.w" ; if (P_literal == NULL) P_literal = Str__new_from_wide_string(L"P"); @@ -24832,7 +24894,7 @@ void TeX__paragraph_heading(weave_format *self, text_stream *OUT, weave_order *w TEMPORARY_TEXT(mark); { -#line 475 "inweb/Chapter 5/TeX Format.w" +#line 476 "inweb/Chapter 5/TeX Format.w" text_stream *chaptermark = Str__new(); text_stream *sectionmark = Str__new(); if (weight == 3) { @@ -24850,7 +24912,7 @@ void TeX__paragraph_heading(weave_format *self, text_stream *OUT, weave_order *w WRITE_TO(mark, "%S%S\\quad$\\%S$%S", chaptermark, sectionmark, orn, N); } -#line 409 "inweb/Chapter 5/TeX Format.w" +#line 410 "inweb/Chapter 5/TeX Format.w" ; TEMPORARY_TEXT(modified); Str__copy(modified, heading_text); @@ -24870,19 +24932,19 @@ void TeX__paragraph_heading(weave_format *self, text_stream *OUT, weave_order *w Regexp__dispose_of(&mr); } -#line 497 "inweb/Chapter 5/TeX Format.w" +#line 498 "inweb/Chapter 5/TeX Format.w" void TeX__source_code(weave_format *self, text_stream *OUT, weave_order *wv, text_stream *matter, text_stream *colouring, int starts) { WRITE("\\smallskip\\par\\noindent"); if (starts) { { -#line 517 "inweb/Chapter 5/TeX Format.w" +#line 518 "inweb/Chapter 5/TeX Format.w" int tab_stops_of_indentation = Str__remove_indentation(matter, 4); for (int i=0; iornament, par1->paragraph_number); if (par2) WRITE("-%S", par2->paragraph_number); } -#line 619 "inweb/Chapter 5/TeX Format.w" +#line 620 "inweb/Chapter 5/TeX Format.w" void TeX__tail(weave_format *self, text_stream *OUT, weave_order *wv, text_stream *comment, section *S) { WRITE("%% %S\n", comment); WRITE("\\end\n"); } -#line 629 "inweb/Chapter 5/TeX Format.w" +#line 630 "inweb/Chapter 5/TeX Format.w" int TeX__preform_document(weave_format *self, text_stream *OUT, web *W, weave_order *wv, chapter *C, section *S, source_line *L, text_stream *matter, text_stream *concluding_comment) { @@ -25015,7 +25077,7 @@ int TeX__preform_document(weave_format *self, text_stream *OUT, web *W, weave_or preform_production_count = 0; { -#line 646 "inweb/Chapter 5/TeX Format.w" +#line 647 "inweb/Chapter 5/TeX Format.w" WRITE("\\nonterminal{%S} |::=|", L->preform_nonterminal_defined->unangled_name); if (L->preform_nonterminal_defined->as_function) { @@ -25032,14 +25094,14 @@ int TeX__preform_document(weave_format *self, text_stream *OUT, web *W, weave_or WRITE("\n"); } -#line 634 "inweb/Chapter 5/TeX Format.w" +#line 635 "inweb/Chapter 5/TeX Format.w" ; return TRUE; } else { if (L->category == PREFORM_GRAMMAR_LCAT) { { -#line 662 "inweb/Chapter 5/TeX Format.w" +#line 663 "inweb/Chapter 5/TeX Format.w" TEMPORARY_TEXT(problem); match_results mr = Regexp__create_mr(); if (Regexp__match(&mr, matter, L"Issue (%c*?) problem")) Str__copy(problem, mr.exp[0]); @@ -25086,7 +25148,7 @@ int TeX__preform_document(weave_format *self, text_stream *OUT, web *W, weave_or Regexp__dispose_of(&mr); } -#line 638 "inweb/Chapter 5/TeX Format.w" +#line 639 "inweb/Chapter 5/TeX Format.w" ; return TRUE; } @@ -25094,7 +25156,7 @@ int TeX__preform_document(weave_format *self, text_stream *OUT, web *W, weave_or return FALSE; } -#line 710 "inweb/Chapter 5/TeX Format.w" +#line 711 "inweb/Chapter 5/TeX Format.w" void TeX__post_process_PDF(weave_format *self, weave_order *wv, int open) { RunningTeX__post_process_weave(wv, open, FALSE); } @@ -25102,18 +25164,18 @@ void TeX__post_process_DVI(weave_format *self, weave_order *wv, int open) { RunningTeX__post_process_weave(wv, open, TRUE); } -#line 718 "inweb/Chapter 5/TeX Format.w" +#line 719 "inweb/Chapter 5/TeX Format.w" void TeX__post_process_report(weave_format *self, weave_order *wv) { RunningTeX__report_on_post_processing(wv); } -#line 723 "inweb/Chapter 5/TeX Format.w" +#line 724 "inweb/Chapter 5/TeX Format.w" int TeX__post_process_substitute(weave_format *self, text_stream *OUT, weave_order *wv, text_stream *detail, weave_pattern *pattern) { return RunningTeX__substitute_post_processing_data(OUT, wv, detail); } -#line 736 "inweb/Chapter 5/TeX Format.w" +#line 737 "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); @@ -25125,7 +25187,7 @@ void TeX__remove_math_mode_range(OUTPUT_STREAM, text_stream *text, int from, int for (int i=from; i <= to; i++) { { -#line 767 "inweb/Chapter 5/TeX Format.w" +#line 768 "inweb/Chapter 5/TeX Format.w" 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') && @@ -25160,13 +25222,13 @@ void TeX__remove_math_mode_range(OUTPUT_STREAM, text_stream *text, int from, int } } -#line 745 "inweb/Chapter 5/TeX Format.w" +#line 746 "inweb/Chapter 5/TeX Format.w" ; } for (int i=from; i <= to; i++) { { -#line 803 "inweb/Chapter 5/TeX Format.w" +#line 804 "inweb/Chapter 5/TeX Format.w" 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'))) && @@ -25182,11 +25244,11 @@ void TeX__remove_math_mode_range(OUTPUT_STREAM, text_stream *text, int from, int } } -#line 748 "inweb/Chapter 5/TeX Format.w" +#line 749 "inweb/Chapter 5/TeX Format.w" ; { -#line 821 "inweb/Chapter 5/TeX Format.w" +#line 822 "inweb/Chapter 5/TeX Format.w" 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') && @@ -25217,7 +25279,7 @@ void TeX__remove_math_mode_range(OUTPUT_STREAM, text_stream *text, int from, int } } -#line 749 "inweb/Chapter 5/TeX Format.w" +#line 750 "inweb/Chapter 5/TeX Format.w" ; } int math_mode = FALSE; @@ -25229,21 +25291,21 @@ void TeX__remove_math_mode_range(OUTPUT_STREAM, text_stream *text, int from, int case '~': if (math_mode) WRITE(" "); else WRITE("~"); break; case '\\': { -#line 851 "inweb/Chapter 5/TeX Format.w" +#line 852 "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_418)) + if (Str__eq(macro, TL_IS_420)) { -#line 974 "inweb/Chapter 5/TeX Format.w" +#line 975 "inweb/Chapter 5/TeX Format.w" 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_514)) PUT((wchar_t) 0x2204); - else if (Str__eq(macro, TL_IS_515)) { PUT((wchar_t) 0x00AC); PUT((wchar_t) 0x2200); } + if (Str__eq(macro, TL_IS_516)) PUT((wchar_t) 0x2204); + else if (Str__eq(macro, TL_IS_517)) { PUT((wchar_t) 0x00AC); PUT((wchar_t) 0x2200); } else { PRINT("Don't know how to apply '\\not' to '\\%S'\n", macro); } @@ -25252,104 +25314,104 @@ void TeX__remove_math_mode_range(OUTPUT_STREAM, text_stream *text, int from, int } } -#line 855 "inweb/Chapter 5/TeX Format.w" +#line 856 "inweb/Chapter 5/TeX Format.w" else { -#line 861 "inweb/Chapter 5/TeX Format.w" - if (Str__eq(macro, TL_IS_419)) WRITE("<="); - else if (Str__eq(macro, TL_IS_420)) WRITE(">="); - else if (Str__eq(macro, TL_IS_421)) WRITE("~"); - else if (Str__eq(macro, TL_IS_422)) WRITE(""); - else if (Str__eq(macro, TL_IS_423)) WRITE(""); +#line 862 "inweb/Chapter 5/TeX Format.w" + if (Str__eq(macro, TL_IS_421)) WRITE("<="); + else if (Str__eq(macro, TL_IS_422)) WRITE(">="); + else if (Str__eq(macro, TL_IS_423)) WRITE("~"); else if (Str__eq(macro, TL_IS_424)) WRITE(""); - else if (Str__eq(macro, TL_IS_425)) WRITE("=>"); - else if (Str__eq(macro, TL_IS_426)) WRITE("<=>"); - else if (Str__eq(macro, TL_IS_427)) WRITE("-->"); - else if (Str__eq(macro, TL_IS_428)) WRITE("-->"); + else if (Str__eq(macro, TL_IS_425)) WRITE(""); + else if (Str__eq(macro, TL_IS_426)) WRITE(""); + else if (Str__eq(macro, TL_IS_427)) WRITE("=>"); + else if (Str__eq(macro, TL_IS_428)) WRITE("<=>"); else if (Str__eq(macro, TL_IS_429)) WRITE("-->"); - else if (Str__eq(macro, TL_IS_430)) WRITE("<--"); - else if (Str__eq(macro, TL_IS_431)) WRITE("<--"); - else if (Str__eq(macro, TL_IS_432)) WRITE("{"); - else if (Str__eq(macro, TL_IS_433)) WRITE("|"); - else if (Str__eq(macro, TL_IS_434)) WRITE("}"); - else if (Str__eq(macro, TL_IS_435)) WRITE("."); - else if (Str__eq(macro, TL_IS_436)) WRITE("..."); - else if (Str__eq(macro, TL_IS_437)) WRITE("..."); - else if (Str__eq(macro, TL_IS_438)) WRITE("*"); - else if (Str__eq(macro, TL_IS_439)) WRITE(" "); - else if (Str__eq(macro, TL_IS_440)) WRITE(" "); - else if (Str__eq(macro, TL_IS_441)) WRITE("TeX"); - else if (Str__eq(macro, TL_IS_442)) WRITE("!="); - else if (Str__eq(macro, TL_IS_443)) WRITE("!="); - else if (Str__eq(macro, TL_IS_444)) WRITE("l"); - else if (Str__eq(macro, TL_IS_445)) WRITE("log"); - else if (Str__eq(macro, TL_IS_446)) WRITE("exp"); - else if (Str__eq(macro, TL_IS_447)) WRITE("sin"); - else if (Str__eq(macro, TL_IS_448)) WRITE("cos"); - else if (Str__eq(macro, TL_IS_449)) WRITE("tan"); - else if (Str__eq(macro, TL_IS_450)) WRITE("T"); - else if (Str__eq(macro, TL_IS_451)) PUT((wchar_t) 0x0391); - else if (Str__eq(macro, TL_IS_452)) PUT((wchar_t) 0x0392); - else if (Str__eq(macro, TL_IS_453)) PUT((wchar_t) 0x0393); - else if (Str__eq(macro, TL_IS_454)) PUT((wchar_t) 0x0394); - else if (Str__eq(macro, TL_IS_455)) PUT((wchar_t) 0x0395); - else if (Str__eq(macro, TL_IS_456)) PUT((wchar_t) 0x0396); - else if (Str__eq(macro, TL_IS_457)) PUT((wchar_t) 0x0397); - else if (Str__eq(macro, TL_IS_458)) PUT((wchar_t) 0x0398); - else if (Str__eq(macro, TL_IS_459)) PUT((wchar_t) 0x0399); - else if (Str__eq(macro, TL_IS_460)) PUT((wchar_t) 0x039A); - else if (Str__eq(macro, TL_IS_461)) PUT((wchar_t) 0x039B); - else if (Str__eq(macro, TL_IS_462)) PUT((wchar_t) 0x039C); - else if (Str__eq(macro, TL_IS_463)) PUT((wchar_t) 0x039D); - else if (Str__eq(macro, TL_IS_464)) PUT((wchar_t) 0x039E); - else if (Str__eq(macro, TL_IS_465)) PUT((wchar_t) 0x039F); - else if (Str__eq(macro, TL_IS_466)) PUT((wchar_t) 0x03A0); - else if (Str__eq(macro, TL_IS_467)) PUT((wchar_t) 0x03A1); - else if (Str__eq(macro, TL_IS_468)) PUT((wchar_t) 0x03A2); - else if (Str__eq(macro, TL_IS_469)) PUT((wchar_t) 0x03A3); - else if (Str__eq(macro, TL_IS_470)) PUT((wchar_t) 0x03A4); - else if (Str__eq(macro, TL_IS_471)) PUT((wchar_t) 0x03A5); - else if (Str__eq(macro, TL_IS_472)) PUT((wchar_t) 0x03A6); - else if (Str__eq(macro, TL_IS_473)) PUT((wchar_t) 0x03A7); - else if (Str__eq(macro, TL_IS_474)) PUT((wchar_t) 0x03A8); - else if (Str__eq(macro, TL_IS_475)) PUT((wchar_t) 0x03A9); - else if (Str__eq(macro, TL_IS_476)) PUT((wchar_t) 0x03B1); - else if (Str__eq(macro, TL_IS_477)) PUT((wchar_t) 0x03B2); - else if (Str__eq(macro, TL_IS_478)) PUT((wchar_t) 0x03B3); - else if (Str__eq(macro, TL_IS_479)) PUT((wchar_t) 0x03B4); - else if (Str__eq(macro, TL_IS_480)) PUT((wchar_t) 0x03B5); - else if (Str__eq(macro, TL_IS_481)) PUT((wchar_t) 0x03B6); - else if (Str__eq(macro, TL_IS_482)) PUT((wchar_t) 0x03B7); - else if (Str__eq(macro, TL_IS_483)) PUT((wchar_t) 0x03B8); - else if (Str__eq(macro, TL_IS_484)) PUT((wchar_t) 0x03B9); - else if (Str__eq(macro, TL_IS_485)) PUT((wchar_t) 0x03BA); - else if (Str__eq(macro, TL_IS_486)) PUT((wchar_t) 0x03BB); - else if (Str__eq(macro, TL_IS_487)) PUT((wchar_t) 0x03BC); - else if (Str__eq(macro, TL_IS_488)) PUT((wchar_t) 0x03BD); - else if (Str__eq(macro, TL_IS_489)) PUT((wchar_t) 0x03BE); - else if (Str__eq(macro, TL_IS_490)) PUT((wchar_t) 0x03BF); - else if (Str__eq(macro, TL_IS_491)) PUT((wchar_t) 0x03C0); - else if (Str__eq(macro, TL_IS_492)) PUT((wchar_t) 0x03C1); - else if (Str__eq(macro, TL_IS_493)) PUT((wchar_t) 0x03C2); - else if (Str__eq(macro, TL_IS_494)) PUT((wchar_t) 0x03C3); - else if (Str__eq(macro, TL_IS_495)) PUT((wchar_t) 0x03C4); - else if (Str__eq(macro, TL_IS_496)) PUT((wchar_t) 0x03C5); - else if (Str__eq(macro, TL_IS_497)) PUT((wchar_t) 0x03C6); - else if (Str__eq(macro, TL_IS_498)) PUT((wchar_t) 0x03C7); - else if (Str__eq(macro, TL_IS_499)) PUT((wchar_t) 0x03C8); - else if (Str__eq(macro, TL_IS_500)) PUT((wchar_t) 0x03C9); - else if (Str__eq(macro, TL_IS_501)) PUT((wchar_t) 0x2203); - else if (Str__eq(macro, TL_IS_502)) PUT((wchar_t) 0x2208); - else if (Str__eq(macro, TL_IS_503)) PUT((wchar_t) 0x2200); - else if (Str__eq(macro, TL_IS_504)) PUT((wchar_t) 0x2229); - else if (Str__eq(macro, TL_IS_505)) PUT((wchar_t) 0x2205); - else if (Str__eq(macro, TL_IS_506)) PUT((wchar_t) 0x2286); - else if (Str__eq(macro, TL_IS_507)) PUT((wchar_t) 0x2227); - else if (Str__eq(macro, TL_IS_508)) PUT((wchar_t) 0x2228); - else if (Str__eq(macro, TL_IS_509)) PUT((wchar_t) 0x00AC); - else if (Str__eq(macro, TL_IS_510)) PUT((wchar_t) 0x03A3); - else if (Str__eq(macro, TL_IS_511)) PUT((wchar_t) 0x03A0); + else if (Str__eq(macro, TL_IS_430)) WRITE("-->"); + else if (Str__eq(macro, TL_IS_431)) WRITE("-->"); + else if (Str__eq(macro, TL_IS_432)) WRITE("<--"); + else if (Str__eq(macro, TL_IS_433)) WRITE("<--"); + else if (Str__eq(macro, TL_IS_434)) WRITE("{"); + else if (Str__eq(macro, TL_IS_435)) WRITE("|"); + else if (Str__eq(macro, TL_IS_436)) WRITE("}"); + else if (Str__eq(macro, TL_IS_437)) WRITE("."); + else if (Str__eq(macro, TL_IS_438)) WRITE("..."); + else if (Str__eq(macro, TL_IS_439)) WRITE("..."); + else if (Str__eq(macro, TL_IS_440)) WRITE("*"); + else if (Str__eq(macro, TL_IS_441)) WRITE(" "); + else if (Str__eq(macro, TL_IS_442)) WRITE(" "); + else if (Str__eq(macro, TL_IS_443)) WRITE("TeX"); + else if (Str__eq(macro, TL_IS_444)) WRITE("!="); + else if (Str__eq(macro, TL_IS_445)) WRITE("!="); + else if (Str__eq(macro, TL_IS_446)) WRITE("l"); + else if (Str__eq(macro, TL_IS_447)) WRITE("log"); + else if (Str__eq(macro, TL_IS_448)) WRITE("exp"); + else if (Str__eq(macro, TL_IS_449)) WRITE("sin"); + else if (Str__eq(macro, TL_IS_450)) WRITE("cos"); + else if (Str__eq(macro, TL_IS_451)) WRITE("tan"); + else if (Str__eq(macro, TL_IS_452)) WRITE("T"); + else if (Str__eq(macro, TL_IS_453)) PUT((wchar_t) 0x0391); + else if (Str__eq(macro, TL_IS_454)) PUT((wchar_t) 0x0392); + else if (Str__eq(macro, TL_IS_455)) PUT((wchar_t) 0x0393); + else if (Str__eq(macro, TL_IS_456)) PUT((wchar_t) 0x0394); + else if (Str__eq(macro, TL_IS_457)) PUT((wchar_t) 0x0395); + else if (Str__eq(macro, TL_IS_458)) PUT((wchar_t) 0x0396); + else if (Str__eq(macro, TL_IS_459)) PUT((wchar_t) 0x0397); + else if (Str__eq(macro, TL_IS_460)) PUT((wchar_t) 0x0398); + else if (Str__eq(macro, TL_IS_461)) PUT((wchar_t) 0x0399); + else if (Str__eq(macro, TL_IS_462)) PUT((wchar_t) 0x039A); + else if (Str__eq(macro, TL_IS_463)) PUT((wchar_t) 0x039B); + else if (Str__eq(macro, TL_IS_464)) PUT((wchar_t) 0x039C); + else if (Str__eq(macro, TL_IS_465)) PUT((wchar_t) 0x039D); + else if (Str__eq(macro, TL_IS_466)) PUT((wchar_t) 0x039E); + else if (Str__eq(macro, TL_IS_467)) PUT((wchar_t) 0x039F); + else if (Str__eq(macro, TL_IS_468)) PUT((wchar_t) 0x03A0); + else if (Str__eq(macro, TL_IS_469)) PUT((wchar_t) 0x03A1); + else if (Str__eq(macro, TL_IS_470)) PUT((wchar_t) 0x03A2); + else if (Str__eq(macro, TL_IS_471)) PUT((wchar_t) 0x03A3); + else if (Str__eq(macro, TL_IS_472)) PUT((wchar_t) 0x03A4); + else if (Str__eq(macro, TL_IS_473)) PUT((wchar_t) 0x03A5); + else if (Str__eq(macro, TL_IS_474)) PUT((wchar_t) 0x03A6); + else if (Str__eq(macro, TL_IS_475)) PUT((wchar_t) 0x03A7); + else if (Str__eq(macro, TL_IS_476)) PUT((wchar_t) 0x03A8); + else if (Str__eq(macro, TL_IS_477)) PUT((wchar_t) 0x03A9); + else if (Str__eq(macro, TL_IS_478)) PUT((wchar_t) 0x03B1); + else if (Str__eq(macro, TL_IS_479)) PUT((wchar_t) 0x03B2); + else if (Str__eq(macro, TL_IS_480)) PUT((wchar_t) 0x03B3); + else if (Str__eq(macro, TL_IS_481)) PUT((wchar_t) 0x03B4); + else if (Str__eq(macro, TL_IS_482)) PUT((wchar_t) 0x03B5); + else if (Str__eq(macro, TL_IS_483)) PUT((wchar_t) 0x03B6); + else if (Str__eq(macro, TL_IS_484)) PUT((wchar_t) 0x03B7); + else if (Str__eq(macro, TL_IS_485)) PUT((wchar_t) 0x03B8); + else if (Str__eq(macro, TL_IS_486)) PUT((wchar_t) 0x03B9); + else if (Str__eq(macro, TL_IS_487)) PUT((wchar_t) 0x03BA); + else if (Str__eq(macro, TL_IS_488)) PUT((wchar_t) 0x03BB); + else if (Str__eq(macro, TL_IS_489)) PUT((wchar_t) 0x03BC); + else if (Str__eq(macro, TL_IS_490)) PUT((wchar_t) 0x03BD); + else if (Str__eq(macro, TL_IS_491)) PUT((wchar_t) 0x03BE); + else if (Str__eq(macro, TL_IS_492)) PUT((wchar_t) 0x03BF); + else if (Str__eq(macro, TL_IS_493)) PUT((wchar_t) 0x03C0); + else if (Str__eq(macro, TL_IS_494)) PUT((wchar_t) 0x03C1); + else if (Str__eq(macro, TL_IS_495)) PUT((wchar_t) 0x03C2); + else if (Str__eq(macro, TL_IS_496)) PUT((wchar_t) 0x03C3); + else if (Str__eq(macro, TL_IS_497)) PUT((wchar_t) 0x03C4); + else if (Str__eq(macro, TL_IS_498)) PUT((wchar_t) 0x03C5); + else if (Str__eq(macro, TL_IS_499)) PUT((wchar_t) 0x03C6); + else if (Str__eq(macro, TL_IS_500)) PUT((wchar_t) 0x03C7); + else if (Str__eq(macro, TL_IS_501)) PUT((wchar_t) 0x03C8); + else if (Str__eq(macro, TL_IS_502)) PUT((wchar_t) 0x03C9); + else if (Str__eq(macro, TL_IS_503)) PUT((wchar_t) 0x2203); + else if (Str__eq(macro, TL_IS_504)) PUT((wchar_t) 0x2208); + else if (Str__eq(macro, TL_IS_505)) PUT((wchar_t) 0x2200); + else if (Str__eq(macro, TL_IS_506)) PUT((wchar_t) 0x2229); + else if (Str__eq(macro, TL_IS_507)) PUT((wchar_t) 0x2205); + else if (Str__eq(macro, TL_IS_508)) PUT((wchar_t) 0x2286); + else if (Str__eq(macro, TL_IS_509)) PUT((wchar_t) 0x2227); + else if (Str__eq(macro, TL_IS_510)) PUT((wchar_t) 0x2228); + else if (Str__eq(macro, TL_IS_511)) PUT((wchar_t) 0x00AC); + else if (Str__eq(macro, TL_IS_512)) PUT((wchar_t) 0x03A3); + else if (Str__eq(macro, TL_IS_513)) PUT((wchar_t) 0x03A0); else { if (Str__len(macro) > 0) { int suspect = TRUE; @@ -25359,8 +25421,8 @@ void TeX__remove_math_mode_range(OUTPUT_STREAM, text_stream *text, int from, int if ((c >= 'a') && (c <= 'z')) continue; suspect = FALSE; } - if (Str__eq(macro, TL_IS_512)) suspect = FALSE; - if (Str__eq(macro, TL_IS_513)) suspect = FALSE; + if (Str__eq(macro, TL_IS_514)) suspect = FALSE; + if (Str__eq(macro, TL_IS_515)) suspect = FALSE; if (suspect) PRINT("[Passing through unknown TeX macro \\%S:\n %S\n", macro, text); } @@ -25368,13 +25430,13 @@ void TeX__remove_math_mode_range(OUTPUT_STREAM, text_stream *text, int from, int } } -#line 856 "inweb/Chapter 5/TeX Format.w" +#line 857 "inweb/Chapter 5/TeX Format.w" ; DISCARD_TEXT(macro); i--; } -#line 758 "inweb/Chapter 5/TeX Format.w" +#line 759 "inweb/Chapter 5/TeX Format.w" ; break; default: PUT(Str__get_at(text, i)); break; } @@ -25386,7 +25448,7 @@ void HTMLFormat__create(void) { { #line 15 "inweb/Chapter 5/HTML Formats.w" - weave_format *wf = Formats__create_weave_format(TL_IS_516, TL_IS_517); + weave_format *wf = Formats__create_weave_format(TL_IS_518, TL_IS_519); METHOD_ADD(wf, RENDER_FOR_MTID, HTMLFormat__render); } @@ -25395,7 +25457,7 @@ void HTMLFormat__create(void) { { #line 19 "inweb/Chapter 5/HTML Formats.w" - weave_format *wf = Formats__create_weave_format(TL_IS_518, TL_IS_519); + weave_format *wf = Formats__create_weave_format(TL_IS_520, TL_IS_521); METHOD_ADD(wf, RENDER_FOR_MTID, HTMLFormat__render_EPUB); METHOD_ADD(wf, BEGIN_WEAVING_FOR_MTID, HTMLFormat__begin_weaving_EPUB); METHOD_ADD(wf, END_WEAVING_FOR_MTID, HTMLFormat__end_weaving_EPUB); @@ -25420,8 +25482,8 @@ HTML_render_state HTMLFormat__initial_state(text_stream *OUT, weave_order *wv, hrs.slide_number = -1; hrs.slide_of = -1; - Swarm__ensure_plugin(wv, TL_IS_520); - hrs.colours = Swarm__ensure_colour_scheme(wv, TL_IS_521, TL_IS_522); + Swarm__ensure_plugin(wv, TL_IS_522); + hrs.colours = Swarm__ensure_colour_scheme(wv, TL_IS_523, TL_IS_524); return hrs; } @@ -25438,7 +25500,7 @@ void HTMLFormat__render_EPUB(weave_format *self, text_stream *OUT, heterogeneous HTML__declare_as_HTML(OUT, TRUE); HTML_render_state hrs = HTMLFormat__initial_state(OUT, C->wv, TRUE, C->wv->weave_to); Trees__traverse_from(tree->root, &HTMLFormat__render_visit, (void *) &hrs, 0); - Epub__note_page(C->wv->weave_web->as_ebook, C->wv->weave_to, C->wv->booklet_title, TL_IS_523); + Epub__note_page(C->wv->weave_web->as_ebook, C->wv->weave_to, C->wv->booklet_title, TL_IS_525); HTML__completed(OUT); } @@ -25455,7 +25517,7 @@ int HTMLFormat__render_visit(tree_node *N, void *state, int L) { (N->type == weave_chapter_title_page_node_type) || (N->type == weave_grammar_index_node_type)) { -#line 687 "inweb/Chapter 5/HTML Formats.w" +#line 702 "inweb/Chapter 5/HTML Formats.w" ; } @@ -25464,7 +25526,7 @@ int HTMLFormat__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_head_node_type) { -#line 135 "inweb/Chapter 5/HTML Formats.w" +#line 136 "inweb/Chapter 5/HTML Formats.w" weave_head_node *C = RETRIEVE_POINTER_weave_head_node(N->content); HTML__comment(OUT, C->banner); @@ -25473,7 +25535,7 @@ int HTMLFormat__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_tail_node_type) { -#line 205 "inweb/Chapter 5/HTML Formats.w" +#line 206 "inweb/Chapter 5/HTML Formats.w" weave_tail_node *C = RETRIEVE_POINTER_weave_tail_node(N->content); HTML__comment(OUT, C->rennab); @@ -25482,7 +25544,7 @@ int HTMLFormat__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_verbatim_node_type) { -#line 650 "inweb/Chapter 5/HTML Formats.w" +#line 665 "inweb/Chapter 5/HTML Formats.w" weave_verbatim_node *C = RETRIEVE_POINTER_weave_verbatim_node(N->content); WRITE("%S", C->content); @@ -25491,18 +25553,18 @@ int HTMLFormat__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_section_header_node_type) { -#line 139 "inweb/Chapter 5/HTML Formats.w" +#line 140 "inweb/Chapter 5/HTML Formats.w" weave_section_header_node *C = RETRIEVE_POINTER_weave_section_header_node(N->content); - Swarm__ensure_plugin(hrs->wv, TL_IS_524); + Swarm__ensure_plugin(hrs->wv, TL_IS_526); HTML_OPEN_WITH("ul", "class=\"crumbs\""); Colonies__drop_initial_breadcrumbs(OUT, hrs->wv->weave_to, hrs->wv->breadcrumbs); - text_stream *bct = Bibliographic__get_datum(hrs->wv->weave_web->md, TL_IS_525); - if (Str__len(Bibliographic__get_datum(hrs->wv->weave_web->md, TL_IS_526)) > 0) - bct = Bibliographic__get_datum(hrs->wv->weave_web->md, TL_IS_527); + text_stream *bct = Bibliographic__get_datum(hrs->wv->weave_web->md, TL_IS_527); + if (Str__len(Bibliographic__get_datum(hrs->wv->weave_web->md, TL_IS_528)) > 0) + bct = Bibliographic__get_datum(hrs->wv->weave_web->md, TL_IS_529); if (hrs->wv->self_contained == FALSE) { - Colonies__write_breadcrumb(OUT, bct, TL_IS_528); + Colonies__write_breadcrumb(OUT, bct, TL_IS_530); if (hrs->wv->weave_web->md->chaptered) { TEMPORARY_TEXT(chapter_link); WRITE_TO(chapter_link, "index.html#%s%S", @@ -25523,7 +25585,7 @@ int HTMLFormat__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_section_footer_node_type) { -#line 166 "inweb/Chapter 5/HTML Formats.w" +#line 167 "inweb/Chapter 5/HTML Formats.w" weave_section_footer_node *C = RETRIEVE_POINTER_weave_section_footer_node(N->content); chapter *Ch = C->sect->owning_chapter; @@ -25567,7 +25629,7 @@ int HTMLFormat__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_section_purpose_node_type) { -#line 209 "inweb/Chapter 5/HTML Formats.w" +#line 210 "inweb/Chapter 5/HTML Formats.w" weave_section_purpose_node *C = RETRIEVE_POINTER_weave_section_purpose_node(N->content); HTML_OPEN_WITH("p", "class=\"purpose\""); @@ -25579,7 +25641,7 @@ int HTMLFormat__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_subheading_node_type) { -#line 216 "inweb/Chapter 5/HTML Formats.w" +#line 217 "inweb/Chapter 5/HTML Formats.w" weave_subheading_node *C = RETRIEVE_POINTER_weave_subheading_node(N->content); HTML_OPEN("h3"); HTMLFormat__escape_text(OUT, C->text); @@ -25590,7 +25652,7 @@ int HTMLFormat__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_bar_node_type) { -#line 222 "inweb/Chapter 5/HTML Formats.w" +#line 223 "inweb/Chapter 5/HTML Formats.w" HTML__hr(OUT, NULL); } @@ -25598,7 +25660,7 @@ int HTMLFormat__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_paragraph_heading_node_type) { -#line 225 "inweb/Chapter 5/HTML Formats.w" +#line 226 "inweb/Chapter 5/HTML Formats.w" weave_paragraph_heading_node *C = RETRIEVE_POINTER_weave_paragraph_heading_node(N->content); paragraph *P = C->para; @@ -25607,7 +25669,7 @@ int HTMLFormat__render_visit(tree_node *N, void *state, int L) { paragraph *first_in_para = P; { -#line 276 "inweb/Chapter 5/HTML Formats.w" +#line 291 "inweb/Chapter 5/HTML Formats.w" if (first_in_para) { HTML_OPEN_WITH("p", "class=\"commentary firstcommentary\""); HTMLFormat__paragraph_number(OUT, first_in_para); @@ -25616,7 +25678,7 @@ int HTMLFormat__render_visit(tree_node *N, void *state, int L) { } } -#line 231 "inweb/Chapter 5/HTML Formats.w" +#line 232 "inweb/Chapter 5/HTML Formats.w" ; } @@ -25625,16 +25687,16 @@ int HTMLFormat__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_endnote_node_type) { -#line 235 "inweb/Chapter 5/HTML Formats.w" +#line 236 "inweb/Chapter 5/HTML Formats.w" HTML_OPEN("li"); { -#line 690 "inweb/Chapter 5/HTML Formats.w" +#line 705 "inweb/Chapter 5/HTML Formats.w" for (tree_node *M = N->child; M; M = M->next) Trees__traverse_from(M, &HTMLFormat__render_visit, (void *) hrs, L+1); } -#line 236 "inweb/Chapter 5/HTML Formats.w" +#line 237 "inweb/Chapter 5/HTML Formats.w" ; HTML_CLOSE("li"); return FALSE; @@ -25644,10 +25706,10 @@ int HTMLFormat__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_figure_node_type) { -#line 241 "inweb/Chapter 5/HTML Formats.w" +#line 242 "inweb/Chapter 5/HTML Formats.w" weave_figure_node *C = RETRIEVE_POINTER_weave_figure_node(N->content); filename *F = Filenames__in( - Pathnames__down(hrs->wv->weave_web->md->path_to_web, TL_IS_529), + Pathnames__down(hrs->wv->weave_web->md->path_to_web, TL_IS_531), C->figname); filename *RF = Filenames__from_text(C->figname); HTML_OPEN("center"); @@ -25659,9 +25721,28 @@ int HTMLFormat__render_visit(tree_node *N, void *state, int L) { } #line 106 "inweb/Chapter 5/HTML Formats.w" + else if (N->type == weave_audio_node_type) +{ +#line 254 "inweb/Chapter 5/HTML Formats.w" + weave_audio_node *C = RETRIEVE_POINTER_weave_audio_node(N->content); + filename *F = Filenames__in( + Pathnames__down(hrs->wv->weave_web->md->path_to_web, TL_IS_532), + C->audio_name); + Patterns__copy_file_into_weave(hrs->wv->weave_web, F, NULL, NULL); + HTML_OPEN("center"); + WRITE("\n"); + HTML_CLOSE("center"); + WRITE("\n"); + +} +#line 107 "inweb/Chapter 5/HTML Formats.w" + else if (N->type == weave_material_node_type) { -#line 253 "inweb/Chapter 5/HTML Formats.w" +#line 268 "inweb/Chapter 5/HTML Formats.w" weave_material_node *C = RETRIEVE_POINTER_weave_material_node(N->content); paragraph *first_in_para = NULL; if ((N == N->parent->child) && @@ -25673,13 +25754,13 @@ int HTMLFormat__render_visit(tree_node *N, void *state, int L) { if (C->material_type == COMMENTARY_MATERIAL) { -#line 284 "inweb/Chapter 5/HTML Formats.w" +#line 299 "inweb/Chapter 5/HTML Formats.w" int item_depth = 0; for (tree_node *M = N->child; M; M = M->next) { if (M->type == weave_item_node_type) { { -#line 276 "inweb/Chapter 5/HTML Formats.w" +#line 291 "inweb/Chapter 5/HTML Formats.w" if (first_in_para) { HTML_OPEN_WITH("p", "class=\"commentary firstcommentary\""); HTMLFormat__paragraph_number(OUT, first_in_para); @@ -25688,7 +25769,7 @@ int HTMLFormat__render_visit(tree_node *N, void *state, int L) { } } -#line 287 "inweb/Chapter 5/HTML Formats.w" +#line 302 "inweb/Chapter 5/HTML Formats.w" ; weave_item_node *C = RETRIEVE_POINTER_weave_item_node(M->content); HTMLFormat__go_to_depth(hrs, item_depth, C->depth); @@ -25698,7 +25779,7 @@ int HTMLFormat__render_visit(tree_node *N, void *state, int L) { } if (HTMLFormat__interior_material(M)) { -#line 309 "inweb/Chapter 5/HTML Formats.w" +#line 324 "inweb/Chapter 5/HTML Formats.w" if (first_in_para) { HTML_OPEN_WITH("p", "class=\"commentary firstcommentary\""); HTMLFormat__paragraph_number(OUT, first_in_para); @@ -25715,11 +25796,11 @@ int HTMLFormat__render_visit(tree_node *N, void *state, int L) { continue; } -#line 294 "inweb/Chapter 5/HTML Formats.w" +#line 309 "inweb/Chapter 5/HTML Formats.w" ; { -#line 276 "inweb/Chapter 5/HTML Formats.w" +#line 291 "inweb/Chapter 5/HTML Formats.w" if (first_in_para) { HTML_OPEN_WITH("p", "class=\"commentary firstcommentary\""); HTMLFormat__paragraph_number(OUT, first_in_para); @@ -25728,7 +25809,7 @@ int HTMLFormat__render_visit(tree_node *N, void *state, int L) { } } -#line 295 "inweb/Chapter 5/HTML Formats.w" +#line 310 "inweb/Chapter 5/HTML Formats.w" ; if (item_depth > 0) { HTMLFormat__go_to_depth(hrs, item_depth, 0); @@ -25743,15 +25824,15 @@ int HTMLFormat__render_visit(tree_node *N, void *state, int L) { } } -#line 262 "inweb/Chapter 5/HTML Formats.w" +#line 277 "inweb/Chapter 5/HTML Formats.w" else if (C->material_type == CODE_MATERIAL) { -#line 325 "inweb/Chapter 5/HTML Formats.w" +#line 340 "inweb/Chapter 5/HTML Formats.w" { -#line 276 "inweb/Chapter 5/HTML Formats.w" +#line 291 "inweb/Chapter 5/HTML Formats.w" if (first_in_para) { HTML_OPEN_WITH("p", "class=\"commentary firstcommentary\""); HTMLFormat__paragraph_number(OUT, first_in_para); @@ -25760,7 +25841,7 @@ int HTMLFormat__render_visit(tree_node *N, void *state, int L) { } } -#line 325 "inweb/Chapter 5/HTML Formats.w" +#line 340 "inweb/Chapter 5/HTML Formats.w" ; if (C->styling) { TEMPORARY_TEXT(csname); @@ -25777,25 +25858,25 @@ int HTMLFormat__render_visit(tree_node *N, void *state, int L) { DISCARD_TEXT(cl); { -#line 690 "inweb/Chapter 5/HTML Formats.w" +#line 705 "inweb/Chapter 5/HTML Formats.w" for (tree_node *M = N->child; M; M = M->next) Trees__traverse_from(M, &HTMLFormat__render_visit, (void *) hrs, L+1); } -#line 339 "inweb/Chapter 5/HTML Formats.w" +#line 354 "inweb/Chapter 5/HTML Formats.w" ; HTML_CLOSE("pre"); WRITE("\n"); } -#line 264 "inweb/Chapter 5/HTML Formats.w" +#line 279 "inweb/Chapter 5/HTML Formats.w" else if (C->material_type == FOOTNOTES_MATERIAL) { -#line 343 "inweb/Chapter 5/HTML Formats.w" +#line 358 "inweb/Chapter 5/HTML Formats.w" { -#line 276 "inweb/Chapter 5/HTML Formats.w" +#line 291 "inweb/Chapter 5/HTML Formats.w" if (first_in_para) { HTML_OPEN_WITH("p", "class=\"commentary firstcommentary\""); HTMLFormat__paragraph_number(OUT, first_in_para); @@ -25804,30 +25885,30 @@ int HTMLFormat__render_visit(tree_node *N, void *state, int L) { } } -#line 343 "inweb/Chapter 5/HTML Formats.w" +#line 358 "inweb/Chapter 5/HTML Formats.w" ; HTML_OPEN_WITH("ul", "class=\"footnotetexts\""); { -#line 690 "inweb/Chapter 5/HTML Formats.w" +#line 705 "inweb/Chapter 5/HTML Formats.w" for (tree_node *M = N->child; M; M = M->next) Trees__traverse_from(M, &HTMLFormat__render_visit, (void *) hrs, L+1); } -#line 345 "inweb/Chapter 5/HTML Formats.w" +#line 360 "inweb/Chapter 5/HTML Formats.w" ; HTML_CLOSE("ul"); WRITE("\n"); } -#line 266 "inweb/Chapter 5/HTML Formats.w" +#line 281 "inweb/Chapter 5/HTML Formats.w" else if (C->material_type == ENDNOTES_MATERIAL) { -#line 349 "inweb/Chapter 5/HTML Formats.w" +#line 364 "inweb/Chapter 5/HTML Formats.w" { -#line 276 "inweb/Chapter 5/HTML Formats.w" +#line 291 "inweb/Chapter 5/HTML Formats.w" if (first_in_para) { HTML_OPEN_WITH("p", "class=\"commentary firstcommentary\""); HTMLFormat__paragraph_number(OUT, first_in_para); @@ -25836,27 +25917,27 @@ int HTMLFormat__render_visit(tree_node *N, void *state, int L) { } } -#line 349 "inweb/Chapter 5/HTML Formats.w" +#line 364 "inweb/Chapter 5/HTML Formats.w" ; HTML_OPEN_WITH("ul", "class=\"endnotetexts\""); { -#line 690 "inweb/Chapter 5/HTML Formats.w" +#line 705 "inweb/Chapter 5/HTML Formats.w" for (tree_node *M = N->child; M; M = M->next) Trees__traverse_from(M, &HTMLFormat__render_visit, (void *) hrs, L+1); } -#line 351 "inweb/Chapter 5/HTML Formats.w" +#line 366 "inweb/Chapter 5/HTML Formats.w" ; HTML_CLOSE("ul"); WRITE("\n"); } -#line 268 "inweb/Chapter 5/HTML Formats.w" +#line 283 "inweb/Chapter 5/HTML Formats.w" else if (C->material_type == MACRO_MATERIAL) { -#line 355 "inweb/Chapter 5/HTML Formats.w" +#line 370 "inweb/Chapter 5/HTML Formats.w" if (first_in_para) { HTML_OPEN_WITH("p", "class=\"commentary firstcommentary\""); HTMLFormat__paragraph_number(OUT, first_in_para); @@ -25865,25 +25946,25 @@ int HTMLFormat__render_visit(tree_node *N, void *state, int L) { } { -#line 690 "inweb/Chapter 5/HTML Formats.w" +#line 705 "inweb/Chapter 5/HTML Formats.w" for (tree_node *M = N->child; M; M = M->next) Trees__traverse_from(M, &HTMLFormat__render_visit, (void *) hrs, L+1); } -#line 361 "inweb/Chapter 5/HTML Formats.w" +#line 376 "inweb/Chapter 5/HTML Formats.w" ; HTML_CLOSE("p"); WRITE("\n"); } -#line 270 "inweb/Chapter 5/HTML Formats.w" +#line 285 "inweb/Chapter 5/HTML Formats.w" else if (C->material_type == DEFINITION_MATERIAL) { -#line 365 "inweb/Chapter 5/HTML Formats.w" +#line 380 "inweb/Chapter 5/HTML Formats.w" { -#line 276 "inweb/Chapter 5/HTML Formats.w" +#line 291 "inweb/Chapter 5/HTML Formats.w" if (first_in_para) { HTML_OPEN_WITH("p", "class=\"commentary firstcommentary\""); HTMLFormat__paragraph_number(OUT, first_in_para); @@ -25892,46 +25973,46 @@ int HTMLFormat__render_visit(tree_node *N, void *state, int L) { } } -#line 365 "inweb/Chapter 5/HTML Formats.w" +#line 380 "inweb/Chapter 5/HTML Formats.w" ; HTML_OPEN_WITH("pre", "class=\"definitions\""); { -#line 690 "inweb/Chapter 5/HTML Formats.w" +#line 705 "inweb/Chapter 5/HTML Formats.w" for (tree_node *M = N->child; M; M = M->next) Trees__traverse_from(M, &HTMLFormat__render_visit, (void *) hrs, L+1); } -#line 367 "inweb/Chapter 5/HTML Formats.w" +#line 382 "inweb/Chapter 5/HTML Formats.w" ; HTML_CLOSE("pre"); WRITE("\n"); } -#line 272 "inweb/Chapter 5/HTML Formats.w" +#line 287 "inweb/Chapter 5/HTML Formats.w" ; return FALSE; } -#line 107 "inweb/Chapter 5/HTML Formats.w" +#line 108 "inweb/Chapter 5/HTML Formats.w" else if (N->type == weave_embed_node_type) { -#line 375 "inweb/Chapter 5/HTML Formats.w" +#line 390 "inweb/Chapter 5/HTML Formats.w" weave_embed_node *C = RETRIEVE_POINTER_weave_embed_node(N->content); - text_stream *CH = TL_IS_530; - text_stream *CW = TL_IS_531; + text_stream *CH = TL_IS_533; + text_stream *CW = TL_IS_534; if (C->w > 0) { Str__clear(CW); WRITE_TO(CW, "%d", C->w); } if (C->h > 0) { Str__clear(CH); WRITE_TO(CH, "%d", C->h); } TEMPORARY_TEXT(embed_leaf); WRITE_TO(embed_leaf, "%S.html", C->service); - filename *F = Patterns__find_asset(hrs->wv->pattern, TL_IS_532, embed_leaf); + filename *F = Patterns__find_asset(hrs->wv->pattern, TL_IS_535, embed_leaf); DISCARD_TEXT(embed_leaf); if (F == NULL) { - Main__error_in_web(TL_IS_533, hrs->wv->current_weave_line); + Main__error_in_web(TL_IS_536, hrs->wv->current_weave_line); } else { - Bibliographic__set_datum(hrs->wv->weave_web->md, TL_IS_534, C->ID); - Bibliographic__set_datum(hrs->wv->weave_web->md, TL_IS_535, CW); - Bibliographic__set_datum(hrs->wv->weave_web->md, TL_IS_536, CH); + Bibliographic__set_datum(hrs->wv->weave_web->md, TL_IS_537, C->ID); + Bibliographic__set_datum(hrs->wv->weave_web->md, TL_IS_538, CW); + Bibliographic__set_datum(hrs->wv->weave_web->md, TL_IS_539, CH); HTML_OPEN("center"); Collater__for_web_and_pattern(OUT, hrs->wv->weave_web, hrs->wv->pattern, F, hrs->into_file); @@ -25940,18 +26021,18 @@ int HTMLFormat__render_visit(tree_node *N, void *state, int L) { } } -#line 108 "inweb/Chapter 5/HTML Formats.w" +#line 109 "inweb/Chapter 5/HTML Formats.w" else if (N->type == weave_pmac_node_type) { -#line 398 "inweb/Chapter 5/HTML Formats.w" +#line 413 "inweb/Chapter 5/HTML Formats.w" weave_pmac_node *C = RETRIEVE_POINTER_weave_pmac_node(N->content); paragraph *P = C->pmac->defining_paragraph; HTML_OPEN_WITH("span", "class=\"named-paragraph-container\""); if (C->defn == FALSE) { TEMPORARY_TEXT(url); Colonies__paragraph_URL(url, P, hrs->wv->weave_to); - HTML__begin_link_with_class(OUT, TL_IS_537, url); + HTML__begin_link_with_class(OUT, TL_IS_540, url); DISCARD_TEXT(url); } HTML_OPEN_WITH("span", "class=\"%s\"", @@ -25970,59 +26051,59 @@ int HTMLFormat__render_visit(tree_node *N, void *state, int L) { if (C->defn == FALSE) HTML__end_link(OUT); } -#line 109 "inweb/Chapter 5/HTML Formats.w" +#line 110 "inweb/Chapter 5/HTML Formats.w" else if (N->type == weave_vskip_node_type) { -#line 423 "inweb/Chapter 5/HTML Formats.w" +#line 438 "inweb/Chapter 5/HTML Formats.w" WRITE("\n"); -} -#line 110 "inweb/Chapter 5/HTML Formats.w" - - else if (N->type == weave_section_node_type) -{ -#line 426 "inweb/Chapter 5/HTML Formats.w" - weave_section_node *C = RETRIEVE_POINTER_weave_section_node(N->content); - LOG("It was %d\n", C->allocation_id); - } #line 111 "inweb/Chapter 5/HTML Formats.w" + else if (N->type == weave_section_node_type) +{ +#line 441 "inweb/Chapter 5/HTML Formats.w" + weave_section_node *C = RETRIEVE_POINTER_weave_section_node(N->content); + LOG("It was %d\n", C->allocation_id); + +} +#line 112 "inweb/Chapter 5/HTML Formats.w" + else if (N->type == weave_code_line_node_type) { -#line 430 "inweb/Chapter 5/HTML Formats.w" +#line 445 "inweb/Chapter 5/HTML Formats.w" { -#line 690 "inweb/Chapter 5/HTML Formats.w" +#line 705 "inweb/Chapter 5/HTML Formats.w" for (tree_node *M = N->child; M; M = M->next) Trees__traverse_from(M, &HTMLFormat__render_visit, (void *) hrs, L+1); } -#line 430 "inweb/Chapter 5/HTML Formats.w" +#line 445 "inweb/Chapter 5/HTML Formats.w" ; WRITE("\n"); return FALSE; } -#line 112 "inweb/Chapter 5/HTML Formats.w" +#line 113 "inweb/Chapter 5/HTML Formats.w" else if (N->type == weave_function_usage_node_type) { -#line 435 "inweb/Chapter 5/HTML Formats.w" +#line 450 "inweb/Chapter 5/HTML Formats.w" weave_function_usage_node *C = RETRIEVE_POINTER_weave_function_usage_node(N->content); - HTML__begin_link_with_class(OUT, TL_IS_538, C->url); + HTML__begin_link_with_class(OUT, TL_IS_541, C->url); HTMLFormat__change_colour(OUT, FUNCTION_COLOUR, hrs->colours); WRITE("%S", C->fn->function_name); HTMLFormat__change_colour(OUT, -1, hrs->colours); HTML__end_link(OUT); } -#line 113 "inweb/Chapter 5/HTML Formats.w" +#line 114 "inweb/Chapter 5/HTML Formats.w" else if (N->type == weave_commentary_node_type) { -#line 443 "inweb/Chapter 5/HTML Formats.w" +#line 458 "inweb/Chapter 5/HTML Formats.w" weave_commentary_node *C = RETRIEVE_POINTER_weave_commentary_node(N->content); if (C->in_code) HTMLFormat__change_colour(OUT, COMMENT_COLOUR, hrs->colours); for (int i=0; i < Str__len(C->text); i++) { @@ -26043,23 +26124,23 @@ int HTMLFormat__render_visit(tree_node *N, void *state, int L) { if (C->in_code) HTMLFormat__change_colour(OUT, -1, hrs->colours); } -#line 114 "inweb/Chapter 5/HTML Formats.w" +#line 115 "inweb/Chapter 5/HTML Formats.w" else if (N->type == weave_carousel_slide_node_type) { -#line 463 "inweb/Chapter 5/HTML Formats.w" +#line 478 "inweb/Chapter 5/HTML Formats.w" weave_carousel_slide_node *C = RETRIEVE_POINTER_weave_carousel_slide_node(N->content); - Swarm__ensure_plugin(hrs->wv, TL_IS_539); + Swarm__ensure_plugin(hrs->wv, TL_IS_542); TEMPORARY_TEXT(carousel_id) TEMPORARY_TEXT(carousel_dots_id) text_stream *caption_class = NULL; - text_stream *slide_count_class = TL_IS_540; + text_stream *slide_count_class = TL_IS_543; switch (C->caption_command) { - case CAROUSEL_CMD: caption_class = TL_IS_541; break; - case CAROUSEL_ABOVE_CMD: caption_class = TL_IS_542; - slide_count_class = TL_IS_543; break; - case CAROUSEL_BELOW_CMD: caption_class = TL_IS_544; - slide_count_class = TL_IS_545; break; + case CAROUSEL_CMD: caption_class = TL_IS_544; break; + case CAROUSEL_ABOVE_CMD: caption_class = TL_IS_545; + slide_count_class = TL_IS_546; break; + case CAROUSEL_BELOW_CMD: caption_class = TL_IS_547; + slide_count_class = TL_IS_548; break; } WRITE_TO(carousel_id, "carousel-no-%d", hrs->carousel_number); WRITE_TO(carousel_dots_id, "carousel-dots-no-%d", hrs->carousel_number); @@ -26081,12 +26162,12 @@ int HTMLFormat__render_visit(tree_node *N, void *state, int L) { if (C->caption_command == CAROUSEL_ABOVE_CMD) { { -#line 536 "inweb/Chapter 5/HTML Formats.w" +#line 551 "inweb/Chapter 5/HTML Formats.w" if (C->caption_command != CAROUSEL_UNCAPTIONED_CMD) WRITE("
    %S
    \n", caption_class, C->caption); } -#line 494 "inweb/Chapter 5/HTML Formats.w" +#line 509 "inweb/Chapter 5/HTML Formats.w" ; WRITE("
    %d / %d
    \n", slide_count_class, hrs->slide_number, hrs->slide_of); @@ -26097,22 +26178,22 @@ int HTMLFormat__render_visit(tree_node *N, void *state, int L) { WRITE("
    "); { -#line 690 "inweb/Chapter 5/HTML Formats.w" +#line 705 "inweb/Chapter 5/HTML Formats.w" for (tree_node *M = N->child; M; M = M->next) Trees__traverse_from(M, &HTMLFormat__render_visit, (void *) hrs, L+1); } -#line 502 "inweb/Chapter 5/HTML Formats.w" +#line 517 "inweb/Chapter 5/HTML Formats.w" ; WRITE("
    \n"); if (C->caption_command != CAROUSEL_ABOVE_CMD) { -#line 536 "inweb/Chapter 5/HTML Formats.w" +#line 551 "inweb/Chapter 5/HTML Formats.w" if (C->caption_command != CAROUSEL_UNCAPTIONED_CMD) WRITE("
    %S
    \n", caption_class, C->caption); } -#line 504 "inweb/Chapter 5/HTML Formats.w" +#line 519 "inweb/Chapter 5/HTML Formats.w" ; WRITE("\n"); if (hrs->slide_number == hrs->slide_of) { @@ -26145,11 +26226,11 @@ int HTMLFormat__render_visit(tree_node *N, void *state, int L) { return FALSE; } -#line 115 "inweb/Chapter 5/HTML Formats.w" +#line 116 "inweb/Chapter 5/HTML Formats.w" else if (N->type == weave_toc_node_type) { -#line 540 "inweb/Chapter 5/HTML Formats.w" +#line 555 "inweb/Chapter 5/HTML Formats.w" HTML_OPEN_WITH("ul", "class=\"toc\""); for (tree_node *M = N->child; M; M = M->next) { HTML_OPEN("li"); @@ -26162,11 +26243,11 @@ int HTMLFormat__render_visit(tree_node *N, void *state, int L) { return FALSE; } -#line 116 "inweb/Chapter 5/HTML Formats.w" +#line 117 "inweb/Chapter 5/HTML Formats.w" else if (N->type == weave_toc_line_node_type) { -#line 552 "inweb/Chapter 5/HTML Formats.w" +#line 567 "inweb/Chapter 5/HTML Formats.w" weave_toc_line_node *C = RETRIEVE_POINTER_weave_toc_line_node(N->content); TEMPORARY_TEXT(TEMP) Colonies__paragraph_URL(TEMP, C->para, hrs->wv->weave_to); @@ -26178,11 +26259,11 @@ int HTMLFormat__render_visit(tree_node *N, void *state, int L) { HTML__end_link(OUT); } -#line 117 "inweb/Chapter 5/HTML Formats.w" +#line 118 "inweb/Chapter 5/HTML Formats.w" else if (N->type == weave_defn_node_type) { -#line 563 "inweb/Chapter 5/HTML Formats.w" +#line 578 "inweb/Chapter 5/HTML Formats.w" weave_defn_node *C = RETRIEVE_POINTER_weave_defn_node(N->content); HTML_OPEN_WITH("span", "class=\"definition-keyword\""); WRITE("%S", C->keyword); @@ -26190,11 +26271,11 @@ int HTMLFormat__render_visit(tree_node *N, void *state, int L) { WRITE(" "); } -#line 118 "inweb/Chapter 5/HTML Formats.w" +#line 119 "inweb/Chapter 5/HTML Formats.w" else if (N->type == weave_source_code_node_type) { -#line 570 "inweb/Chapter 5/HTML Formats.w" +#line 585 "inweb/Chapter 5/HTML Formats.w" weave_source_code_node *C = RETRIEVE_POINTER_weave_source_code_node(N->content); int starts = FALSE; if (N == N->parent->child) starts = TRUE; @@ -26214,22 +26295,22 @@ int HTMLFormat__render_visit(tree_node *N, void *state, int L) { if (current_colour >= 0) HTMLFormat__change_colour(OUT, -1, hrs->colours); } -#line 119 "inweb/Chapter 5/HTML Formats.w" +#line 120 "inweb/Chapter 5/HTML Formats.w" else if (N->type == weave_url_node_type) { -#line 589 "inweb/Chapter 5/HTML Formats.w" +#line 604 "inweb/Chapter 5/HTML Formats.w" weave_url_node *C = RETRIEVE_POINTER_weave_url_node(N->content); - HTML__begin_link_with_class(OUT, (C->external)?TL_IS_546:TL_IS_547, C->url); + HTML__begin_link_with_class(OUT, (C->external)?TL_IS_549:TL_IS_550, C->url); WRITE("%S", C->content); HTML__end_link(OUT); } -#line 120 "inweb/Chapter 5/HTML Formats.w" +#line 121 "inweb/Chapter 5/HTML Formats.w" else if (N->type == weave_footnote_cue_node_type) { -#line 595 "inweb/Chapter 5/HTML Formats.w" +#line 610 "inweb/Chapter 5/HTML Formats.w" weave_footnote_cue_node *C = RETRIEVE_POINTER_weave_footnote_cue_node(N->content); text_stream *fn_plugin_name = hrs->wv->pattern->footnotes_plugin; if (Str__len(fn_plugin_name) > 0) @@ -26238,11 +26319,11 @@ int HTMLFormat__render_visit(tree_node *N, void *state, int L) { C->cue_text, C->cue_text, C->cue_text); } -#line 121 "inweb/Chapter 5/HTML Formats.w" +#line 122 "inweb/Chapter 5/HTML Formats.w" else if (N->type == weave_begin_footnote_text_node_type) { -#line 603 "inweb/Chapter 5/HTML Formats.w" +#line 618 "inweb/Chapter 5/HTML Formats.w" weave_begin_footnote_text_node *C = RETRIEVE_POINTER_weave_begin_footnote_text_node(N->content); text_stream *fn_plugin_name = hrs->wv->pattern->footnotes_plugin; @@ -26252,23 +26333,23 @@ int HTMLFormat__render_visit(tree_node *N, void *state, int L) { C->cue_text); { -#line 690 "inweb/Chapter 5/HTML Formats.w" +#line 705 "inweb/Chapter 5/HTML Formats.w" for (tree_node *M = N->child; M; M = M->next) Trees__traverse_from(M, &HTMLFormat__render_visit, (void *) hrs, L+1); } -#line 610 "inweb/Chapter 5/HTML Formats.w" +#line 625 "inweb/Chapter 5/HTML Formats.w" ; WRITE("

    ", C->cue_text); return FALSE; } -#line 122 "inweb/Chapter 5/HTML Formats.w" +#line 123 "inweb/Chapter 5/HTML Formats.w" else if (N->type == weave_display_line_node_type) { -#line 616 "inweb/Chapter 5/HTML Formats.w" +#line 631 "inweb/Chapter 5/HTML Formats.w" weave_display_line_node *C = RETRIEVE_POINTER_weave_display_line_node(N->content); HTML_OPEN("blockquote"); WRITE("\n"); INDENT; @@ -26278,14 +26359,14 @@ int HTMLFormat__render_visit(tree_node *N, void *state, int L) { OUTDENT; HTML_CLOSE("blockquote"); WRITE("\n"); } -#line 123 "inweb/Chapter 5/HTML Formats.w" +#line 124 "inweb/Chapter 5/HTML Formats.w" else if (N->type == weave_function_defn_node_type) { -#line 625 "inweb/Chapter 5/HTML Formats.w" +#line 640 "inweb/Chapter 5/HTML Formats.w" weave_function_defn_node *C = RETRIEVE_POINTER_weave_function_defn_node(N->content); - Swarm__ensure_plugin(hrs->wv, TL_IS_548); + Swarm__ensure_plugin(hrs->wv, TL_IS_551); HTMLFormat__change_colour(OUT, FUNCTION_COLOUR, hrs->colours); WRITE("%S", C->fn->function_name); WRITE(""); @@ -26298,12 +26379,12 @@ int HTMLFormat__render_visit(tree_node *N, void *state, int L) { hrs->popup_counter, C->fn->function_name); { -#line 690 "inweb/Chapter 5/HTML Formats.w" +#line 705 "inweb/Chapter 5/HTML Formats.w" for (tree_node *M = N->child; M; M = M->next) Trees__traverse_from(M, &HTMLFormat__render_visit, (void *) hrs, L+1); } -#line 638 "inweb/Chapter 5/HTML Formats.w" +#line 653 "inweb/Chapter 5/HTML Formats.w" ; HTMLFormat__change_colour(OUT, -1, hrs->colours); WRITE(""); @@ -26311,40 +26392,40 @@ int HTMLFormat__render_visit(tree_node *N, void *state, int L) { return FALSE; } -#line 124 "inweb/Chapter 5/HTML Formats.w" +#line 125 "inweb/Chapter 5/HTML Formats.w" else if (N->type == weave_item_node_type) { -#line 645 "inweb/Chapter 5/HTML Formats.w" +#line 660 "inweb/Chapter 5/HTML Formats.w" weave_item_node *C = RETRIEVE_POINTER_weave_item_node(N->content); if (Str__len(C->label) > 0) WRITE("(%S) ", C->label); else WRITE(" "); } -#line 125 "inweb/Chapter 5/HTML Formats.w" +#line 126 "inweb/Chapter 5/HTML Formats.w" else if (N->type == weave_inline_node_type) { -#line 654 "inweb/Chapter 5/HTML Formats.w" +#line 669 "inweb/Chapter 5/HTML Formats.w" HTML_OPEN_WITH("span", "class=\"extract\""); { -#line 690 "inweb/Chapter 5/HTML Formats.w" +#line 705 "inweb/Chapter 5/HTML Formats.w" for (tree_node *M = N->child; M; M = M->next) Trees__traverse_from(M, &HTMLFormat__render_visit, (void *) hrs, L+1); } -#line 655 "inweb/Chapter 5/HTML Formats.w" +#line 670 "inweb/Chapter 5/HTML Formats.w" ; HTML_CLOSE("span"); return FALSE; } -#line 126 "inweb/Chapter 5/HTML Formats.w" +#line 127 "inweb/Chapter 5/HTML Formats.w" else if (N->type == weave_locale_node_type) { -#line 660 "inweb/Chapter 5/HTML Formats.w" +#line 675 "inweb/Chapter 5/HTML Formats.w" weave_locale_node *C = RETRIEVE_POINTER_weave_locale_node(N->content); TEMPORARY_TEXT(TEMP) Colonies__paragraph_URL(TEMP, C->par1, hrs->wv->weave_to); @@ -26357,11 +26438,11 @@ int HTMLFormat__render_visit(tree_node *N, void *state, int L) { HTML__end_link(OUT); } -#line 127 "inweb/Chapter 5/HTML Formats.w" +#line 128 "inweb/Chapter 5/HTML Formats.w" else if (N->type == weave_maths_node_type) { -#line 672 "inweb/Chapter 5/HTML Formats.w" +#line 687 "inweb/Chapter 5/HTML Formats.w" weave_maths_node *C = RETRIEVE_POINTER_weave_maths_node(N->content); text_stream *plugin_name = hrs->wv->pattern->mathematics_plugin; if (Str__len(plugin_name) == 0) { @@ -26377,14 +26458,14 @@ int HTMLFormat__render_visit(tree_node *N, void *state, int L) { } } -#line 128 "inweb/Chapter 5/HTML Formats.w" +#line 129 "inweb/Chapter 5/HTML Formats.w" else internal_error("unable to render unknown node"); return TRUE; } -#line 697 "inweb/Chapter 5/HTML Formats.w" +#line 712 "inweb/Chapter 5/HTML Formats.w" int HTMLFormat__interior_material(tree_node *N) { if (N->type == weave_commentary_node_type) return TRUE; if (N->type == weave_url_node_type) return TRUE; @@ -26395,7 +26476,7 @@ int HTMLFormat__interior_material(tree_node *N) { return FALSE; } -#line 711 "inweb/Chapter 5/HTML Formats.w" +#line 726 "inweb/Chapter 5/HTML Formats.w" void HTMLFormat__go_to_depth(HTML_render_state *hrs, int from_depth, int to_depth) { text_stream *OUT = hrs->OUT; if (from_depth == to_depth) { @@ -26413,7 +26494,7 @@ void HTMLFormat__go_to_depth(HTML_render_state *hrs, int from_depth, int to_dept if (to_depth > 0) HTML_OPEN("li"); } -#line 729 "inweb/Chapter 5/HTML Formats.w" +#line 744 "inweb/Chapter 5/HTML Formats.w" void HTMLFormat__paragraph_number(text_stream *OUT, paragraph *P) { TEMPORARY_TEXT(TEMP) Colonies__paragraph_anchor(TEMP, P); @@ -26426,7 +26507,7 @@ void HTMLFormat__paragraph_number(text_stream *OUT, paragraph *P) { HTML_CLOSE("b"); } -#line 742 "inweb/Chapter 5/HTML Formats.w" +#line 757 "inweb/Chapter 5/HTML Formats.w" void HTMLFormat__change_colour(text_stream *OUT, int col, colour_scheme *cs) { if (col == -1) { HTML_CLOSE("span"); @@ -26450,7 +26531,7 @@ void HTMLFormat__change_colour(text_stream *OUT, int col, colour_scheme *cs) { } } -#line 766 "inweb/Chapter 5/HTML Formats.w" +#line 781 "inweb/Chapter 5/HTML Formats.w" void HTMLFormat__escape_text(text_stream *OUT, text_stream *id) { for (int i=0; i < Str__len(id); i++) { if (Str__get_at(id, i) == '&') WRITE("&"); @@ -26460,12 +26541,12 @@ void HTMLFormat__escape_text(text_stream *OUT, text_stream *id) { } } -#line 778 "inweb/Chapter 5/HTML Formats.w" +#line 793 "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->md, TL_IS_549)); + WRITE_TO(T, "%S", Bibliographic__get_datum(W->md, TL_IS_552)); W->as_ebook = Epub__new(T, "P"); - filename *CSS = Patterns__find_asset(pattern, TL_IS_550, TL_IS_551); + filename *CSS = Patterns__find_asset(pattern, TL_IS_553, TL_IS_554); Epub__use_CSS_throughout(W->as_ebook, CSS); Epub__attach_metadata(W->as_ebook, L"identifier", T); DISCARD_TEXT(T) @@ -26482,7 +26563,7 @@ void HTMLFormat__end_weaving_EPUB(weave_format *wf, web *W, weave_pattern *patte #line 9 "inweb/Chapter 5/Debugging Format.w" void Debugging__create(void) { - weave_format *wf = Formats__create_weave_format(TL_IS_552, TL_IS_553); + weave_format *wf = Formats__create_weave_format(TL_IS_555, TL_IS_556); METHOD_ADD(wf, RENDER_FOR_MTID, Debugging__render); } @@ -26503,7 +26584,7 @@ int Debugging__render_visit(tree_node *N, void *state, int L) { WRITE("%S", N->type->node_type_name); if (N->type == weave_document_node_type) { -#line 83 "inweb/Chapter 5/Debugging Format.w" +#line 84 "inweb/Chapter 5/Debugging Format.w" weave_document_node *C = RETRIEVE_POINTER_weave_document_node(N->content); WRITE(" weave order %d", C->wv->allocation_id); @@ -26512,7 +26593,7 @@ int Debugging__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_head_node_type) { -#line 87 "inweb/Chapter 5/Debugging Format.w" +#line 88 "inweb/Chapter 5/Debugging Format.w" weave_head_node *C = RETRIEVE_POINTER_weave_head_node(N->content); WRITE(" banner <%S>", C->banner); @@ -26521,7 +26602,7 @@ int Debugging__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_body_node_type) { -#line 91 "inweb/Chapter 5/Debugging Format.w" +#line 92 "inweb/Chapter 5/Debugging Format.w" ; } @@ -26529,7 +26610,7 @@ int Debugging__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_tail_node_type) { -#line 94 "inweb/Chapter 5/Debugging Format.w" +#line 95 "inweb/Chapter 5/Debugging Format.w" weave_tail_node *C = RETRIEVE_POINTER_weave_tail_node(N->content); WRITE(" rennab <%S>", C->rennab); @@ -26538,7 +26619,7 @@ int Debugging__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_verbatim_node_type) { -#line 98 "inweb/Chapter 5/Debugging Format.w" +#line 99 "inweb/Chapter 5/Debugging Format.w" weave_verbatim_node *C = RETRIEVE_POINTER_weave_verbatim_node(N->content); Debugging__show_text(OUT, C->content, 80); @@ -26547,7 +26628,7 @@ int Debugging__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_chapter_header_node_type) { -#line 110 "inweb/Chapter 5/Debugging Format.w" +#line 111 "inweb/Chapter 5/Debugging Format.w" weave_chapter_header_node *C = RETRIEVE_POINTER_weave_chapter_header_node(N->content); WRITE(" <%S>", C->chap->md->ch_title); @@ -26556,7 +26637,7 @@ int Debugging__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_chapter_footer_node_type) { -#line 114 "inweb/Chapter 5/Debugging Format.w" +#line 115 "inweb/Chapter 5/Debugging Format.w" weave_chapter_footer_node *C = RETRIEVE_POINTER_weave_chapter_footer_node(N->content); WRITE(" <%S>", C->chap->md->ch_title); @@ -26565,7 +26646,7 @@ int Debugging__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_section_header_node_type) { -#line 102 "inweb/Chapter 5/Debugging Format.w" +#line 103 "inweb/Chapter 5/Debugging Format.w" weave_section_header_node *C = RETRIEVE_POINTER_weave_section_header_node(N->content); WRITE(" <%S>", C->sect->md->sect_title); @@ -26574,7 +26655,7 @@ int Debugging__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_section_footer_node_type) { -#line 106 "inweb/Chapter 5/Debugging Format.w" +#line 107 "inweb/Chapter 5/Debugging Format.w" weave_section_footer_node *C = RETRIEVE_POINTER_weave_section_footer_node(N->content); WRITE(" <%S>", C->sect->md->sect_title); @@ -26583,7 +26664,7 @@ int Debugging__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_section_purpose_node_type) { -#line 118 "inweb/Chapter 5/Debugging Format.w" +#line 119 "inweb/Chapter 5/Debugging Format.w" weave_section_purpose_node *C = RETRIEVE_POINTER_weave_section_purpose_node(N->content); WRITE(" <%S>", C->purpose); @@ -26592,7 +26673,7 @@ int Debugging__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_subheading_node_type) { -#line 122 "inweb/Chapter 5/Debugging Format.w" +#line 123 "inweb/Chapter 5/Debugging Format.w" weave_subheading_node *C = RETRIEVE_POINTER_weave_subheading_node(N->content); WRITE(" <%S>", C->text); @@ -26601,7 +26682,7 @@ int Debugging__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_bar_node_type) { -#line 126 "inweb/Chapter 5/Debugging Format.w" +#line 127 "inweb/Chapter 5/Debugging Format.w" ; } @@ -26609,7 +26690,7 @@ int Debugging__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_pagebreak_node_type) { -#line 129 "inweb/Chapter 5/Debugging Format.w" +#line 130 "inweb/Chapter 5/Debugging Format.w" ; } @@ -26617,7 +26698,7 @@ int Debugging__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_paragraph_heading_node_type) { -#line 132 "inweb/Chapter 5/Debugging Format.w" +#line 133 "inweb/Chapter 5/Debugging Format.w" weave_paragraph_heading_node *C = RETRIEVE_POINTER_weave_paragraph_heading_node(N->content); Debugging__show_para(OUT, C->para); if (C->no_skip) WRITE(" (no skip)"); @@ -26627,7 +26708,7 @@ int Debugging__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_endnote_node_type) { -#line 137 "inweb/Chapter 5/Debugging Format.w" +#line 138 "inweb/Chapter 5/Debugging Format.w" ; } @@ -26635,16 +26716,25 @@ int Debugging__render_visit(tree_node *N, void *state, int L) { else if (N->type == weave_figure_node_type) { -#line 140 "inweb/Chapter 5/Debugging Format.w" +#line 141 "inweb/Chapter 5/Debugging Format.w" weave_figure_node *C = RETRIEVE_POINTER_weave_figure_node(N->content); WRITE(" <%S> %d by %d", C->figname, C->w, C->h); } #line 51 "inweb/Chapter 5/Debugging Format.w" + else if (N->type == weave_audio_node_type) +{ +#line 145 "inweb/Chapter 5/Debugging Format.w" + weave_audio_node *C = RETRIEVE_POINTER_weave_audio_node(N->content); + WRITE(" <%S> %d", C->audio_name, C->w); + +} +#line 52 "inweb/Chapter 5/Debugging Format.w" + else if (N->type == weave_material_node_type) { -#line 144 "inweb/Chapter 5/Debugging Format.w" +#line 149 "inweb/Chapter 5/Debugging Format.w" weave_material_node *C = RETRIEVE_POINTER_weave_material_node(N->content); WRITE(" "); Debugging__show_mat(OUT, C->material_type); @@ -26652,130 +26742,130 @@ int Debugging__render_visit(tree_node *N, void *state, int L) { if (C->plainly) WRITE(" (plainly)"); } -#line 52 "inweb/Chapter 5/Debugging Format.w" +#line 53 "inweb/Chapter 5/Debugging Format.w" else if (N->type == weave_embed_node_type) { -#line 151 "inweb/Chapter 5/Debugging Format.w" +#line 156 "inweb/Chapter 5/Debugging Format.w" weave_embed_node *C = RETRIEVE_POINTER_weave_embed_node(N->content); WRITE(" service <%S> ID <%S> %d by %d", C->service, C->ID, C->w, C->h); } -#line 53 "inweb/Chapter 5/Debugging Format.w" +#line 54 "inweb/Chapter 5/Debugging Format.w" else if (N->type == weave_pmac_node_type) { -#line 155 "inweb/Chapter 5/Debugging Format.w" +#line 160 "inweb/Chapter 5/Debugging Format.w" weave_pmac_node *C = RETRIEVE_POINTER_weave_pmac_node(N->content); WRITE(" <%S>", C->pmac->macro_name); if (C->defn) WRITE(" (definition)"); } -#line 54 "inweb/Chapter 5/Debugging Format.w" +#line 55 "inweb/Chapter 5/Debugging Format.w" else if (N->type == weave_vskip_node_type) { -#line 160 "inweb/Chapter 5/Debugging Format.w" +#line 165 "inweb/Chapter 5/Debugging Format.w" weave_vskip_node *C = RETRIEVE_POINTER_weave_vskip_node(N->content); if (C->in_comment) WRITE(" (in comment)"); } -#line 55 "inweb/Chapter 5/Debugging Format.w" +#line 56 "inweb/Chapter 5/Debugging Format.w" else if (N->type == weave_chapter_node_type) { -#line 167 "inweb/Chapter 5/Debugging Format.w" +#line 172 "inweb/Chapter 5/Debugging Format.w" weave_chapter_node *C = RETRIEVE_POINTER_weave_chapter_node(N->content); WRITE(" <%S>", C->chap->md->ch_title); } -#line 56 "inweb/Chapter 5/Debugging Format.w" +#line 57 "inweb/Chapter 5/Debugging Format.w" else if (N->type == weave_section_node_type) { -#line 171 "inweb/Chapter 5/Debugging Format.w" +#line 176 "inweb/Chapter 5/Debugging Format.w" weave_section_node *C = RETRIEVE_POINTER_weave_section_node(N->content); WRITE(" <%S>", C->sect->md->sect_title); } -#line 57 "inweb/Chapter 5/Debugging Format.w" +#line 58 "inweb/Chapter 5/Debugging Format.w" else if (N->type == weave_code_line_node_type) { -#line 175 "inweb/Chapter 5/Debugging Format.w" +#line 180 "inweb/Chapter 5/Debugging Format.w" ; -} -#line 58 "inweb/Chapter 5/Debugging Format.w" - - else if (N->type == weave_function_usage_node_type) -{ -#line 178 "inweb/Chapter 5/Debugging Format.w" - weave_function_usage_node *C = RETRIEVE_POINTER_weave_function_usage_node(N->content); - WRITE(" <%S>", C->fn->function_name); - } #line 59 "inweb/Chapter 5/Debugging Format.w" + else if (N->type == weave_function_usage_node_type) +{ +#line 183 "inweb/Chapter 5/Debugging Format.w" + weave_function_usage_node *C = RETRIEVE_POINTER_weave_function_usage_node(N->content); + WRITE(" <%S>", C->fn->function_name); + +} +#line 60 "inweb/Chapter 5/Debugging Format.w" + else if (N->type == weave_commentary_node_type) { -#line 182 "inweb/Chapter 5/Debugging Format.w" +#line 187 "inweb/Chapter 5/Debugging Format.w" weave_commentary_node *C = RETRIEVE_POINTER_weave_commentary_node(N->content); Debugging__show_text(OUT, C->text, 80); if (C->in_code) WRITE(" (code)"); } -#line 60 "inweb/Chapter 5/Debugging Format.w" +#line 61 "inweb/Chapter 5/Debugging Format.w" else if (N->type == weave_carousel_slide_node_type) { -#line 187 "inweb/Chapter 5/Debugging Format.w" +#line 192 "inweb/Chapter 5/Debugging Format.w" weave_carousel_slide_node *C = RETRIEVE_POINTER_weave_carousel_slide_node(N->content); WRITE(" caption <%S>", C->caption); } -#line 61 "inweb/Chapter 5/Debugging Format.w" +#line 62 "inweb/Chapter 5/Debugging Format.w" else if (N->type == weave_toc_node_type) { -#line 191 "inweb/Chapter 5/Debugging Format.w" +#line 196 "inweb/Chapter 5/Debugging Format.w" weave_toc_node *C = RETRIEVE_POINTER_weave_toc_node(N->content); WRITE(" - <%S>", C->text1); } -#line 62 "inweb/Chapter 5/Debugging Format.w" +#line 63 "inweb/Chapter 5/Debugging Format.w" else if (N->type == weave_toc_line_node_type) { -#line 195 "inweb/Chapter 5/Debugging Format.w" +#line 200 "inweb/Chapter 5/Debugging Format.w" weave_toc_line_node *C = RETRIEVE_POINTER_weave_toc_line_node(N->content); WRITE(" - <%S, %S>", C->text1, C->text2); if (C->para) Debugging__show_para(OUT, C->para); } -#line 63 "inweb/Chapter 5/Debugging Format.w" +#line 64 "inweb/Chapter 5/Debugging Format.w" else if (N->type == weave_chapter_title_page_node_type) { -#line 200 "inweb/Chapter 5/Debugging Format.w" +#line 205 "inweb/Chapter 5/Debugging Format.w" weave_chapter_title_page_node *C = RETRIEVE_POINTER_weave_chapter_title_page_node(N->content); WRITE(" - something %d", C->allocation_id); } -#line 64 "inweb/Chapter 5/Debugging Format.w" +#line 65 "inweb/Chapter 5/Debugging Format.w" else if (N->type == weave_defn_node_type) { -#line 204 "inweb/Chapter 5/Debugging Format.w" +#line 209 "inweb/Chapter 5/Debugging Format.w" weave_defn_node *C = RETRIEVE_POINTER_weave_defn_node(N->content); WRITE(" <%S>", C->keyword); } -#line 65 "inweb/Chapter 5/Debugging Format.w" +#line 66 "inweb/Chapter 5/Debugging Format.w" else if (N->type == weave_source_code_node_type) { -#line 208 "inweb/Chapter 5/Debugging Format.w" +#line 213 "inweb/Chapter 5/Debugging Format.w" weave_source_code_node *C = RETRIEVE_POINTER_weave_source_code_node(N->content); WRITE(" <%S>\n", C->matter); for (int i=0; icolouring); } -#line 66 "inweb/Chapter 5/Debugging Format.w" +#line 67 "inweb/Chapter 5/Debugging Format.w" else if (N->type == weave_url_node_type) { -#line 215 "inweb/Chapter 5/Debugging Format.w" +#line 220 "inweb/Chapter 5/Debugging Format.w" weave_url_node *C = RETRIEVE_POINTER_weave_url_node(N->content); WRITE(" content <%S> url <%S>", C->content, C->url); } -#line 67 "inweb/Chapter 5/Debugging Format.w" +#line 68 "inweb/Chapter 5/Debugging Format.w" else if (N->type == weave_footnote_cue_node_type) { -#line 219 "inweb/Chapter 5/Debugging Format.w" +#line 224 "inweb/Chapter 5/Debugging Format.w" weave_footnote_cue_node *C = RETRIEVE_POINTER_weave_footnote_cue_node(N->content); WRITE(" [%S]", C->cue_text); -} -#line 68 "inweb/Chapter 5/Debugging Format.w" - - else if (N->type == weave_begin_footnote_text_node_type) -{ -#line 223 "inweb/Chapter 5/Debugging Format.w" - weave_begin_footnote_text_node *C = RETRIEVE_POINTER_weave_begin_footnote_text_node(N->content); - WRITE(" [%S]", C->cue_text); - } #line 69 "inweb/Chapter 5/Debugging Format.w" - else if (N->type == weave_display_line_node_type) + else if (N->type == weave_begin_footnote_text_node_type) { -#line 227 "inweb/Chapter 5/Debugging Format.w" - weave_display_line_node *C = RETRIEVE_POINTER_weave_display_line_node(N->content); - WRITE(" <%S>", C->text); +#line 228 "inweb/Chapter 5/Debugging Format.w" + weave_begin_footnote_text_node *C = RETRIEVE_POINTER_weave_begin_footnote_text_node(N->content); + WRITE(" [%S]", C->cue_text); } #line 70 "inweb/Chapter 5/Debugging Format.w" - else if (N->type == weave_function_defn_node_type) + else if (N->type == weave_display_line_node_type) { -#line 231 "inweb/Chapter 5/Debugging Format.w" - weave_function_defn_node *C = RETRIEVE_POINTER_weave_function_defn_node(N->content); - WRITE(" <%S>", C->fn->function_name); +#line 232 "inweb/Chapter 5/Debugging Format.w" + weave_display_line_node *C = RETRIEVE_POINTER_weave_display_line_node(N->content); + WRITE(" <%S>", C->text); } #line 71 "inweb/Chapter 5/Debugging Format.w" - else if (N->type == weave_item_node_type) + else if (N->type == weave_function_defn_node_type) { -#line 235 "inweb/Chapter 5/Debugging Format.w" - weave_item_node *C = RETRIEVE_POINTER_weave_item_node(N->content); - WRITE(" depth %d label <%S>", C->depth, C->label); +#line 236 "inweb/Chapter 5/Debugging Format.w" + weave_function_defn_node *C = RETRIEVE_POINTER_weave_function_defn_node(N->content); + WRITE(" <%S>", C->fn->function_name); } #line 72 "inweb/Chapter 5/Debugging Format.w" - else if (N->type == weave_grammar_index_node_type) + else if (N->type == weave_item_node_type) { -#line 239 "inweb/Chapter 5/Debugging Format.w" - ; +#line 240 "inweb/Chapter 5/Debugging Format.w" + weave_item_node *C = RETRIEVE_POINTER_weave_item_node(N->content); + WRITE(" depth %d label <%S>", C->depth, C->label); } #line 73 "inweb/Chapter 5/Debugging Format.w" - else if (N->type == weave_inline_node_type) + else if (N->type == weave_grammar_index_node_type) { -#line 242 "inweb/Chapter 5/Debugging Format.w" +#line 244 "inweb/Chapter 5/Debugging Format.w" ; } #line 74 "inweb/Chapter 5/Debugging Format.w" + else if (N->type == weave_inline_node_type) +{ +#line 247 "inweb/Chapter 5/Debugging Format.w" + ; + +} +#line 75 "inweb/Chapter 5/Debugging Format.w" + else if (N->type == weave_locale_node_type) { -#line 245 "inweb/Chapter 5/Debugging Format.w" +#line 250 "inweb/Chapter 5/Debugging Format.w" weave_locale_node *C = RETRIEVE_POINTER_weave_locale_node(N->content); Debugging__show_para(OUT, C->par1); if (C->par2) { @@ -26866,24 +26956,24 @@ int Debugging__render_visit(tree_node *N, void *state, int L) { } } -#line 75 "inweb/Chapter 5/Debugging Format.w" +#line 76 "inweb/Chapter 5/Debugging Format.w" else if (N->type == weave_maths_node_type) { -#line 253 "inweb/Chapter 5/Debugging Format.w" +#line 258 "inweb/Chapter 5/Debugging Format.w" weave_maths_node *C = RETRIEVE_POINTER_weave_maths_node(N->content); WRITE(" <%S>", C->content); if (C->displayed) WRITE(" (displayed)"); } -#line 76 "inweb/Chapter 5/Debugging Format.w" +#line 77 "inweb/Chapter 5/Debugging Format.w" else WRITE("Unknown node"); WRITE("\n"); return TRUE; } -#line 258 "inweb/Chapter 5/Debugging Format.w" +#line 263 "inweb/Chapter 5/Debugging Format.w" void Debugging__show_text(text_stream *OUT, text_stream *text, int limit) { WRITE(" <"); for (int i=0; (ilast_included_in_round = current_inclusion_round; pathname *AP = Colonies__assets_path(); int html_mode = FALSE; - if (Str__eq(pattern->pattern_format->format_name, TL_IS_556)) html_mode = TRUE; + if (Str__eq(pattern->pattern_format->format_name, TL_IS_559)) html_mode = TRUE; int finds = 0; TEMPORARY_TEXT(required); WRITE_TO(required, "%S.html", wp->plugin_name); @@ -27000,9 +27090,9 @@ void WeavePlugins__include_plugin(OUTPUT_STREAM, web *W, weave_plugin *wp, if (html_mode) { TEMPORARY_TEXT(ext); Filenames__write_extension(ext, F); - if (Str__eq_insensitive(ext, TL_IS_557)) { + if (Str__eq_insensitive(ext, TL_IS_560)) { WeavePlugins__include_CSS_file(OUT, W, F, leafname, NULL, pattern, from); - } else if (Str__eq_insensitive(ext, TL_IS_558)) { + } else if (Str__eq_insensitive(ext, TL_IS_561)) { TEMPORARY_TEXT(url); if (AP) Pathnames__relative_URL(url, Filenames__up(from), AP); WRITE_TO(url, "%S", leafname); @@ -27070,11 +27160,11 @@ void WeavePlugins__include_colour_scheme(OUTPUT_STREAM, web *W, colour_scheme *c weave_pattern *pattern, filename *from) { if (cs->last_included_in_round == current_inclusion_round) return; cs->last_included_in_round = current_inclusion_round; - if (Str__eq(pattern->pattern_format->format_name, TL_IS_559)) { + if (Str__eq(pattern->pattern_format->format_name, TL_IS_562)) { TEMPORARY_TEXT(css); WRITE_TO(css, "%S.css", cs->scheme_name); - filename *F = Patterns__find_asset(pattern, TL_IS_560, css); - if (F == NULL) F = Patterns__find_asset(pattern, TL_IS_561, css); + filename *F = Patterns__find_asset(pattern, TL_IS_563, css); + if (F == NULL) F = Patterns__find_asset(pattern, TL_IS_564, css); if (F == NULL) { TEMPORARY_TEXT(err); WRITE_TO(err, "No CSS file for the colour scheme '%S' can be found", @@ -27395,7 +27485,7 @@ void Makefiles__scan_makefile_line(text_stream *line, text_file_position *tfp, v { #line 139 "inweb/Chapter 6/Makefiles.w" WRITE("%S", mr.exp[0]); - Makefiles__repeat(OUT, TL_IS_562, FALSE, mr.exp[1], FALSE, NULL, tfp, MS, marker, TL_IS_563); + Makefiles__repeat(OUT, TL_IS_565, FALSE, mr.exp[1], FALSE, NULL, tfp, MS, marker, TL_IS_566); WRITE("%S\n", mr.exp[2]); MS->last_line_was_blank = FALSE; Regexp__dispose_of(&mr); @@ -27417,7 +27507,7 @@ void Makefiles__scan_makefile_line(text_stream *line, text_file_position *tfp, v { #line 139 "inweb/Chapter 6/Makefiles.w" WRITE("%S", mr.exp[0]); - Makefiles__repeat(OUT, TL_IS_562, FALSE, mr.exp[1], FALSE, NULL, tfp, MS, marker, TL_IS_563); + Makefiles__repeat(OUT, TL_IS_565, FALSE, mr.exp[1], FALSE, NULL, tfp, MS, marker, TL_IS_566); WRITE("%S\n", mr.exp[2]); MS->last_line_was_blank = FALSE; Regexp__dispose_of(&mr); @@ -27439,7 +27529,7 @@ void Makefiles__scan_makefile_line(text_stream *line, text_file_position *tfp, v { #line 139 "inweb/Chapter 6/Makefiles.w" WRITE("%S", mr.exp[0]); - Makefiles__repeat(OUT, TL_IS_562, FALSE, mr.exp[1], FALSE, NULL, tfp, MS, marker, TL_IS_563); + Makefiles__repeat(OUT, TL_IS_565, FALSE, mr.exp[1], FALSE, NULL, tfp, MS, marker, TL_IS_566); WRITE("%S\n", mr.exp[2]); MS->last_line_was_blank = FALSE; Regexp__dispose_of(&mr); @@ -27457,7 +27547,7 @@ void Makefiles__scan_makefile_line(text_stream *line, text_file_position *tfp, v { #line 156 "inweb/Chapter 6/Makefiles.w" WRITE("INWEB = "); Makefiles__pathname_slashed(OUT, path_to_inweb); WRITE("/Tangled/inweb\n"); - pathname *path_to_intest = Pathnames__down(Pathnames__up(path_to_inweb), TL_IS_565); + pathname *path_to_intest = Pathnames__down(Pathnames__up(path_to_inweb), TL_IS_568); 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->md->path_to_web)); @@ -27474,7 +27564,7 @@ void Makefiles__scan_makefile_line(text_stream *line, text_file_position *tfp, v if (Regexp__match(&mr, line, L" *{platform-settings} *")) { #line 147 "inweb/Chapter 6/Makefiles.w" - filename *prototype = Filenames__in(path_to_inweb, TL_IS_564); + filename *prototype = Filenames__in(path_to_inweb, TL_IS_567); MS->allow_commands = FALSE; TextFiles__read(prototype, FALSE, "can't open make settings file", TRUE, Makefiles__scan_makefile_line, NULL, MS); @@ -27761,7 +27851,7 @@ void Makefiles__repeat(OUTPUT_STREAM, text_stream *prefix, int every_time, text_ int c = 0; LOOP_OVER(M, module) { if ((M->origin_marker == over) && - ((Str__eq(tag, TL_IS_566)) || (Str__eq(tag, M->module_tag)))) { + ((Str__eq(tag, TL_IS_569)) || (Str__eq(tag, M->module_tag)))) { if ((prefix) && ((c++ > 0) || (every_time))) WRITE("%S", prefix); if (matter) { TEMPORARY_TEXT(line); @@ -27815,7 +27905,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(path_to_inweb_materials, TL_IS_567); + Filenames__in(path_to_inweb_materials, TL_IS_570); TextFiles__read(prototype, FALSE, "can't open make settings file", TRUE, Git__copy_gitignore_line, NULL, MS); Regexp__dispose_of(&mr); @@ -27849,11 +27939,11 @@ void Readme__write(filename *from, filename *to) { write_state ws; ws.current_definition = NULL; ws.known_macros = NEW_LINKED_LIST(macro); - macro *V = Readme__new_macro(TL_IS_568, NULL, NULL); + macro *V = Readme__new_macro(TL_IS_571, NULL, NULL); ADD_TO_LINKED_LIST(V, macro, ws.known_macros); - macro *P = Readme__new_macro(TL_IS_569, NULL, NULL); + macro *P = Readme__new_macro(TL_IS_572, NULL, NULL); ADD_TO_LINKED_LIST(P, macro, ws.known_macros); - macro *A = Readme__new_macro(TL_IS_570, NULL, NULL); + macro *A = Readme__new_macro(TL_IS_573, NULL, NULL); ADD_TO_LINKED_LIST(A, macro, ws.known_macros); ws.stack_frame = NULL; text_stream file_to; @@ -27889,7 +27979,7 @@ void Readme__write_helper(text_stream *text, text_file_position *tfp, void *stat } } else { Readme__expand_material(ws, OUT, text, tfp); - Readme__expand_material(ws, OUT, TL_IS_571, tfp); + Readme__expand_material(ws, OUT, TL_IS_574, tfp); } Regexp__dispose_of(&mr); } @@ -28020,7 +28110,7 @@ void Readme__expand_at(write_state *ws, text_stream *OUT, text_stream *macro_nam #line 204 "inweb/Chapter 6/Readme Writeme.w" void Readme__expand_macro(write_state *ws, text_stream *OUT, macro *M, text_file_position *tfp) { - if (Str__eq(M->name, TL_IS_572)) + if (Str__eq(M->name, TL_IS_575)) { #line 215 "inweb/Chapter 6/Readme Writeme.w" if (ws->stack_frame->no_pars != 1) @@ -28028,14 +28118,14 @@ void Readme__expand_macro(write_state *ws, text_stream *OUT, macro *M, text_file else { TEMPORARY_TEXT(program); Readme__expand_material(ws, program, ws->stack_frame->pars[0], tfp); - Readme__write_var(OUT, program, TL_IS_575); + Readme__write_var(OUT, program, TL_IS_578); DISCARD_TEXT(program); } } #line 205 "inweb/Chapter 6/Readme Writeme.w" - else if (Str__eq(M->name, TL_IS_573)) + else if (Str__eq(M->name, TL_IS_576)) { #line 225 "inweb/Chapter 6/Readme Writeme.w" if (ws->stack_frame->no_pars != 1) @@ -28043,14 +28133,14 @@ void Readme__expand_macro(write_state *ws, text_stream *OUT, macro *M, text_file else { TEMPORARY_TEXT(program); Readme__expand_material(ws, program, ws->stack_frame->pars[0], tfp); - Readme__write_var(OUT, program, TL_IS_576); + Readme__write_var(OUT, program, TL_IS_579); DISCARD_TEXT(program); } } #line 206 "inweb/Chapter 6/Readme Writeme.w" - else if (Str__eq(M->name, TL_IS_574)) + else if (Str__eq(M->name, TL_IS_577)) { #line 235 "inweb/Chapter 6/Readme Writeme.w" if (ws->stack_frame->no_pars != 2) @@ -28079,8 +28169,8 @@ void Readme__expand_macro(write_state *ws, text_stream *OUT, macro *M, text_file void Readme__write_var(text_stream *OUT, text_stream *program, text_stream *datum) { writeme_asset *A = Readme__find_asset(program); if (A->if_web) WRITE("%S", Bibliographic__get_datum(A->if_web, datum)); - else if (Str__eq(datum, TL_IS_577)) WRITE("%S", A->date); - else if (Str__eq(datum, TL_IS_578)) WRITE("%S", A->version); + else if (Str__eq(datum, TL_IS_580)) WRITE("%S", A->date); + else if (Str__eq(datum, TL_IS_581)) WRITE("%S", A->version); } #line 273 "inweb/Chapter 6/Readme Writeme.w" @@ -28111,7 +28201,7 @@ writeme_asset *Readme__find_asset(text_stream *program) { A->if_web = WebMetadata__get_without_modules(Pathnames__from_text(program), NULL); } else { filename *I6_vn = Filenames__in( - Pathnames__down(Pathnames__from_text(program), TL_IS_579), TL_IS_580); + Pathnames__down(Pathnames__from_text(program), TL_IS_582), TL_IS_583); if (TextFiles__exists(I6_vn)) { #line 310 "inweb/Chapter 6/Readme Writeme.w" @@ -28121,7 +28211,7 @@ writeme_asset *Readme__find_asset(text_stream *program) { } #line 295 "inweb/Chapter 6/Readme Writeme.w" ; - filename *template_vn = Filenames__in(Pathnames__from_text(program), TL_IS_581); + filename *template_vn = Filenames__in(Pathnames__from_text(program), TL_IS_584); if (TextFiles__exists(template_vn)) { #line 314 "inweb/Chapter 6/Readme Writeme.w" @@ -28131,7 +28221,7 @@ writeme_asset *Readme__find_asset(text_stream *program) { } #line 297 "inweb/Chapter 6/Readme Writeme.w" ; - filename *rmt_vn = Filenames__in(Pathnames__from_text(program), TL_IS_582); + filename *rmt_vn = Filenames__in(Pathnames__from_text(program), TL_IS_585); if (TextFiles__exists(rmt_vn)) { #line 318 "inweb/Chapter 6/Readme Writeme.w" @@ -28141,7 +28231,7 @@ writeme_asset *Readme__find_asset(text_stream *program) { } #line 299 "inweb/Chapter 6/Readme Writeme.w" ; - rmt_vn = Filenames__in(Pathnames__from_text(program), TL_IS_583); + rmt_vn = Filenames__in(Pathnames__from_text(program), TL_IS_586); if (TextFiles__exists(rmt_vn)) { #line 318 "inweb/Chapter 6/Readme Writeme.w" @@ -28216,7 +28306,7 @@ void Readme__readme_harvester(text_stream *text, text_file_position *tfp, void * void Colonies__load(filename *F) { colony *C = CREATE(colony); C->members = NEW_LINKED_LIST(colony_member); - C->home = TL_IS_584; + C->home = TL_IS_587; C->assets_path = NULL; C->patterns_path = NULL; colony_reader_state crs; @@ -28240,8 +28330,8 @@ void Colonies__read_line(text_stream *line, text_file_position *tfp, void *v_crs match_results mr = Regexp__create_mr(); if (Regexp__match(&mr, line, L"(%c*?): \"*(%C+)\" at \"(%c*)\" in \"(%c*)\"")) { colony_member *CM = CREATE(colony_member); - if (Str__eq(mr.exp[0], TL_IS_585)) CM->web_rather_than_module = TRUE; - else if (Str__eq(mr.exp[0], TL_IS_586)) CM->web_rather_than_module = FALSE; + if (Str__eq(mr.exp[0], TL_IS_588)) CM->web_rather_than_module = TRUE; + else if (Str__eq(mr.exp[0], TL_IS_589)) CM->web_rather_than_module = FALSE; else { CM->web_rather_than_module = FALSE; Errors__in_text_file("text before ':' must be 'web' or 'module'", tfp); @@ -28249,7 +28339,7 @@ void Colonies__read_line(text_stream *line, text_file_position *tfp, void *v_crs CM->name = Str__duplicate(mr.exp[1]); CM->path = Str__duplicate(mr.exp[2]); CM->home_leaf = Str__new(); - if (Str__suffix_eq(CM->path, TL_IS_587, 6)) { + if (Str__suffix_eq(CM->path, TL_IS_590, 6)) { filename *F = Filenames__from_text(CM->path); Filenames__write_unextended_leafname(CM->home_leaf, F); WRITE_TO(CM->home_leaf, ".html"); @@ -28389,7 +28479,7 @@ module *Colonies__as_module(colony_member *CM, source_line *L, web_md *Wm) { #line 254 "inweb/Chapter 6/Colonies.w" filename *F = NULL; pathname *P = NULL; - if (Str__suffix_eq(CM->path, TL_IS_588, 6)) + if (Str__suffix_eq(CM->path, TL_IS_591, 6)) F = Filenames__from_text(CM->path); else P = Pathnames__from_text(CM->path); @@ -28416,7 +28506,7 @@ text_stream *Colonies__home(void) { colony *C; LOOP_OVER(C, colony) return C->home; - return TL_IS_589; + return TL_IS_592; } pathname *Colonies__assets_path(void) { @@ -28575,7 +28665,7 @@ int Colonies__resolve_reference_in_weave_inner(text_stream *url, text_stream *ti DISCARD_TEXT(err); return FALSE; } else if (N > 1) { - Main__error_in_web(TL_IS_590, L); + Main__error_in_web(TL_IS_593, L); WebModules__named_reference(&found_M, &found_Sm, &bare_module_name, title, search_M, text, TRUE); return FALSE; @@ -28658,7 +28748,7 @@ void Colonies__paragraph_URL(OUTPUT_STREAM, paragraph *P, filename *from) { if (P == NULL) internal_error("no para"); section *to_S = P->under_section; module *to_M = to_S->md->owning_module; - if (Str__ne(to_M->module_name, TL_IS_591)) { + if (Str__ne(to_M->module_name, TL_IS_594)) { colony_member *to_C = Colonies__find(to_M->module_name); if (to_C) { pathname *from_path = Filenames__up(from); @@ -28848,435 +28938,438 @@ void register_tangled_text_literals(void) { TL_IS_158 = Str__literal(L"(very early code)"); TL_IS_159 = Str__literal(L"(early code)"); TL_IS_160 = Str__literal(L"Figures"); - TL_IS_161 = Str__literal(L"Carousels"); + TL_IS_161 = Str__literal(L"Audio"); TL_IS_162 = Str__literal(L"Carousels"); TL_IS_163 = Str__literal(L"Carousels"); TL_IS_164 = Str__literal(L"Carousels"); TL_IS_165 = Str__literal(L"Carousels"); - TL_IS_166 = Str__literal(L"Videos"); - TL_IS_167 = Str__literal(L"unknown bracketed annotation"); - TL_IS_168 = Str__literal(L"unknown material after '='"); - TL_IS_169 = Str__literal(L"undisplayed"); - TL_IS_170 = Str__literal(L"hyperlinked"); - TL_IS_171 = Str__literal(L"only 'undisplayed' and/or 'hyperlinked' can precede 'text' here"); - TL_IS_172 = Str__literal(L"="); - TL_IS_173 = Str__literal(L"don't understand @command"); - TL_IS_174 = Str__literal(L"Purpose used after bar"); - TL_IS_175 = Str__literal(L"Interface used after bar"); - TL_IS_176 = Str__literal(L"Definitions used after bar"); - TL_IS_177 = Str__literal(L"second bar in the same section"); - TL_IS_178 = Str__literal(L"enumeration constants can't supply a value"); - TL_IS_179 = Str__literal(L"P"); - TL_IS_180 = Str__literal(L"S"); - TL_IS_181 = Str__literal(L"Footnote Begins Notation"); - TL_IS_182 = Str__literal(L"Footnote Ends Notation"); - TL_IS_183 = Str__literal(L"Off"); - TL_IS_184 = Str__literal(L"ifdef-"); - TL_IS_185 = Str__literal(L"ifndef-"); - TL_IS_186 = Str__literal(L"."); - TL_IS_187 = Str__literal(L"This paragraph is used only if "); - TL_IS_188 = Str__literal(L" and if "); - TL_IS_189 = Str__literal(L" and "); - TL_IS_190 = Str__literal(L" is"); - TL_IS_191 = Str__literal(L" are"); - TL_IS_192 = Str__literal(L" defined"); - TL_IS_193 = Str__literal(L" undefined"); - TL_IS_194 = Str__literal(L"enumeration constants must belong to a _FAMILY"); - TL_IS_195 = Str__literal(L"this enumeration _FAMILY is unknown"); - TL_IS_196 = Str__literal(L"this enumeration _FAMILY already exists"); - TL_IS_197 = Str__literal(L"unrecognised interface line"); - TL_IS_198 = Str__literal(L"makescript.txt"); + TL_IS_166 = Str__literal(L"Carousels"); + TL_IS_167 = Str__literal(L"Videos"); + TL_IS_168 = Str__literal(L"unknown bracketed annotation"); + TL_IS_169 = Str__literal(L"unknown material after '='"); + TL_IS_170 = Str__literal(L"undisplayed"); + TL_IS_171 = Str__literal(L"hyperlinked"); + TL_IS_172 = Str__literal(L"only 'undisplayed' and/or 'hyperlinked' can precede 'text' here"); + TL_IS_173 = Str__literal(L"="); + TL_IS_174 = Str__literal(L"don't understand @command"); + TL_IS_175 = Str__literal(L"Purpose used after bar"); + TL_IS_176 = Str__literal(L"Interface used after bar"); + TL_IS_177 = Str__literal(L"Definitions used after bar"); + TL_IS_178 = Str__literal(L"second bar in the same section"); + TL_IS_179 = Str__literal(L"enumeration constants can't supply a value"); + TL_IS_180 = Str__literal(L"P"); + TL_IS_181 = Str__literal(L"S"); + TL_IS_182 = Str__literal(L"Footnote Begins Notation"); + TL_IS_183 = Str__literal(L"Footnote Ends Notation"); + TL_IS_184 = Str__literal(L"Off"); + TL_IS_185 = Str__literal(L"ifdef-"); + TL_IS_186 = Str__literal(L"ifndef-"); + TL_IS_187 = Str__literal(L"."); + TL_IS_188 = Str__literal(L"This paragraph is used only if "); + TL_IS_189 = Str__literal(L" and if "); + TL_IS_190 = Str__literal(L" and "); + TL_IS_191 = Str__literal(L" is"); + TL_IS_192 = Str__literal(L" are"); + TL_IS_193 = Str__literal(L" defined"); + TL_IS_194 = Str__literal(L" undefined"); + TL_IS_195 = Str__literal(L"enumeration constants must belong to a _FAMILY"); + TL_IS_196 = Str__literal(L"this enumeration _FAMILY is unknown"); + TL_IS_197 = Str__literal(L"this enumeration _FAMILY already exists"); + TL_IS_198 = Str__literal(L"unrecognised interface line"); TL_IS_199 = Str__literal(L"makescript.txt"); - TL_IS_200 = Str__literal(L"gitignorescript.txt"); + TL_IS_200 = Str__literal(L"makescript.txt"); TL_IS_201 = Str__literal(L"gitignorescript.txt"); - TL_IS_202 = Str__literal(L""); - TL_IS_203 = Str__literal(L"index.html"); - TL_IS_204 = Str__literal(L"Purpose"); - TL_IS_205 = Str__literal(L"End of weave"); - TL_IS_206 = Str__literal(L"Definitions"); - TL_IS_207 = Str__literal(L"bad start to paragraph"); - TL_IS_208 = Str__literal(L""); + TL_IS_202 = Str__literal(L"gitignorescript.txt"); + TL_IS_203 = Str__literal(L""); + TL_IS_204 = Str__literal(L"index.html"); + TL_IS_205 = Str__literal(L"Purpose"); + TL_IS_206 = Str__literal(L"End of weave"); + TL_IS_207 = Str__literal(L"Definitions"); + TL_IS_208 = Str__literal(L"bad start to paragraph"); TL_IS_209 = Str__literal(L""); - TL_IS_210 = Str__literal(L"footnote never cued"); - TL_IS_211 = Str__literal(L"define"); - TL_IS_212 = Str__literal(L"enum"); - TL_IS_213 = Str__literal(L"This code is "); - TL_IS_214 = Str__literal(L"never used"); - TL_IS_215 = Str__literal(L", "); - TL_IS_216 = Str__literal(L" and "); - TL_IS_217 = Str__literal(L"used in "); - TL_IS_218 = Str__literal(L" (twice)"); - TL_IS_219 = Str__literal(L" (three times)"); - TL_IS_220 = Str__literal(L" (four times)"); - TL_IS_221 = Str__literal(L" (five times)"); - TL_IS_222 = Str__literal(L"."); - TL_IS_223 = Str__literal(L"The structure "); - TL_IS_224 = Str__literal(L" is private to this section"); - TL_IS_225 = Str__literal(L" is accessed in "); - TL_IS_226 = Str__literal(L", "); - TL_IS_227 = Str__literal(L" and here"); - TL_IS_228 = Str__literal(L"."); - TL_IS_229 = Str__literal(L"The function "); - TL_IS_230 = Str__literal(L" appears nowhere else"); - TL_IS_231 = Str__literal(L"none"); - TL_IS_232 = Str__literal(L")"); - TL_IS_233 = Str__literal(L"."); - TL_IS_234 = Str__literal(L" is used in "); - TL_IS_235 = Str__literal(L"), "); - TL_IS_236 = Str__literal(L", "); - TL_IS_237 = Str__literal(L"
    "); - TL_IS_238 = Str__literal(L", "); - TL_IS_239 = Str__literal(L" ("); - TL_IS_240 = Str__literal(L" - "); - TL_IS_241 = Str__literal(L", "); - TL_IS_242 = Str__literal(L"Code In Code Comments Notation"); - TL_IS_243 = Str__literal(L"Code In Commentary Notation"); - TL_IS_244 = Str__literal(L"Off"); - TL_IS_245 = Str__literal(L"TeX Mathematics Displayed Notation"); - TL_IS_246 = Str__literal(L"Off"); - TL_IS_247 = Str__literal(L"TeX Mathematics Notation"); - TL_IS_248 = Str__literal(L"Off"); - TL_IS_249 = Str__literal(L"Cross-References Notation"); - TL_IS_250 = Str__literal(L"Off"); - TL_IS_251 = Str__literal(L"http://"); - TL_IS_252 = Str__literal(L"https://"); - TL_IS_253 = Str__literal(L"this is a cue for a missing note"); - TL_IS_254 = Str__literal(L"Cross-References Notation"); - TL_IS_255 = Str__literal(L"Off"); - TL_IS_256 = Str__literal(L"http://"); - TL_IS_257 = Str__literal(L"https://"); - TL_IS_258 = Str__literal(L"misplaced definition"); - TL_IS_259 = Str__literal(L"unknown macro"); - TL_IS_260 = Str__literal(L"Dialects"); - TL_IS_261 = Str__literal(L"C"); - TL_IS_262 = Str__literal(L"Languages"); - TL_IS_263 = Str__literal(L"InC"); - TL_IS_264 = Str__literal(L"Name"); - TL_IS_265 = Str__literal(L"Details"); - TL_IS_266 = Str__literal(L"Extension"); - TL_IS_267 = Str__literal(L"Line Comment"); - TL_IS_268 = Str__literal(L"Whole Line Comment"); - TL_IS_269 = Str__literal(L"Multiline Comment Open"); - TL_IS_270 = Str__literal(L"Multiline Comment Close"); - TL_IS_271 = Str__literal(L"String Literal"); - TL_IS_272 = Str__literal(L"String Literal Escape"); - TL_IS_273 = Str__literal(L"Character Literal"); - TL_IS_274 = Str__literal(L"Character Literal Escape"); - TL_IS_275 = Str__literal(L"Binary Literal Prefix"); - TL_IS_276 = Str__literal(L"Octal Literal Prefix"); - TL_IS_277 = Str__literal(L"Hexadecimal Literal Prefix"); - TL_IS_278 = Str__literal(L"Negative Literal Prefix"); - TL_IS_279 = Str__literal(L"Shebang"); - TL_IS_280 = Str__literal(L"Line Marker"); - TL_IS_281 = Str__literal(L"Before Named Paragraph Expansion"); - TL_IS_282 = Str__literal(L"After Named Paragraph Expansion"); - TL_IS_283 = Str__literal(L"Start Definition"); - TL_IS_284 = Str__literal(L"Prolong Definition"); - TL_IS_285 = Str__literal(L"End Definition"); - TL_IS_286 = Str__literal(L"Start Ifdef"); - TL_IS_287 = Str__literal(L"Start Ifndef"); - TL_IS_288 = Str__literal(L"End Ifdef"); - TL_IS_289 = Str__literal(L"End Ifndef"); - TL_IS_290 = Str__literal(L"C-Like"); - TL_IS_291 = Str__literal(L"Suppress Disclaimer"); - TL_IS_292 = Str__literal(L"Supports Namespaces"); - TL_IS_293 = Str__literal(L"Function Declaration Notation"); - TL_IS_294 = Str__literal(L"Type Declaration Notation"); - TL_IS_295 = Str__literal(L"}"); - TL_IS_296 = Str__literal(L"unquoted"); - TL_IS_297 = Str__literal(L"{"); - TL_IS_298 = Str__literal(L"debug"); - TL_IS_299 = Str__literal(L"!string"); - TL_IS_300 = Str__literal(L"!function"); - TL_IS_301 = Str__literal(L"!definition"); - TL_IS_302 = Str__literal(L"!reserved"); - TL_IS_303 = Str__literal(L"!element"); - TL_IS_304 = Str__literal(L"!identifier"); - TL_IS_305 = Str__literal(L"!character"); - TL_IS_306 = Str__literal(L"!constant"); - TL_IS_307 = Str__literal(L"!plain"); - TL_IS_308 = Str__literal(L"!extract"); - TL_IS_309 = Str__literal(L"!comment"); - TL_IS_310 = Str__literal(L"true"); - TL_IS_311 = Str__literal(L"false"); - TL_IS_312 = Str__literal(L"both"); - TL_IS_313 = Str__literal(L"brackets"); - TL_IS_314 = Str__literal(L"characters"); - TL_IS_315 = Str__literal(L"coloured"); - TL_IS_316 = Str__literal(L"colouring"); - TL_IS_317 = Str__literal(L"debug"); - TL_IS_318 = Str__literal(L"false"); - TL_IS_319 = Str__literal(L"in"); - TL_IS_320 = Str__literal(L"instances"); - TL_IS_321 = Str__literal(L"keyword"); - TL_IS_322 = Str__literal(L"matches"); - TL_IS_323 = Str__literal(L"matching"); - TL_IS_324 = Str__literal(L"not"); - TL_IS_325 = Str__literal(L"of"); - TL_IS_326 = Str__literal(L"on"); - TL_IS_327 = Str__literal(L"optionally"); - TL_IS_328 = Str__literal(L"prefix"); - TL_IS_329 = Str__literal(L"runs"); - TL_IS_330 = Str__literal(L"spaced"); - TL_IS_331 = Str__literal(L"suffix"); - TL_IS_332 = Str__literal(L"true"); - TL_IS_333 = Str__literal(L"unquoted"); - TL_IS_334 = Str__literal(L"Structures"); - TL_IS_335 = Str__literal(L"Main::"); - TL_IS_336 = Str__literal(L"Tangled output generated by inweb: do not edit"); - TL_IS_337 = Str__literal(L"this programming language does not support @d"); - TL_IS_338 = Str__literal(L"this programming language does not support multiline @d"); - TL_IS_339 = Str__literal(L"Namespaces"); - TL_IS_340 = Str__literal(L"Being internally called, this function mustn't belong to a :: namespace"); - TL_IS_341 = Str__literal(L"Being externally called, this function must belong to a :: namespace"); - TL_IS_342 = Str__literal(L"Structures"); - TL_IS_343 = Str__literal(L"program ended with conditional compilation open"); - TL_IS_344 = Str__literal(L"conditional compilation too deeply nested"); - TL_IS_345 = Str__literal(L"found #endif without #ifdef or #ifndef"); - TL_IS_346 = Str__literal(L"quartz"); + TL_IS_210 = Str__literal(L""); + TL_IS_211 = Str__literal(L"footnote never cued"); + TL_IS_212 = Str__literal(L"define"); + TL_IS_213 = Str__literal(L"enum"); + TL_IS_214 = Str__literal(L"This code is "); + TL_IS_215 = Str__literal(L"never used"); + TL_IS_216 = Str__literal(L", "); + TL_IS_217 = Str__literal(L" and "); + TL_IS_218 = Str__literal(L"used in "); + TL_IS_219 = Str__literal(L" (twice)"); + TL_IS_220 = Str__literal(L" (three times)"); + TL_IS_221 = Str__literal(L" (four times)"); + TL_IS_222 = Str__literal(L" (five times)"); + TL_IS_223 = Str__literal(L"."); + TL_IS_224 = Str__literal(L"The structure "); + TL_IS_225 = Str__literal(L" is private to this section"); + TL_IS_226 = Str__literal(L" is accessed in "); + TL_IS_227 = Str__literal(L", "); + TL_IS_228 = Str__literal(L" and here"); + TL_IS_229 = Str__literal(L"."); + TL_IS_230 = Str__literal(L"The function "); + TL_IS_231 = Str__literal(L" appears nowhere else"); + TL_IS_232 = Str__literal(L"none"); + TL_IS_233 = Str__literal(L")"); + TL_IS_234 = Str__literal(L"."); + TL_IS_235 = Str__literal(L" is used in "); + TL_IS_236 = Str__literal(L"), "); + TL_IS_237 = Str__literal(L", "); + TL_IS_238 = Str__literal(L"
    "); + TL_IS_239 = Str__literal(L", "); + TL_IS_240 = Str__literal(L" ("); + TL_IS_241 = Str__literal(L" - "); + TL_IS_242 = Str__literal(L", "); + TL_IS_243 = Str__literal(L"Code In Code Comments Notation"); + TL_IS_244 = Str__literal(L"Code In Commentary Notation"); + TL_IS_245 = Str__literal(L"Off"); + TL_IS_246 = Str__literal(L"TeX Mathematics Displayed Notation"); + TL_IS_247 = Str__literal(L"Off"); + TL_IS_248 = Str__literal(L"TeX Mathematics Notation"); + TL_IS_249 = Str__literal(L"Off"); + TL_IS_250 = Str__literal(L"Cross-References Notation"); + TL_IS_251 = Str__literal(L"Off"); + TL_IS_252 = Str__literal(L"http://"); + TL_IS_253 = Str__literal(L"https://"); + TL_IS_254 = Str__literal(L"this is a cue for a missing note"); + TL_IS_255 = Str__literal(L"Cross-References Notation"); + TL_IS_256 = Str__literal(L"Off"); + TL_IS_257 = Str__literal(L"http://"); + TL_IS_258 = Str__literal(L"https://"); + TL_IS_259 = Str__literal(L"misplaced definition"); + TL_IS_260 = Str__literal(L"unknown macro"); + TL_IS_261 = Str__literal(L"Dialects"); + TL_IS_262 = Str__literal(L"C"); + TL_IS_263 = Str__literal(L"Languages"); + TL_IS_264 = Str__literal(L"InC"); + TL_IS_265 = Str__literal(L"Name"); + TL_IS_266 = Str__literal(L"Details"); + TL_IS_267 = Str__literal(L"Extension"); + TL_IS_268 = Str__literal(L"Line Comment"); + TL_IS_269 = Str__literal(L"Whole Line Comment"); + TL_IS_270 = Str__literal(L"Multiline Comment Open"); + TL_IS_271 = Str__literal(L"Multiline Comment Close"); + TL_IS_272 = Str__literal(L"String Literal"); + TL_IS_273 = Str__literal(L"String Literal Escape"); + TL_IS_274 = Str__literal(L"Character Literal"); + TL_IS_275 = Str__literal(L"Character Literal Escape"); + TL_IS_276 = Str__literal(L"Binary Literal Prefix"); + TL_IS_277 = Str__literal(L"Octal Literal Prefix"); + TL_IS_278 = Str__literal(L"Hexadecimal Literal Prefix"); + TL_IS_279 = Str__literal(L"Negative Literal Prefix"); + TL_IS_280 = Str__literal(L"Shebang"); + TL_IS_281 = Str__literal(L"Line Marker"); + TL_IS_282 = Str__literal(L"Before Named Paragraph Expansion"); + TL_IS_283 = Str__literal(L"After Named Paragraph Expansion"); + TL_IS_284 = Str__literal(L"Start Definition"); + TL_IS_285 = Str__literal(L"Prolong Definition"); + TL_IS_286 = Str__literal(L"End Definition"); + TL_IS_287 = Str__literal(L"Start Ifdef"); + TL_IS_288 = Str__literal(L"Start Ifndef"); + TL_IS_289 = Str__literal(L"End Ifdef"); + TL_IS_290 = Str__literal(L"End Ifndef"); + TL_IS_291 = Str__literal(L"C-Like"); + TL_IS_292 = Str__literal(L"Suppress Disclaimer"); + TL_IS_293 = Str__literal(L"Supports Namespaces"); + TL_IS_294 = Str__literal(L"Function Declaration Notation"); + TL_IS_295 = Str__literal(L"Type Declaration Notation"); + TL_IS_296 = Str__literal(L"}"); + TL_IS_297 = Str__literal(L"unquoted"); + TL_IS_298 = Str__literal(L"{"); + TL_IS_299 = Str__literal(L"debug"); + TL_IS_300 = Str__literal(L"!string"); + TL_IS_301 = Str__literal(L"!function"); + TL_IS_302 = Str__literal(L"!definition"); + TL_IS_303 = Str__literal(L"!reserved"); + TL_IS_304 = Str__literal(L"!element"); + TL_IS_305 = Str__literal(L"!identifier"); + TL_IS_306 = Str__literal(L"!character"); + TL_IS_307 = Str__literal(L"!constant"); + TL_IS_308 = Str__literal(L"!plain"); + TL_IS_309 = Str__literal(L"!extract"); + TL_IS_310 = Str__literal(L"!comment"); + TL_IS_311 = Str__literal(L"true"); + TL_IS_312 = Str__literal(L"false"); + TL_IS_313 = Str__literal(L"both"); + TL_IS_314 = Str__literal(L"brackets"); + TL_IS_315 = Str__literal(L"characters"); + TL_IS_316 = Str__literal(L"coloured"); + TL_IS_317 = Str__literal(L"colouring"); + TL_IS_318 = Str__literal(L"debug"); + TL_IS_319 = Str__literal(L"false"); + TL_IS_320 = Str__literal(L"in"); + TL_IS_321 = Str__literal(L"instances"); + TL_IS_322 = Str__literal(L"keyword"); + TL_IS_323 = Str__literal(L"matches"); + TL_IS_324 = Str__literal(L"matching"); + TL_IS_325 = Str__literal(L"not"); + TL_IS_326 = Str__literal(L"of"); + TL_IS_327 = Str__literal(L"on"); + TL_IS_328 = Str__literal(L"optionally"); + TL_IS_329 = Str__literal(L"prefix"); + TL_IS_330 = Str__literal(L"runs"); + TL_IS_331 = Str__literal(L"spaced"); + TL_IS_332 = Str__literal(L"suffix"); + TL_IS_333 = Str__literal(L"true"); + TL_IS_334 = Str__literal(L"unquoted"); + TL_IS_335 = Str__literal(L"Structures"); + TL_IS_336 = Str__literal(L"Main::"); + TL_IS_337 = Str__literal(L"Tangled output generated by inweb: do not edit"); + TL_IS_338 = Str__literal(L"this programming language does not support @d"); + TL_IS_339 = Str__literal(L"this programming language does not support multiline @d"); + TL_IS_340 = Str__literal(L"Namespaces"); + TL_IS_341 = Str__literal(L"Being internally called, this function mustn't belong to a :: namespace"); + TL_IS_342 = Str__literal(L"Being externally called, this function must belong to a :: namespace"); + TL_IS_343 = Str__literal(L"Structures"); + TL_IS_344 = Str__literal(L"program ended with conditional compilation open"); + TL_IS_345 = Str__literal(L"conditional compilation too deeply nested"); + TL_IS_346 = Str__literal(L"found #endif without #ifdef or #ifndef"); TL_IS_347 = Str__literal(L"quartz"); TL_IS_348 = Str__literal(L"quartz"); - TL_IS_349 = Str__literal(L"like this"); - TL_IS_350 = Str__literal(L"most_recent_result"); - TL_IS_351 = Str__literal(L"most_recent_result_p"); - TL_IS_352 = Str__literal(L"Syntax.preform"); - TL_IS_353 = Str__literal(L"Preform Language"); + TL_IS_349 = Str__literal(L"quartz"); + TL_IS_350 = Str__literal(L"like this"); + TL_IS_351 = Str__literal(L"most_recent_result"); + TL_IS_352 = Str__literal(L"most_recent_result_p"); + TL_IS_353 = Str__literal(L"Syntax.preform"); TL_IS_354 = Str__literal(L"Preform Language"); - TL_IS_355 = Str__literal(L"weave tree"); - TL_IS_356 = Str__literal(L"document"); - TL_IS_357 = Str__literal(L"head"); - TL_IS_358 = Str__literal(L"body"); - TL_IS_359 = Str__literal(L"tail"); - TL_IS_360 = Str__literal(L"chapter footer"); - TL_IS_361 = Str__literal(L"chapter header"); - TL_IS_362 = Str__literal(L"section footer"); - TL_IS_363 = Str__literal(L"section header"); - TL_IS_364 = Str__literal(L"section purpose"); - TL_IS_365 = Str__literal(L"subheading"); - TL_IS_366 = Str__literal(L"bar"); - TL_IS_367 = Str__literal(L"pagebreak"); - TL_IS_368 = Str__literal(L"paragraph"); - TL_IS_369 = Str__literal(L"endnote"); - TL_IS_370 = Str__literal(L"figure"); - TL_IS_371 = Str__literal(L"material"); - TL_IS_372 = Str__literal(L"embed"); - TL_IS_373 = Str__literal(L"pmac"); - TL_IS_374 = Str__literal(L"vskip"); - TL_IS_375 = Str__literal(L"chapter"); - TL_IS_376 = Str__literal(L"section"); - TL_IS_377 = Str__literal(L"code line"); - TL_IS_378 = Str__literal(L"function usage"); - TL_IS_379 = Str__literal(L"commentary"); - TL_IS_380 = Str__literal(L"carousel slide"); - TL_IS_381 = Str__literal(L"toc"); - TL_IS_382 = Str__literal(L"toc line"); - TL_IS_383 = Str__literal(L"chapter_title_page"); - TL_IS_384 = Str__literal(L"defn"); - TL_IS_385 = Str__literal(L"source_code"); - TL_IS_386 = Str__literal(L"url"); - TL_IS_387 = Str__literal(L"footnote_cue"); - TL_IS_388 = Str__literal(L"footnote"); - TL_IS_389 = Str__literal(L"display line"); - TL_IS_390 = Str__literal(L"function defn"); - TL_IS_391 = Str__literal(L"item"); - TL_IS_392 = Str__literal(L"grammar index"); - TL_IS_393 = Str__literal(L"inline"); - TL_IS_394 = Str__literal(L"locale"); - TL_IS_395 = Str__literal(L"mathematics"); - TL_IS_396 = Str__literal(L"verbatim"); - TL_IS_397 = Str__literal(L"Weave Content"); - TL_IS_398 = Str__literal(L"plain"); - TL_IS_399 = Str__literal(L".txt"); - TL_IS_400 = Str__literal(L"TeX"); - TL_IS_401 = Str__literal(L".tex"); - TL_IS_402 = Str__literal(L"DVI"); + TL_IS_355 = Str__literal(L"Preform Language"); + TL_IS_356 = Str__literal(L"weave tree"); + TL_IS_357 = Str__literal(L"document"); + TL_IS_358 = Str__literal(L"head"); + TL_IS_359 = Str__literal(L"body"); + TL_IS_360 = Str__literal(L"tail"); + TL_IS_361 = Str__literal(L"chapter footer"); + TL_IS_362 = Str__literal(L"chapter header"); + TL_IS_363 = Str__literal(L"section footer"); + TL_IS_364 = Str__literal(L"section header"); + TL_IS_365 = Str__literal(L"section purpose"); + TL_IS_366 = Str__literal(L"subheading"); + TL_IS_367 = Str__literal(L"bar"); + TL_IS_368 = Str__literal(L"pagebreak"); + TL_IS_369 = Str__literal(L"paragraph"); + TL_IS_370 = Str__literal(L"endnote"); + TL_IS_371 = Str__literal(L"figure"); + TL_IS_372 = Str__literal(L"audio"); + TL_IS_373 = Str__literal(L"material"); + TL_IS_374 = Str__literal(L"embed"); + TL_IS_375 = Str__literal(L"pmac"); + TL_IS_376 = Str__literal(L"vskip"); + TL_IS_377 = Str__literal(L"chapter"); + TL_IS_378 = Str__literal(L"section"); + TL_IS_379 = Str__literal(L"code line"); + TL_IS_380 = Str__literal(L"function usage"); + TL_IS_381 = Str__literal(L"commentary"); + TL_IS_382 = Str__literal(L"carousel slide"); + TL_IS_383 = Str__literal(L"toc"); + TL_IS_384 = Str__literal(L"toc line"); + TL_IS_385 = Str__literal(L"chapter_title_page"); + TL_IS_386 = Str__literal(L"defn"); + TL_IS_387 = Str__literal(L"source_code"); + TL_IS_388 = Str__literal(L"url"); + TL_IS_389 = Str__literal(L"footnote_cue"); + TL_IS_390 = Str__literal(L"footnote"); + TL_IS_391 = Str__literal(L"display line"); + TL_IS_392 = Str__literal(L"function defn"); + TL_IS_393 = Str__literal(L"item"); + TL_IS_394 = Str__literal(L"grammar index"); + TL_IS_395 = Str__literal(L"inline"); + TL_IS_396 = Str__literal(L"locale"); + TL_IS_397 = Str__literal(L"mathematics"); + TL_IS_398 = Str__literal(L"verbatim"); + TL_IS_399 = Str__literal(L"Weave Content"); + TL_IS_400 = Str__literal(L"plain"); + TL_IS_401 = Str__literal(L".txt"); + TL_IS_402 = Str__literal(L"TeX"); TL_IS_403 = Str__literal(L".tex"); - TL_IS_404 = Str__literal(L"PDF"); + TL_IS_404 = Str__literal(L"DVI"); TL_IS_405 = Str__literal(L".tex"); - TL_IS_406 = Str__literal(L"Dunno"); - TL_IS_407 = Str__literal(L"inweb-macros.tex"); - TL_IS_408 = Str__literal(L"weavesection"); - TL_IS_409 = Str__literal(L"weavesections"); - TL_IS_410 = Str__literal(L"weavesectionss"); - TL_IS_411 = Str__literal(L"weavesectionsss"); - TL_IS_412 = Str__literal(L"tweavesection"); - TL_IS_413 = Str__literal(L"tweavesections"); - TL_IS_414 = Str__literal(L"tweavesectionss"); - TL_IS_415 = Str__literal(L"tweavesectionsss"); - TL_IS_416 = Str__literal(L"nsweavesection"); - TL_IS_417 = Str__literal(L"nsweavesections"); - TL_IS_418 = Str__literal(L"not"); - TL_IS_419 = Str__literal(L"leq"); - TL_IS_420 = Str__literal(L"geq"); - TL_IS_421 = Str__literal(L"sim"); - TL_IS_422 = Str__literal(L"hbox"); - TL_IS_423 = Str__literal(L"left"); - TL_IS_424 = Str__literal(L"right"); - TL_IS_425 = Str__literal(L"Rightarrow"); - TL_IS_426 = Str__literal(L"Leftrightarrow"); - TL_IS_427 = Str__literal(L"to"); - TL_IS_428 = Str__literal(L"rightarrow"); - TL_IS_429 = Str__literal(L"longrightarrow"); - TL_IS_430 = Str__literal(L"leftarrow"); - TL_IS_431 = Str__literal(L"longleftarrow"); - TL_IS_432 = Str__literal(L"lbrace"); - TL_IS_433 = Str__literal(L"mid"); - TL_IS_434 = Str__literal(L"rbrace"); - TL_IS_435 = Str__literal(L"cdot"); - TL_IS_436 = Str__literal(L"cdots"); - TL_IS_437 = Str__literal(L"dots"); - TL_IS_438 = Str__literal(L"times"); - TL_IS_439 = Str__literal(L"quad"); - TL_IS_440 = Str__literal(L"qquad"); - TL_IS_441 = Str__literal(L"TeX"); - TL_IS_442 = Str__literal(L"neq"); - TL_IS_443 = Str__literal(L"noteq"); - TL_IS_444 = Str__literal(L"ell"); - TL_IS_445 = Str__literal(L"log"); - TL_IS_446 = Str__literal(L"exp"); - TL_IS_447 = Str__literal(L"sin"); - TL_IS_448 = Str__literal(L"cos"); - TL_IS_449 = Str__literal(L"tan"); - TL_IS_450 = Str__literal(L"top"); - TL_IS_451 = Str__literal(L"Alpha"); - TL_IS_452 = Str__literal(L"Beta"); - TL_IS_453 = Str__literal(L"Gamma"); - TL_IS_454 = Str__literal(L"Delta"); - TL_IS_455 = Str__literal(L"Epsilon"); - TL_IS_456 = Str__literal(L"Zeta"); - TL_IS_457 = Str__literal(L"Eta"); - TL_IS_458 = Str__literal(L"Theta"); - TL_IS_459 = Str__literal(L"Iota"); - TL_IS_460 = Str__literal(L"Kappa"); - TL_IS_461 = Str__literal(L"Lambda"); - TL_IS_462 = Str__literal(L"Mu"); - TL_IS_463 = Str__literal(L"Nu"); - TL_IS_464 = Str__literal(L"Xi"); - TL_IS_465 = Str__literal(L"Omicron"); - TL_IS_466 = Str__literal(L"Pi"); - TL_IS_467 = Str__literal(L"Rho"); - TL_IS_468 = Str__literal(L"Varsigma"); - TL_IS_469 = Str__literal(L"Sigma"); - TL_IS_470 = Str__literal(L"Tau"); - TL_IS_471 = Str__literal(L"Upsilon"); - TL_IS_472 = Str__literal(L"Phi"); - TL_IS_473 = Str__literal(L"Chi"); - TL_IS_474 = Str__literal(L"Psi"); - TL_IS_475 = Str__literal(L"Omega"); - TL_IS_476 = Str__literal(L"alpha"); - TL_IS_477 = Str__literal(L"beta"); - TL_IS_478 = Str__literal(L"gamma"); - TL_IS_479 = Str__literal(L"delta"); - TL_IS_480 = Str__literal(L"epsilon"); - TL_IS_481 = Str__literal(L"zeta"); - TL_IS_482 = Str__literal(L"eta"); - TL_IS_483 = Str__literal(L"theta"); - TL_IS_484 = Str__literal(L"iota"); - TL_IS_485 = Str__literal(L"kappa"); - TL_IS_486 = Str__literal(L"lambda"); - TL_IS_487 = Str__literal(L"mu"); - TL_IS_488 = Str__literal(L"nu"); - TL_IS_489 = Str__literal(L"xi"); - TL_IS_490 = Str__literal(L"omicron"); - TL_IS_491 = Str__literal(L"pi"); - TL_IS_492 = Str__literal(L"rho"); - TL_IS_493 = Str__literal(L"varsigma"); - TL_IS_494 = Str__literal(L"sigma"); - TL_IS_495 = Str__literal(L"tau"); - TL_IS_496 = Str__literal(L"upsilon"); - TL_IS_497 = Str__literal(L"phi"); - TL_IS_498 = Str__literal(L"chi"); - TL_IS_499 = Str__literal(L"psi"); - TL_IS_500 = Str__literal(L"omega"); - TL_IS_501 = Str__literal(L"exists"); - TL_IS_502 = Str__literal(L"in"); - TL_IS_503 = Str__literal(L"forall"); - TL_IS_504 = Str__literal(L"cap"); - TL_IS_505 = Str__literal(L"emptyset"); - TL_IS_506 = Str__literal(L"subseteq"); - TL_IS_507 = Str__literal(L"land"); - TL_IS_508 = Str__literal(L"lor"); - TL_IS_509 = Str__literal(L"lnot"); - TL_IS_510 = Str__literal(L"sum"); - TL_IS_511 = Str__literal(L"prod"); - TL_IS_512 = Str__literal(L"n"); - TL_IS_513 = Str__literal(L"t"); - TL_IS_514 = Str__literal(L"exists"); - TL_IS_515 = Str__literal(L"forall"); - TL_IS_516 = Str__literal(L"HTML"); - TL_IS_517 = Str__literal(L".html"); - TL_IS_518 = Str__literal(L"ePub"); + TL_IS_406 = Str__literal(L"PDF"); + TL_IS_407 = Str__literal(L".tex"); + TL_IS_408 = Str__literal(L"Dunno"); + TL_IS_409 = Str__literal(L"inweb-macros.tex"); + TL_IS_410 = Str__literal(L"weavesection"); + TL_IS_411 = Str__literal(L"weavesections"); + TL_IS_412 = Str__literal(L"weavesectionss"); + TL_IS_413 = Str__literal(L"weavesectionsss"); + TL_IS_414 = Str__literal(L"tweavesection"); + TL_IS_415 = Str__literal(L"tweavesections"); + TL_IS_416 = Str__literal(L"tweavesectionss"); + TL_IS_417 = Str__literal(L"tweavesectionsss"); + TL_IS_418 = Str__literal(L"nsweavesection"); + TL_IS_419 = Str__literal(L"nsweavesections"); + TL_IS_420 = Str__literal(L"not"); + TL_IS_421 = Str__literal(L"leq"); + TL_IS_422 = Str__literal(L"geq"); + TL_IS_423 = Str__literal(L"sim"); + TL_IS_424 = Str__literal(L"hbox"); + TL_IS_425 = Str__literal(L"left"); + TL_IS_426 = Str__literal(L"right"); + TL_IS_427 = Str__literal(L"Rightarrow"); + TL_IS_428 = Str__literal(L"Leftrightarrow"); + TL_IS_429 = Str__literal(L"to"); + TL_IS_430 = Str__literal(L"rightarrow"); + TL_IS_431 = Str__literal(L"longrightarrow"); + TL_IS_432 = Str__literal(L"leftarrow"); + TL_IS_433 = Str__literal(L"longleftarrow"); + TL_IS_434 = Str__literal(L"lbrace"); + TL_IS_435 = Str__literal(L"mid"); + TL_IS_436 = Str__literal(L"rbrace"); + TL_IS_437 = Str__literal(L"cdot"); + TL_IS_438 = Str__literal(L"cdots"); + TL_IS_439 = Str__literal(L"dots"); + TL_IS_440 = Str__literal(L"times"); + TL_IS_441 = Str__literal(L"quad"); + TL_IS_442 = Str__literal(L"qquad"); + TL_IS_443 = Str__literal(L"TeX"); + TL_IS_444 = Str__literal(L"neq"); + TL_IS_445 = Str__literal(L"noteq"); + TL_IS_446 = Str__literal(L"ell"); + TL_IS_447 = Str__literal(L"log"); + TL_IS_448 = Str__literal(L"exp"); + TL_IS_449 = Str__literal(L"sin"); + TL_IS_450 = Str__literal(L"cos"); + TL_IS_451 = Str__literal(L"tan"); + TL_IS_452 = Str__literal(L"top"); + TL_IS_453 = Str__literal(L"Alpha"); + TL_IS_454 = Str__literal(L"Beta"); + TL_IS_455 = Str__literal(L"Gamma"); + TL_IS_456 = Str__literal(L"Delta"); + TL_IS_457 = Str__literal(L"Epsilon"); + TL_IS_458 = Str__literal(L"Zeta"); + TL_IS_459 = Str__literal(L"Eta"); + TL_IS_460 = Str__literal(L"Theta"); + TL_IS_461 = Str__literal(L"Iota"); + TL_IS_462 = Str__literal(L"Kappa"); + TL_IS_463 = Str__literal(L"Lambda"); + TL_IS_464 = Str__literal(L"Mu"); + TL_IS_465 = Str__literal(L"Nu"); + TL_IS_466 = Str__literal(L"Xi"); + TL_IS_467 = Str__literal(L"Omicron"); + TL_IS_468 = Str__literal(L"Pi"); + TL_IS_469 = Str__literal(L"Rho"); + TL_IS_470 = Str__literal(L"Varsigma"); + TL_IS_471 = Str__literal(L"Sigma"); + TL_IS_472 = Str__literal(L"Tau"); + TL_IS_473 = Str__literal(L"Upsilon"); + TL_IS_474 = Str__literal(L"Phi"); + TL_IS_475 = Str__literal(L"Chi"); + TL_IS_476 = Str__literal(L"Psi"); + TL_IS_477 = Str__literal(L"Omega"); + TL_IS_478 = Str__literal(L"alpha"); + TL_IS_479 = Str__literal(L"beta"); + TL_IS_480 = Str__literal(L"gamma"); + TL_IS_481 = Str__literal(L"delta"); + TL_IS_482 = Str__literal(L"epsilon"); + TL_IS_483 = Str__literal(L"zeta"); + TL_IS_484 = Str__literal(L"eta"); + TL_IS_485 = Str__literal(L"theta"); + TL_IS_486 = Str__literal(L"iota"); + TL_IS_487 = Str__literal(L"kappa"); + TL_IS_488 = Str__literal(L"lambda"); + TL_IS_489 = Str__literal(L"mu"); + TL_IS_490 = Str__literal(L"nu"); + TL_IS_491 = Str__literal(L"xi"); + TL_IS_492 = Str__literal(L"omicron"); + TL_IS_493 = Str__literal(L"pi"); + TL_IS_494 = Str__literal(L"rho"); + TL_IS_495 = Str__literal(L"varsigma"); + TL_IS_496 = Str__literal(L"sigma"); + TL_IS_497 = Str__literal(L"tau"); + TL_IS_498 = Str__literal(L"upsilon"); + TL_IS_499 = Str__literal(L"phi"); + TL_IS_500 = Str__literal(L"chi"); + TL_IS_501 = Str__literal(L"psi"); + TL_IS_502 = Str__literal(L"omega"); + TL_IS_503 = Str__literal(L"exists"); + TL_IS_504 = Str__literal(L"in"); + TL_IS_505 = Str__literal(L"forall"); + TL_IS_506 = Str__literal(L"cap"); + TL_IS_507 = Str__literal(L"emptyset"); + TL_IS_508 = Str__literal(L"subseteq"); + TL_IS_509 = Str__literal(L"land"); + TL_IS_510 = Str__literal(L"lor"); + TL_IS_511 = Str__literal(L"lnot"); + TL_IS_512 = Str__literal(L"sum"); + TL_IS_513 = Str__literal(L"prod"); + TL_IS_514 = Str__literal(L"n"); + TL_IS_515 = Str__literal(L"t"); + TL_IS_516 = Str__literal(L"exists"); + TL_IS_517 = Str__literal(L"forall"); + TL_IS_518 = Str__literal(L"HTML"); TL_IS_519 = Str__literal(L".html"); - TL_IS_520 = Str__literal(L"Base"); - TL_IS_521 = Str__literal(L"Colours"); - TL_IS_522 = Str__literal(L""); - TL_IS_523 = Str__literal(L""); - TL_IS_524 = Str__literal(L"Breadcrumbs"); - TL_IS_525 = Str__literal(L"Title"); - TL_IS_526 = Str__literal(L"Short Title"); - TL_IS_527 = Str__literal(L"Short Title"); - TL_IS_528 = Str__literal(L"index.html"); - TL_IS_529 = Str__literal(L"Figures"); - TL_IS_530 = Str__literal(L"405"); - TL_IS_531 = Str__literal(L"720"); - TL_IS_532 = Str__literal(L"Embedding"); - TL_IS_533 = Str__literal(L"This is not a supported service"); - TL_IS_534 = Str__literal(L"Content ID"); - TL_IS_535 = Str__literal(L"Content Width"); - TL_IS_536 = Str__literal(L"Content Height"); - TL_IS_537 = Str__literal(L"named-paragraph-link"); - TL_IS_538 = Str__literal(L"function-link"); - TL_IS_539 = Str__literal(L"Carousel"); - TL_IS_540 = Str__literal(L"carousel-number"); - TL_IS_541 = Str__literal(L"carousel-caption"); - TL_IS_542 = Str__literal(L"carousel-caption-above"); - TL_IS_543 = Str__literal(L"carousel-number-above"); - TL_IS_544 = Str__literal(L"carousel-caption-below"); - TL_IS_545 = Str__literal(L"carousel-number-below"); - TL_IS_546 = Str__literal(L"external"); - TL_IS_547 = Str__literal(L"internal"); - TL_IS_548 = Str__literal(L"Popups"); - TL_IS_549 = Str__literal(L"Title"); - TL_IS_550 = Str__literal(L"Base"); - TL_IS_551 = Str__literal(L"Base.css"); - TL_IS_552 = Str__literal(L"debugging"); - TL_IS_553 = Str__literal(L".txt"); - TL_IS_554 = Str__literal(L"Colouring"); - TL_IS_555 = Str__literal(L"Coloring"); - TL_IS_556 = Str__literal(L"HTML"); - TL_IS_557 = Str__literal(L".css"); - TL_IS_558 = Str__literal(L".js"); + TL_IS_520 = Str__literal(L"ePub"); + TL_IS_521 = Str__literal(L".html"); + TL_IS_522 = Str__literal(L"Base"); + TL_IS_523 = Str__literal(L"Colours"); + TL_IS_524 = Str__literal(L""); + TL_IS_525 = Str__literal(L""); + TL_IS_526 = Str__literal(L"Breadcrumbs"); + TL_IS_527 = Str__literal(L"Title"); + TL_IS_528 = Str__literal(L"Short Title"); + TL_IS_529 = Str__literal(L"Short Title"); + TL_IS_530 = Str__literal(L"index.html"); + TL_IS_531 = Str__literal(L"Figures"); + TL_IS_532 = Str__literal(L"Audio"); + TL_IS_533 = Str__literal(L"405"); + TL_IS_534 = Str__literal(L"720"); + TL_IS_535 = Str__literal(L"Embedding"); + TL_IS_536 = Str__literal(L"This is not a supported service"); + TL_IS_537 = Str__literal(L"Content ID"); + TL_IS_538 = Str__literal(L"Content Width"); + TL_IS_539 = Str__literal(L"Content Height"); + TL_IS_540 = Str__literal(L"named-paragraph-link"); + TL_IS_541 = Str__literal(L"function-link"); + TL_IS_542 = Str__literal(L"Carousel"); + TL_IS_543 = Str__literal(L"carousel-number"); + TL_IS_544 = Str__literal(L"carousel-caption"); + TL_IS_545 = Str__literal(L"carousel-caption-above"); + TL_IS_546 = Str__literal(L"carousel-number-above"); + TL_IS_547 = Str__literal(L"carousel-caption-below"); + TL_IS_548 = Str__literal(L"carousel-number-below"); + TL_IS_549 = Str__literal(L"external"); + TL_IS_550 = Str__literal(L"internal"); + TL_IS_551 = Str__literal(L"Popups"); + TL_IS_552 = Str__literal(L"Title"); + TL_IS_553 = Str__literal(L"Base"); + TL_IS_554 = Str__literal(L"Base.css"); + TL_IS_555 = Str__literal(L"debugging"); + TL_IS_556 = Str__literal(L".txt"); + TL_IS_557 = Str__literal(L"Colouring"); + TL_IS_558 = Str__literal(L"Coloring"); TL_IS_559 = Str__literal(L"HTML"); - TL_IS_560 = Str__literal(L"Colouring"); - TL_IS_561 = Str__literal(L"Coloring"); - TL_IS_562 = Str__literal(L" "); - TL_IS_563 = Str__literal(L"all"); - TL_IS_564 = Str__literal(L"platform-settings.mk"); - TL_IS_565 = Str__literal(L"intest"); + TL_IS_560 = Str__literal(L".css"); + TL_IS_561 = Str__literal(L".js"); + TL_IS_562 = Str__literal(L"HTML"); + TL_IS_563 = Str__literal(L"Colouring"); + TL_IS_564 = Str__literal(L"Coloring"); + TL_IS_565 = Str__literal(L" "); TL_IS_566 = Str__literal(L"all"); - TL_IS_567 = Str__literal(L"gitignorescript.txt"); - TL_IS_568 = Str__literal(L"version"); - TL_IS_569 = Str__literal(L"purpose"); - TL_IS_570 = Str__literal(L"var"); - TL_IS_571 = Str__literal(L"\n"); - TL_IS_572 = Str__literal(L"version"); - TL_IS_573 = Str__literal(L"purpose"); - TL_IS_574 = Str__literal(L"var"); - TL_IS_575 = Str__literal(L"Version Number"); - TL_IS_576 = Str__literal(L"Purpose"); - TL_IS_577 = Str__literal(L"Build Date"); + TL_IS_567 = Str__literal(L"platform-settings.mk"); + TL_IS_568 = Str__literal(L"intest"); + TL_IS_569 = Str__literal(L"all"); + TL_IS_570 = Str__literal(L"gitignorescript.txt"); + TL_IS_571 = Str__literal(L"version"); + TL_IS_572 = Str__literal(L"purpose"); + TL_IS_573 = Str__literal(L"var"); + TL_IS_574 = Str__literal(L"\n"); + TL_IS_575 = Str__literal(L"version"); + TL_IS_576 = Str__literal(L"purpose"); + TL_IS_577 = Str__literal(L"var"); TL_IS_578 = Str__literal(L"Version Number"); - TL_IS_579 = Str__literal(L"inform6"); - TL_IS_580 = Str__literal(L"header.h"); - TL_IS_581 = Str__literal(L"(manifest).txt"); - TL_IS_582 = Str__literal(L"README.txt"); - TL_IS_583 = Str__literal(L"README.md"); - TL_IS_584 = Str__literal(L"docs"); - TL_IS_585 = Str__literal(L"web"); - TL_IS_586 = Str__literal(L"module"); - TL_IS_587 = Str__literal(L".inweb"); - TL_IS_588 = Str__literal(L".inweb"); - TL_IS_589 = Str__literal(L"docs"); - TL_IS_590 = Str__literal(L"Multiple cross-references might be meant here"); - TL_IS_591 = Str__literal(L"(main)"); + TL_IS_579 = Str__literal(L"Purpose"); + TL_IS_580 = Str__literal(L"Build Date"); + TL_IS_581 = Str__literal(L"Version Number"); + TL_IS_582 = Str__literal(L"inform6"); + TL_IS_583 = Str__literal(L"header.h"); + TL_IS_584 = Str__literal(L"(manifest).txt"); + TL_IS_585 = Str__literal(L"README.txt"); + TL_IS_586 = Str__literal(L"README.md"); + TL_IS_587 = Str__literal(L"docs"); + TL_IS_588 = Str__literal(L"web"); + TL_IS_589 = Str__literal(L"module"); + TL_IS_590 = Str__literal(L".inweb"); + TL_IS_591 = Str__literal(L".inweb"); + TL_IS_592 = Str__literal(L"docs"); + TL_IS_593 = Str__literal(L"Multiple cross-references might be meant here"); + TL_IS_594 = Str__literal(L"(main)"); } diff --git a/docs/inweb/1-bsc.html b/docs/inweb/1-bsc.html index 96439d0..edcbbd7 100644 --- a/docs/inweb/1-bsc.html +++ b/docs/inweb/1-bsc.html @@ -98,6 +98,7 @@ see A Brief Guide t enum weave_endnote_node_MT enum weave_material_node_MT enum weave_figure_node_MT +enum weave_audio_node_MT enum weave_embed_node_MT enum weave_pmac_node_MT enum weave_vskip_node_MT @@ -181,6 +182,7 @@ see A Brief Guide t ALLOCATE_INDIVIDUALLY(weave_endnote_node) ALLOCATE_INDIVIDUALLY(weave_material_node) ALLOCATE_INDIVIDUALLY(weave_figure_node) +ALLOCATE_INDIVIDUALLY(weave_audio_node) ALLOCATE_INDIVIDUALLY(weave_embed_node) ALLOCATE_INDIVIDUALLY(weave_pmac_node) ALLOCATE_INDIVIDUALLY(weave_vskip_node) diff --git a/docs/inweb/1-pc.html b/docs/inweb/1-pc.html index 59c9d09..64ac480 100644 --- a/docs/inweb/1-pc.html +++ b/docs/inweb/1-pc.html @@ -379,7 +379,7 @@ source:

    -void Main::error_in_web(text_stream *message, source_line *sl) {
    +void Main::error_in_web(text_stream *message, source_line *sl) {
         if (sl) {
             Errors::in_text_file_S(message, &(sl->source));
             WRITE_TO(STDERR, "%07d  %S\n", sl->source.line_count, sl->text);
    diff --git a/docs/inweb/1-ptt.html b/docs/inweb/1-ptt.html
    index 7b421b1..c7c3f5a 100644
    --- a/docs/inweb/1-ptt.html
    +++ b/docs/inweb/1-ptt.html
    @@ -284,7 +284,7 @@ from each other then this routine will lock up into an infinite loop.
     

    -filename *Patterns::find_asset(weave_pattern *pattern, text_stream *dirname,
    +filename *Patterns::find_asset(weave_pattern *pattern, text_stream *dirname,
         text_stream *leafname) {
         for (weave_pattern *wp = pattern; wp; wp = wp->based_on) {
             pathname *P = Pathnames::down(wp->pattern_location, dirname);
    @@ -302,7 +302,7 @@ from each other then this routine will lock up into an infinite loop.
         struct text_stream *trans;
     } css_file_transformation;
     
    -void Patterns::copy_file_into_weave(web *W, filename *F, pathname *P, text_stream *trans) {
    +void Patterns::copy_file_into_weave(web *W, filename *F, pathname *P, text_stream *trans) {
         pathname *H = W->redirect_weaves_to;
         if (H == NULL) H = Reader::woven_folder(W);
         if (P) H = P;
    diff --git a/docs/inweb/1-ts.html b/docs/inweb/1-ts.html
    index c639269..92221c3 100644
    --- a/docs/inweb/1-ts.html
    +++ b/docs/inweb/1-ts.html
    @@ -250,7 +250,7 @@ and details of any cover-sheet to use.
     

    §3.

    -void Swarm::ensure_plugin(weave_order *wv, text_stream *name) {
    +void Swarm::ensure_plugin(weave_order *wv, text_stream *name) {
         weave_plugin *existing;
         LOOP_OVER_LINKED_LIST(existing, weave_plugin, wv->plugins)
             if (Str::eq_insensitive(name, existing->plugin_name))
    @@ -259,7 +259,7 @@ and details of any cover-sheet to use.
         ADD_TO_LINKED_LIST(wp, weave_plugin, wv->plugins);
     }
     
    -colour_scheme *Swarm::ensure_colour_scheme(weave_order *wv, text_stream *name,
    +colour_scheme *Swarm::ensure_colour_scheme(weave_order *wv, text_stream *name,
         text_stream *pre) {
         colour_scheme *existing;
         LOOP_OVER_LINKED_LIST(existing, colour_scheme, wv->colour_schemes)
    diff --git a/docs/inweb/2-lc.html b/docs/inweb/2-lc.html
    index 3b26588..4cb0926 100644
    --- a/docs/inweb/2-lc.html
    +++ b/docs/inweb/2-lc.html
    @@ -201,6 +201,7 @@ some of these fell into disuse in version 2 syntax.
     enum PAGEBREAK_CMD
     enum GRAMMAR_INDEX_CMD
     enum FIGURE_CMD
    +enum AUDIO_CMD
     enum CAROUSEL_CMD
     enum CAROUSEL_ABOVE_CMD
     enum CAROUSEL_BELOW_CMD
    diff --git a/docs/inweb/2-tp.html b/docs/inweb/2-tp.html
    index 43c44d6..5ec32b5 100644
    --- a/docs/inweb/2-tp.html
    +++ b/docs/inweb/2-tp.html
    @@ -497,6 +497,14 @@ division in the current section.
                 L->text_operand = Str::duplicate(mr2.exp[0]);
                 comment_mode = TRUE;
             } else if ((current_paragraph) &&
    +            (Regexp::match(&mr2, mr.exp[0], L"%(audio (%c+)%)"))) {
    +            Tags::add_by_name(L->owning_paragraph, I"Audio");
    +            L->command_code = AUDIO_CMD;
    +            L->category = COMMAND_LCAT;
    +            code_lcat_for_body = COMMENT_BODY_LCAT;
    +            L->text_operand = Str::duplicate(mr2.exp[0]);
    +            comment_mode = TRUE;
    +        } else if ((current_paragraph) &&
                 (Regexp::match(&mr2, mr.exp[0], L"%(carousel%)"))) {
                 Tags::add_by_name(L->owning_paragraph, I"Carousels");
                 L->command_code = CAROUSEL_UNCAPTIONED_CMD;
    diff --git a/docs/inweb/3-tc.html b/docs/inweb/3-tc.html
    index 18c8382..1047ab2 100644
    --- a/docs/inweb/3-tc.html
    +++ b/docs/inweb/3-tc.html
    @@ -62,7 +62,7 @@ directly.
     

    -void Collater::for_web_and_pattern(text_stream *OUT, web *W,
    +void Collater::for_web_and_pattern(text_stream *OUT, web *W,
         weave_pattern *pattern, filename *F, filename *into) {
         Collater::collate(OUT, W, I"", F, pattern, NULL, NULL, NULL, into);
     }
    diff --git a/docs/inweb/3-tw.html b/docs/inweb/3-tw.html
    index 8e03cff..748f615 100644
    --- a/docs/inweb/3-tw.html
    +++ b/docs/inweb/3-tw.html
    @@ -376,12 +376,13 @@ at us; but we don't weave them into the output, that's for sure.
             if (L->command_code == GRAMMAR_INDEX_CMD)
                 Trees::make_child(WeaveTree::grammar_index(tree), state->ap);
             if (L->command_code == FIGURE_CMD) Weave a figure2.7.2.4.1;
    -        if (L->command_code == EMBED_CMD) Weave an embed2.7.2.4.2;
    -        if (L->command_code == CAROUSEL_CMD) Weave a carousel2.7.2.4.3;
    -        if (L->command_code == CAROUSEL_ABOVE_CMD) Weave a carousel2.7.2.4.3;
    -        if (L->command_code == CAROUSEL_BELOW_CMD) Weave a carousel2.7.2.4.3;
    -        if (L->command_code == CAROUSEL_UNCAPTIONED_CMD) Weave a carousel2.7.2.4.3;
    -        if (L->command_code == CAROUSEL_END_CMD) Weave a carousel end2.7.2.4.4;
    +        if (L->command_code == AUDIO_CMD) Weave an audio clip2.7.2.4.2;
    +        if (L->command_code == EMBED_CMD) Weave an embed2.7.2.4.3;
    +        if (L->command_code == CAROUSEL_CMD) Weave a carousel2.7.2.4.4;
    +        if (L->command_code == CAROUSEL_ABOVE_CMD) Weave a carousel2.7.2.4.4;
    +        if (L->command_code == CAROUSEL_BELOW_CMD) Weave a carousel2.7.2.4.4;
    +        if (L->command_code == CAROUSEL_UNCAPTIONED_CMD) Weave a carousel2.7.2.4.4;
    +        if (L->command_code == CAROUSEL_END_CMD) Weave a carousel end2.7.2.4.5;
              Otherwise assume it was a tangler command, and ignore it here
             continue;
         }
    @@ -396,7 +397,16 @@ at us; but we don't weave them into the output, that's for sure.
         Trees::make_child(WeaveTree::figure(tree, figname, w, h), state->ap);
     
    -

    §2.7.2.4.2. Weave an embed2.7.2.4.2 = +

    §2.7.2.4.2. Weave an audio clip2.7.2.4.2 = +

    + +
    +    int w, h;
    +    text_stream *figname = Weaver::dimensions(L->text_operand, &w, &h, L);
    +    Trees::make_child(WeaveTree::audio(tree, figname, w), state->ap);
    +
    + +

    §2.7.2.4.3. Weave an embed2.7.2.4.3 =

    @@ -405,7 +415,7 @@ at us; but we don't weave them into the output, that's for sure.
         Trees::make_child(WeaveTree::embed(tree, L->text_operand, ID, w, h), state->ap);
     
    -

    §2.7.2.4.3. Weave a carousel2.7.2.4.3 = +

    §2.7.2.4.4. Weave a carousel2.7.2.4.4 =

    @@ -415,7 +425,7 @@ at us; but we don't weave them into the output, that's for sure.
         state->carousel_node = C;
     
    -

    §2.7.2.4.4. Weave a carousel end2.7.2.4.4 = +

    §2.7.2.4.5. Weave a carousel end2.7.2.4.5 =

    @@ -954,7 +964,7 @@ structure usage, or how CWEB<
     
    define POINTS_PER_CM 72
     
    -text_stream *Weaver::dimensions(text_stream *item, int *w, int *h, source_line *L) {
    +text_stream *Weaver::dimensions(text_stream *item, int *w, int *h, source_line *L) {
         int sv = L->owning_section->md->using_syntax;
         *w = -1; *h = -1;
         text_stream *use = item;
    diff --git a/docs/inweb/5-df.html b/docs/inweb/5-df.html
    index a078f2a..ed672fc 100644
    --- a/docs/inweb/5-df.html
    +++ b/docs/inweb/5-df.html
    @@ -92,31 +92,32 @@ function togglePopup(material_id) {
         else if (N->type == weave_paragraph_heading_node_type) Render paragraph heading2.14
         else if (N->type == weave_endnote_node_type) Render endnote2.15
         else if (N->type == weave_figure_node_type) Render figure2.16
    -    else if (N->type == weave_material_node_type) Render material2.17
    -    else if (N->type == weave_embed_node_type) Render embed2.18
    -    else if (N->type == weave_pmac_node_type) Render pmac2.19
    -    else if (N->type == weave_vskip_node_type) Render vskip2.20
    -    else if (N->type == weave_chapter_node_type) Render chapter2.21
    -    else if (N->type == weave_section_node_type) Render section2.22
    -    else if (N->type == weave_code_line_node_type) Render code line2.23
    -    else if (N->type == weave_function_usage_node_type) Render function usage2.24
    -    else if (N->type == weave_commentary_node_type) Render commentary2.25
    -    else if (N->type == weave_carousel_slide_node_type) Render carousel slide2.26
    -    else if (N->type == weave_toc_node_type) Render toc2.27
    -    else if (N->type == weave_toc_line_node_type) Render toc line2.28
    -    else if (N->type == weave_chapter_title_page_node_type) Render weave_chapter_title_page_node2.29
    -    else if (N->type == weave_defn_node_type) Render defn2.30
    -    else if (N->type == weave_source_code_node_type) Render source code2.31
    -    else if (N->type == weave_url_node_type) Render URL2.32
    -    else if (N->type == weave_footnote_cue_node_type) Render footnote cue2.33
    -    else if (N->type == weave_begin_footnote_text_node_type) Render footnote text2.34
    -    else if (N->type == weave_display_line_node_type) Render display line2.35
    -    else if (N->type == weave_function_defn_node_type) Render function defn2.36
    -    else if (N->type == weave_item_node_type) Render item2.37
    -    else if (N->type == weave_grammar_index_node_type) Render grammar index2.38
    -    else if (N->type == weave_inline_node_type) Render inline2.39
    -    else if (N->type == weave_locale_node_type) Render locale2.40
    -    else if (N->type == weave_maths_node_type) Render maths2.41
    +    else if (N->type == weave_audio_node_type) Render audio clip2.17
    +    else if (N->type == weave_material_node_type) Render material2.18
    +    else if (N->type == weave_embed_node_type) Render embed2.19
    +    else if (N->type == weave_pmac_node_type) Render pmac2.20
    +    else if (N->type == weave_vskip_node_type) Render vskip2.21
    +    else if (N->type == weave_chapter_node_type) Render chapter2.22
    +    else if (N->type == weave_section_node_type) Render section2.23
    +    else if (N->type == weave_code_line_node_type) Render code line2.24
    +    else if (N->type == weave_function_usage_node_type) Render function usage2.25
    +    else if (N->type == weave_commentary_node_type) Render commentary2.26
    +    else if (N->type == weave_carousel_slide_node_type) Render carousel slide2.27
    +    else if (N->type == weave_toc_node_type) Render toc2.28
    +    else if (N->type == weave_toc_line_node_type) Render toc line2.29
    +    else if (N->type == weave_chapter_title_page_node_type) Render weave_chapter_title_page_node2.30
    +    else if (N->type == weave_defn_node_type) Render defn2.31
    +    else if (N->type == weave_source_code_node_type) Render source code2.32
    +    else if (N->type == weave_url_node_type) Render URL2.33
    +    else if (N->type == weave_footnote_cue_node_type) Render footnote cue2.34
    +    else if (N->type == weave_begin_footnote_text_node_type) Render footnote text2.35
    +    else if (N->type == weave_display_line_node_type) Render display line2.36
    +    else if (N->type == weave_function_defn_node_type) Render function defn2.37
    +    else if (N->type == weave_item_node_type) Render item2.38
    +    else if (N->type == weave_grammar_index_node_type) Render grammar index2.39
    +    else if (N->type == weave_inline_node_type) Render inline2.40
    +    else if (N->type == weave_locale_node_type) Render locale2.41
    +    else if (N->type == weave_maths_node_type) Render maths2.42
         else WRITE("Unknown node");
         WRITE("\n");
         return TRUE;
    @@ -248,7 +249,15 @@ function togglePopup(material_id) {
         WRITE(" <%S> %d by %d", C->figname, C->w, C->h);
     
    • This code is used in §2.
    -

    §2.17. Render material2.17 = +

    §2.17. Render audio clip2.17 = +

    + +
    +    weave_audio_node *C = RETRIEVE_POINTER_weave_audio_node(N->content);
    +    WRITE(" <%S> %d", C->audio_name, C->w);
    +
    +
    • This code is used in §2.
    +

    §2.18. Render material2.18 =

    @@ -259,7 +268,7 @@ function togglePopup(material_id) {
         if (C->plainly) WRITE(" (plainly)");
     
    • This code is used in §2.
    -

    §2.18. Render embed2.18 = +

    §2.19. Render embed2.19 =

    @@ -267,7 +276,7 @@ function togglePopup(material_id) {
         WRITE(" service <%S> ID <%S> %d by %d", C->service, C->ID, C->w, C->h);
     
    • This code is used in §2.
    -

    §2.19. Render pmac2.19 = +

    §2.20. Render pmac2.20 =

    @@ -276,7 +285,7 @@ function togglePopup(material_id) {
         if (C->defn) WRITE(" (definition)");
     
    • This code is used in §2.
    -

    §2.20. Render vskip2.20 = +

    §2.21. Render vskip2.21 =

    @@ -291,7 +300,7 @@ function togglePopup(material_id) {
         ;
     
    • This code is never used.
    -

    §2.21. Render chapter2.21 = +

    §2.22. Render chapter2.22 =

    @@ -299,7 +308,7 @@ function togglePopup(material_id) {
         WRITE(" <%S>", C->chap->md->ch_title);
     
    • This code is used in §2.
    -

    §2.22. Render section2.22 = +

    §2.23. Render section2.23 =

    @@ -307,14 +316,14 @@ function togglePopup(material_id) {
         WRITE(" <%S>", C->sect->md->sect_title);
     
    • This code is used in §2.
    -

    §2.23. Render code line2.23 = +

    §2.24. Render code line2.24 =

         ;
     
    • This code is used in §2.
    -

    §2.24. Render function usage2.24 = +

    §2.25. Render function usage2.25 =

    @@ -322,7 +331,7 @@ function togglePopup(material_id) {
         WRITE(" <%S>", C->fn->function_name);
     
    • This code is used in §2.
    -

    §2.25. Render commentary2.25 = +

    §2.26. Render commentary2.26 =

    @@ -331,7 +340,7 @@ function togglePopup(material_id) {
         if (C->in_code) WRITE(" (code)");
     
    • This code is used in §2.
    -

    §2.26. Render carousel slide2.26 = +

    §2.27. Render carousel slide2.27 =

    @@ -339,7 +348,7 @@ function togglePopup(material_id) {
         WRITE(" caption <%S>", C->caption);
     
    • This code is used in §2.
    -

    §2.27. Render toc2.27 = +

    §2.28. Render toc2.28 =

    @@ -347,7 +356,7 @@ function togglePopup(material_id) {
         WRITE(" - <%S>", C->text1);
     
    • This code is used in §2.
    -

    §2.28. Render toc line2.28 = +

    §2.29. Render toc line2.29 =

    @@ -356,7 +365,7 @@ function togglePopup(material_id) {
         if (C->para) Debugging::show_para(OUT, C->para);
     
    • This code is used in §2.
    -

    §2.29. Render weave_chapter_title_page_node2.29 = +

    §2.30. Render weave_chapter_title_page_node2.30 =

    @@ -364,7 +373,7 @@ function togglePopup(material_id) {
         WRITE(" - something %d", C->allocation_id);
     
    • This code is used in §2.
    -

    §2.30. Render defn2.30 = +

    §2.31. Render defn2.31 =

    @@ -372,7 +381,7 @@ function togglePopup(material_id) {
         WRITE(" <%S>", C->keyword);
     
    • This code is used in §2.
    -

    §2.31. Render source code2.31 = +

    §2.32. Render source code2.32 =

    @@ -383,7 +392,7 @@ function togglePopup(material_id) {
         WRITE(" _%S_", C->colouring);
     
    • This code is used in §2.
    -

    §2.32. Render URL2.32 = +

    §2.33. Render URL2.33 =

    @@ -391,7 +400,7 @@ function togglePopup(material_id) {
         WRITE(" content <%S> url <%S>", C->content, C->url);
     
    • This code is used in §2.
    -

    §2.33. Render footnote cue2.33 = +

    §2.34. Render footnote cue2.34 =

    @@ -399,7 +408,7 @@ function togglePopup(material_id) {
         WRITE(" [%S]", C->cue_text);
     
    • This code is used in §2.
    -

    §2.34. Render footnote text2.34 = +

    §2.35. Render footnote text2.35 =

    @@ -407,7 +416,7 @@ function togglePopup(material_id) {
         WRITE(" [%S]", C->cue_text);
     
    • This code is used in §2.
    -

    §2.35. Render display line2.35 = +

    §2.36. Render display line2.36 =

    @@ -415,7 +424,7 @@ function togglePopup(material_id) {
         WRITE(" <%S>", C->text);
     
    • This code is used in §2.
    -

    §2.36. Render function defn2.36 = +

    §2.37. Render function defn2.37 =

    @@ -423,7 +432,7 @@ function togglePopup(material_id) {
         WRITE(" <%S>", C->fn->function_name);
     
    • This code is used in §2.
    -

    §2.37. Render item2.37 = +

    §2.38. Render item2.38 =

    @@ -431,21 +440,21 @@ function togglePopup(material_id) {
         WRITE(" depth %d label <%S>", C->depth, C->label);
     
    • This code is used in §2.
    -

    §2.38. Render grammar index2.38 = +

    §2.39. Render grammar index2.39 =

         ;
     
    • This code is used in §2.
    -

    §2.39. Render inline2.39 = +

    §2.40. Render inline2.40 =

         ;
     
    • This code is used in §2.
    -

    §2.40. Render locale2.40 = +

    §2.41. Render locale2.41 =

    @@ -457,7 +466,7 @@ function togglePopup(material_id) {
         }
     
    • This code is used in §2.
    -

    §2.41. Render maths2.41 = +

    §2.42. Render maths2.42 =

    @@ -469,7 +478,7 @@ function togglePopup(material_id) {
     

    §3.

    -void Debugging::show_text(text_stream *OUT, text_stream *text, int limit) {
    +void Debugging::show_text(text_stream *OUT, text_stream *text, int limit) {
         WRITE(" <");
         for (int i=0; (i<limit) && (i<Str::len(text)); i++)
             if (Str::get_at(text, i) == '\n')
    @@ -480,12 +489,12 @@ function togglePopup(material_id) {
         if (Str::len(text) > limit) WRITE(" ... continues to %d chars", Str::len(text));
     }
     
    -void Debugging::show_para(text_stream *OUT, paragraph *P) {
    +void Debugging::show_para(text_stream *OUT, paragraph *P) {
         WRITE(" P%S", P->paragraph_number);
         if (Str::len(P->heading_text) > 0) WRITE("'%S'", P->heading_text);
     }
     
    -void Debugging::show_mat(text_stream *OUT, int m) {
    +void Debugging::show_mat(text_stream *OUT, int m) {
         switch (m) {
             case COMMENTARY_MATERIAL: WRITE("discussion"); break;
             case MACRO_MATERIAL: WRITE("paragraph macro"); break;
    diff --git a/docs/inweb/5-hf.html b/docs/inweb/5-hf.html
    index 3130b4e..e77cbbf 100644
    --- a/docs/inweb/5-hf.html
    +++ b/docs/inweb/5-hf.html
    @@ -137,7 +137,7 @@ ePub respectively:
     

    -int HTMLFormat::render_visit(tree_node *N, void *state, int L) {
    +int HTMLFormat::render_visit(tree_node *N, void *state, int L) {
         HTML_render_state *hrs = (HTML_render_state *) state;
         text_stream *OUT = hrs->OUT;
         if ((N->type == weave_document_node_type) ||
    @@ -147,11 +147,11 @@ ePub respectively:
             (N->type == weave_pagebreak_node_type) ||
             (N->type == weave_chapter_node_type) ||
             (N->type == weave_chapter_title_page_node_type) ||
    -        (N->type == weave_grammar_index_node_type)) Render nothing5.34
    +        (N->type == weave_grammar_index_node_type)) Render nothing5.35
     
         else if (N->type == weave_head_node_type) Render head5.1
         else if (N->type == weave_tail_node_type) Render tail5.4
    -    else if (N->type == weave_verbatim_node_type) Render verbatim5.30
    +    else if (N->type == weave_verbatim_node_type) Render verbatim5.31
         else if (N->type == weave_section_header_node_type) Render header5.2
         else if (N->type == weave_section_footer_node_type) Render footer5.3
         else if (N->type == weave_section_purpose_node_type) Render purpose5.5
    @@ -160,28 +160,29 @@ ePub respectively:
         else if (N->type == weave_paragraph_heading_node_type) Render paragraph heading5.8
         else if (N->type == weave_endnote_node_type) Render endnote5.9
         else if (N->type == weave_figure_node_type) Render figure5.10
    -    else if (N->type == weave_material_node_type) Render material5.11
    -    else if (N->type == weave_embed_node_type) Render embed5.12
    -    else if (N->type == weave_pmac_node_type) Render pmac5.13
    -    else if (N->type == weave_vskip_node_type) Render vskip5.14
    -    else if (N->type == weave_section_node_type) Render section5.15
    -    else if (N->type == weave_code_line_node_type) Render code line5.16
    -    else if (N->type == weave_function_usage_node_type) Render function usage5.17
    -    else if (N->type == weave_commentary_node_type) Render commentary5.18
    -    else if (N->type == weave_carousel_slide_node_type) Render carousel slide5.19
    -    else if (N->type == weave_toc_node_type) Render toc5.20
    -    else if (N->type == weave_toc_line_node_type) Render toc line5.21
    -    else if (N->type == weave_defn_node_type) Render defn5.22
    -    else if (N->type == weave_source_code_node_type) Render source code5.23
    -    else if (N->type == weave_url_node_type) Render URL5.24
    -    else if (N->type == weave_footnote_cue_node_type) Render footnote cue5.25
    -    else if (N->type == weave_begin_footnote_text_node_type) Render footnote5.26
    -    else if (N->type == weave_display_line_node_type) Render display line5.27
    -    else if (N->type == weave_function_defn_node_type) Render function defn5.28
    -    else if (N->type == weave_item_node_type) Render item5.29
    -    else if (N->type == weave_inline_node_type) Render inline5.31
    -    else if (N->type == weave_locale_node_type) Render locale5.32
    -    else if (N->type == weave_maths_node_type) Render maths5.33
    +    else if (N->type == weave_audio_node_type) Render audio clip5.11
    +    else if (N->type == weave_material_node_type) Render material5.12
    +    else if (N->type == weave_embed_node_type) Render embed5.13
    +    else if (N->type == weave_pmac_node_type) Render pmac5.14
    +    else if (N->type == weave_vskip_node_type) Render vskip5.15
    +    else if (N->type == weave_section_node_type) Render section5.16
    +    else if (N->type == weave_code_line_node_type) Render code line5.17
    +    else if (N->type == weave_function_usage_node_type) Render function usage5.18
    +    else if (N->type == weave_commentary_node_type) Render commentary5.19
    +    else if (N->type == weave_carousel_slide_node_type) Render carousel slide5.20
    +    else if (N->type == weave_toc_node_type) Render toc5.21
    +    else if (N->type == weave_toc_line_node_type) Render toc line5.22
    +    else if (N->type == weave_defn_node_type) Render defn5.23
    +    else if (N->type == weave_source_code_node_type) Render source code5.24
    +    else if (N->type == weave_url_node_type) Render URL5.25
    +    else if (N->type == weave_footnote_cue_node_type) Render footnote cue5.26
    +    else if (N->type == weave_begin_footnote_text_node_type) Render footnote5.27
    +    else if (N->type == weave_display_line_node_type) Render display line5.28
    +    else if (N->type == weave_function_defn_node_type) Render function defn5.29
    +    else if (N->type == weave_item_node_type) Render item5.30
    +    else if (N->type == weave_inline_node_type) Render inline5.32
    +    else if (N->type == weave_locale_node_type) Render locale5.33
    +    else if (N->type == weave_maths_node_type) Render maths5.34
     
         else internal_error("unable to render unknown node");
         return TRUE;
    @@ -345,7 +346,25 @@ ePub respectively:
         WRITE("\n");
     
    • This code is used in §5.
    -

    §5.11. Render material5.11 = +

    §5.11. Render audio clip5.11 = +

    + +
    +    weave_audio_node *C = RETRIEVE_POINTER_weave_audio_node(N->content);
    +    filename *F = Filenames::in(
    +        Pathnames::down(hrs->wv->weave_web->md->path_to_web, I"Audio"),
    +        C->audio_name);
    +    Patterns::copy_file_into_weave(hrs->wv->weave_web, F, NULL, NULL);
    +    HTML_OPEN("center");
    +    WRITE("<audio controls>\n");
    +    WRITE("<source src=\"%S\" type=\"audio/mpeg\">\n", C->audio_name);
    +    WRITE("Your browser does not support the audio element.\n");
    +    WRITE("</audio>\n");
    +    HTML_CLOSE("center");
    +    WRITE("\n");
    +
    +
    • This code is used in §5.
    +

    §5.12. Render material5.12 =

    @@ -358,17 +377,17 @@ ePub respectively:
             first_in_para = PC->para;
         }
         if (C->material_type == COMMENTARY_MATERIAL)
    -        Deal with a commentary material node5.11.1
    +        Deal with a commentary material node5.12.1
         else if (C->material_type == CODE_MATERIAL)
    -        Deal with a code material node5.11.2
    +        Deal with a code material node5.12.2
         else if (C->material_type == FOOTNOTES_MATERIAL)
    -        Deal with a footnotes material node5.11.3
    +        Deal with a footnotes material node5.12.3
         else if (C->material_type == ENDNOTES_MATERIAL)
    -        Deal with a endnotes material node5.11.4
    +        Deal with a endnotes material node5.12.4
         else if (C->material_type == MACRO_MATERIAL)
    -        Deal with a macro material node5.11.5
    +        Deal with a macro material node5.12.5
         else if (C->material_type == DEFINITION_MATERIAL)
    -        Deal with a definition material node5.11.6;
    +        Deal with a definition material node5.12.6;
         return FALSE;
     
    • This code is used in §5.
    @@ -383,8 +402,8 @@ ePub respectively: first_in_para = NULL; }
    - -

    §5.11.1. Deal with a commentary material node5.11.1 = +

    +

    §5.12.1. Deal with a commentary material node5.12.1 =

    @@ -398,7 +417,7 @@ ePub respectively:
                 Trees::traverse_from(M, &HTMLFormat::render_visit, (void *) hrs, L+1);
                 continue;
             }
    -        if (HTMLFormat::interior_material(M)) Render a run of interior matter5.11.1.1;
    +        if (HTMLFormat::interior_material(M)) Render a run of interior matter5.12.1.1;
             If no para number yet, render a p just to hold this5.8.1;
             if (item_depth > 0) {
                 HTMLFormat::go_to_depth(hrs, item_depth, 0);
    @@ -412,8 +431,8 @@ ePub respectively:
             item_depth = 0;
         }
     
    - -

    §5.11.1.1. Render a run of interior matter5.11.1.1 = +

    +

    §5.12.1.1. Render a run of interior matter5.12.1.1 =

    @@ -432,8 +451,8 @@ ePub respectively:
         if (item_depth == 0) { HTML_CLOSE("p"); WRITE("\n"); }
         continue;
     
    - -

    §5.11.2. Deal with a code material node5.11.2 = +

    +

    §5.12.2. Deal with a code material node5.12.2 =

    @@ -454,8 +473,8 @@ ePub respectively:
         Recurse tne renderer through children nodes5.9.1;
         HTML_CLOSE("pre"); WRITE("\n");
     
    - -

    §5.11.3. Deal with a footnotes material node5.11.3 = +

    +

    §5.12.3. Deal with a footnotes material node5.12.3 =

    @@ -464,8 +483,8 @@ ePub respectively:
         Recurse tne renderer through children nodes5.9.1;
         HTML_CLOSE("ul"); WRITE("\n");
     
    - -

    §5.11.4. Deal with a endnotes material node5.11.4 = +

    +

    §5.12.4. Deal with a endnotes material node5.12.4 =

    @@ -474,8 +493,8 @@ ePub respectively:
         Recurse tne renderer through children nodes5.9.1;
         HTML_CLOSE("ul"); WRITE("\n");
     
    - -

    §5.11.5. Deal with a macro material node5.11.5 = +

    +

    §5.12.5. Deal with a macro material node5.12.5 =

    @@ -488,8 +507,8 @@ ePub respectively:
         Recurse tne renderer through children nodes5.9.1;
         HTML_CLOSE("p"); WRITE("\n");
     
    - -

    §5.11.6. Deal with a definition material node5.11.6 = +

    +

    §5.12.6. Deal with a definition material node5.12.6 =

    @@ -498,13 +517,13 @@ ePub respectively:
         Recurse tne renderer through children nodes5.9.1;
         HTML_CLOSE("pre"); WRITE("\n");
     
    - -

    §5.12. This has to embed some Internet-sourced content. service +

    +

    §5.13. This has to embed some Internet-sourced content. service here is something like YouTube or Soundcloud, and ID is whatever code that service uses to identify the video/audio in question.

    -

    Render embed5.12 = +

    Render embed5.13 =

    @@ -531,7 +550,7 @@ that service uses to identify the video/audio in question.
         }
     
    • This code is used in §5.
    -

    §5.13. Render pmac5.13 = +

    §5.14. Render pmac5.14 =

    @@ -560,14 +579,14 @@ that service uses to identify the video/audio in question.
         if (C->defn == FALSE) HTML::end_link(OUT);
     
    • This code is used in §5.
    -

    §5.14. Render vskip5.14 = +

    §5.15. Render vskip5.15 =

         WRITE("\n");
     
    • This code is used in §5.
    -

    §5.15. Render section5.15 = +

    §5.16. Render section5.16 =

    @@ -575,7 +594,7 @@ that service uses to identify the video/audio in question.
         LOG("It was %d\n", C->allocation_id);
     
    • This code is used in §5.
    -

    §5.16. Render code line5.16 = +

    §5.17. Render code line5.17 =

    @@ -584,7 +603,7 @@ that service uses to identify the video/audio in question.
         return FALSE;
     
    • This code is used in §5.
    -

    §5.17. Render function usage5.17 = +

    §5.18. Render function usage5.18 =

    @@ -596,7 +615,7 @@ that service uses to identify the video/audio in question.
         HTML::end_link(OUT);
     
    • This code is used in §5.
    -

    §5.18. Render commentary5.18 = +

    §5.19. Render commentary5.19 =

    @@ -620,7 +639,7 @@ that service uses to identify the video/audio in question.
         if (C->in_code) HTMLFormat::change_colour(OUT, -1, hrs->colours);
     
    • This code is used in §5.
    -

    §5.19. Render carousel slide5.19 = +

    §5.20. Render carousel slide5.20 =

    @@ -655,7 +674,7 @@ that service uses to identify the video/audio in question.
         else WRITE(" style=\"display: none;\"");
         WRITE(">\n");
         if (C->caption_command == CAROUSEL_ABOVE_CMD) {
    -        Place caption here5.19.1;
    +        Place caption here5.20.1;
             WRITE("<div class=\"%S\">%d / %d</div>\n",
                 slide_count_class, hrs->slide_number, hrs->slide_of);
         } else {
    @@ -665,7 +684,7 @@ that service uses to identify the video/audio in question.
         WRITE("<div class=\"carousel-content\">");
         Recurse tne renderer through children nodes5.9.1;
         WRITE("</div>\n");
    -    if (C->caption_command != CAROUSEL_ABOVE_CMD) Place caption here5.19.1;
    +    if (C->caption_command != CAROUSEL_ABOVE_CMD) Place caption here5.20.1;
         WRITE("</div>\n");
         if (hrs->slide_number == hrs->slide_of) {
             WRITE("<a class=\"carousel-prev-button\" ");
    @@ -697,15 +716,15 @@ that service uses to identify the video/audio in question.
         return FALSE;
     
    • This code is used in §5.
    -

    §5.19.1. Place caption here5.19.1 = +

    §5.20.1. Place caption here5.20.1 =

         if (C->caption_command != CAROUSEL_UNCAPTIONED_CMD)
             WRITE("<div class=\"%S\">%S</div>\n", caption_class, C->caption);
     
    -
    • This code is used in §5.19 (twice).
    -

    §5.20. Render toc5.20 = +

    • This code is used in §5.20 (twice).
    +

    §5.21. Render toc5.21 =

    @@ -721,7 +740,7 @@ that service uses to identify the video/audio in question.
         return FALSE;
     
    • This code is used in §5.
    -

    §5.21. Render toc line5.21 = +

    §5.22. Render toc line5.22 =

    @@ -736,7 +755,7 @@ that service uses to identify the video/audio in question.
         HTML::end_link(OUT);
     
    • This code is used in §5.
    -

    §5.22. Render defn5.22 = +

    §5.23. Render defn5.23 =

    @@ -747,7 +766,7 @@ that service uses to identify the video/audio in question.
         WRITE(" ");
     
    • This code is used in §5.
    -

    §5.23. Render source code5.23 = +

    §5.24. Render source code5.24 =

    @@ -770,7 +789,7 @@ that service uses to identify the video/audio in question.
         if (current_colour >= 0) HTMLFormat::change_colour(OUT, -1, hrs->colours);
     
    • This code is used in §5.
    -

    §5.24. Render URL5.24 = +

    §5.25. Render URL5.25 =

    @@ -780,7 +799,7 @@ that service uses to identify the video/audio in question.
         HTML::end_link(OUT);
     
    • This code is used in §5.
    -

    §5.25. Render footnote cue5.25 = +

    §5.26. Render footnote cue5.26 =

    @@ -792,7 +811,7 @@ that service uses to identify the video/audio in question.
             C->cue_text, C->cue_text, C->cue_text);
     
    • This code is used in §5.
    -

    §5.26. Render footnote5.26 = +

    §5.27. Render footnote5.27 =

    @@ -809,7 +828,7 @@ that service uses to identify the video/audio in question.
         return FALSE;
     
    • This code is used in §5.
    -

    §5.27. Render display line5.27 = +

    §5.28. Render display line5.28 =

    @@ -822,7 +841,7 @@ that service uses to identify the video/audio in question.
         OUTDENT; HTML_CLOSE("blockquote"); WRITE("\n");
     
    • This code is used in §5.
    -

    §5.28. Render function defn5.28 = +

    §5.29. Render function defn5.29 =

    @@ -846,7 +865,7 @@ that service uses to identify the video/audio in question.
         return FALSE;
     
    • This code is used in §5.
    -

    §5.29. Render item5.29 = +

    §5.30. Render item5.30 =

    @@ -855,7 +874,7 @@ that service uses to identify the video/audio in question.
         else WRITE(" ");
     
    • This code is used in §5.
    -

    §5.30. Render verbatim5.30 = +

    §5.31. Render verbatim5.31 =

    @@ -863,7 +882,7 @@ that service uses to identify the video/audio in question.
         WRITE("%S", C->content);
     
    • This code is used in §5.
    -

    §5.31. Render inline5.31 = +

    §5.32. Render inline5.32 =

    @@ -873,7 +892,7 @@ that service uses to identify the video/audio in question.
         return FALSE;
     
    • This code is used in §5.
    -

    §5.32. Render locale5.32 = +

    §5.33. Render locale5.33 =

    @@ -889,7 +908,7 @@ that service uses to identify the video/audio in question.
         HTML::end_link(OUT);
     
    • This code is used in §5.
    -

    §5.33. Render maths5.33 = +

    §5.34. Render maths5.34 =

    @@ -908,7 +927,7 @@ that service uses to identify the video/audio in question.
         }
     
    • This code is used in §5.
    -

    §5.34. Render nothing5.34 = +

    §5.35. Render nothing5.35 =

    @@ -922,13 +941,13 @@ that service uses to identify the video/audio in question.
         for (tree_node *M = N->child; M; M = M->next)
             Trees::traverse_from(M, &HTMLFormat::render_visit, (void *) hrs, L+1);
     
    - +

    §6. These are the nodes falling under a commentary material node which we will amalgamate into a single HTML paragraph:

    -int HTMLFormat::interior_material(tree_node *N) {
    +int HTMLFormat::interior_material(tree_node *N) {
         if (N->type == weave_commentary_node_type) return TRUE;
         if (N->type == weave_url_node_type) return TRUE;
         if (N->type == weave_inline_node_type) return TRUE;
    @@ -943,7 +962,7 @@ which is itself inside a list entry"; and so on.
     

    -void HTMLFormat::go_to_depth(HTML_render_state *hrs, int from_depth, int to_depth) {
    +void HTMLFormat::go_to_depth(HTML_render_state *hrs, int from_depth, int to_depth) {
         text_stream *OUT = hrs->OUT;
         if (from_depth == to_depth) {
             HTML_CLOSE("li");
    @@ -963,7 +982,7 @@ which is itself inside a list entry"; and so on.
     

    §8.

    -void HTMLFormat::paragraph_number(text_stream *OUT, paragraph *P) {
    +void HTMLFormat::paragraph_number(text_stream *OUT, paragraph *P) {
         TEMPORARY_TEXT(TEMP)
         Colonies::paragraph_anchor(TEMP, P);
         HTML::anchor(OUT, TEMP);
    @@ -978,7 +997,7 @@ which is itself inside a list entry"; and so on.
     

    §9.

    -void HTMLFormat::change_colour(text_stream *OUT, int col, colour_scheme *cs) {
    +void HTMLFormat::change_colour(text_stream *OUT, int col, colour_scheme *cs) {
         if (col == -1) {
             HTML_CLOSE("span");
         } else {
    @@ -1004,7 +1023,7 @@ which is itself inside a list entry"; and so on.
     

    §10.

    -void HTMLFormat::escape_text(text_stream *OUT, text_stream *id) {
    +void HTMLFormat::escape_text(text_stream *OUT, text_stream *id) {
         for (int i=0; i < Str::len(id); i++) {
             if (Str::get_at(id, i) == '&') WRITE("&amp;");
             else if (Str::get_at(id, i) == '<') WRITE("&lt;");
    diff --git a/docs/inweb/5-ptf.html b/docs/inweb/5-ptf.html
    index 50ff542..c6498f8 100644
    --- a/docs/inweb/5-ptf.html
    +++ b/docs/inweb/5-ptf.html
    @@ -91,6 +91,7 @@ function togglePopup(material_id) {
         else if (N->type == weave_paragraph_heading_node_type) Render paragraph heading2.9
         else if (N->type == weave_endnote_node_type) Render endnote2.10
         else if (N->type == weave_figure_node_type) Render nothing2.12
    +    else if (N->type == weave_audio_node_type) Render nothing2.12
         else if (N->type == weave_material_node_type) Render nothing2.12
         else if (N->type == weave_embed_node_type) Render embed2.13
         else if (N->type == weave_pmac_node_type) Render pmac2.14
    @@ -214,7 +215,7 @@ function togglePopup(material_id) {
     
         ;
     
    -
    • This code is used in §2 (10 times).
    +
    • This code is used in §2 (11 times).

    §2.13. Render embed2.13 =

    diff --git a/docs/inweb/5-tf.html b/docs/inweb/5-tf.html index 08a570c..93f0d26 100644 --- a/docs/inweb/5-tf.html +++ b/docs/inweb/5-tf.html @@ -147,6 +147,7 @@ function togglePopup(material_id) { else if (N->type == weave_paragraph_heading_node_type) Render paragraph heading2.9 else if (N->type == weave_endnote_node_type) Render endnote2.10 else if (N->type == weave_figure_node_type) Render figure2.11 + else if (N->type == weave_audio_node_type) Render nothing2.14 else if (N->type == weave_material_node_type) Render material2.12 else if (N->type == weave_embed_node_type) Render embed2.15 else if (N->type == weave_pmac_node_type) Render pmac2.16 @@ -318,7 +319,7 @@ to a given width, into the text at the current position.
         ;
     
    -
    • This code is used in §2 (6 times).
    +
    • This code is used in §2 (7 times).

    §2.15. Render embed2.15 =

    @@ -1004,7 +1005,7 @@ To do this, the weaver calls the following.

    -void TeX::remove_math_mode(OUTPUT_STREAM, text_stream *text) {
    +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);
    diff --git a/docs/inweb/5-wt.html b/docs/inweb/5-wt.html
    index c5dd9fa..5ca7214 100644
    --- a/docs/inweb/5-wt.html
    +++ b/docs/inweb/5-wt.html
    @@ -121,6 +121,12 @@ function togglePopup(material_id) {
         MEMORY_MANAGEMENT
     } weave_figure_node;
     
    +typedef struct weave_audio_node {
    +    struct text_stream *audio_name;
    +    int w;
    +    MEMORY_MANAGEMENT
    +} weave_audio_node;
    +
     typedef struct weave_material_node {
         int material_type;
         int plainly;
    @@ -264,7 +270,7 @@ function togglePopup(material_id) {
         MEMORY_MANAGEMENT
     } weave_verbatim_node;
     
    -
    • The structure weave_document_node is accessed in 3/tc, 3/twot, 5/fm, 5/ptf, 5/tf, 5/hf, 5/df and here.
    • The structure weave_head_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.
    • The structure weave_body_node is private to this section.
    • The structure weave_tail_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.
    • The structure weave_chapter_header_node is accessed in 5/ptf, 5/tf, 5/df and here.
    • The structure weave_chapter_footer_node is accessed in 5/ptf, 5/tf, 5/df and here.
    • The structure weave_section_header_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.
    • The structure weave_section_footer_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.
    • The structure weave_section_purpose_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.
    • The structure weave_subheading_node is accessed in 1/pc, 2/lc, 2/tp, 2/pn, 3/ta, 3/tw, 3/tt, 4/as, 4/cl, 4/is, 5/ptf, 5/tf, 5/hf, 5/df and here.
    • The structure weave_bar_node is private to this section.
    • The structure weave_pagebreak_node is private to this section.
    • The structure weave_paragraph_heading_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.
    • The structure weave_endnote_node is private to this section.
    • The structure weave_figure_node is accessed in 1/fm, 1/pp, 1/wp, 8/ws, 4/cl, 5/tf, 5/hf, 5/df, 6/rw and here.
    • The structure weave_material_node is accessed in 5/tf, 5/hf, 5/df and here.
    • The structure weave_embed_node is accessed in 1/fm, 1/pp, 1/wp, 8/ws, 4/cl, 5/ptf, 5/tf, 5/hf, 5/df, 6/rw and here.
    • The structure weave_pmac_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.
    • The structure weave_vskip_node is accessed in 5/tf, 5/df and here.
    • The structure weave_chapter_node is accessed in 5/ptf, 5/tf, 5/df and here.
    • The structure weave_section_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.
    • The structure weave_code_line_node is private to this section.
    • The structure weave_function_usage_node is accessed in 1/wp, 5/ptf, 5/tf, 5/hf, 5/df and here.
    • The structure weave_commentary_node is accessed in 1/pc, 2/lc, 2/tp, 2/pn, 3/ta, 3/tw, 3/tt, 4/as, 4/cl, 4/is, 5/ptf, 5/tf, 5/hf, 5/df and here.
    • The structure weave_carousel_slide_node is accessed in 2/tgs, 5/hf, 5/df and here.
    • The structure weave_toc_node is accessed in 5/ptf, 5/tf, 5/df and here.
    • The structure weave_toc_line_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.
    • The structure weave_chapter_title_page_node is private to this section.
    • The structure weave_defn_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.
    • The structure weave_inline_node is private to this section.
    • The structure weave_locale_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.
    • The structure weave_source_code_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.
    • The structure weave_url_node is accessed in 2/trs, 3/twot, 5/fm, 5/ptf, 5/tf, 5/hf, 5/df, 6/rw and here.
    • The structure weave_footnote_cue_node is accessed in 2/tp, 3/tw, 3/twot, 5/ptf, 5/tf, 5/hf, 5/df and here.
    • The structure weave_begin_footnote_text_node is accessed in 2/tp, 3/tw, 3/twot, 5/ptf, 5/tf, 5/hf, 5/df and here.
    • The structure weave_display_line_node is accessed in 1/pc, 2/lc, 2/tp, 2/pn, 3/ta, 3/tw, 3/tt, 4/as, 4/cl, 4/is, 5/ptf, 5/tf, 5/hf, 5/df and here.
    • The structure weave_function_defn_node is accessed in 1/wp, 5/ptf, 5/tf, 5/hf, 5/df and here.
    • The structure weave_item_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.
    • The structure weave_grammar_index_node is private to this section.
    • The structure weave_maths_node is accessed in 2/trs, 3/twot, 5/fm, 5/ptf, 5/tf, 5/hf, 5/df, 6/rw and here.
    • The structure weave_verbatim_node is accessed in 2/trs, 3/twot, 5/fm, 5/ptf, 5/tf, 5/hf, 5/df, 6/rw and here.
    +
    • The structure weave_document_node is accessed in 3/tc, 3/twot, 5/fm, 5/ptf, 5/tf, 5/hf, 5/df and here.
    • The structure weave_head_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.
    • The structure weave_body_node is private to this section.
    • The structure weave_tail_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.
    • The structure weave_chapter_header_node is accessed in 5/ptf, 5/tf, 5/df and here.
    • The structure weave_chapter_footer_node is accessed in 5/ptf, 5/tf, 5/df and here.
    • The structure weave_section_header_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.
    • The structure weave_section_footer_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.
    • The structure weave_section_purpose_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.
    • The structure weave_subheading_node is accessed in 1/pc, 2/lc, 2/tp, 2/pn, 3/ta, 3/tw, 3/tt, 4/as, 4/cl, 4/is, 5/ptf, 5/tf, 5/hf, 5/df and here.
    • The structure weave_bar_node is private to this section.
    • The structure weave_pagebreak_node is private to this section.
    • The structure weave_paragraph_heading_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.
    • The structure weave_endnote_node is private to this section.
    • The structure weave_figure_node is accessed in 1/fm, 1/pp, 1/wp, 8/ws, 4/cl, 5/tf, 5/hf, 5/df, 6/rw and here.
    • The structure weave_audio_node is accessed in 8/ws, 5/tf, 5/hf, 5/df and here.
    • The structure weave_material_node is accessed in 5/tf, 5/hf, 5/df and here.
    • The structure weave_embed_node is accessed in 1/fm, 1/pp, 1/wp, 8/ws, 4/cl, 5/ptf, 5/tf, 5/hf, 5/df, 6/rw and here.
    • The structure weave_pmac_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.
    • The structure weave_vskip_node is accessed in 5/tf, 5/df and here.
    • The structure weave_chapter_node is accessed in 5/ptf, 5/tf, 5/df and here.
    • The structure weave_section_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.
    • The structure weave_code_line_node is private to this section.
    • The structure weave_function_usage_node is accessed in 1/wp, 5/ptf, 5/tf, 5/hf, 5/df and here.
    • The structure weave_commentary_node is accessed in 1/pc, 2/lc, 2/tp, 2/pn, 3/ta, 3/tw, 3/tt, 4/as, 4/cl, 4/is, 5/ptf, 5/tf, 5/hf, 5/df and here.
    • The structure weave_carousel_slide_node is accessed in 2/tgs, 5/hf, 5/df and here.
    • The structure weave_toc_node is accessed in 5/ptf, 5/tf, 5/df and here.
    • The structure weave_toc_line_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.
    • The structure weave_chapter_title_page_node is private to this section.
    • The structure weave_defn_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.
    • The structure weave_inline_node is private to this section.
    • The structure weave_locale_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.
    • The structure weave_source_code_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.
    • The structure weave_url_node is accessed in 2/trs, 3/twot, 5/fm, 5/ptf, 5/tf, 5/hf, 5/df, 6/rw and here.
    • The structure weave_footnote_cue_node is accessed in 2/tp, 3/tw, 3/twot, 5/ptf, 5/tf, 5/hf, 5/df and here.
    • The structure weave_begin_footnote_text_node is accessed in 2/tp, 3/tw, 3/twot, 5/ptf, 5/tf, 5/hf, 5/df and here.
    • The structure weave_display_line_node is accessed in 1/pc, 2/lc, 2/tp, 2/pn, 3/ta, 3/tw, 3/tt, 4/as, 4/cl, 4/is, 5/ptf, 5/tf, 5/hf, 5/df and here.
    • The structure weave_function_defn_node is accessed in 1/wp, 5/ptf, 5/tf, 5/hf, 5/df and here.
    • The structure weave_item_node is accessed in 5/ptf, 5/tf, 5/hf, 5/df and here.
    • The structure weave_grammar_index_node is private to this section.
    • The structure weave_maths_node is accessed in 2/trs, 3/twot, 5/fm, 5/ptf, 5/tf, 5/hf, 5/df, 6/rw and here.
    • The structure weave_verbatim_node is accessed in 2/trs, 3/twot, 5/fm, 5/ptf, 5/tf, 5/hf, 5/df, 6/rw and here.

    §2.

    @@ -285,6 +291,7 @@ function togglePopup(material_id) {
     tree_node_type *weave_paragraph_heading_node_type = NULL;
     tree_node_type *weave_endnote_node_type = NULL;
     tree_node_type *weave_figure_node_type = NULL;
    +tree_node_type *weave_audio_node_type = NULL;
     tree_node_type *weave_material_node_type = NULL;
     tree_node_type *weave_embed_node_type = NULL;
     tree_node_type *weave_pmac_node_type = NULL;
    @@ -345,6 +352,8 @@ function togglePopup(material_id) {
                 Trees::new_node_type(I"endnote", weave_endnote_node_MT, NULL);
             weave_figure_node_type =
                 Trees::new_node_type(I"figure", weave_figure_node_MT, NULL);
    +        weave_audio_node_type =
    +            Trees::new_node_type(I"audio", weave_audio_node_MT, NULL);
             weave_material_node_type =
                 Trees::new_node_type(I"material", weave_material_node_MT, NULL);
             weave_embed_node_type =
    @@ -522,7 +531,16 @@ function togglePopup(material_id) {
             STORE_POINTER_weave_figure_node(C));
     }
     
    -tree_node *WeaveTree::material(heterogeneous_tree *tree, int material_type, int plainly,
    +tree_node *WeaveTree::audio(heterogeneous_tree *tree,
    +    text_stream *audio_name, int w) {
    +    weave_audio_node *C = CREATE(weave_audio_node);
    +    C->audio_name = Str::duplicate(audio_name);
    +    C->w = w;
    +    return Trees::new_node(tree, weave_audio_node_type,
    +        STORE_POINTER_weave_audio_node(C));
    +}
    +
    +tree_node *WeaveTree::material(heterogeneous_tree *tree, int material_type, int plainly,
         programming_language *styling) {
         weave_material_node *C = CREATE(weave_material_node);
         C->material_type = material_type;
    @@ -531,7 +549,7 @@ function togglePopup(material_id) {
         return Trees::new_node(tree, weave_material_node_type, STORE_POINTER_weave_material_node(C));
     }
     
    -tree_node *WeaveTree::embed(heterogeneous_tree *tree,
    +tree_node *WeaveTree::embed(heterogeneous_tree *tree,
         text_stream *service, text_stream *ID, int w, int h) {
         weave_embed_node *C = CREATE(weave_embed_node);
         C->service = Str::duplicate(service);
    @@ -547,7 +565,7 @@ thing is to render some sort of equals sign after it, if so.
     

    -tree_node *WeaveTree::pmac(heterogeneous_tree *tree, para_macro *pmac, int defn) {
    +tree_node *WeaveTree::pmac(heterogeneous_tree *tree, para_macro *pmac, int defn) {
         weave_pmac_node *C = CREATE(weave_pmac_node);
         C->pmac = pmac;
         C->defn = defn;
    @@ -560,24 +578,24 @@ information.
     

    -tree_node *WeaveTree::vskip(heterogeneous_tree *tree, int in_comment) {
    +tree_node *WeaveTree::vskip(heterogeneous_tree *tree, int in_comment) {
         weave_vskip_node *C = CREATE(weave_vskip_node);
         C->in_comment = in_comment;
         return Trees::new_node(tree, weave_vskip_node_type, STORE_POINTER_weave_vskip_node(C));
     }
     
    -tree_node *WeaveTree::section(heterogeneous_tree *tree, section *sect) {
    +tree_node *WeaveTree::section(heterogeneous_tree *tree, section *sect) {
         weave_section_node *C = CREATE(weave_section_node);
         C->sect = sect;
         return Trees::new_node(tree, weave_section_node_type, STORE_POINTER_weave_section_node(C));
     }
     
    -tree_node *WeaveTree::code_line(heterogeneous_tree *tree) {
    +tree_node *WeaveTree::code_line(heterogeneous_tree *tree) {
         weave_code_line_node *C = CREATE(weave_code_line_node);
         return Trees::new_node(tree, weave_code_line_node_type, STORE_POINTER_weave_code_line_node(C));
     }
     
    -tree_node *WeaveTree::function_usage(heterogeneous_tree *tree,
    +tree_node *WeaveTree::function_usage(heterogeneous_tree *tree,
         text_stream *url, language_function *fn) {
         weave_function_usage_node *C = CREATE(weave_function_usage_node);
         C->url = Str::duplicate(url);
    @@ -585,27 +603,27 @@ information.
         return Trees::new_node(tree, weave_function_usage_node_type, STORE_POINTER_weave_function_usage_node(C));
     }
     
    -tree_node *WeaveTree::commentary(heterogeneous_tree *tree, text_stream *text, int in_code) {
    +tree_node *WeaveTree::commentary(heterogeneous_tree *tree, text_stream *text, int in_code) {
         weave_commentary_node *C = CREATE(weave_commentary_node);
         C->text = Str::duplicate(text);
         C->in_code = in_code;
         return Trees::new_node(tree, weave_commentary_node_type, STORE_POINTER_weave_commentary_node(C));
     }
     
    -tree_node *WeaveTree::carousel_slide(heterogeneous_tree *tree, text_stream *caption, int c) {
    +tree_node *WeaveTree::carousel_slide(heterogeneous_tree *tree, text_stream *caption, int c) {
         weave_carousel_slide_node *C = CREATE(weave_carousel_slide_node);
         C->caption = Str::duplicate(caption);
         C->caption_command = c;
         return Trees::new_node(tree, weave_carousel_slide_node_type, STORE_POINTER_weave_carousel_slide_node(C));
     }
     
    -tree_node *WeaveTree::table_of_contents(heterogeneous_tree *tree, text_stream *text1) {
    +tree_node *WeaveTree::table_of_contents(heterogeneous_tree *tree, text_stream *text1) {
         weave_toc_node *C = CREATE(weave_toc_node);
         C->text1 = Str::duplicate(text1);
         return Trees::new_node(tree, weave_toc_node_type, STORE_POINTER_weave_toc_node(C));
     }
     
    -tree_node *WeaveTree::contents_line(heterogeneous_tree *tree,
    +tree_node *WeaveTree::contents_line(heterogeneous_tree *tree,
         text_stream *text1, text_stream *text2, paragraph *P) {
         weave_toc_line_node *C = CREATE(weave_toc_line_node);
         C->text1 = Str::duplicate(text1);
    @@ -614,12 +632,12 @@ information.
         return Trees::new_node(tree, weave_toc_line_node_type, STORE_POINTER_weave_toc_line_node(C));
     }
     
    -tree_node *WeaveTree::weave_chapter_title_page_node(heterogeneous_tree *tree) {
    +tree_node *WeaveTree::weave_chapter_title_page_node(heterogeneous_tree *tree) {
         weave_chapter_title_page_node *C = CREATE(weave_chapter_title_page_node);
         return Trees::new_node(tree, weave_chapter_title_page_node_type, STORE_POINTER_weave_chapter_title_page_node(C));
     }
     
    -tree_node *WeaveTree::weave_defn_node(heterogeneous_tree *tree, text_stream *keyword) {
    +tree_node *WeaveTree::weave_defn_node(heterogeneous_tree *tree, text_stream *keyword) {
         weave_defn_node *C = CREATE(weave_defn_node);
         C->keyword = Str::duplicate(keyword);
         return Trees::new_node(tree, weave_defn_node_type, STORE_POINTER_weave_defn_node(C));
    @@ -630,7 +648,7 @@ been syntax-coloured.
     

    -tree_node *WeaveTree::source_code(heterogeneous_tree *tree,
    +tree_node *WeaveTree::source_code(heterogeneous_tree *tree,
         text_stream *matter, text_stream *colouring) {
         if (Str::len(colouring) != Str::len(matter)) internal_error("bad source segment");
         for (int i=0; i<Str::len(colouring); i++)
    @@ -641,7 +659,7 @@ been syntax-coloured.
         return Trees::new_node(tree, weave_source_code_node_type, STORE_POINTER_weave_source_code_node(C));
     }
     
    -tree_node *WeaveTree::url(heterogeneous_tree *tree, text_stream *url,
    +tree_node *WeaveTree::url(heterogeneous_tree *tree, text_stream *url,
         text_stream *content, int external) {
         weave_url_node *C = CREATE(weave_url_node);
         C->url = Str::duplicate(url);
    @@ -650,13 +668,13 @@ been syntax-coloured.
         return Trees::new_node(tree, weave_url_node_type, STORE_POINTER_weave_url_node(C));
     }
     
    -tree_node *WeaveTree::footnote_cue(heterogeneous_tree *tree, text_stream *cue) {
    +tree_node *WeaveTree::footnote_cue(heterogeneous_tree *tree, text_stream *cue) {
         weave_footnote_cue_node *C = CREATE(weave_footnote_cue_node);
         C->cue_text = Str::duplicate(cue);
         return Trees::new_node(tree, weave_footnote_cue_node_type, STORE_POINTER_weave_footnote_cue_node(C));
     }
     
    -tree_node *WeaveTree::footnote(heterogeneous_tree *tree, text_stream *cue) {
    +tree_node *WeaveTree::footnote(heterogeneous_tree *tree, text_stream *cue) {
         weave_begin_footnote_text_node *C = CREATE(weave_begin_footnote_text_node);
         C->cue_text = Str::duplicate(cue);
         return Trees::new_node(tree, weave_begin_footnote_text_node_type, STORE_POINTER_weave_begin_footnote_text_node(C));
    @@ -667,7 +685,7 @@ definition has just occurred.
     

    -tree_node *WeaveTree::function_defn(heterogeneous_tree *tree, language_function *fn) {
    +tree_node *WeaveTree::function_defn(heterogeneous_tree *tree, language_function *fn) {
         weave_function_defn_node *C = CREATE(weave_function_defn_node);
         C->fn = fn;
         return Trees::new_node(tree, weave_function_defn_node_type, STORE_POINTER_weave_function_defn_node(C));
    @@ -678,7 +696,7 @@ a convenience for Inform 7 code commentary.
     

    -tree_node *WeaveTree::display_line(heterogeneous_tree *tree, text_stream *text) {
    +tree_node *WeaveTree::display_line(heterogeneous_tree *tree, text_stream *text) {
         weave_display_line_node *C = CREATE(weave_display_line_node);
         C->text = Str::duplicate(text);
         return Trees::new_node(tree, weave_display_line_node_type, STORE_POINTER_weave_display_line_node(C));
    @@ -699,49 +717,49 @@ indentation but not weave any bracketed marker.
     
  • (b) This was produced by depth equal to 1, label equal to b.
  • -tree_node *WeaveTree::weave_item_node(heterogeneous_tree *tree, int depth, text_stream *label) {
    +tree_node *WeaveTree::weave_item_node(heterogeneous_tree *tree, int depth, text_stream *label) {
         weave_item_node *C = CREATE(weave_item_node);
         C->depth = depth;
         C->label = Str::duplicate(label);
         return Trees::new_node(tree, weave_item_node_type, STORE_POINTER_weave_item_node(C));
     }
     
    -tree_node *WeaveTree::grammar_index(heterogeneous_tree *tree) {
    +tree_node *WeaveTree::grammar_index(heterogeneous_tree *tree) {
         weave_grammar_index_node *C = CREATE(weave_grammar_index_node);
         return Trees::new_node(tree, weave_grammar_index_node_type, STORE_POINTER_weave_grammar_index_node(C));
     }
     
    -tree_node *WeaveTree::inline(heterogeneous_tree *tree) {
    +tree_node *WeaveTree::inline(heterogeneous_tree *tree) {
         weave_inline_node *C = CREATE(weave_inline_node);
         return Trees::new_node(tree, weave_inline_node_type, STORE_POINTER_weave_inline_node(C));
     }
     
    -tree_node *WeaveTree::locale(heterogeneous_tree *tree, paragraph *par1, paragraph *par2) {
    +tree_node *WeaveTree::locale(heterogeneous_tree *tree, paragraph *par1, paragraph *par2) {
         weave_locale_node *C = CREATE(weave_locale_node);
         C->par1 = par1;
         C->par2 = par2;
         return Trees::new_node(tree, weave_locale_node_type, STORE_POINTER_weave_locale_node(C));
     }
     
    -tree_node *WeaveTree::mathematics(heterogeneous_tree *tree, text_stream *content, int displayed) {
    +tree_node *WeaveTree::mathematics(heterogeneous_tree *tree, text_stream *content, int displayed) {
         weave_maths_node *C = CREATE(weave_maths_node);
         C->content = Str::duplicate(content);
         C->displayed = displayed;
         return Trees::new_node(tree, weave_maths_node_type, STORE_POINTER_weave_maths_node(C));
     }
     
    -void WeaveTree::show(text_stream *OUT, heterogeneous_tree *T) {
    +void WeaveTree::show(text_stream *OUT, heterogeneous_tree *T) {
         WRITE("%S\n", T->type->name);
         INDENT;
         Debugging::render(NULL, OUT, T);
         OUTDENT;
     }
     
    -void WeaveTree::prune(heterogeneous_tree *T) {
    +void WeaveTree::prune(heterogeneous_tree *T) {
         Trees::prune_tree(T, &WeaveTree::prune_visit, NULL);
     }
     
    -int WeaveTree::prune_visit(tree_node *N, void *state) {
    +int WeaveTree::prune_visit(tree_node *N, void *state) {
         if ((N->type->required_MT == weave_material_node_MT) && (N->child == NULL))
             return TRUE;
         if ((N->type->required_MT == weave_vskip_node_MT) && (N->next == NULL))
    diff --git a/docs/inweb/6-cln.html b/docs/inweb/6-cln.html
    index 0e566ba..40bc425 100644
    --- a/docs/inweb/6-cln.html
    +++ b/docs/inweb/6-cln.html
    @@ -596,7 +596,7 @@ the main one, and suffixed by     WRITE(".html");
     }
     
    -void Colonies::paragraph_URL(OUTPUT_STREAM, paragraph *P, filename *from) {
    +void Colonies::paragraph_URL(OUTPUT_STREAM, paragraph *P, filename *from) {
         if (from == NULL) internal_error("no from file");
         if (P == NULL) internal_error("no para");
         section *to_S = P->under_section;
    diff --git a/docs/inweb/M-htwaw.html b/docs/inweb/M-htwaw.html
    index 2cc86f8..23b6aeb 100644
    --- a/docs/inweb/M-htwaw.html
    +++ b/docs/inweb/M-htwaw.html
    @@ -57,7 +57,7 @@ MathJax = {
     		
     

    How to mark up code for literate programming.

    -
    +

    §1. The title of a section. In any section file, there will be a few lines at the top which occur before the first paragraph of code begins. (The first paragraph begins on the first @@ -651,7 +651,22 @@ correspond. If you really want to monkey with the aspect ratio,

         = (figure Whatever.jpg at 20 by 100)
     
    -

    §19. Carousels. A carousel is a slide-show of (usually but not always) figures; there's a +

    §19. Audio. To include audio samples, place them as MP3 files in the subdirectory Audio +of the web. For example, in the present web, +

    + +
    +    = (audio SP014.mp3)
    +
    +

    produces Space Patrol episode 14, from 1953: "Brain Bank And Space Binoculars" — +

    + +
    +
    +

    §20. Carousels. A carousel is a slide-show of (usually but not always) figures; there's a set of slides with captions, only one of which is visible at a time.

    @@ -760,7 +775,7 @@ it can also be above = (figure furtive.jpg) = (carousel end)
    -

    §20. Embedded video. This makes sense only for some HTML-like weave formats, but we can also +

    §21. Embedded video. This makes sense only for some HTML-like weave formats, but we can also cause videos to be embedded:

    @@ -800,7 +815,7 @@ this case was https://youtu.b
    -

    §21. Adding width and height is straightforward; by default the dimensions are +

    §22. Adding width and height is straightforward; by default the dimensions are 720 by 405.

    @@ -812,7 +827,7 @@ this case was https://youtu.b arguably music has width and not height, but SoundCloud thinks otherwise).

    -

    §22. Mathematics notation. Literate programming is a good technique to justify code which hangs on +

    §23. Mathematics notation. Literate programming is a good technique to justify code which hangs on unobvious pieces of mathematics or computer science, and which must therefore be explained carefully. Formulae or equations are a real convenience for that.

    @@ -851,7 +866,7 @@ changed. The defaults are: treat it as any other text would be treated.

    -

    §23. Footnotes. Not everyone likes footnotes,1 but sometimes they're a tidy way to make +

    §24. Footnotes. Not everyone likes footnotes,1 but sometimes they're a tidy way to make references.2

    @@ -860,7 +875,7 @@ University Press, 1999).

  • 2 For example, to cite Donald Knuth, "Evaluation of Porter's constant", Computers & Mathematics with Applications, 2, 137-39 (1976).

  • -

    §24. The content of that sentence was typed as follows: +

    §25. The content of that sentence was typed as follows:

    diff --git a/docs/inweb/SP014.mp3 b/docs/inweb/SP014.mp3
    new file mode 100644
    index 0000000..7f4c41c
    Binary files /dev/null and b/docs/inweb/SP014.mp3 differ