diff options
Diffstat (limited to 'src/doc_reform/meta')
| -rw-r--r-- | src/doc_reform/meta/metadoc_from_src.d | 809 | 
1 files changed, 244 insertions, 565 deletions
| diff --git a/src/doc_reform/meta/metadoc_from_src.d b/src/doc_reform/meta/metadoc_from_src.d index da8949e..d8b3b75 100644 --- a/src/doc_reform/meta/metadoc_from_src.d +++ b/src/doc_reform/meta/metadoc_from_src.d @@ -47,14 +47,12 @@      [https://git.sisudoc.org/projects/?p=software/spine.git;a=summary]  +/ -/++ -  document abstraction: -  abstraction of sisu markup for downstream processing -  metadoc_from_src.d -+/ +// document abstraction: +// abstraction of sisu markup for downstream processing +// metadoc_from_src.d  module doc_reform.meta.metadoc_from_src;  template docAbstraction() { -  /+ ↓ abstraction imports +/ +  // ↓ abstraction imports    import      std.algorithm,      std.container, @@ -67,11 +65,11 @@ template docAbstraction() {      doc_reform.meta.rgx,      doc_reform.meta.metadoc_object_setter,      doc_reform.meta.rgx; -  /+ ↓ abstraction mixins +/ +  // ↓ abstraction mixins    mixin ObjectSetter;    mixin InternalMarkup;    mixin spineRgxIn; -  /+ ↓ abstraction struct init +/ +  // ↓ abstraction struct init    @safe static auto eN() {      struct _e {        enum bi { @@ -124,7 +122,7 @@ template docAbstraction() {      }      return _e();    } -  /+ initialize +/ +  // initialize    ObjGenericComposite[] the_document_toc_section, the_document_head_section, the_document_body_section, the_document_bibliography_section, the_document_glossary_section, the_document_blurb_section, the_document_xml_dom_tail_section;    struct _theDoc {      ObjGenericComposite[] toc; @@ -145,7 +143,7 @@ template docAbstraction() {    string lev_anchor_tag;    string[string][string] tag_assoc;    string[] lv0to3_tags; -  /+ enum +/ +  // enum    enum DocStructMarkupHeading {      h_sect_A,      h_sect_B, @@ -160,26 +158,26 @@ template docAbstraction() {    } // header section A-D; header text 1-4    enum Status { off, on, }    enum OCNtype { ocn, non, bkidx, } -  /+ biblio variables +/ +  // biblio variables    string biblio_tag_name, biblio_tag_entry, st;    string[] biblio_arr_json;    string biblio_entry_str_json;    JSONValue[] bib_arr_json;    int bib_entry; -  /+ counters +/ +  // counters    int cntr, previous_count, previous_length;    bool reset_note_numbers = true;    int[string] line_occur;    int html_segnames_ptr = 0;    int html_segnames_ptr_cntr = 0;    int verse_line, heading_ptr; -  /+ paragraph attributes +/ +  // paragraph attributes    int[string] indent;    bool bullet = true;    string content_non_header = "8";    static auto obj_im = ObjInlineMarkup();    static auto obj_att = ObjAttributes(); -  /+ ocn +/ +  // ocn    struct OCNset {      int digit;      int object_number; @@ -309,9 +307,7 @@ template docAbstraction() {          }        }      } -    debug(dom_magic_numbers) { -      writeln("marked up: ", lev, ": ", dom); -    } +    debug(dom_magic_numbers) { writeln("marked up: ", lev, ": ", dom); }      obj.metainfo.dom_structure_markedup_tags_status = dom.dup;      return obj;    } @@ -353,9 +349,7 @@ template docAbstraction() {          }        }      } -    debug(dom_magic_numbers) { -      writeln("collapsed: ", lev, ": ", dom); -    } +    debug(dom_magic_numbers) { writeln("collapsed: ", lev, ": ", dom); }      obj.metainfo.dom_structure_collapsed_tags_status = dom.dup;      return obj;    } @@ -413,10 +407,10 @@ template docAbstraction() {      }      return obj_txt;    } -  /+ book index variables +/ +  // book index variables    string book_idx_tmp;    string[][string][string] bookindex_unordered_hashes; -  /+ node +/ +  // node    ObjGenericComposite comp_obj_heading, comp_obj_location, comp_obj_block, comp_obj_code, comp_obj_poem_ocn, comp_obj_comment;    auto node_construct = NodeStructureMetadata();    enum sObj { content, anchor_tag, notes_reg, notes_star, links, image_no_dimensions } @@ -526,7 +520,7 @@ template docAbstraction() {      bool               _new_doc    ) {      static auto rgx = RgxI(); -    /+ ↓ abstraction init +/ +    // ↓ abstraction init      scope(success) {      }      scope(failure) { @@ -667,7 +661,7 @@ template docAbstraction() {      string[][string] lev4_subtoc;      string[][string] segnames = ["html": ["toc"], "epub": ["toc"]];      int cnt1 = 1; int cnt2 = 1; int cnt3 = 1; -    /+ abstraction init ↑ +/ +    // abstraction init ↑      enum Substitute { match, markup, }      debug (substitutions) {        writeln(__LINE__, ":", __FILE__, ": DEBUG substitutions:"); @@ -709,9 +703,9 @@ template docAbstraction() {        _loopMarkupSrcByLineStruct ret;        srcDocLoopLineByLine_:        foreach (line; markup_sourcefile_content) { -        /+ ↓ markup document/text line by line +/ +        // ↓ markup document/text line by line          // "line" variable can be empty but should never be null -        /+ scope +/ +        // scope          scope(exit) { }          scope(failure) {            stderr.writefln( @@ -721,17 +715,13 @@ template docAbstraction() {              manifested.src.filename, line,            );          } -        debug(source) { -          writeln(line); -        } -        debug(srclines) { -          if (!line.empty) { writefln("* %s", line); } -        } +        debug(source) { writeln(line); } +        debug(srclines) { if (!line.empty) { writefln("* %s", line); } }          if (!line.empty) { pith = line._check_ocn_status_(pith); }          if ( pith["block_is"] == eN.blk_is.code            && pith["block_state"] == eN.blk_state.on          ) { -          /+ block object: code +/ +          // block object: code            {              auto _get = line.txt_by_line_block_code(an_object, pith);              an_object = _get.this_object; @@ -739,9 +729,9 @@ template docAbstraction() {            }            continue;          } else if (!matchFirst(line, rgx.skip_from_regular_parse)) { -          /+ object other than "code block" object +/ -          /+ (includes regular text paragraph, headings & blocks other than code) +/ -          /+ heading, glossary, blurb, poem, group, block, quote, table +/ +          // object other than "code block" object +          // (includes regular text paragraph, headings & blocks other than code) +          // heading, glossary, blurb, poem, group, block, quote, table            line = line.inline_markup_faces; // by text line (rather than by text object), linebreaks in para problematic            if (line.matchFirst(rgx.heading_biblio)            || (pith["section"] == eN.sect.bibliography @@ -774,11 +764,8 @@ template docAbstraction() {              && (!(line.matchFirst(rgx.heading)))              && (!(line.matchFirst(rgx.comment)))))            ) { -            /+ within section (block object): glossary +/ -            debug(glossary) { -              writeln(__LINE__); -              writeln(line); -            } +            // within section (block object): glossary +            debug(glossary) { writeln(__LINE__); writeln(line); }              pith["section"] = eN.sect.glossary;              if (opt_action.backmatter && opt_action.section_glossary) {                indent = [ @@ -880,10 +867,7 @@ template docAbstraction() {              && (!(line.matchFirst(rgx.comment)))))            ) {              pith["section"] = eN.sect.blurb; -            debug(blurb) { -              writeln(__LINE__); -              writeln(line); -            } +            debug(blurb) { writeln(__LINE__); writeln(line); }              if (opt_action.backmatter && opt_action.section_blurb) {                indent = [                  "hang_position" : 0, @@ -891,28 +875,20 @@ template docAbstraction() {                ];                bullet = false;                if (auto m = line.matchFirst(rgx.para_indent)) { -                debug(paraindent) { -                  writeln(line); -                } +                debug(paraindent) { writeln(line); }                  indent["hang_position"] = (m["indent"]).to!int;                  indent["base_position"] = (m["indent"]).to!int;                } else if (line.matchFirst(rgx.para_bullet)) { -                debug(parabullet) { -                  writeln(line); -                } +                debug(parabullet) { writeln(line); }                  bullet = true;                } else if (auto m = line.matchFirst(rgx.para_indent_hang)) { -                debug(paraindenthang) { -                  writeln(line); -                } +                debug(paraindenthang) { writeln(line); }                  indent = [                    "hang_position" : (m["hang"]).to!int,                    "base_position" : (m["indent"]).to!int,                  ];                } else if (auto m = line.matchFirst(rgx.para_bullet_indent)) { -                debug(parabulletindent) { -                  writeln(line); -                } +                debug(parabulletindent) { writeln(line); }                  indent = [                    "hang_position" : (m["indent"]).to!int,                    "base_position" : (m["indent"]).to!int, @@ -1093,7 +1069,7 @@ template docAbstraction() {                continue;              }            } else { -            /+ not within a block group +/ +            // not within a block group              assert(                (pith["block_state"] == eN.blk_state.off)                || (pith["block_state"] == eN.blk_state.closing), @@ -1101,7 +1077,7 @@ template docAbstraction() {              );              if (line.matchFirst(rgx.block_open)) {                if (line.matchFirst(rgx.block_poem_open)) { -                /+ poem to verse exceptions! +/ +                // poem to verse exceptions!                  object_reset(an_object);                  processing.remove("verse");                  object_number_poem["start"] = obj_cite_digits.object_number.to!string; @@ -1116,7 +1092,7 @@ template docAbstraction() {                }                continue;              } else if (!line.empty) { -              /+ line not empty - non blocks (headings, paragraphs) & closed blocks +/ +              // line not empty - non blocks (headings, paragraphs) & closed blocks                assert(                  !line.empty,                  "line tested, line not empty surely:\n  \"" ~ line ~ "\"" @@ -1127,10 +1103,7 @@ template docAbstraction() {                  "code block status: none or closed"                );                if (pith["block_state"] == eN.blk_state.closing) { -                debug(check) { -                  writeln(__LINE__); -                  writeln(line); -                } +                debug(check) { writeln(__LINE__); writeln(line); }                  assert(                    line.matchFirst(rgx.book_index_item)                    || line.matchFirst(rgx.book_index_item_open) @@ -1142,7 +1115,7 @@ template docAbstraction() {                if (line.matchFirst(rgx.book_index_item)                || line.matchFirst(rgx.book_index_item_open)                || pith["section"] == eN.sect.book_index)  { -                /+ book_index +/ +                // book_index                  {                    auto _get = line.flow_book_index_(an_object, book_idx_tmp, pith, opt_action);                    { @@ -1152,13 +1125,11 @@ template docAbstraction() {                    }                  }                } else { -                /+ not book_index +/ +                // not book_index                  an_object_key = "body_nugget";                  if (auto m = line.matchFirst(rgx.comment)) { -                  /+ matched comment +/ -                  debug(comment) { -                    writeln(line); -                  } +                  // matched comment +                  debug(comment) { writeln(line); }                    an_object[an_object_key]                ~= line ~= "\n";                    comp_obj_comment                        = comp_obj_comment.init;                    comp_obj_comment.metainfo.is_of_part    = "comment"; // breaks flow @@ -1180,10 +1151,10 @@ template docAbstraction() {                  } else if ((line_occur["para"] == eN.bi.off                    && line_occur["heading"] == eN.bi.off)                    && pith["txt_is"] == eN.txt_is.off -                ) {                             /+ heading or para but neither flag nor line exists +/ +                ) { // heading or para but neither flag nor line exists                    if ((conf_make_meta.make.headings.length > 2)                    && (pith["make_headings"] == eN.bi.off)) { -                    /+ heading found +/ +                    // heading found                      {                        auto _get = line.flow_heading_found_(heading_match_str, conf_make_meta.make.headings, heading_match_rgx, pith);                        { @@ -1198,7 +1169,7 @@ template docAbstraction() {                      && line_occur["heading"] == eN.bi.off)                      && pith["txt_is"] == eN.txt_is.off                    ) { -                    /+ heading make set +/ +                    // heading make set                      {                        auto _get = line.flow_heading_make_set_(line_occur, heading_match_rgx, pith);                        { @@ -1208,14 +1179,13 @@ template docAbstraction() {                        }                      }                    } -                  /+ TODO node info: all headings identified at this point, -                     - extract node info here?? -                     - how long can it wait? -                     - should be incorporated in composite objects -                     - should happen before endnote links set (they need to be moved down?) -                  +/ +                  // TODO node info: all headings identified at this point, +                  // - extract node info here?? +                  // - how long can it wait? +                  // - should be incorporated in composite objects +                  // - should happen before endnote links set (they need to be moved down?)                    if (line.matchFirst(rgx.headings)) { -                    /+ heading match +/ +                    // heading match                      line = line._doc_header_and_make_substitutions_(conf_make_meta);                      {                        auto _get = line.flow_heading_matched_( @@ -1233,7 +1203,7 @@ template docAbstraction() {                        }                      }                    } else if (line_occur["para"] == eN.bi.off) { -                    /+ para match +/ +                    // para match                      an_object_key = "body_nugget";                      line = line                        ._doc_header_and_make_substitutions_(conf_make_meta) @@ -1251,17 +1221,13 @@ template docAbstraction() {                      }                    }                  } else if (line_occur["heading"] > eN.bi.off) { -                  /+ heading +/ -                  debug(heading) { -                    writeln(line); -                  } +                  // heading +                  debug(heading) { writeln(line); }                    an_object[an_object_key] ~= line ~= "\n";                    ++line_occur["heading"];                  } else if (line_occur["para"] > eN.bi.off) { -                  /+ paragraph +/ -                  debug(para) { -                    writeln(an_object_key, "-> ", line); -                  } +                  // paragraph +                  debug(para) { writeln(an_object_key, "-> ", line); }                    line = line                      ._doc_header_and_make_substitutions_(conf_make_meta)                      ._doc_header_and_make_substitutions_fontface_(conf_make_meta); @@ -1270,7 +1236,7 @@ template docAbstraction() {                  }                }              } else if (pith["block_state"] == eN.blk_state.closing) { -              /+ line empty, with blocks flag +/ +              // line empty, with blocks flag                {                  auto _get = line.flow_block_flag_line_empty_(                    an_object, @@ -1296,7 +1262,7 @@ template docAbstraction() {                  }                }              } else { -              /+ line.empty, post contents, empty variables: +/ +              // line.empty, post contents, empty variables:                assert(                  line.empty,                  "\nline should be empty:\n  \"" @@ -1314,7 +1280,7 @@ template docAbstraction() {                if (pith["txt_is"] == eN.txt_is.heading                  && line_occur["heading"] > eN.bi.off                ) { -                /+ heading object (current line empty) +/ +                // heading object (current line empty)                  obj_cite_digits = (an_object["lev_markup_number"].to!int == 0)                  ? ocn_emit(eN.ocn.reset)                  : ocn_emit(pith["ocn"]); @@ -1341,7 +1307,7 @@ template docAbstraction() {                    tag_assoc[anchor_tag]["seg_lv4"]    = tag_in_seg["seg_lv4"];                    tag_assoc[anchor_tag]["seg_lv1to4"] = tag_in_seg["seg_lv1to4"];                    if (lv0to3_tags.length > 0) { -                    /+ names used for html markup segments 1 to 4 (rather than epub which has separate segments for A to D) +/ +                    // names used for html markup segments 1 to 4 (rather than epub which has separate segments for A to D)                      foreach (lv0_to_lv3_html_tag; lv0to3_tags) {                        tag_assoc[lv0_to_lv3_html_tag]["seg_lv4"] = anchor_tag;                      } @@ -1357,7 +1323,7 @@ template docAbstraction() {                  } else if (an_object["lev_markup_number"].to!int < 4) {                    string segn;                    switch (an_object["lev_markup_number"].to!int) { -                  /+ names used for epub markup segments A to D +/ +                  // names used for epub markup segments A to D                    case 0:                      segn = "_the_title";                      goto default; @@ -1385,8 +1351,8 @@ template docAbstraction() {                    = ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : "";                  bookindex_unordered_hashes                    = bookindex_extract_hash.bookindex_nugget_hash(an_object["bookindex_nugget"], obj_cite_digits, tag_in_seg); -                /+ (incrementally build toc) table of contents here! +/                  _anchor_tag                   = obj_cite_digits.identifier; +                // (incrementally build toc) table of contents here!                  {                    auto _get = obj_im.flow_table_of_contents_gather_headings(                      an_object, @@ -1434,9 +1400,7 @@ template docAbstraction() {                    writeln(tag_in_seg["seg_lv1to4"]);                  }                  the_document_body_section ~= comp_obj_heading; -                debug(objectrelated1) { // check -                  writeln(line); -                } +                debug(objectrelated1) { writeln(line); } // check                  {                    auto _get = txt_by_line_common_reset_(line_occur, an_object, pith);                    { @@ -1451,7 +1415,7 @@ template docAbstraction() {                  ++cntr;                } else if (pith["txt_is"] == eN.txt_is.para                  && line_occur["para"] > eN.bi.off -              ) { /+ paragraph object (current line empty) - repeated character paragraph separator +/ +              ) { // paragraph object (current line empty) - repeated character paragraph separator                  if ((an_object[an_object_key].to!string).matchFirst(rgx.repeated_character_line_separator)) {                    pith["ocn"] = eN.ocn.off;                  } @@ -1516,7 +1480,7 @@ template docAbstraction() {              } // close else for line empty            } // close else for not the above          } // close after non code, other blocks or regular text -        /+ unless (the_document_body_section.length == 0) ? +/ +        // unless (the_document_body_section.length == 0) ?          if (the_document_body_section.length > 0) {            if (((the_document_body_section[$-1].metainfo.is_a == "para")              || (the_document_body_section[$-1].metainfo.is_a == "heading") @@ -1530,7 +1494,7 @@ template docAbstraction() {                pith["section"] = eN.sect.unset;              }              if (the_document_body_section[$-1].metainfo.is_a == "verse") { -              /+ scan for endnotes for whole poem (each verse in poem) +/ +              // scan for endnotes for whole poem (each verse in poem)                foreach (i; previous_length .. the_document_body_section.length) {                  if (the_document_body_section[i].metainfo.is_a == "verse") {                    if ((the_document_body_section[i].text).match( @@ -1545,7 +1509,7 @@ template docAbstraction() {                  }                }              } else { -              /+ scan object for endnotes +/ +              // scan object for endnotes                previous_length = the_document_body_section.length.to!int;                if ((the_document_body_section[$-1].text).match(                  rgx.inline_notes_al_all_note @@ -1610,13 +1574,8 @@ template docAbstraction() {      auto the_document_endnotes_section = en_tuple[0];      obj_cite_digits = en_tuple[1];      debug(endnotes) { -      writefln("%s %s", -        __LINE__, -        the_document_endnotes_section.length -      ); -      foreach (o; the_document_endnotes_section) { -        writeln(o); -      } +      writefln("%s %s", __LINE__, the_document_endnotes_section.length); +      foreach (o; the_document_endnotes_section) { writeln(o); }      }      if (an_object["glossary_nugget"].length == 0) {        comp_obj_heading_                                   = comp_obj_heading_.init; @@ -1636,11 +1595,7 @@ template docAbstraction() {        comp_obj_heading_.metainfo.parent_lev_markup        = 0;        the_document_glossary_section                       ~= comp_obj_heading_;      } -    debug(glossary) { -      foreach (gloss; the_document_glossary_section) { -        writeln(gloss.text); -      } -    } +    debug(glossary) { foreach (gloss; the_document_glossary_section) { writeln(gloss.text); } }      auto biblio_unsorted_incomplete = biblio_arr_json.dup;      auto biblio = Bibliography();      JSONValue[] biblio_ordered; @@ -1756,11 +1711,7 @@ template docAbstraction() {        comp_obj_heading_.metainfo.parent_lev_markup        = 0;        the_document_bibliography_section                   ~= comp_obj_heading_;      } -    debug(bibliosection) { -      foreach (o; the_document_bibliography_section) { -        writeln(o.text); -      } -    } +    debug(bibliosection) { foreach (o; the_document_bibliography_section) { writeln(o.text); } }      auto bi = BookIndexReportSection();      auto bi_tuple        = bi.bookindex_build_abstraction_section( @@ -1771,11 +1722,7 @@ template docAbstraction() {      destroy(bookindex_unordered_hashes);      auto the_document_bookindex_section = bi_tuple[0];      obj_cite_digits = bi_tuple[1]; -    debug(bookindex) { -      foreach (bi_entry; the_document_bookindex_section) { -        writeln(bi_entry); -      } -    } +    debug(bookindex) { foreach (bi_entry; the_document_bookindex_section) { writeln(bi_entry); } }      if (an_object["blurb_nugget"].length == 0) {        comp_obj_heading_                                   = comp_obj_heading_.init;        comp_obj_heading_.metainfo.is_of_part               = "empty"; @@ -1796,11 +1743,7 @@ template docAbstraction() {        comp_obj_heading_.metainfo.parent_lev_markup        = 0;        the_document_blurb_section                          ~= comp_obj_heading_;      } -    debug(blurb) { -      foreach (blurb; the_document_blurb_section) { -        writeln(blurb.text); -      } -    } +    debug(blurb) { foreach (blurb; the_document_blurb_section) { writeln(blurb.text); } }      indent = [        "hang_position" : 1,        "base_position" : 1, @@ -1888,10 +1831,7 @@ template docAbstraction() {        the_document_toc_section                            ~= comp_obj_toc;      }      debug(toc) { -      writefln( -        "%s %s", -        __LINE__, -      ); +      writefln( "%s %s", __LINE__,);        foreach (toc_linked_heading; the_document_toc_section) {          writeln(mkup.indent_by_spaces_provided(toc_linked_heading.attrib.indent_hang), toc_linked_heading.text);        } @@ -1900,9 +1840,7 @@ template docAbstraction() {      the_document_body_section = the_document_body_section[1..$];      @safe int[] _get_ancestors_markup(O)(O obj, ref int[] _ancestors_markup) {        if (obj.metainfo.is_a == "heading") { -        debug(dom) { -          writeln(obj.text); -        } +        debug(dom) { writeln(obj.text); }          if (obj.metainfo.heading_lev_markup == 1) {            _ancestors_markup = [              _ancestors_markup[0], @@ -1980,9 +1918,7 @@ template docAbstraction() {          }          _ancestors_markup[obj.metainfo.heading_lev_markup] = obj.metainfo.ocn;        } -      debug(ancestor_markup) { -        writeln("marked up: ", _ancestors_markup); -      } +      debug(ancestor_markup) { writeln("marked up: ", _ancestors_markup); }        return _ancestors_markup;      }      @safe int[] _get_ancestors_collapsed(O)(O obj, ref int[] _ancestors_collapsed) { @@ -2064,12 +2000,10 @@ template docAbstraction() {          }          _ancestors_collapsed[obj.metainfo.heading_lev_collapsed] = obj.metainfo.ocn;        } -      debug(ancestor_collapsed) { -        writeln("collapsed: ", _ancestors_collapsed); -      } +      debug(ancestor_collapsed) { writeln("collapsed: ", _ancestors_collapsed); }        return _ancestors_collapsed;      } -    /+ multiple 1~ levels, loop through document body +/ +    // multiple 1~ levels, loop through document body      if (the_document_body_section.length > 1) {        int[] _ancestors_markup = [0,0,0,0,0,0,0,0];        int[][] _ancestors_markup_; @@ -2231,14 +2165,12 @@ template docAbstraction() {          int max_width = 640;          foreach (img; obj.text.matchAll(rgx.inline_image_without_dimensions)) {            try { -            read_image_info(manifested.src.image_dir_path ~ "/" ~ img["img"], w, h, chans); // +            read_image_info(manifested.src.image_dir_path ~ "/" ~ img["img"], w, h, chans);            } catch (Exception ex) {              writeln("WARNING, image not found: ", img["img"], "\n  ", manifested.src.image_dir_path ~ "/" ~ img["img"]);            }            // calculate, decide max width and proportionally reduce to keep w & h within it -          debug(images) { -            writeln("width: ", w, ", height: ", h); -          } +          debug(images) { writeln("width: ", w, ", height: ", h); }            if (w > max_width) {              _w = max_width;              _h = round((max_width / w.to!real) * h.to!real); @@ -2257,9 +2189,7 @@ template docAbstraction() {              )            );          } -        debug(images) { -          writeln("image without dimensions: ", obj.text); -        } +        debug(images) { writeln("image without dimensions: ", obj.text); }        }        return obj;      } @@ -2284,22 +2214,19 @@ template docAbstraction() {      }      foreach (ref obj; the_document_head_section) {        if (obj.metainfo.is_a == "heading") { -        debug(dom) { -          writeln(obj.text); -        } +        debug(dom) { writeln(obj.text); }          if (obj.metainfo.heading_lev_markup <= 4) {            segnames_0_to_4 ~= obj.tags.segment_anchor_tag_epub;          }          if (obj.metainfo.heading_lev_markup == 0) { -          /+ TODO second hit (of two) with same assertion failure, check, fix and reinstate -          assert( obj.metainfo.ocn == 1, -            "Title OCN should be 1 not: " ~ obj.metainfo.ocn.to!string); // bug introduced 0.18.1 -          +/ +          // TODO second hit (of two) with same assertion failure, check, fix and reinstate +          // assert( obj.metainfo.ocn == 1, +          //   "Title OCN should be 1 not: " ~ obj.metainfo.ocn.to!string); // bug introduced 0.18.1            obj.metainfo.ocn = 1;            obj.metainfo.identifier = "1";            obj.metainfo.object_number_type = OCNtype.ocn;          } -        /+ dom structure (marked up & collapsed) +/ +        // dom structure (marked up & collapsed)          if (opt_action.meta_processing_xml_dom) {            obj = obj.obj_dom_structure_set_markup_tags(dom_structure_markedup_tags_status, obj.metainfo.heading_lev_markup);            obj = obj.obj_dom_set_collapsed_tags(dom_structure_collapsed_tags_status, obj.metainfo.heading_lev_collapsed); @@ -2309,7 +2236,7 @@ template docAbstraction() {        obj = _links(obj);      }      if (the_document_toc_section.length > 1) { -      /+ scroll +/ +      // scroll        dom_structure_markedup_tags_status_buffer = dom_structure_markedup_tags_status.dup;        dom_structure_collapsed_tags_status_buffer = dom_structure_collapsed_tags_status.dup;        foreach (ref obj; the_document_toc_section) { @@ -2322,7 +2249,7 @@ template docAbstraction() {                  obj.tags.anchor_tag_html ~ "!=" ~ segnames["html"][obj.ptr.html_segnames]);              }            } -          /+ dom structure (marked up & collapsed) +/ +          // dom structure (marked up & collapsed)            if (opt_action.meta_processing_xml_dom) {              obj = obj.obj_dom_structure_set_markup_tags(dom_structure_markedup_tags_status, obj.metainfo.heading_lev_markup);              obj = obj.obj_dom_set_collapsed_tags(dom_structure_collapsed_tags_status, obj.metainfo.heading_lev_collapsed); @@ -2332,7 +2259,7 @@ template docAbstraction() {          obj = _links(obj);        }      } -    /+ multiple 1~ levels, loop through document body +/ +    // multiple 1~ levels, loop through document body      if (the_document_body_section.length > 1) {        foreach (ref obj; the_document_body_section) {          if (!(obj.metainfo.identifier.empty)) { @@ -2346,9 +2273,7 @@ template docAbstraction() {            = obj.tags.epub_segment_anchor_tag_is;          }          if (obj.metainfo.is_a == "heading") { -          debug(dom) { -            writeln(obj.text); -          } +          debug(dom) { writeln(obj.text); }            if (obj.metainfo.heading_lev_markup <= 4) {              segnames_0_to_4 ~= obj.tags.segment_anchor_tag_epub;              if (obj.metainfo.heading_lev_markup == 4) { @@ -2361,7 +2286,7 @@ template docAbstraction() {                  obj.tags.anchor_tag_html ~ "!=" ~ segnames["html"][obj.ptr.html_segnames]);              }            } -          /+ dom structure (marked up & collapsed) +/ +          // dom structure (marked up & collapsed)            if (opt_action.meta_processing_xml_dom) {              obj = obj.obj_dom_structure_set_markup_tags(dom_structure_markedup_tags_status, obj.metainfo.heading_lev_markup);              obj = obj.obj_dom_set_collapsed_tags(dom_structure_collapsed_tags_status, obj.metainfo.heading_lev_collapsed); @@ -2375,7 +2300,7 @@ template docAbstraction() {        }      }      auto image_list = (_images.sort()).uniq; -    /+ optional only one 1~ level +/ +    // optional only one 1~ level      if (the_document_endnotes_section.length > 1) {        dom_structure_markedup_tags_status_buffer           = dom_structure_markedup_tags_status.dup;        dom_structure_collapsed_tags_status_buffer          = dom_structure_collapsed_tags_status.dup; @@ -2383,9 +2308,7 @@ template docAbstraction() {        dom_structure_collapsed_tags_status                 = dom_structure_collapsed_tags_status_buffer.dup;        foreach (ref obj; the_document_endnotes_section) {          if (obj.metainfo.is_a == "heading") { -          debug(dom) { -            writeln(obj.text); -          } +          debug(dom) { writeln(obj.text); }            if (obj.metainfo.heading_lev_markup == 1) {              obj_cite_digits                               = ocn_emit(eN.ocn.on);              obj.metainfo.ocn                              = obj_cite_digits.object_number; @@ -2402,7 +2325,7 @@ template docAbstraction() {                  obj.tags.anchor_tag_html ~ "!=" ~ segnames["html"][obj.ptr.html_segnames]);              }            } -          /+ dom structure (marked up & collapsed) +/ +          // dom structure (marked up & collapsed)            if (opt_action.meta_processing_xml_dom) {              obj = obj.obj_dom_structure_set_markup_tags(dom_structure_markedup_tags_status, obj.metainfo.heading_lev_markup);              obj = obj.obj_dom_set_collapsed_tags(dom_structure_collapsed_tags_status, obj.metainfo.heading_lev_collapsed); @@ -2412,13 +2335,11 @@ template docAbstraction() {          obj = _links(obj);        }      } -    /+ optional only one 1~ level +/ +    // optional only one 1~ level      if (the_document_glossary_section.length > 1) {        foreach (ref obj; the_document_glossary_section) {          if (obj.metainfo.is_a == "heading") { -          debug(dom) { -            writeln(obj.text); -          } +          debug(dom) { writeln(obj.text); }            if (obj.metainfo.heading_lev_markup == 1) {              obj_cite_digits                               = ocn_emit(eN.ocn.on);              obj.metainfo.ocn                              = obj_cite_digits.object_number; @@ -2435,7 +2356,7 @@ template docAbstraction() {                  obj.tags.anchor_tag_html ~ "!=" ~ segnames["html"][obj.ptr.html_segnames]);              }            } -          /+ dom structure (marked up & collapsed) +/ +          // dom structure (marked up & collapsed)            if (opt_action.meta_processing_xml_dom) {              obj = obj.obj_dom_structure_set_markup_tags(dom_structure_markedup_tags_status, obj.metainfo.heading_lev_markup);              obj = obj.obj_dom_set_collapsed_tags(dom_structure_collapsed_tags_status, obj.metainfo.heading_lev_collapsed); @@ -2449,13 +2370,11 @@ template docAbstraction() {          obj = _links(obj);        }      } -    /+ optional only one 1~ level +/ +    // optional only one 1~ level      if (the_document_bibliography_section.length > 1) {        foreach (ref obj; the_document_bibliography_section) {          if (obj.metainfo.is_a == "heading") { -          debug(dom) { -            writeln(obj.text); -          } +          debug(dom) { writeln(obj.text); }            if (obj.metainfo.heading_lev_markup == 1) {              obj_cite_digits                               = ocn_emit(eN.ocn.on);              obj.metainfo.ocn                              = obj_cite_digits.object_number; @@ -2472,7 +2391,7 @@ template docAbstraction() {                  obj.tags.anchor_tag_html ~ "!=" ~ segnames["html"][obj.ptr.html_segnames]);              }            } -          /+ dom structure (marked up & collapsed) +/ +          // dom structure (marked up & collapsed)            if (opt_action.meta_processing_xml_dom) {              obj = obj.obj_dom_structure_set_markup_tags(dom_structure_markedup_tags_status, obj.metainfo.heading_lev_markup);              obj = obj.obj_dom_set_collapsed_tags(dom_structure_collapsed_tags_status, obj.metainfo.heading_lev_collapsed); @@ -2486,17 +2405,16 @@ template docAbstraction() {          obj = _links(obj);        }      } -    /+ optional only one 1~ level +/ +    // optional only one 1~ level      int ocn_       = obj_cite_digits.object_number;      int ocn_bkidx_ = 0;      int ocn_bidx_; -    if (the_document_bookindex_section.length > 1) {                                        /+ scroll +/ +    if (the_document_bookindex_section.length > 1) {                                        // scroll        dom_structure_markedup_tags_status_buffer = dom_structure_markedup_tags_status.dup;        dom_structure_collapsed_tags_status_buffer = dom_structure_collapsed_tags_status.dup;        foreach (ref obj; the_document_bookindex_section) {          if (obj.metainfo.is_a == "heading") { -          debug(dom) { -          } +          // debug(dom) { }            if (obj.metainfo.heading_lev_markup <= 4) {              segnames_0_to_4 ~= obj.tags.segment_anchor_tag_epub;            } @@ -2515,7 +2433,7 @@ template docAbstraction() {                  obj.tags.anchor_tag_html ~ "!=" ~ segnames["html"][obj.ptr.html_segnames]);              }            } -          /+ dom structure (marked up & collapsed) +/ +          // dom structure (marked up & collapsed)            if (opt_action.meta_processing_xml_dom) {              obj = obj.obj_dom_structure_set_markup_tags(dom_structure_markedup_tags_status, obj.metainfo.heading_lev_markup);              obj = obj.obj_dom_set_collapsed_tags(dom_structure_collapsed_tags_status, obj.metainfo.heading_lev_collapsed); @@ -2530,18 +2448,14 @@ template docAbstraction() {          }          obj = _links(obj);        } -      /+ TODO assert failure, reinstate -      assert(obj_cite_digit_bkidx == ocn_bidx_ -        obj_cite_digit_bkidx ~ " == ocn_" ~ ocn_ ~ "?"); -      +/ +      // TODO assert failure, reinstate +      // assert(obj_cite_digit_bkidx == ocn_bidx_ obj_cite_digit_bkidx ~ " == ocn_" ~ ocn_ ~ "?");      } -    /+ optional only one 1~ level +/ +    // optional only one 1~ level      if (the_document_blurb_section.length > 1) {        foreach (ref obj; the_document_blurb_section) {          if (obj.metainfo.is_a == "heading") { -          debug(dom) { -            writeln(obj.text); -          } +          debug(dom) { writeln(obj.text); }            if (obj.metainfo.heading_lev_markup == 1) {              obj_cite_digits                               = ocn_emit(eN.ocn.on);              obj.metainfo.ocn                              = obj_cite_digits.object_number; @@ -2558,7 +2472,7 @@ template docAbstraction() {                  obj.tags.anchor_tag_html ~ "!=" ~ segnames["html"][obj.ptr.html_segnames]);              }            } -          /+ dom structure (marked up & collapsed) +/ +          // dom structure (marked up & collapsed)            if (opt_action.meta_processing_xml_dom) {              obj = obj.obj_dom_structure_set_markup_tags(dom_structure_markedup_tags_status, obj.metainfo.heading_lev_markup);              obj = obj.obj_dom_set_collapsed_tags(dom_structure_collapsed_tags_status, obj.metainfo.heading_lev_collapsed); @@ -2585,7 +2499,7 @@ template docAbstraction() {        );        debug(decendants_tuple) {          pairs = pairs.sort(); -        foreach (pair; pairs) {  // (pair; pairs.sort()) +        foreach (pair; pairs) { // (pair; pairs.sort())            writeln(pair[0], "..", pair[1]);          }        } @@ -2676,12 +2590,11 @@ template docAbstraction() {          }        }      } -    /+ TODO -      - note create/insert heading object sole purpose eof close all open tags -        sort out: -        - obj.metainfo.dom_structure_markedup_tags_status = dom_structure_markedup_tags_status; -        - obj.metainfo.dom_structure_collapsed_tags_status = dom_structure_collapsed_tags_status; -    +/ +    // TODO +    //  - note create/insert heading object sole purpose eof close all open tags +    //    sort out: +    //    - obj.metainfo.dom_structure_markedup_tags_status = dom_structure_markedup_tags_status; +    //    - obj.metainfo.dom_structure_collapsed_tags_status = dom_structure_collapsed_tags_status;      comp_obj_heading_                                               = comp_obj_heading_.init;      comp_obj_heading_.metainfo.is_of_part                           = "empty";      comp_obj_heading_.metainfo.is_of_section                        = "empty"; @@ -2710,15 +2623,15 @@ template docAbstraction() {      ObjGenericComposite[][string] document_the = [        "head":             the_document_head_section,        "toc":              the_document_toc_section, -      /+ substantive/body: +/ +      // substantive/body:        "body":             the_document_body_section, -      /+ backmatter: +/ +      // backmatter:        "endnotes":         the_document_endnotes_section,        "glossary":         the_document_glossary_section,        "bibliography":     the_document_bibliography_section,        "bookindex":        the_document_bookindex_section,        "blurb":            the_document_blurb_section, -      /+ dom tail only +/ +      // dom tail only        "tail":             the_document_xml_dom_tail_section,      ];      string[][string] document_section_keys_sequenced = [ @@ -2853,7 +2766,7 @@ template docAbstraction() {        ret.doc_has      = doc_has;      }      return ret; -  }                                                                             /+ ← closed: abstract doc source +/ +  } // ← closed: abstract doc source    @system retStruct_txt_by_line_common_reset txt_by_line_common_reset_()(      int[string]     line_occur,      string[string]  an_object, @@ -2883,12 +2796,7 @@ template docAbstraction() {        an_object["lang"]               = "";        an_object["attrib"]             = (m["attrib"]) ? m["attrib"].to!string : "";        an_object["syntax"]             = (m["syntax"]) ? m["syntax"].to!string : ""; -      debug(codecurly) {                              // code (curly) open -        writefln( -          "* [code curly] %s", -          line -        ); -      } +      debug(codecurly) { writefln( "* [code curly] %s", line); }                              // code (curly) open        pith["block_is"]                = eN.blk_is.code;        pith["block_state"]             = eN.blk_state.on;        pith["block_delim"]             = eN.blk_delim.curly; @@ -2897,12 +2805,7 @@ template docAbstraction() {        an_object["syntax"]             = "";        an_object["attrib"]             = (m["attrib"]) ? m["attrib"].to!string : "";        an_object["lang"]               = (m["lang"]) ? m["lang"].to!string : ""; -      debug(poem) {                              // poem (curly) open -        writefln( -          "* [poem curly] %s", -          line -        ); -      } +      debug(poem) { writefln( "* [poem curly] %s", line); }                              // poem (curly) open        object_number_poem["start"]     = obj_cite_digits.object_number.to!string;        pith["block_is"]                = eN.blk_is.poem;        pith["block_state"]             = eN.blk_state.on; @@ -2913,12 +2816,7 @@ template docAbstraction() {        an_object["syntax"]             = "";        an_object["attrib"]             = (m["attrib"]) ? m["attrib"].to!string : "";        an_object["lang"]               = (m["lang"]) ? m["lang"].to!string : ""; -      debug(group) {                             // group (curly) open -        writefln( -          "* [group curly] %s", -          line -        ); -      } +      debug(group) { writefln( "* [group curly] %s", line); }                             // group (curly) open        pith["block_is"]                = eN.blk_is.group;        pith["block_state"]             = eN.blk_state.on;        pith["block_delim"]             = eN.blk_delim.curly; @@ -2927,12 +2825,7 @@ template docAbstraction() {        an_object["syntax"]             = "";        an_object["attrib"]             = (m["attrib"]) ? m["attrib"].to!string : "";        an_object["lang"]               = (m["lang"]) ? m["lang"].to!string : ""; -      debug(block) { -        writefln( -          "* [block curly] %s", -          line -        ); -      } +      debug(block) { writefln( "* [block curly] %s", line); }        pith["block_is"]                = eN.blk_is.block;        pith["block_state"]             = eN.blk_state.on;        pith["block_delim"]             = eN.blk_delim.curly; @@ -2941,29 +2834,19 @@ template docAbstraction() {        an_object["syntax"]             = "";        an_object["attrib"]             = m["attrib"].to!string;        an_object["lang"]               = m["lang"].to!string; -      debug(quote) { -        writefln( -          "* [quote curly] %s", -          line -        ); -      } +      debug(quote) { writefln( "* [quote curly] %s", line); }        pith["block_is"]                = eN.blk_is.quote;        pith["block_state"]             = eN.blk_state.on;        pith["block_delim"]             = eN.blk_delim.curly; -    } else if (auto m = line.matchFirst(rgx.block_curly_table_open)) {           /+ curly table open +/ -      debug(table) {                             // table (curly) open -        writefln( -          "* [table curly] %s", -          line -        ); -      } +    } else if (auto m = line.matchFirst(rgx.block_curly_table_open)) {           // curly table open +      debug(table) { writefln( "* [table curly] %s", line); }        dochas["table"] ++;        an_object["table_head"]         = m["attrib"].to!string;        an_object["block_type"]         = "curly";        pith["block_is"]                = eN.blk_is.table;        pith["block_state"]             = eN.blk_state.on;        pith["block_delim"]             = eN.blk_delim.curly; -    } else if (auto m = line.matchFirst(rgx.block_curly_table_special_markup)) { /+ table: special table block markup syntax! +/ +    } else if (auto m = line.matchFirst(rgx.block_curly_table_special_markup)) { // table: special table block markup syntax!        dochas["table"]++;        an_object["table_head"]         = m["attrib"].to!string;        an_object["block_type"]         = "special"; @@ -2975,12 +2858,7 @@ template docAbstraction() {        an_object["lang"]               = "";        an_object["attrib"]             = (m["attrib"]) ? m["attrib"].to!string : "";        an_object["syntax"]             = (m["syntax"]) ? m["syntax"].to!string : ""; -      debug(codetic) { -        writefln( -          "* [code tic] %s", -          line -        ); -      } +      debug(codetic) { writefln( "* [code tic] %s", line); }        pith["block_is"]                = eN.blk_is.code;        pith["block_state"]             = eN.blk_state.on;        pith["block_delim"]             = eN.blk_delim.tic; @@ -2989,12 +2867,7 @@ template docAbstraction() {        an_object["syntax"]             = "";        an_object["attrib"]             = (m["attrib"]) ? m["attrib"].to!string : "";        an_object["lang"]               = (m["lang"]) ? m["lang"].to!string : ""; -      debug(poem) { -        writefln( -          "* [poem tic] %s", -          line -        ); -      } +      debug(poem) { writefln( "* [poem tic] %s", line); }        object_number_poem["start"]     = obj_cite_digits.object_number.to!string;        pith["block_is"]                = eN.blk_is.poem;        pith["block_state"]             = eN.blk_state.on; @@ -3005,12 +2878,7 @@ template docAbstraction() {        an_object["syntax"]             = "";        an_object["attrib"]             = (m["attrib"]) ? m["attrib"].to!string : "";        an_object["lang"]               = (m["lang"]) ? m["lang"].to!string : ""; -      debug(group) { -        writefln( -          "* [group tic] %s", -          line -        ); -      } +      debug(group) { writefln( "* [group tic] %s", line); }        pith["block_is"]                = eN.blk_is.group;        pith["block_state"]             = eN.blk_state.on;        pith["block_delim"]             = eN.blk_delim.tic; @@ -3019,12 +2887,7 @@ template docAbstraction() {        an_object["syntax"]             = "";        an_object["attrib"]             = (m["attrib"]) ? m["attrib"].to!string : "";        an_object["lang"]               = (m["lang"]) ? m["lang"].to!string : ""; -      debug(block) { -        writefln( -          "* [block tic] %s", -          line -        ); -      } +      debug(block) { writefln( "* [block tic] %s", line); }        pith["block_is"]                = eN.blk_is.block;        pith["block_state"]             = eN.blk_state.on;        pith["block_delim"]             = eN.blk_delim.tic; @@ -3033,22 +2896,13 @@ template docAbstraction() {        an_object["syntax"]             = "";        an_object["attrib"]             = m["attrib"].to!string;        an_object["lang"]               = m["lang"].to!string; -      debug(quote) {                             // quote (tic) open -        writefln( -          "* [quote tic] %s", -          line -        ); +      debug(quote) { writefln( "* [quote tic] %s", line);                        // quote (tic) open        }        pith["block_is"]                = eN.blk_is.quote;        pith["block_state"]             = eN.blk_state.on;        pith["block_delim"]             = eN.blk_delim.tic; -    } else if (auto m = line.matchFirst(rgx.block_tic_table_open)) {             /+ tic table open +/ -      debug(table) {                             // table (tic) open -        writefln( -          "* [table tic] %s", -          line -        ); -      } +    } else if (auto m = line.matchFirst(rgx.block_tic_table_open)) {             // tic table open +      debug(table) { writefln( "* [table tic] %s", line); }        dochas["table"] ++;        an_object["table_head"]         = m["attrib"].to!string;        an_object["block_type"]         = "tic"; @@ -3073,32 +2927,24 @@ template docAbstraction() {      if (pith["block_is"] == eN.blk_is.quote){        if (pith["block_delim"] == eN.blk_delim.curly) {          if (line.matchFirst(rgx.block_curly_quote_close)) { -          debug(quote) { -            writeln(line); -          } +          debug(quote) { writeln(line); }            an_object[an_object_key]    = an_object[an_object_key].stripRight;            pith["block_is"]            = eN.blk_is.quote;            pith["block_state"]         = eN.blk_state.closing;            pith["block_delim"]         = eN.blk_delim.off;          } else { -          debug(quote) { -            writeln(line); -          } +          debug(quote) { writeln(line); }            an_object[an_object_key] ~= line ~= "\n";          }        } else if (pith["block_delim"] == eN.blk_delim.tic) {          if (line.matchFirst(rgx.block_tic_close)) { -          debug(quote) { -            writeln(line); -          } +          debug(quote) { writeln(line); }            an_object[an_object_key]    = an_object[an_object_key].stripRight;            pith["block_is"]            = eN.blk_is.quote;            pith["block_state"]         = eN.blk_state.closing;            pith["block_delim"]         = eN.blk_delim.off;          } else { -          debug(quote) { -            writeln(line); -          } +          debug(quote) { writeln(line); }            an_object[an_object_key] ~= line ~= "\n";          }        } @@ -3119,32 +2965,24 @@ template docAbstraction() {      if (pith["block_is"] == eN.blk_is.group) {        if (pith["block_delim"] == eN.blk_delim.curly) {          if (line.matchFirst(rgx.block_curly_group_close)) { -          debug(group) { -            writeln(line); -          } +          debug(group) { writeln(line); }            an_object[an_object_key]    = an_object[an_object_key].stripRight;            pith["block_is"]            = eN.blk_is.group;            pith["block_state"]         = eN.blk_state.closing;            pith["block_delim"]         = eN.blk_delim.off;          } else { -          debug(group) { -            writeln(line); -          } +          debug(group) { writeln(line); }            an_object[an_object_key] ~= line ~= "\n";          }        } else if (pith["block_delim"] == eN.blk_delim.tic) {          if (line.matchFirst(rgx.block_tic_close)) { -          debug(group) { -            writeln(line); -          } +          debug(group) { writeln(line); }            an_object[an_object_key]    = an_object[an_object_key].stripRight;            pith["block_is"]            = eN.blk_is.group;            pith["block_state"]         = eN.blk_state.closing;            pith["block_delim"]         = eN.blk_delim.off;          } else { -          debug(group) { -            writeln(line); -          } +          debug(group) { writeln(line); }            an_object[an_object_key] ~= line ~= "\n";          }        } @@ -3165,32 +3003,24 @@ template docAbstraction() {      if (pith["block_is"] == eN.blk_is.block) {        if (pith["block_delim"] == eN.blk_delim.curly) {          if (line.matchFirst(rgx.block_curly_block_close)) { -          debug(block) { -            writeln(line); -          } +          debug(block) { writeln(line); }            an_object[an_object_key]    = an_object[an_object_key].stripRight;            pith["block_is"]            = eN.blk_is.block;            pith["block_state"]         = eN.blk_state.closing;            pith["block_delim"]         = eN.blk_delim.off;          } else { -          debug(block) { -            writeln(line); -          } +          debug(block) { writeln(line); }            an_object[an_object_key] ~= line ~= "\n";          }        } else if (pith["block_delim"] == eN.blk_delim.tic) {          if (line.matchFirst(rgx.block_tic_close)) { -          debug(block) { -            writeln(line); -          } +          debug(block) { writeln(line); }            an_object[an_object_key]    = an_object[an_object_key].stripRight;            pith["block_is"]            = eN.blk_is.block;            pith["block_state"]         = eN.blk_state.closing;            pith["block_delim"]         = eN.blk_delim.off;          } else { -          debug(block) { -            writeln(line); -          } +          debug(block) { writeln(line); }            an_object[an_object_key] ~= line ~= "\n";          }        } @@ -3218,30 +3048,16 @@ template docAbstraction() {            if (an_object_key in an_object            || processing.length > 0) {              an_object[an_object_key]        = ""; -            debug(poem) { -              writefln( -                "* [poem curly] %s", -                line -              ); -            } +            debug(poem) { writefln( "* [poem curly] %s", line); }              if (processing.length > 0) {                an_object[an_object_key]      = processing["verse"];              }              debug(poem) {                writeln(__LINE__); -              writefln( -                "* %s %s", -                obj_cite_digits.object_number, -                line -              ); +              writefln( "* %s %s", obj_cite_digits.object_number, line);              }              if (an_object.length > 0) { -              debug(poem) { -                writeln( -                  obj_cite_digits.object_number, -                  an_object[an_object_key] -                ); -              } +              debug(poem) { writeln( obj_cite_digits.object_number, an_object[an_object_key]); }                an_object["is"]                                   = "verse";                TxtAndAnchorTagPlusHasFootnotesUrlsImages substantive_obj_misc_tuple                  = obj_im.obj_inline_markup_and_anchor_tags_and_misc(an_object, an_object_key, conf_make_meta, No._new_doc); @@ -3287,8 +3103,7 @@ template docAbstraction() {            if (pith["verse_new"] == eN.bi.on) {              verse_line = 1;              an_object[an_object_key]  = processing["verse"]; -            debug(poem) { -              writefln( +            debug(poem) { writefln(                  "* %s curly\n%s",                  obj_cite_digits.object_number,                  an_object[an_object_key] @@ -3336,20 +3151,12 @@ template docAbstraction() {        } else if (pith["block_delim"] == eN.blk_delim.tic) {          if (auto m = line.matchFirst(rgx.block_tic_close)) {            an_object[an_object_key] = "verse"; -          debug(poem) { -            writefln( -              "* [poem tic] %s", -              line -            ); -          } +          debug(poem) { writefln( "* [poem tic] %s", line); }            if (processing.length > 0) {              an_object[an_object_key]  = processing["verse"];            }            if (an_object.length > 0) { -            debug(poem) { -              writeln(__LINE__); -              writeln(obj_cite_digits.object_number, line); -            } +            debug(poem) { writeln(__LINE__); writeln(obj_cite_digits.object_number, line); }              processing.remove("verse");              an_object["is"]                                     = "verse";              TxtAndAnchorTagPlusHasFootnotesUrlsImages substantive_obj_misc_tuple @@ -3395,8 +3202,7 @@ template docAbstraction() {            if (pith["verse_new"] == eN.bi.on) {              verse_line = 1;              an_object[an_object_key]  = processing["verse"]; -            debug(poem) { -              writefln( +            debug(poem) { writefln(                  "* %s tic\n%s",                  obj_cite_digits.object_number,                  an_object[an_object_key] @@ -3461,9 +3267,7 @@ template docAbstraction() {      if ( pith["block_is"] == eN.blk_is.code) {        if (pith["block_delim"] == eN.blk_delim.curly) {          if (line.matchFirst(rgx.block_curly_code_close)) { -          debug(codecurly) { -            writeln(line); -          } +          debug(codecurly) { writeln(line); }            an_object[an_object_key] = an_object[an_object_key]              .replaceFirst(rgx.newline_eol_delimiter_only, "")              .stripRight; @@ -3471,16 +3275,12 @@ template docAbstraction() {            pith["block_state"]         = eN.blk_state.closing;            pith["block_delim"]         = eN.blk_delim.off;          } else { -          debug(codecurly) { -            writeln(line); -          } +          debug(codecurly) { writeln(line); }            an_object[an_object_key] ~= line ~= "\n";          }        } else if (pith["block_delim"] == eN.blk_delim.tic) {          if (line.matchFirst(rgx.block_tic_close)) { -          debug(codetic) { -            writeln(line); -          } +          debug(codetic) { writeln(line); }            an_object[an_object_key] = an_object[an_object_key]              .replaceFirst(rgx.newline_eol_delimiter_only, "")              .stripRight; @@ -3488,9 +3288,7 @@ template docAbstraction() {            pith["block_state"]         = eN.blk_state.closing;            pith["block_delim"]         = eN.blk_delim.off;          } else { -          debug(codetic) { -            writeln(line); -          } +          debug(codetic) { writeln(line); }            an_object[an_object_key] ~= line ~= "\n";          }        } @@ -3512,16 +3310,12 @@ template docAbstraction() {      if (pith["block_is"] == eN.blk_is.table) {        if (pith["block_delim"] == eN.blk_delim.curly) {          if (line.matchFirst(rgx.block_curly_table_close)) { -          debug(table) { -            writeln(line); -          } +          debug(table) { writeln(line); }            pith["block_is"]            = eN.blk_is.table;            pith["block_state"]         = eN.blk_state.closing;            pith["block_delim"]         = eN.blk_delim.off;          } else { -          debug(table) { -            writeln(line); -          } +          debug(table) { writeln(line); }            an_object[an_object_key] ~= line ~= "\n";          }        } else if (pith["block_delim"] == eN.blk_delim.curly_special) { @@ -3549,23 +3343,17 @@ template docAbstraction() {              }            }          } else { -          debug(table) { -            writeln(line); -          } +          debug(table) { writeln(line); }            an_object[an_object_key] ~= line ~= "\n";          }        } else if (pith["block_delim"] == eN.blk_delim.tic) {          if (line.matchFirst(rgx.block_tic_close)) { -          debug(table) { -            writeln(line); -          } +          debug(table) { writeln(line); }            pith["block_is"]            = eN.blk_is.table;            pith["block_state"]         = eN.blk_state.closing;            pith["block_delim"]         = eN.blk_delim.off;          } else { -          debug(table) { -            writeln(line); -          } +          debug(table) { writeln(line); }            an_object[an_object_key] ~= line ~= "\n";          }        } @@ -3617,12 +3405,8 @@ template docAbstraction() {      }      if (line.empty) {        debug { -        debug(biblioblock) { -          writeln("---"); -        } -        debug(biblioblockinclude) { -          writeln(biblio_entry_str_json.length); -        } +        debug(biblioblock) { writeln("---"); } +        debug(biblioblockinclude) { writeln(biblio_entry_str_json.length); }        }        if ((bib_entry == eN.bi.off)        && (biblio_entry_str_json.empty)) { @@ -3646,9 +3430,7 @@ template docAbstraction() {          biblio_entry_str_json = "";        }      } else if (line.matchFirst(rgx.biblio_tags)) { -      debug(biblioblock) { -        writeln(line); -      } +      debug(biblioblock) { writeln(line); }        auto bt = line.match(rgx.biblio_tags);        bib_entry = eN.bi.off;        st = bt.captures[1].to!string; @@ -3658,10 +3440,7 @@ template docAbstraction() {          ? (biblio_tag_map(st))          : st;        j.object[biblio_tag_name] = header_tag_value; -      debug(bibliounsortedcheckduplicates) { -        writeln(biblio_tag_name, ": ", header_tag_value); -        writeln("--"); -      } +      debug(bibliounsortedcheckduplicates) { writeln(biblio_tag_name, ": ", header_tag_value); writeln("--"); }        switch (biblio_tag_name) {        case "author_raw": // author_arr author (fn sn)          j["author_arr"] @@ -3699,8 +3478,7 @@ template docAbstraction() {          break;        }        auto s = j.toString(); -      debug(biblio1) { -        writefln( +      debug(biblio1) { writefln(            "* %s: %s\n%s",            biblio_tag_name,            biblio_tag_entry, @@ -3712,9 +3490,7 @@ template docAbstraction() {          writeln("ERROR", s, "%%");        }        if (!(match(line, rgx.comment))) { -        debug(biblioblockinclude) { -          writeln(line); -        } +        debug(biblioblockinclude) { writeln(line); }          biblio_entry_str_json = s;        } else {          biblio_entry_str_json = ""; @@ -3730,7 +3506,7 @@ template docAbstraction() {      }      return ret;    } -                                                                                /+ ↓ abstraction functions +/ +  // ↓ abstraction functions    @safe static string[string] object_reset()(string[string] an_object) {      an_object.remove("body_nugget");      an_object.remove("substantive"); @@ -3746,22 +3522,18 @@ template docAbstraction() {      static auto rgx = RgxI();      if (!(line.empty)) {        if (pith["no_ocn_multiple_objects"] == eN.bi.off) { -        /+ not multi-line object, check whether object_number is on or turned off +/ -        if (line.matchFirst(rgx.object_number_block_marks)) {                      /+ switch off object_number +/ +        // not multi-line object, check whether object_number is on or turned off +        if (line.matchFirst(rgx.object_number_block_marks)) {                      // switch off object_number            if (line.matchFirst(rgx.object_number_off_block)) {              pith["no_ocn_multiple_objects"]             = eN.bi.on;              pith["ocn"]                                 = eN.ocn.off; -            debug(ocnoff) { -              writeln(line); -            } +            debug(ocnoff) { writeln(line); }            }            if (line.matchFirst(rgx.object_number_off_block_dummy_heading)) {              pith["no_ocn_multiple_objects"]             = eN.bi.on;              pith["dummy_heading_multiple_objects"]      = eN.bi.on;              pith["ocn"]                                 = eN.ocn.off; -            debug(ocnoff) { -              writeln(line); -            } +            debug(ocnoff) { writeln(line); }            }          } else if (pith["no_ocn_multiple_objects"] == eN.bi.off) {              pith["dummy_heading_status"]                = eN.bi.off; @@ -3785,9 +3557,7 @@ template docAbstraction() {            pith["no_ocn_multiple_objects"]               = eN.bi.off;            pith["ocn"]                                   = eN.ocn.on;            pith["dummy_heading_status"]                  = eN.bi.off; -          debug(ocnoff) { -            writeln(line); -          } +          debug(ocnoff) { writeln(line); }          }        }      } @@ -4230,37 +4000,26 @@ template docAbstraction() {      B               opt_action,    ) {      static auto rgx = RgxI(); -    if (auto m = line.match(rgx.book_index_item)) {                                   /+ match book_index +/ -      debug(bookindexmatch) { -        writefln( +    if (auto m = line.match(rgx.book_index_item)) {                                   // match book_index +      debug(bookindexmatch) { writefln(            "* [bookindex] %s\n",            m["bookindex"].to!string,          );        }        an_object["bookindex_nugget"] = m.captures[1].to!string; -    } else if (auto m = line.match(rgx.book_index_item_open))  {                      /+ match open book_index +/ +    } else if (auto m = line.match(rgx.book_index_item_open))  {                      // match open book_index        pith["section"] = eN.sect.book_index;        if (opt_action.backmatter && opt_action.section_bookindex) {          book_idx_tmp = m.captures[1].to!string; -        debug(bookindexmatch) { -          writefln( -            "* [bookindex] %s\n", -            book_idx_tmp, -          ); -        } +        debug(bookindexmatch) { writefln( "* [bookindex] %s\n", book_idx_tmp,); }        } -    } else if (pith["section"] == eN.sect.book_index)  {                    /+ book_index flag set +/ +    } else if (pith["section"] == eN.sect.book_index)  {                    // book_index flag set        if (auto m = line.match(rgx.book_index_item_close))  {          pith["section"] = eN.sect.unset;          if (opt_action.backmatter          && opt_action.section_bookindex) {            an_object["bookindex_nugget"] = book_idx_tmp ~ m.captures[1].to!string; -          debug(bookindexmatch) { -            writefln( -              "* [bookindex] %s\n", -              book_idx_tmp, -            ); -          } +          debug(bookindexmatch) { writefln( "* [bookindex] %s\n", book_idx_tmp,); }          }          book_idx_tmp = "";        } else { @@ -4287,10 +4046,8 @@ template docAbstraction() {    ) {      static auto rgx = RgxI();      if ((_make_unmarked_headings.length > 2) -    && (pith["make_headings"] == eN.bi.off)) {                        /+ headings found +/ -      debug(headingsfound) { -        writeln(_make_unmarked_headings); -      } +    && (pith["make_headings"] == eN.bi.off)) {                        // headings found +      debug(headingsfound) { writeln(_make_unmarked_headings); }        debug(headingsfound) {          writeln(_make_unmarked_headings.length);          writeln(_make_unmarked_headings); @@ -4375,48 +4132,34 @@ template docAbstraction() {        && (line_occur["para"] == eN.bi.off        && line_occur["heading"] == eN.bi.off)        && pith["txt_is"] == eN.txt_is.off -    ) {                             /+ heading make set +/ +    ) {                             // heading make set        if (line.matchFirst(heading_match_rgx["h_B"])) {          line = "B~ " ~ line; -        debug(headingsfound) { -          writeln(line); -        } +        debug(headingsfound) { writeln(line); }        }        if (line.matchFirst(heading_match_rgx["h_C"])) {          line = "C~ " ~ line; -        debug(headingsfound) { -          writeln(line); -        } +        debug(headingsfound) { writeln(line); }        }        if (line.matchFirst(heading_match_rgx["h_D"])) {          line = "D~ " ~ line; -        debug(headingsfound) { -          writeln(line); -        } +        debug(headingsfound) { writeln(line); }        }        if (line.matchFirst(heading_match_rgx["h_1"])) {          line = "1~ " ~ line; -        debug(headingsfound) { -          writeln(line); -        } +        debug(headingsfound) { writeln(line); }        }        if (line.matchFirst(heading_match_rgx["h_2"])) {          line = "2~ " ~ line; -        debug(headingsfound) { -          writeln(line); -        } +        debug(headingsfound) { writeln(line); }        }        if (line.matchFirst(heading_match_rgx["h_3"])) {          line = "3~ " ~ line; -        debug(headingsfound) { -          writeln(line); -        } +        debug(headingsfound) { writeln(line); }        }        if (line.matchFirst(heading_match_rgx["h_4"])) {          line = "4~ " ~ line; -        debug(headingsfound) { -          writeln(line); -        } +        debug(headingsfound) { writeln(line); }        }      }      retStruct_flow_heading_make_set ret; @@ -4439,7 +4182,7 @@ template docAbstraction() {    ) {      static auto rgx = RgxI();      static auto mkup = InlineMarkup(); -    if (auto m = line.match(rgx.headings)) {                                      /+ heading match +/ +    if (auto m = line.match(rgx.headings)) {                                      // heading match        ++line_occur["heading"];        pith["txt_is"]           = eN.txt_is.heading;        if (line.match(rgx.heading_seg_and_above)) { @@ -4593,9 +4336,7 @@ template docAbstraction() {          an_object["lev_markup_number"] = lv["lv"].to!string;        }        an_object["dummy_heading_status"] = (pith["dummy_heading_status"] == eN.bi.off) ? "f" : "t"; -      debug(heading) { -        writeln(line.strip); -      } +      debug(heading) { writeln(line.strip); }      }      struct retStruct_flow_heading_matched {        string[string]  this_object; @@ -4630,7 +4371,7 @@ template docAbstraction() {      static auto rgx = RgxI();      if (line_occur["para"] == eN.bi.off) {        line = font_faces_line(line); -      /+ para matches +/ +      // para matches        pith["txt_is"]           = eN.txt_is.para;        an_object[an_object_key] ~= line;        indent = [ @@ -4639,28 +4380,20 @@ template docAbstraction() {        ];        bullet = false;        if (auto m = line.matchFirst(rgx.para_indent)) { -        debug(paraindent) { -          writeln(line); -        } +        debug(paraindent) { writeln(line); }          indent["hang_position"] = (m["indent"]).to!int;          indent["base_position"] = (m["indent"]).to!int;        } else if (line.matchFirst(rgx.para_bullet)) { -        debug(parabullet) { -          writeln(line); -        } +        debug(parabullet) { writeln(line); }          bullet = true;        } else if (auto m = line.matchFirst(rgx.para_indent_hang)) { -        debug(paraindenthang) { -          writeln(line); -        } +        debug(paraindenthang) { writeln(line); }          indent = [            "hang_position" : (m["hang"]).to!int,            "base_position" : (m["indent"]).to!int,          ];        } else if (auto m = line.matchFirst(rgx.para_bullet_indent)) { -        debug(parabulletindent) { -          writeln(line); -        } +        debug(parabulletindent) { writeln(line); }          indent = [            "hang_position" : (m["indent"]).to!int,            "base_position" : (m["indent"]).to!int, @@ -4738,9 +4471,7 @@ template docAbstraction() {      ulong col_num_;      ulong col_num_chk = 0;      foreach(idx_r, row; table_array) { -      debug(table_dev) { -        writeln("row ", idx_r); -      } +      debug(table_dev) { writeln("row ", idx_r); }        col_num_ = 0;        if (col_num == 0        || col_num < row.length) { @@ -4749,19 +4480,13 @@ template docAbstraction() {        if (col_num_chk == 0) {          col_num_chk = col_num;        } else if (col_num == 1) { -        debug(table_dev) { -          writeln("table note: "); -        } +        debug(table_dev) { writeln("table note: "); }        } else if (col_num_chk != col_num) { -        debug(table_dev) { -          writeln("warning irregular number of columns: ", col_num_chk, " != ", col_num); -        } +        debug(table_dev) { writeln("warning irregular number of columns: ", col_num_chk, " != ", col_num); }        } else {        }        foreach(idx_c, col; row) { -        debug(table_dev) { -          write(idx_c, ", "); -        } +        debug(table_dev) { write(idx_c, ", "); }          col_num_ = idx_c;          _table_substantive ~= col ~ mng.tc_s;          if (idx_r == 0 && table_object.table.heading) { @@ -4785,9 +4510,7 @@ template docAbstraction() {            }          }        } -      debug(table_dev) { -        writeln(""); -      } +      debug(table_dev) { writeln(""); }        if (col_num_chk > 0 && (col_num != col_num_chk)) {        } else if (col_num == col_num_chk){        } else { @@ -4799,9 +4522,7 @@ template docAbstraction() {        if (table_object.table.number_of_columns == 0) {          table_object.table.number_of_columns = (col_num).to!int;        } else { -        debug(table_dev) { -          writeln(table_object.table.number_of_columns, " != ", col_num); -        } +        debug(table_dev) { writeln(table_object.table.number_of_columns, " != ", col_num); }        }      }      if (table_object.table.number_of_columns == 0 @@ -4816,9 +4537,7 @@ template docAbstraction() {        }      } else if (table_object.table.number_of_columns      != table_object.table.column_widths.length) { -      debug(table_dev) { -        writeln(m.hit); // further logic required -      } +      debug(table_dev) { writeln(m.hit); } // further logic required        if (table_object.table.number_of_columns > table_object.table.column_widths.length) {          double col_w = (100.00 - (table_object.table.column_widths).sum)            / (table_object.table.number_of_columns - table_object.table.column_widths.length); @@ -4908,8 +4627,8 @@ template docAbstraction() {      }      return ret;    } -  /+ abstraction functions ↑ +/ -  /+ ↓ abstraction function emitters +/ +  // abstraction functions ↑ +  // ↓ abstraction function emitters    @safe pure struct OCNemitter {      int ocn_digit, ocn_object_number, ocn_on_, ocn_off_, ocn_bkidx, ocn_bkidx_;      string object_identifier; @@ -4958,7 +4677,6 @@ template docAbstraction() {      invariant() {      }    } -                                                                                /+ +/    @safe static struct ObjInlineMarkupMunge {      string[string] obj_txt;      int n_foot, n_foot_reg, n_foot_sp_asterisk, n_foot_sp_plus; @@ -4975,36 +4693,30 @@ template docAbstraction() {      }      @safe static auto images()(string obj_txt_in) {        static auto mng = InlineMarkup(); -      /+ url matched +/ +      // url matched        obj_txt_in = obj_txt_in.replaceAll(rgx.inline_notes_al_special, ""); // TODO reinstate when special footnotes are implemented -      if (obj_txt_in.match(rgx.smid_image_generic)) {                            /+ images with and without links +/ -        debug(images) { -          writeln("Image: ", obj_txt_in); -        } +      if (obj_txt_in.match(rgx.smid_image_generic)) {                            // images with and without links +        debug(images) { writeln("Image: ", obj_txt_in); }          if (obj_txt_in.match(rgx.smid_image_with_dimensions)) {            obj_txt_in = obj_txt_in              .replaceAll(rgx.smid_image_with_dimensions, ("$1" ~ mkup.img ~ "$2,w$3h$4 " ~ "$5"))              .replaceAll(rgx.smid_image_delimit, ("$1"                ~ mkup.lnk_o ~ "$2".strip ~ mkup.lnk_c                ~ mkup.url_o ~ mkup.url_c)); -          debug(images) { -            writeln("IMAGE with size: ", obj_txt_in); -          } +          debug(images) { writeln("IMAGE with size: ", obj_txt_in); }          } else if (obj_txt_in.match(rgx.smid_image)) {            obj_txt_in = obj_txt_in              .replaceAll(rgx.smid_image, ("$1" ~ mkup.img ~ "$2,w0h0" ~ "$3"))              .replaceAll(rgx.smid_image_delimit, ("$1"                ~ mkup.lnk_o ~ "$2".strip ~ mkup.lnk_c                ~ mkup.url_o ~ mkup.url_c)); -          debug(images) { -            writeln("IMAGE: ", obj_txt_in); // decide on representation -          } +          debug(images) { writeln("IMAGE: ", obj_txt_in); } // decide on representation          }        }        return obj_txt_in;      }      @safe TxtPlusHasFootnotes footnotes_endnotes_markup_and_number_or_stars()(string obj_txt_in, bool reset_note_numbers) { -      /+ endnotes (regular) +/ +      // endnotes (regular)        bool flg_notes_reg  = false;        bool flg_notes_star = false;        bool flg_notes_plus = false; @@ -5082,7 +4794,7 @@ template docAbstraction() {        bool urls = false;        bool images_without_dimensions = false;        tail = ""; -      /+ special endnotes +/ +      // special endnotes        obj_txt_in = obj_txt_in.replaceAll(          rgx.inline_notes_curly_sp_asterisk,          (mkup.en_a_o ~ "*" ~ " $1" ~ mkup.en_a_c) @@ -5092,14 +4804,14 @@ template docAbstraction() {            rgx.inline_notes_curly_sp_plus,            (mkup.en_a_o ~ "+" ~ " $1" ~ mkup.en_a_c)          ); -      /+ image matched +/ +      // image matched        if (obj_txt_in.match(rgx.smid_image_generic)) {          obj_txt_in = images(obj_txt_in);          if (obj_txt_in.match(rgx.smid_mod_image_without_dimensions)) {            images_without_dimensions = true;          }        } -      /+ url matched +/ +      // url matched        if (obj_txt_in.match(rgx.smid_inline_url)) {          urls = true;          obj_txt_in = obj_txt_in.links_and_images; @@ -5110,13 +4822,10 @@ template docAbstraction() {        }        TxtPlusHasFootnotes ftn = footnotes_endnotes_markup_and_number_or_stars(obj_txt_in, reset_note_numbers);        obj_txt_out = ftn.obj_txt; -      debug(footnotes) { -        writeln(obj_txt_out, tail); -      } +      debug(footnotes) { writeln(obj_txt_out, tail); }        obj_txt_out = obj_txt_out ~ tail;        debug(footnotesdone) { -        foreach(m; matchAll(obj_txt_out, -        (mkup.en_a_o ~ `\s*(.+?)` ~ mkup.en_a_c))) { +        foreach(m; matchAll(obj_txt_out, (mkup.en_a_o ~ `\s*(.+?)` ~ mkup.en_a_c))) {            writeln(m[1]);            writeln(m.hit);          } @@ -5437,8 +5146,8 @@ template docAbstraction() {            heading_num[3]                    = 0;            heading_number_auto_composite     = "";          } -        /+ auto_num_depth minimum 0 -           (1.) default 2 (1.1.1) max 3 (1.1.1.1) implement +/ +        // auto_num_depth minimum 0 +        // (1.) default 2 (1.1.1) max 3 (1.1.1.1) implement          if (            conf_make_meta.make.auto_num_top_lv            > obj_["lev_markup_number"].to!uint @@ -5547,9 +5256,7 @@ template docAbstraction() {            (heading_number_auto_composite.empty)              ? ""              : "seg_" ~ heading_number_auto_composite; -        debug(heading_number_auto) { -          writeln(heading_number_auto_composite); -        } +        debug(heading_number_auto) { writeln(heading_number_auto_composite); }          if ((!empty(heading_number_auto_composite))          && (obj_["lev_markup_number"].to!uint >= conf_make_meta.make.auto_num_top_lv)) {            munge_ = munge_ @@ -5596,7 +5303,6 @@ template docAbstraction() {        return munge_;      }    } -                                                                                /+ +/    struct ObjAttributes {      string[string] _obj_attrib;      @safe string obj_attributes()( @@ -5780,7 +5486,6 @@ template docAbstraction() {        return _obj_attrib;      }    } -                                                                                /+ +/    struct BookIndexNuggetHash {      string main_term, sub_term, sub_term_bits;      int object_number_offset, object_number_endpoint; @@ -5792,9 +5497,7 @@ template docAbstraction() {        OCNset obj_cite_digits,        S      tag_in_seg,      ) { -      debug(asserts) { -        static assert(is(typeof(obj_cite_digits.object_number) == int)); -      } +      debug(asserts) { static assert(is(typeof(obj_cite_digits.object_number) == int)); }        debug(bookindexraw) {          if (!bookindex_section.empty) {            writeln( @@ -5863,9 +5566,7 @@ template docAbstraction() {        auto mainkeys          = bookindex_unordered_hashes.byKey.array.sort().release;        foreach (mainkey; mainkeys) { -        debug(bookindex1) { -          writeln(mainkey); -        } +        debug(bookindex1) { writeln(mainkey); }          auto subkeys            = bookindex_unordered_hashes[mainkey].byKey.array.sort().release;          foreach (subkey; subkeys) { @@ -5919,9 +5620,7 @@ template docAbstraction() {        OCNset                   obj_cite_digits,        B                        opt_action,      ) { -      debug(asserts) { -        static assert(is(typeof(obj_cite_digits.object_number)             == int)); -      } +      debug(asserts) { static assert(is(typeof(obj_cite_digits.object_number) == int)); }        mixin spineNode;        mixin InternalMarkup;        static auto mkup = InlineMarkup(); @@ -6072,7 +5771,6 @@ template docAbstraction() {        return t;      }    } -                                                                                /+ +/    struct NotesSection {      string[string] object_notes;      int previous_count; @@ -6102,8 +5800,7 @@ template docAbstraction() {          (contents_am[cntr].text).matchAll(            rgx.inline_notes_al_special_char_note)        ) { -        debug(endnotes_build) { -          writeln( +        debug(endnotes_build) { writeln(              "{", mkup.ff_i, mkup.superscript, mkup.ff_o, m["char"], ".", mkup.ff_c, mkup.superscript, "}"              ~ mkup.mark_internal_site_lnk,              tag_in_seg["seg_lv4"], @@ -6131,8 +5828,7 @@ template docAbstraction() {          (contents_am[cntr].text).matchAll(            rgx.inline_notes_al_regular_number_note)        ) { -        debug(endnotes_build) { -          writeln( +        debug(endnotes_build) { writeln(              "{", mkup.ff_i, mkup.superscipt, mkup.ff_o, m["num"], ".", mkup.ff_c, mkup.superscipt, "}"              ~ mkup.mark_internal_site_lnk,              tag_in_seg["seg_lv4"], @@ -6280,7 +5976,6 @@ template docAbstraction() {        return t;      }    } -                                                                                /+ +/    struct Bibliography {      @system public retStruct_flow_bibliography flow_bibliography_()(        string[]    biblio_unsorted_incomplete, @@ -6318,10 +6013,9 @@ template docAbstraction() {        JSONValue[]   bib_arr_json      ) {        foreach (bibent; biblio_unordered) { -        /+ update bib to include deemed_author, needed for: -          sort_bibliography_array_by_deemed_author_year_title -          either: sort on multiple fields, or; create such sort field -        +/ +        // update bib to include deemed_author, needed for: +        // sort_bibliography_array_by_deemed_author_year_title +        // either: sort on multiple fields, or; create such sort field          JSONValue j = parseJSON(bibent);          if (!empty(j["fulltitle"].str)) {            if (!empty(j["author_raw"].str)) { @@ -6349,9 +6043,7 @@ template docAbstraction() {          })(biblio_unordered).array;        debug(bibliosorted) {          foreach (j; biblio_sorted_) { -          if (!empty(j["fulltitle"].str)) { -            writeln(j["sortby_deemed_author_year_title"]); -          } +          if (!empty(j["fulltitle"].str)) { writeln(j["sortby_deemed_author_year_title"]); }          }        }        return biblio_sorted_; @@ -6359,14 +6051,11 @@ template docAbstraction() {      @system void biblio_debug()(JSONValue[] biblio_sorted) {        debug(biblio0) {          foreach (j; biblio_sorted) { -          if (!empty(j["fulltitle"].str)) { -            writeln(j["sortby_deemed_author_year_title"]); -          } +          if (!empty(j["fulltitle"].str)) { writeln(j["sortby_deemed_author_year_title"]); }          }        }      }    } -                                                                                /+ +/    struct NodeStructureMetadata {      int lv, lv0, lv1, lv2, lv3, lv4, lv5, lv6, lv7;      int obj_cite_digit; @@ -6382,9 +6071,7 @@ template docAbstraction() {        int            ptr_,        string         is_      ) { -      debug(asserts) { -        static assert(is(typeof(obj_cite_digits.object_number) == int)); -      } +      debug(asserts) { static assert(is(typeof(obj_cite_digits.object_number) == int)); }        assert(is_ != "heading");        assert(obj_cite_digits.object_number.to!int >= 0);        assert(is_ != "heading");                          // should not be necessary @@ -6413,11 +6100,8 @@ template docAbstraction() {        comp_obj_location.metainfo.parent_ocn           = p_["object_number"];        comp_obj_location.metainfo.parent_lev_markup    = p_["lev_markup_number"];        debug(_node) { -        if (lev_markup_number.match(rgx.levels_numbered_headings)) { -          writeln("x ", _node.to!string); -        } else { -          writeln("- ", _node.to!string); -        } +        if (lev_markup_number.match(rgx.levels_numbered_headings)) { writeln("x ", _node.to!string); +        } else { writeln("- ", _node.to!string); }        }        assert(comp_obj_location.metainfo.parent_lev_markup >= 4);        assert(comp_obj_location.metainfo.parent_lev_markup <= 7); @@ -6456,14 +6140,13 @@ template docAbstraction() {        );        if (lev_markup_number.match(rgx.levels_numbered)) {          if (lev_markup_number.to!int == 0) { -          /+ TODO first hit (of two) with this assertion failure, check, fix & reinstate -          assert(obj_cite_digits.object_number.to!int == 1, -            "ERROR header lev markup number is: " ~ -            lev_markup_number.to!string ~ -            " obj_cite_digits.object_number.to!int should == 1 but is: " ~ -             obj_cite_digits.object_number.to!string ~ -            "\n" ~ _text); -          +/ +          // TODO first hit (of two) with this assertion failure, check, fix & reinstate +          // assert(obj_cite_digits.object_number.to!int == 1, +          //   "ERROR header lev markup number is: " ~ +          //   lev_markup_number.to!string ~ +          //   " obj_cite_digits.object_number.to!int should == 1 but is: " ~ +          //    obj_cite_digits.object_number.to!string ~ +          //   "\n" ~ _text);          }        }        switch (lev_markup_number.to!int) { @@ -6579,14 +6262,10 @@ template docAbstraction() {        tag_assoc[_comp_obj_heading_.tags.anchor_tag_html]["seg_lv4"]            = _comp_obj_heading_.tags.in_segment_html;        tag_assoc[_comp_obj_heading_.tags.segment_anchor_tag_epub]["seg_lv1to4"] = _comp_obj_heading_.tags.segment_anchor_tag_epub;        debug(_node) { -        if (lev_markup_number.match(rgx.levels_numbered_headings)) { -          writeln("* ", _node.to!string); -        } +        if (lev_markup_number.match(rgx.levels_numbered_headings)) { writeln("* ", _node.to!string); }        }        debug(nodeheading) { -        if (lev_markup_number.match(rgx.levels_numbered_headings)) { -          writeln("* ", _node.to!string); -        } +        if (lev_markup_number.match(rgx.levels_numbered_headings)) { writeln("* ", _node.to!string); }        }        assert(_comp_obj_heading_.metainfo.parent_lev_markup <= 7);        assert(_comp_obj_heading_.metainfo.parent_ocn >= 0); @@ -6623,8 +6302,8 @@ template docAbstraction() {      invariant() {      }    } -                                                                                /+ abstraction functions emitters ↑ +/ -                                                                                /+ ↓ abstraction functions assertions +/ +  // abstraction functions emitters ↑ +  // ↓ abstraction functions assertions    @safe pure void assertions_doc_structure()(      string[string]  an_object,      string          an_object_key, @@ -7195,7 +6874,7 @@ template docAbstraction() {        break;      }    } -  /+ abstraction functions assertions ↑ +/ +  // abstraction functions assertions ↑  }  template docSectKeysSeq() {    @safe auto docSectKeysSeq(string[][string] document_section_keys_sequenced) { | 
