diff options
Diffstat (limited to 'src/doc_reform')
| -rw-r--r-- | src/doc_reform/meta/metadoc_from_src.d | 377 | 
1 files changed, 189 insertions, 188 deletions
| diff --git a/src/doc_reform/meta/metadoc_from_src.d b/src/doc_reform/meta/metadoc_from_src.d index 620f884..da8949e 100644 --- a/src/doc_reform/meta/metadoc_from_src.d +++ b/src/doc_reform/meta/metadoc_from_src.d @@ -54,7 +54,7 @@  +/  module doc_reform.meta.metadoc_from_src;  template docAbstraction() { -                                                                                /+ ↓ abstraction imports +/ +  /+ ↓ abstraction imports +/    import      std.algorithm,      std.container, @@ -67,11 +67,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 { @@ -436,7 +436,88 @@ template docAbstraction() {      }      return tag_assoc;    } -                                                                                /+ ↓ abstract marked up document +/ +  struct retStruct_txt_by_line_common_reset { +    int[string]     line_occur; +    string[string]  this_object; +    uint[string]    pith; +  } +  struct retStruct_txt_by_line_block_start { +    uint[string]    pith; +    uint[string]    dochas; +    string[string]  object_number_poem; +  } +  struct retStruct_txt_by_line_block_generic { +    uint[string]    pith; +    string[string]  this_object; +  } +  struct retStruct_txt_by_line_block_poem { +    int             cntr; +    uint[string]    pith; +    string[string]  this_object; +  } +  struct retStruct_txt_by_line_block_biblio { +    uint[string]    pith; +    int             bib_entry; +    string          biblio_entry_str_json; +    string[]        biblio_arr_json; +  } +  struct retStruct_flow_book_index { +    string[string]  this_object; +    uint[string]    pith; +    string          book_idx_tmp; +  } +  struct retStruct_flow_heading_found { +    string[string]       heading_match_str; +    Regex!(char)[string] heading_match_rgx; +    uint[string]         pith; +  } +  struct retStruct_flow_heading_make_set { +    char[]          line; +    uint[string]    pith; +    string[string]  this_object; +  } +  struct retStruct_flow_para_match { +    uint[string]    pith; +    string[string]  this_object; +    string          this_object_key; +    int[string]     indent; +    bool            bullet; +    int[string]     line_occur; +  } +  struct retStruct_flow_table_array_munge { +    ObjGenericComposite table_object; +    string[][]          table_array; +  } +  struct retStruct_flow_table_of_contents_gather_headings { +    ObjGenericComposite[] the_document_toc_section; +    string[][string]      lev4_subtoc; +  } +  struct retStruct_flow_bibliography { +    JSONValue[] biblio_sorted; +    JSONValue[] bib_arr_json; +    string[]    biblio_unsorted_incomplete; +  } +  struct retStruct_flow_table_closed_make_special_notation_table { +    string[string]        this_object; +    ObjGenericComposite[] the_document_body_section; +    OCNset                obj_cite_digits; +    ObjGenericComposite   _comp_obj_heading; +    int                   cntr; +    uint[string]          pith; +  } +  struct retStruct_flow_block_flag_line_empty { +    string[string]           this_object; +    ObjGenericComposite[]    the_document_body_section; +    string[][string][string] bookindex_unordered_hashes; +    OCNset                   obj_cite_digits; +    ObjGenericComposite      comp_obj_heading; +    int                      cntr; +    uint[string]             pith; +  } +  struct retStruct_flow_table_substantive_munge { +    ObjGenericComposite  table_object; +    string               table_substantive; +  }    @system auto docAbstraction(CMM,Opt,Mf) (      char[][]           markup_sourcefile_content,      CMM                conf_make_meta, @@ -445,7 +526,7 @@ template docAbstraction() {      bool               _new_doc    ) {      static auto rgx = RgxI(); -                                                                                /+ ↓ abstraction init +/ +    /+ ↓ abstraction init +/      scope(success) {      }      scope(failure) { @@ -465,9 +546,6 @@ template docAbstraction() {        reset_note_numbers = true;        lev_anchor_tag = "";        anchor_tag = ""; -      // dom_structure_collapsed_tags_status        = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; -      // dom_structure_markedup_tags_status_buffer  = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; -      // dom_structure_collapsed_tags_status_buffer = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,];      }      mixin spineNode;      auto node_para_int_    = node_metadata_para_int; @@ -589,7 +667,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:"); @@ -630,8 +708,9 @@ template docAbstraction() {        }        _loopMarkupSrcByLineStruct ret;        srcDocLoopLineByLine_: -      foreach (line; markup_sourcefile_content) {                                 /+ ↓ markup document/text line by line +/ -                                                                                  // "line" variable can be empty but should never be null +      foreach (line; markup_sourcefile_content) { +        /+ ↓ markup document/text line by line +/ +        // "line" variable can be empty but should never be null          /+ scope +/          scope(exit) { }          scope(failure) { @@ -659,9 +738,10 @@ template docAbstraction() {              pith      = _get.pith;            }            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 +/ +        } 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 +/            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 @@ -1012,14 +1092,16 @@ template docAbstraction() {                }                continue;              } -          } else {                                                                /+ not within a block group +/ +          } else { +            /+ not within a block group +/              assert(                (pith["block_state"] == eN.blk_state.off)                || (pith["block_state"] == eN.blk_state.closing),                "block status: none or closed"              );              if (line.matchFirst(rgx.block_open)) { -              if (line.matchFirst(rgx.block_poem_open)) {                                    /+ poem to verse exceptions! +/ +              if (line.matchFirst(rgx.block_poem_open)) { +                /+ poem to verse exceptions! +/                  object_reset(an_object);                  processing.remove("verse");                  object_number_poem["start"] = obj_cite_digits.object_number.to!string; @@ -1033,7 +1115,8 @@ template docAbstraction() {                  }                }                continue; -            } else if (!line.empty) {                                             /+ line not empty - non blocks (headings, paragraphs) & closed blocks +/ +            } else if (!line.empty) { +              /+ line not empty - non blocks (headings, paragraphs) & closed blocks +/                assert(                  !line.empty,                  "line tested, line not empty surely:\n  \"" ~ line ~ "\"" @@ -1058,7 +1141,8 @@ template docAbstraction() {                }                if (line.matchFirst(rgx.book_index_item)                || line.matchFirst(rgx.book_index_item_open) -              || pith["section"] == eN.sect.book_index)  {                            /+ book_index +/ +              || pith["section"] == eN.sect.book_index)  { +                /+ book_index +/                  {                    auto _get = line.flow_book_index_(an_object, book_idx_tmp, pith, opt_action);                    { @@ -1067,9 +1151,11 @@ template docAbstraction() {                      book_idx_tmp      = _get.book_idx_tmp;                    }                  } -              } else {                                                                /+ not book_index +/ +              } else { +                /+ not book_index +/                  an_object_key = "body_nugget"; -                if (auto m = line.matchFirst(rgx.comment)) {                                 /+ matched comment +/ +                if (auto m = line.matchFirst(rgx.comment)) { +                  /+ matched comment +/                    debug(comment) {                      writeln(line);                    } @@ -1096,7 +1182,8 @@ template docAbstraction() {                    && pith["txt_is"] == eN.txt_is.off                  ) {                             /+ 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 +/ +                  && (pith["make_headings"] == eN.bi.off)) { +                    /+ heading found +/                      {                        auto _get = line.flow_heading_found_(heading_match_str, conf_make_meta.make.headings, heading_match_rgx, pith);                        { @@ -1110,7 +1197,8 @@ 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 +/                      {                        auto _get = line.flow_heading_make_set_(line_occur, heading_match_rgx, pith);                        { @@ -1126,7 +1214,8 @@ template docAbstraction() {                       - 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 +/ +                  if (line.matchFirst(rgx.headings)) { +                    /+ heading match +/                      line = line._doc_header_and_make_substitutions_(conf_make_meta);                      {                        auto _get = line.flow_heading_matched_( @@ -1143,7 +1232,8 @@ template docAbstraction() {                          pith      = _get.pith;                        }                      } -                  } else if (line_occur["para"] == eN.bi.off) {                              /+ para match +/ +                  } else if (line_occur["para"] == eN.bi.off) { +                    /+ para match +/                      an_object_key = "body_nugget";                      line = line                        ._doc_header_and_make_substitutions_(conf_make_meta) @@ -1160,13 +1250,15 @@ template docAbstraction() {                        }                      }                    } -                } else if (line_occur["heading"] > eN.bi.off) {                              /+ heading +/ +                } else if (line_occur["heading"] > eN.bi.off) { +                  /+ heading +/                    debug(heading) {                      writeln(line);                    }                    an_object[an_object_key] ~= line ~= "\n";                    ++line_occur["heading"]; -                } else if (line_occur["para"] > eN.bi.off) {                                 /+ paragraph +/ +                } else if (line_occur["para"] > eN.bi.off) { +                  /+ paragraph +/                    debug(para) {                      writeln(an_object_key, "-> ", line);                    } @@ -1177,7 +1269,8 @@ template docAbstraction() {                    ++line_occur["para"];                  }                } -            } else if (pith["block_state"] == eN.blk_state.closing) {             /+ line empty, with blocks flag +/ +            } else if (pith["block_state"] == eN.blk_state.closing) { +              /+ line empty, with blocks flag +/                {                  auto _get = line.flow_block_flag_line_empty_(                    an_object, @@ -1202,7 +1295,8 @@ template docAbstraction() {                    pith                       = _get.pith;                  }                } -            } else {                                                              /+ line.empty, post contents, empty variables: +/ +            } else { +              /+ line.empty, post contents, empty variables: +/                assert(                  line.empty,                  "\nline should be empty:\n  \"" @@ -1219,7 +1313,8 @@ 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"]); @@ -1245,7 +1340,8 @@ template docAbstraction() {                    lev_anchor_tag = anchor_tag;                    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) +/ +                  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) +/                      foreach (lv0_to_lv3_html_tag; lv0to3_tags) {                        tag_assoc[lv0_to_lv3_html_tag]["seg_lv4"] = anchor_tag;                      } @@ -1260,7 +1356,8 @@ template docAbstraction() {                    tag_assoc[anchor_tag]["seg_lv1to4"] = tag_in_seg["seg_lv1to4"];                  } 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 +/ +                  switch (an_object["lev_markup_number"].to!int) { +                  /+ names used for epub markup segments A to D +/                    case 0:                      segn = "_the_title";                      goto default; @@ -1416,9 +1513,9 @@ template docAbstraction() {                  ++cntr;                // } else { // could be useful to test line variable should be empty and never null                } -            }                                                                     // close else for line empty -          }                                                                       // close else for not the above -        }                                                                         // close after non code, other blocks or regular text +            } // 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) ? +/          if (the_document_body_section.length > 0) {            if (((the_document_body_section[$-1].metainfo.is_a == "para") @@ -1432,7 +1529,8 @@ template docAbstraction() {              && (the_document_body_section[$-1].metainfo.heading_lev_markup < 5)) {                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) +/ +            if (the_document_body_section[$-1].metainfo.is_a == "verse") { +              /+ 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( @@ -1446,7 +1544,8 @@ template docAbstraction() {                    }                  }                } -            } else {                                                                   /+ scan object for endnotes +/ +            } else { +              /+ 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 @@ -2577,12 +2676,12 @@ 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"; @@ -2744,18 +2843,18 @@ template docAbstraction() {      @safe auto doc_has() {        return DocHas_();      } -    struct retStruct { +    struct retStruct_docAbstraction {        ObjGenericComposite[][string] document_the;        DocHas_                       doc_has;      } -    retStruct ret; +    retStruct_docAbstraction ret;      {        ret.document_the = document_the;        ret.doc_has      = doc_has;      }      return ret;    }                                                                             /+ ← closed: abstract doc source +/ -  @system auto txt_by_line_common_reset_()( +  @system retStruct_txt_by_line_common_reset txt_by_line_common_reset_()(      int[string]     line_occur,      string[string]  an_object,      uint[string]    pith, @@ -2764,12 +2863,7 @@ template docAbstraction() {      line_occur["para"]                                  = eN.bi.off;      pith["txt_is"]                                      = eN.txt_is.off;      an_object                                           = an_object.object_reset; -    struct retStruct { -      int[string]     line_occur; -      string[string]  this_object; -      uint[string]    pith; -    } -    retStruct ret; +    retStruct_txt_by_line_common_reset ret;      {        ret.line_occur  = line_occur;        ret.this_object = an_object; @@ -2777,7 +2871,7 @@ template docAbstraction() {      }      return ret;    } -  @safe auto txt_by_line_block_start()( +  @safe retStruct_txt_by_line_block_start txt_by_line_block_start()(      char[]         line,      uint[string]   pith,      uint[string]   dochas, @@ -2962,12 +3056,7 @@ template docAbstraction() {        pith["block_state"]             = eN.blk_state.on;        pith["block_delim"]             = eN.blk_delim.tic;      } -    struct retStruct { -      uint[string]    pith; -      uint[string]    dochas; -      string[string]  object_number_poem; -    } -    retStruct ret; +    retStruct_txt_by_line_block_start ret;      {        ret.pith               = pith;        ret.dochas             = dochas; @@ -2975,7 +3064,7 @@ template docAbstraction() {      }      return ret;    } -  @safe auto txt_by_line_block_quote()( +  @safe retStruct_txt_by_line_block_generic txt_by_line_block_quote()(      char[]          line,      string[string]  an_object,      uint[string]    pith, @@ -3014,18 +3103,14 @@ template docAbstraction() {          }        }      } -    struct retStruct { -      uint[string]    pith; -      string[string]  this_object; -    } -    retStruct ret; +    retStruct_txt_by_line_block_generic ret;      {        ret.pith        = pith;        ret.this_object = an_object;      }      return ret;    } -  @safe auto txt_by_line_block_group()( +  @safe retStruct_txt_by_line_block_generic txt_by_line_block_group()(      char[]          line,      string[string]  an_object,      uint[string]    pith, @@ -3064,18 +3149,14 @@ template docAbstraction() {          }        }      } -    struct retStruct { -      uint[string]    pith; -      string[string]  this_object; -    } -    retStruct ret; +    retStruct_txt_by_line_block_generic ret;      {        ret.pith        = pith;        ret.this_object = an_object;      }      return ret;    } -  @safe auto txt_by_line_block_block()( +  @safe retStruct_txt_by_line_block_generic txt_by_line_block_block()(      char[]          line,      string[string]  an_object,      uint[string]    pith, @@ -3114,18 +3195,14 @@ template docAbstraction() {          }        }      } -    struct retStruct { -      uint[string]    pith; -      string[string]  this_object; -    } -    retStruct ret; +    retStruct_txt_by_line_block_generic ret;      {        ret.pith        = pith;        ret.this_object = an_object;      }      return ret;    } -  @safe auto txt_by_line_block_poem(CMM)( +  @safe retStruct_txt_by_line_block_poem txt_by_line_block_poem(CMM)(      char[]          line,      string[string]  an_object,      uint[string]    pith, @@ -3367,12 +3444,7 @@ template docAbstraction() {          }        }      } -    struct retStruct { -      int             cntr; -      uint[string]    pith; -      string[string]  this_object; -    } -    retStruct ret; +    retStruct_txt_by_line_block_poem ret;      {        ret.cntr        = cntr;        ret.pith        = pith; @@ -3380,7 +3452,7 @@ template docAbstraction() {      }      return ret;    } -  @safe auto txt_by_line_block_code()( +  @safe retStruct_txt_by_line_block_generic txt_by_line_block_code()(      char[]          line,      string[string]  an_object,      uint[string]    pith, @@ -3423,11 +3495,7 @@ template docAbstraction() {          }        }      } -    struct retStruct { -      uint[string]    pith; -      string[string]  this_object; -    } -    retStruct ret; +    retStruct_txt_by_line_block_generic ret;      {        ret.pith        = pith;        ret.this_object = an_object; @@ -3502,12 +3570,12 @@ template docAbstraction() {          }        }      } -    struct retStruct { +    struct retStruct_txt_by_line_block_table {        CMM             conf_make_meta;        uint[string]    pith;        string[string]  this_object;      } -    retStruct ret; +    retStruct_txt_by_line_block_table ret;      {        ret.conf_make_meta = conf_make_meta,        ret.pith           = pith; @@ -3515,7 +3583,7 @@ template docAbstraction() {      }      return ret;    } -  @system auto txt_by_line_block_biblio( +  @system retStruct_txt_by_line_block_biblio txt_by_line_block_biblio(      char[]                  line,      uint[string] pith,      int          bib_entry, @@ -3653,13 +3721,7 @@ template docAbstraction() {        }        header_tag_value        = "";      } -    struct retStruct { -      uint[string]    pith; -      int             bib_entry; -      string          biblio_entry_str_json; -      string[]        biblio_arr_json; -    } -    retStruct ret; +    retStruct_txt_by_line_block_biblio ret;      {        ret.pith                  = pith;        ret.bib_entry             = bib_entry; @@ -3771,7 +3833,7 @@ template docAbstraction() {      }      return line;    } -  @system auto flow_table_closed_make_special_notation_table_(CMM)( +  @system retStruct_flow_table_closed_make_special_notation_table flow_table_closed_make_special_notation_table_(CMM)(      char[]                line,      string[string]        an_object,      ObjGenericComposite[] the_document_body_section, @@ -3816,15 +3878,7 @@ template docAbstraction() {      object_reset(an_object);      processing.remove("verse");      ++cntr; -    struct retStruct { -      string[string]        this_object; -      ObjGenericComposite[] the_document_body_section; -      OCNset                obj_cite_digits; -      ObjGenericComposite   _comp_obj_heading; -      int                   cntr; -      uint[string]          pith; -    } -    retStruct ret; +    retStruct_flow_table_closed_make_special_notation_table ret;      {        ret.this_object               = an_object;        ret.the_document_body_section = the_document_body_section; @@ -3835,7 +3889,7 @@ template docAbstraction() {      }      return ret;    } -  @system auto flow_block_flag_line_empty_(B,CMM,Ts)( +  @system retStruct_flow_block_flag_line_empty flow_block_flag_line_empty_(B,CMM,Ts)(      char[]                   line,      string[string]           an_object,      B                        bookindex_extract_hash, @@ -4156,16 +4210,7 @@ template docAbstraction() {          ++cntr;        }      } -    struct retStruct { -      string[string]           this_object; -      ObjGenericComposite[]    the_document_body_section; -      string[][string][string] bookindex_unordered_hashes; -      OCNset                   obj_cite_digits; -      ObjGenericComposite      comp_obj_heading; -      int                      cntr; -      uint[string]             pith; -    } -    retStruct ret; +    retStruct_flow_block_flag_line_empty ret;      {        ret.this_object                = an_object;        ret.the_document_body_section  = the_document_body_section; @@ -4177,7 +4222,7 @@ template docAbstraction() {      }      return ret;    } -  @system auto flow_book_index_(B)( +  @system retStruct_flow_book_index flow_book_index_(B)(      char[]          line,      string[string]  an_object,      string          book_idx_tmp, @@ -4225,12 +4270,7 @@ template docAbstraction() {          }        }      } -    struct retStruct { -      string[string]  this_object; -      uint[string]    pith; -      string          book_idx_tmp; -    } -    retStruct ret; +    retStruct_flow_book_index ret;      {        ret.this_object    = an_object;        ret.pith           = pith; @@ -4238,7 +4278,7 @@ template docAbstraction() {      }      return ret;    } -  @safe auto flow_heading_found_()( +  @safe retStruct_flow_heading_found flow_heading_found_()(      char[]                line,      string[string]        heading_match_str,      string[]              _make_unmarked_headings, @@ -4317,12 +4357,7 @@ template docAbstraction() {        }        pith["make_headings"] = eN.bi.on;      } -    struct retStruct { -      string[string]       heading_match_str; -      Regex!(char)[string] heading_match_rgx; -      uint[string]         pith; -    } -    retStruct ret; +    retStruct_flow_heading_found ret;      {        ret.heading_match_str = heading_match_str;        ret.heading_match_rgx = heading_match_rgx; @@ -4330,7 +4365,7 @@ template docAbstraction() {      }      return ret;    } -  @safe auto flow_heading_make_set_()( +  @safe retStruct_flow_heading_make_set flow_heading_make_set_()(                 char[]                line,                 int[string]           line_occur,      return ref Regex!(char)[string]  heading_match_rgx, @@ -4384,12 +4419,7 @@ template docAbstraction() {          }        }      } -    struct retStruct { -      char[]          line; -      uint[string]    pith; -      string[string]  this_object; -    } -    retStruct ret; +    retStruct_flow_heading_make_set ret;      {        ret.line           = line;        ret.pith           = pith; @@ -4567,7 +4597,7 @@ template docAbstraction() {          writeln(line.strip);        }      } -    struct retStruct { +    struct retStruct_flow_heading_matched {        string[string]  this_object;        int[string]     line_occur;        string          an_object_key; @@ -4576,7 +4606,7 @@ template docAbstraction() {        uint[string]    pith;        CMM             conf_make_meta;      } -    retStruct ret; +    retStruct_flow_heading_matched ret;      {        ret.this_object    = an_object;        ret.line_occur     = line_occur; @@ -4588,7 +4618,7 @@ template docAbstraction() {      }      return ret;    } -  @safe auto flow_para_match_()( +  @safe retStruct_flow_para_match flow_para_match_()(      char[]         line,      string[string]  an_object,      string          an_object_key, @@ -4639,15 +4669,7 @@ template docAbstraction() {        }        ++line_occur["para"];      } -    struct retStruct { -      uint[string]    pith; -      string[string]  this_object; -      string          this_object_key; -      int[string]     indent; -      bool            bullet; -      int[string]     line_occur; -    } -    retStruct ret; +    retStruct_flow_para_match ret;      {        ret.pith            = pith;        ret.this_object     = an_object; @@ -4705,7 +4727,7 @@ template docAbstraction() {      }      return table_object;    } -  @safe auto flow_table_array_munge()( +  @safe retStruct_flow_table_array_munge flow_table_array_munge()(      ObjGenericComposite  table_object,      string[][]           table_array,    ) { @@ -4825,18 +4847,14 @@ template docAbstraction() {          _table_substantive);      }      table_object.text = _table_substantive; -    struct retStruct { -      ObjGenericComposite table_object; -      string[][]          table_array; -    } -    retStruct ret; +    retStruct_flow_table_array_munge ret;      {        ret.table_object      = table_object;        ret.table_array       = table_array;      }      return ret;    } -  @system auto flow_table_substantive_munge()( +  @system retStruct_flow_table_substantive_munge flow_table_substantive_munge()(      ObjGenericComposite  table_object,      string               table_substantive,    ) { @@ -4856,18 +4874,14 @@ template docAbstraction() {          _table_array = _get.table_array; // what do you do with this? how is this passed down?        }      } -    struct retStruct { -      ObjGenericComposite  table_object; -      string               table_substantive; -    } -    retStruct ret; +    retStruct_flow_table_substantive_munge ret;      {        ret.table_object      = table_object;        ret.table_substantive = table_substantive; // has anything been changed here?      }      return ret;    } -  @system auto flow_table_substantive_munge_special()( +  @system retStruct_flow_table_substantive_munge flow_table_substantive_munge_special()(      ObjGenericComposite  table_object,      string               table_substantive,    ) { @@ -4887,19 +4901,15 @@ template docAbstraction() {          _table_array = _get.table_array;        }      } -    struct retStruct { -      ObjGenericComposite  table_object; -      string               table_substantive; -    } -    retStruct ret; +    retStruct_flow_table_substantive_munge ret;      {        ret.table_object      = table_object;        ret.table_substantive = table_substantive;      }      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; @@ -5311,7 +5321,7 @@ template docAbstraction() {       heading_toc_ = (m.post).replaceAll(rgx.inline_notes_curly_gen, "");       return heading_toc_;      }; -    @safe auto flow_table_of_contents_gather_headings(CMM)( // +    @safe retStruct_flow_table_of_contents_gather_headings flow_table_of_contents_gather_headings(CMM)( //        string[string]         obj_,        CMM                    conf_make_meta,        string[string]         tag_in_seg, @@ -5394,11 +5404,7 @@ template docAbstraction() {        default:          break;        } -      struct retStruct { -        ObjGenericComposite[] the_document_toc_section; -        string[][string]      lev4_subtoc; -      } -      retStruct ret; +      retStruct_flow_table_of_contents_gather_headings ret;        {          ret.the_document_toc_section = the_document_toc_section;          ret.lev4_subtoc              = lev4_subtoc; @@ -6276,7 +6282,7 @@ template docAbstraction() {    }                                                                                  /+ +/    struct Bibliography { -    @system public auto flow_bibliography_()( +    @system public retStruct_flow_bibliography flow_bibliography_()(        string[]    biblio_unsorted_incomplete,        JSONValue[] bib_arr_json      ) { @@ -6299,12 +6305,7 @@ template docAbstraction() {            cntr++;          }        } -      struct retStruct { -        JSONValue[] biblio_sorted; -        JSONValue[] bib_arr_json; -        string[]    biblio_unsorted_incomplete; -      } -      retStruct ret; +      retStruct_flow_bibliography ret;        {          ret.biblio_sorted  = biblio_sorted__;          ret.bib_arr_json  = bib_arr_json; @@ -7194,8 +7195,8 @@ template docAbstraction() {        break;      }    } -                                                                                /+ abstraction functions assertions ↑ +/ -}                                                                               /+ ← closed: template docAbstraction +/ +  /+ abstraction functions assertions ↑ +/ +}  template docSectKeysSeq() {    @safe auto docSectKeysSeq(string[][string] document_section_keys_sequenced) {      struct doc_sect_keys_seq { | 
