A format which renders as a plain-text serialisation of the Inweb weave tree, useful only for testing the weaver.
void Debugging::create(void) { weave_format *wf = Formats::create_weave_format(I"TestingInweb", I".txt"); METHOD_ADD(wf, RENDER_FOR_MTID, Debugging::render); }
§2. Methods. For documentation, see "Weave Fornats".
typedef struct debugging_render_state { struct text_stream *OUT; struct weave_order *wv; } debugging_render_state; void Debugging::render(weave_format *self, text_stream *OUT, heterogeneous_tree *tree) { weave_document_node *C = RETRIEVE_POINTER_weave_document_node(tree->root->content); debugging_render_state drs; drs.OUT = OUT; drs.wv = C->wv; Trees::traverse_from(tree->root, &Debugging::render_visit, (void *) &drs, 0); } int Debugging::render_visit(tree_node *N, void *state, int L) { debugging_render_state *drs = (debugging_render_state *) state; text_stream *OUT = drs->OUT; for (int i=0; i<L; i++) WRITE(" "); WRITE("%S", N->type->node_type_name); if (N->type == weave_document_node_type) Render document2.1 else if (N->type == weave_head_node_type) Render head2.2 else if (N->type == weave_body_node_type) Render body2.3 else if (N->type == weave_tail_node_type) Render tail2.4 else if (N->type == weave_verbatim_node_type) Render verbatim2.5 else if (N->type == weave_chapter_header_node_type) Render chapter header2.8 else if (N->type == weave_chapter_footer_node_type) Render chapter footer2.9 else if (N->type == weave_section_header_node_type) Render section header2.6 else if (N->type == weave_section_footer_node_type) Render section footer2.7 else if (N->type == weave_section_purpose_node_type) Render purpose2.10 else if (N->type == weave_subheading_node_type) Render subheading2.11 else if (N->type == weave_bar_node_type) Render bar2.12 else if (N->type == weave_pagebreak_node_type) Render pagebreak2.13 else if (N->type == weave_linebreak_node_type) Render linebreak2.14 else if (N->type == weave_paragraph_heading_node_type) Render paragraph heading2.15 else if (N->type == weave_endnote_node_type) Render endnote2.16 else if (N->type == weave_figure_node_type) Render figure2.17 else if (N->type == weave_audio_node_type) Render audio clip2.18 else if (N->type == weave_video_node_type) Render video clip2.19 else if (N->type == weave_download_node_type) Render download2.20 else if (N->type == weave_material_node_type) Render material2.21 else if (N->type == weave_embed_node_type) Render embed2.22 else if (N->type == weave_pmac_node_type) Render pmac2.23 else if (N->type == weave_vskip_node_type) Render vskip2.24 else if (N->type == weave_chapter_node_type) Render chapter2.25 else if (N->type == weave_section_node_type) Render section2.26 else if (N->type == weave_code_line_node_type) Render code line2.27 else if (N->type == weave_function_usage_node_type) Render function usage2.28 else if (N->type == weave_commentary_node_type) Render commentary2.29 else if (N->type == weave_carousel_slide_node_type) Render carousel slide2.30 else if (N->type == weave_toc_node_type) Render toc2.31 else if (N->type == weave_toc_line_node_type) Render toc line2.32 else if (N->type == weave_chapter_title_page_node_type) Render weave_chapter_title_page_node2.33 else if (N->type == weave_defn_node_type) Render defn2.34 else if (N->type == weave_source_code_node_type) Render source code2.35 else if (N->type == weave_url_node_type) Render URL2.36 else if (N->type == weave_footnote_cue_node_type) Render footnote cue2.37 else if (N->type == weave_begin_footnote_text_node_type) Render footnote text2.38 else if (N->type == weave_display_line_node_type) Render display line2.39 else if (N->type == weave_function_defn_node_type) Render function defn2.40 else if (N->type == weave_item_node_type) Render item2.41 else if (N->type == weave_grammar_index_node_type) Render grammar index2.42 else if (N->type == weave_inline_node_type) Render inline2.43 else if (N->type == weave_locale_node_type) Render locale2.44 else if (N->type == weave_maths_node_type) Render maths2.45 else WRITE("Unknown node"); WRITE("\n"); return TRUE; }
- The structure debugging_render_state is accessed in 1/apacs, 3/tc, 3/twot, 5/wt, 5/fm, 5/ptf, 5/tf, 5/hf and here.
weave_document_node *C = RETRIEVE_POINTER_weave_document_node(N->content); WRITE(" weave order %d", C->wv->allocation_id);
- This code is used in §2.
weave_head_node *C = RETRIEVE_POINTER_weave_head_node(N->content); WRITE(" banner <%S>", C->banner);
- This code is used in §2.
;
- This code is used in §2.
weave_tail_node *C = RETRIEVE_POINTER_weave_tail_node(N->content); WRITE(" rennab <%S>", C->rennab);
- This code is used in §2.
weave_verbatim_node *C = RETRIEVE_POINTER_weave_verbatim_node(N->content); Debugging::show_text(OUT, C->content, 80);
- This code is used in §2.
§2.6. Render section header2.6 =
weave_section_header_node *C = RETRIEVE_POINTER_weave_section_header_node(N->content); WRITE(" <%S>", C->sect->md->sect_title);
- This code is used in §2.
§2.7. Render section footer2.7 =
weave_section_footer_node *C = RETRIEVE_POINTER_weave_section_footer_node(N->content); WRITE(" <%S>", C->sect->md->sect_title);
- This code is used in §2.
§2.8. Render chapter header2.8 =
weave_chapter_header_node *C = RETRIEVE_POINTER_weave_chapter_header_node(N->content); WRITE(" <%S>", C->chap->md->ch_title);
- This code is used in §2.
§2.9. Render chapter footer2.9 =
weave_chapter_footer_node *C = RETRIEVE_POINTER_weave_chapter_footer_node(N->content); WRITE(" <%S>", C->chap->md->ch_title);
- This code is used in §2.
weave_section_purpose_node *C = RETRIEVE_POINTER_weave_section_purpose_node(N->content); WRITE(" <%S>", C->purpose);
- This code is used in §2.
§2.11. Render subheading2.11 =
weave_subheading_node *C = RETRIEVE_POINTER_weave_subheading_node(N->content); WRITE(" <%S>", C->text);
- This code is used in §2.
;
- This code is used in §2.
;
- This code is used in §2.
;
- This code is used in §2.
§2.15. Render paragraph heading2.15 =
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)");
- This code is used in §2.
;
- This code is used in §2.
weave_figure_node *C = RETRIEVE_POINTER_weave_figure_node(N->content); WRITE(" <%S> %d by %d", C->figname, C->w, C->h);
- This code is used in §2.
§2.18. Render audio clip2.18 =
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.19. Render video clip2.19 =
weave_video_node *C = RETRIEVE_POINTER_weave_video_node(N->content); WRITE(" <%S> %d", C->video_name, C->w);
- This code is used in §2.
weave_download_node *C = RETRIEVE_POINTER_weave_download_node(N->content); WRITE(" <%S> %S", C->download_name, C->filetype);
- This code is used in §2.
weave_material_node *C = RETRIEVE_POINTER_weave_material_node(N->content); WRITE(" "); Debugging::show_mat(OUT, C->material_type); if (C->material_type == CODE_MATERIAL) WRITE(": %S", C->styling->language_name); if (C->plainly) WRITE(" (plainly)");
- This code is used in §2.
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);
- This code is used in §2.
weave_pmac_node *C = RETRIEVE_POINTER_weave_pmac_node(N->content); WRITE(" <%S>", C->pmac->macro_name); if (C->defn) WRITE(" (definition)");
- This code is used in §2.
weave_vskip_node *C = RETRIEVE_POINTER_weave_vskip_node(N->content); if (C->in_comment) WRITE(" (in comment)");
- This code is used in §2.
weave_chapter_node *C = RETRIEVE_POINTER_weave_chapter_node(N->content); WRITE(" <%S>", C->chap->md->ch_title);
- This code is used in §2.
weave_section_node *C = RETRIEVE_POINTER_weave_section_node(N->content); WRITE(" <%S>", C->sect->md->sect_title);
- This code is used in §2.
;
- This code is used in §2.
§2.28. Render function usage2.28 =
weave_function_usage_node *C = RETRIEVE_POINTER_weave_function_usage_node(N->content); WRITE(" <%S>", C->fn->function_name);
- This code is used in §2.
§2.29. Render commentary2.29 =
weave_commentary_node *C = RETRIEVE_POINTER_weave_commentary_node(N->content); Debugging::show_text(OUT, C->text, 80); if (C->in_code) WRITE(" (code)");
- This code is used in §2.
§2.30. Render carousel slide2.30 =
weave_carousel_slide_node *C = RETRIEVE_POINTER_weave_carousel_slide_node(N->content); WRITE(" caption <%S>", C->caption);
- This code is used in §2.
weave_toc_node *C = RETRIEVE_POINTER_weave_toc_node(N->content); WRITE(" - <%S>", C->text1);
- This code is used in §2.
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);
- This code is used in §2.
§2.33. Render weave_chapter_title_page_node2.33 =
weave_chapter_title_page_node *C = RETRIEVE_POINTER_weave_chapter_title_page_node(N->content); WRITE(" - something %d", C->allocation_id);
- This code is used in §2.
weave_defn_node *C = RETRIEVE_POINTER_weave_defn_node(N->content); WRITE(" <%S>", C->keyword);
- This code is used in §2.
§2.35. Render source code2.35 =
weave_source_code_node *C = RETRIEVE_POINTER_weave_source_code_node(N->content); WRITE(" <%S>\n", C->matter); for (int i=0; i<L; i++) WRITE(" "); WRITE(" "); WRITE(" _%S_", C->colouring);
- This code is used in §2.
weave_url_node *C = RETRIEVE_POINTER_weave_url_node(N->content); WRITE(" content <%S> url <%S>", C->content, C->url);
- This code is used in §2.
§2.37. Render footnote cue2.37 =
weave_footnote_cue_node *C = RETRIEVE_POINTER_weave_footnote_cue_node(N->content); WRITE(" [%S]", C->cue_text);
- This code is used in §2.
§2.38. Render footnote text2.38 =
weave_begin_footnote_text_node *C = RETRIEVE_POINTER_weave_begin_footnote_text_node(N->content); WRITE(" [%S]", C->cue_text);
- This code is used in §2.
§2.39. Render display line2.39 =
weave_display_line_node *C = RETRIEVE_POINTER_weave_display_line_node(N->content); WRITE(" <%S>", C->text);
- This code is used in §2.
§2.40. Render function defn2.40 =
weave_function_defn_node *C = RETRIEVE_POINTER_weave_function_defn_node(N->content); WRITE(" <%S>", C->fn->function_name);
- This code is used in §2.
weave_item_node *C = RETRIEVE_POINTER_weave_item_node(N->content); WRITE(" depth %d label <%S>", C->depth, C->label);
- This code is used in §2.
§2.42. Render grammar index2.42 =
;
- This code is used in §2.
;
- This code is used in §2.
weave_locale_node *C = RETRIEVE_POINTER_weave_locale_node(N->content); Debugging::show_para(OUT, C->par1); if (C->par2) { WRITE(" to "); Debugging::show_para(OUT, C->par2); }
- This code is used in §2.
weave_maths_node *C = RETRIEVE_POINTER_weave_maths_node(N->content); WRITE(" <%S>", C->content); if (C->displayed) WRITE(" (displayed)");
- This code is used in §2.
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') WRITE("\\n"); else PUT(Str::get_at(text, i)); WRITE(">"); if (Str::len(text) > limit) WRITE(" ... continues to %d chars", Str::len(text)); } 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) { switch (m) { case COMMENTARY_MATERIAL: WRITE("discussion"); break; case MACRO_MATERIAL: WRITE("paragraph macro"); break; case DEFINITION_MATERIAL: WRITE("definition"); break; case CODE_MATERIAL: WRITE("code"); break; case ENDNOTES_MATERIAL: WRITE("endnotes"); break; case FOOTNOTES_MATERIAL: WRITE("footnotes"); break; default: WRITE("unknown"); break; } }