diff options
| author | Ralph Amissah <ralph.amissah@gmail.com> | 2020-05-04 15:16:25 -0400 | 
|---|---|---|
| committer | Ralph Amissah <ralph.amissah@gmail.com> | 2020-05-20 11:27:26 -0400 | 
| commit | 673aea9d0099343289aa7091f6622133a57e1843 (patch) | |
| tree | 514bf9480d5219e55a1d9b201971eac85918722d /src | |
| parent | renaming (diff) | |
doc abstraction, object numbering and dummy headings
Diffstat (limited to 'src')
| -rw-r--r-- | src/doc_reform/meta/metadoc_from_src.d | 222 | 
1 files changed, 116 insertions, 106 deletions
| diff --git a/src/doc_reform/meta/metadoc_from_src.d b/src/doc_reform/meta/metadoc_from_src.d index 1ae2e01..8d07d48 100644 --- a/src/doc_reform/meta/metadoc_from_src.d +++ b/src/doc_reform/meta/metadoc_from_src.d @@ -32,6 +32,13 @@ template docAbstraction() {          on,          closing,        } +      enum ocn { +        off, +        on, +        closing, +        bkidx, +        reset, +      }        enum sect {          unset,          head, @@ -72,8 +79,7 @@ template docAbstraction() {      h_text_5, // extra level, drop      content_non_header    } // header section A-D; header text 1-4 -  enum OCNstatus { on, off, bkidx, closing, reset, } -  enum OCN_off_block_status { off, on } +  enum Status { off, on, }    enum OCNtype { ocn, non, bkidx, }    /+ biblio variables +/    string biblio_tag_name, biblio_tag_entry, st; @@ -400,11 +406,14 @@ template docAbstraction() {        "images"            : 0,      ];      auto obj_type_status = flags_type_init; -    int[string] track_state = [ -      "section" : 0, -      "block"   : 0, -      "obj"     : 0, -      "ocn"     : 0, +    int[string] pith = [ +      "ocn"                       : 1, +      "section"                   : 0, +      "block"                     : 0, +      "obj"                       : 0, +      "dummy_heading_status"      : 0, +      "no_ocn_multiple_objects"   : 0, +      "heading_multiple_objects"  : 0,      ];      string[string] object_number_poem = [        "start" : "", @@ -544,7 +553,7 @@ template docAbstraction() {          }        }        if (!line.empty) { -        obj_type_status = line._check_ocn_status_(obj_type_status); +        pith = line._check_ocn_status_(pith);        }        if (obj_type_status["code"] == eN.tri.on) {          /+ block object: code +/ @@ -555,15 +564,15 @@ template docAbstraction() {                                                                                  /+ 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) -        || (track_state["section"] == eN.sect.bibliography +        || (pith["section"] == eN.sect.bibliography            && ((!(line.matchFirst(rgx.heading_glossary)))            && (!(line.matchFirst(rgx.heading_blurb)))            && (!(line.matchFirst(rgx.heading)))            && (!(line.matchFirst(rgx.comment)))))          ) { -          track_state["section"] = eN.sect.bibliography; +          pith["section"] = eN.sect.bibliography;            if (opt_action.backmatter && opt_action.section_biblio) { -            line.flow_txt_block_biblio(obj_type_status, bib_entry, biblio_entry_str_json, biblio_arr_json, track_state); +            line.flow_txt_block_biblio(obj_type_status, bib_entry, biblio_entry_str_json, biblio_arr_json, pith);              debug(bibliobuild) {                writeln("-  ", biblio_entry_str_json);                writeln("-> ", biblio_arr_json.length); @@ -571,7 +580,7 @@ template docAbstraction() {            }            continue;          } else if (line.matchFirst(rgx.heading_glossary) -        || (track_state["section"] == eN.sect.glossary +        || (pith["section"] == eN.sect.glossary            && ((!(line.matchFirst(rgx.heading_biblio)))            && (!(line.matchFirst(rgx.heading_blurb)))            && (!(line.matchFirst(rgx.heading))) @@ -582,7 +591,7 @@ template docAbstraction() {              writeln(__LINE__);              writeln(line);            } -          track_state["section"] = eN.sect.glossary; +          pith["section"] = eN.sect.glossary;            if (opt_action.backmatter && opt_action.section_glossary) {              indent=[                "hang_position" : 0, @@ -662,17 +671,17 @@ template docAbstraction() {                comp_obj_para.attrib.bullet                 = bullet;                the_glossary_section                        ~= comp_obj_para;              } -            obj_type_status["ocn_status"] = OCNstatus.on; +            pith["ocn"] = eN.ocn.on;            }            continue;          } else if (line.matchFirst(rgx.heading_blurb) -        || (track_state["section"] == eN.sect.blurb +        || (pith["section"] == eN.sect.blurb            && ((!(line.matchFirst(rgx.heading_glossary)))            && (!(line.matchFirst(rgx.heading_biblio)))            && (!(line.matchFirst(rgx.heading)))            && (!(line.matchFirst(rgx.comment)))))          ) { -          track_state["section"] = eN.sect.blurb; +          pith["section"] = eN.sect.blurb;            debug(blurb) {              writeln(__LINE__);              writeln(line); @@ -809,7 +818,7 @@ template docAbstraction() {                comp_obj_para.attrib.bullet                 = bullet;                the_blurb_section                           ~= comp_obj_para;              } -            obj_type_status["ocn_status"] = OCNstatus.on; +            pith["ocn"] = eN.ocn.on;            }            continue;          } else if (obj_type_status["quote"] == eN.tri.on) {                          /+ within block object: quote +/ @@ -837,10 +846,10 @@ template docAbstraction() {            an_object = line.flow_txt_block_block(an_object, obj_type_status);            continue;          } else if (obj_type_status["poem"] == eN.tri.on) {                           /+ within block object: poem +/ -          an_object = line.flow_txt_block_poem(an_object, obj_type_status, cntr, object_number_poem, conf_make_meta, tag_in_seg); +          an_object = line.flow_txt_block_poem(an_object, obj_type_status, pith, cntr, object_number_poem, conf_make_meta, tag_in_seg);            continue;          } else if (obj_type_status["table"] == eN.tri.on) {                          /+ within block object: table +/ -          an_object = line.flow_txt_block_table(an_object, obj_type_status, conf_make_meta); +          an_object = line.flow_txt_block_table(an_object, obj_type_status, pith, conf_make_meta);            continue;          } else {                                                                /+ not within a block group +/            assert( @@ -876,15 +885,15 @@ template docAbstraction() {                assert(                  line.matchFirst(rgx.book_index_item)                  || line.matchFirst(rgx.book_index_item_open) -                || track_state["section"] == eN.sect.book_index, +                || pith["section"] == eN.sect.book_index,                  "\nblocks closed, unless followed by book index, non-matching line:\n  \""                  ~ line ~ "\""                );              }              if (line.matchFirst(rgx.book_index_item)              || line.matchFirst(rgx.book_index_item_open) -            || track_state["section"] == eN.sect.book_index)  {                              /+ book_index +/ -              an_object = line.flow_book_index_(an_object, book_idx_tmp, obj_type_status, track_state, opt_action); +            || pith["section"] == eN.sect.book_index)  {                            /+ book_index +/ +              an_object = line.flow_book_index_(an_object, book_idx_tmp, obj_type_status, pith, opt_action);              } else {                                                                       /+ not book_index +/                an_object_key="body_nugget";                if (auto m = line.matchFirst(rgx.comment)) {                                 /+ matched comment +/ @@ -933,7 +942,7 @@ template docAbstraction() {                      collapsed_lev,                      obj_type_status,                      conf_make_meta, -                    track_state, +                    pith,                    );                  } else if (line_occur["para"] == eN.bi.off) {                              /+ para match +/                    an_object_key="body_nugget"; @@ -969,6 +978,7 @@ template docAbstraction() {                comp_obj_heading,                cntr,                obj_type_status, +              pith,                object_number_poem,                conf_make_meta,                tag_in_seg, @@ -991,8 +1001,8 @@ template docAbstraction() {              if ((obj_type_status["heading"] == eN.bi.on)              && (line_occur["heading"] > eN.bi.off)) {                                      /+ heading object (current line empty) +/                obj_cite_digits = (an_object["lev_markup_number"].to!int == 0) -              ? ocn_emit(OCNstatus.reset) -              : ocn_emit(obj_type_status["ocn_status"]); +              ? ocn_emit(eN.ocn.reset) +              : ocn_emit(pith["ocn"]);                an_object["is"] = "heading";                an_object_key="body_nugget";                TxtAndAnchorTagPlusHasFootnotesUrlsImages substantive_object_and_anchor_tags_tuple @@ -1115,9 +1125,9 @@ template docAbstraction() {                /+ paragraph object (current line empty) +/                /+ repeated character paragraph separator +/                if ((an_object[an_object_key].to!string).matchFirst(rgx.repeated_character_line_separator)) { -                obj_type_status["ocn_status"]                          = OCNstatus.off; +                pith["ocn"] = eN.ocn.off;                } -              obj_cite_digits = ocn_emit(obj_type_status["ocn_status"]); +              obj_cite_digits = ocn_emit(pith["ocn"]);                an_object["bookindex_nugget"]                  = ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : "";                bookindex_unordered_hashes @@ -1186,7 +1196,7 @@ template docAbstraction() {          && (the_document_body_section.length > previous_length)) {            if ((the_document_body_section[$-1].metainfo.is_a == "heading")            && (the_document_body_section[$-1].metainfo.heading_lev_markup < 5)) { -            track_state["section"] = eN.sect.unset; +            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) +/              foreach (i; previous_length .. the_document_body_section.length) { @@ -1996,7 +2006,7 @@ template docAbstraction() {              writeln(obj.text);            }            if (obj.metainfo.heading_lev_markup == 1) { -            obj_cite_digits         = ocn_emit(OCNstatus.on); +            obj_cite_digits         = ocn_emit(eN.ocn.on);              obj.metainfo.ocn        = obj_cite_digits.object_number;              obj.metainfo.identifier = obj_cite_digits.identifier;            } @@ -2029,7 +2039,7 @@ template docAbstraction() {              writeln(obj.text);            }            if (obj.metainfo.heading_lev_markup == 1) { -            obj_cite_digits         = ocn_emit(OCNstatus.on); +            obj_cite_digits         = ocn_emit(eN.ocn.on);              obj.metainfo.ocn        = obj_cite_digits.object_number;              obj.metainfo.identifier = obj_cite_digits.identifier;            } @@ -2051,7 +2061,7 @@ template docAbstraction() {            }            obj = obj.obj_heading_ancestors(lv_ancestors_txt);          } else if (obj.metainfo.is_a == "glossary" && !(obj.text.empty)) { -          obj_cite_digits         = ocn_emit(OCNstatus.on); +          obj_cite_digits         = ocn_emit(eN.ocn.on);            obj.metainfo.ocn        = obj_cite_digits.object_number;            obj.metainfo.identifier = obj_cite_digits.identifier;          } @@ -2066,7 +2076,7 @@ template docAbstraction() {              writeln(obj.text);            }            if (obj.metainfo.heading_lev_markup == 1) { -            obj_cite_digits         = ocn_emit(OCNstatus.on); +            obj_cite_digits         = ocn_emit(eN.ocn.on);              obj.metainfo.ocn        = obj_cite_digits.object_number;              obj.metainfo.identifier = obj_cite_digits.identifier;            } @@ -2088,7 +2098,7 @@ template docAbstraction() {            }            obj = obj.obj_heading_ancestors(lv_ancestors_txt);          } else if (obj.metainfo.is_a == "bibliography") { -          obj_cite_digits         = ocn_emit(OCNstatus.on); +          obj_cite_digits         = ocn_emit(eN.ocn.on);            obj.metainfo.ocn        = obj_cite_digits.object_number;            obj.metainfo.identifier = obj_cite_digits.identifier;          } @@ -2110,7 +2120,7 @@ template docAbstraction() {              segnames_0_to_4 ~= obj.tags.segment_anchor_tag_epub;            }            if (obj.metainfo.heading_lev_markup == 1) { -            obj_cite_digits         = ocn_emit(OCNstatus.on); +            obj_cite_digits         = ocn_emit(eN.ocn.on);              obj.metainfo.ocn        = obj_cite_digits.object_number;              obj.metainfo.identifier = obj_cite_digits.identifier;            } @@ -2131,7 +2141,7 @@ template docAbstraction() {            }            obj = obj.obj_heading_ancestors(lv_ancestors_txt);          } else if (obj.metainfo.is_a == "bookindex") { -          obj_cite_digits                       = ocn_emit(OCNstatus.bkidx); +          obj_cite_digits                       = ocn_emit(eN.ocn.bkidx);            obj.metainfo.ocn                      = obj_cite_digits.object_number;            obj.metainfo.identifier               = obj_cite_digits.identifier;            obj.metainfo.o_n_book_index           = obj_cite_digits.bkidx; @@ -2152,7 +2162,7 @@ template docAbstraction() {              writeln(obj.text);            }            if (obj.metainfo.heading_lev_markup == 1) { -            obj_cite_digits         = ocn_emit(OCNstatus.on); +            obj_cite_digits         = ocn_emit(eN.ocn.on);              obj.metainfo.ocn        = obj_cite_digits.object_number;              obj.metainfo.identifier = obj_cite_digits.identifier;            } @@ -2174,7 +2184,7 @@ template docAbstraction() {            }            obj = obj.obj_heading_ancestors(lv_ancestors_txt);          } else if (obj.metainfo.is_a == "blurb") { -          obj_cite_digits = ocn_emit(OCNstatus.off); +          obj_cite_digits = ocn_emit(eN.ocn.off);            obj.metainfo.object_number_off  = obj_cite_digits.off;            obj.metainfo.object_number_type = OCNtype.non;          } @@ -2377,7 +2387,7 @@ template docAbstraction() {      destroy(segnames);      destroy(bookindex_unordered_hashes);      destroy(an_object); -    obj_cite_digits                              = ocn_emit(OCNstatus.reset); +    obj_cite_digits                              = ocn_emit(eN.ocn.reset);      biblio_arr_json                              = [];      obj_cite_digit_                              = 0;      html_segnames_ptr                            = 0; @@ -2466,63 +2476,58 @@ template docAbstraction() {      an_object                  = an_object.object_reset;    }    @safe static int[string] _check_ocn_status_()( -    char[]           line, -    int[string]      obj_type_status, +    char[]       line, +    int[string]  pith,    ) {      static auto rgx = RgxI(); -    if (!(line.empty) -      && (obj_type_status["ocn_status_off_for_multiple_objects"] == OCN_off_block_status.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 +/ -        if (line.matchFirst(rgx.object_number_off_block)) { -          obj_type_status["ocn_status_off_for_multiple_objects"] = OCN_off_block_status.on; -          obj_type_status["ocn_status"]                          = OCNstatus.off; -          debug(ocnoff) { -            writeln(line); -          } -        } -        if (line.matchFirst(rgx.object_number_off_block_dummy_heading)) { -          obj_type_status["ocn_status_off_for_multiple_objects"] = OCN_off_block_status.on; -          obj_type_status["heading_off_for_multiple_objects"]    = eN.bi.on; -          obj_type_status["ocn_status"]                          = OCNstatus.off; -          debug(ocnoff) { -            writeln(line); +    if (!(line.empty)) { +      if (pith["no_ocn_multiple_objects"] == eN.ocn.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 +/ +          if (line.matchFirst(rgx.object_number_off_block)) { +            pith["no_ocn_multiple_objects"] = eN.ocn.on; +            pith["ocn"] = eN.ocn.off; +            debug(ocnoff) { +              writeln(line); +            }            } -        } -      } else { -        if (obj_type_status["ocn_status_off_for_multiple_objects"] == OCN_off_block_status.off) { -          obj_type_status["dummy_heading_status"] = eN.bi.off; -          if (obj_type_status["heading_off_for_multiple_objects"]) { -            obj_type_status["dummy_heading_status"] = eN.bi.on; +          if (line.matchFirst(rgx.object_number_off_block_dummy_heading)) { +            pith["no_ocn_multiple_objects"]  = eN.ocn.on; +            pith["heading_multiple_objects"] = eN.bi.on; +            pith["ocn"]                      = eN.ocn.off; +            debug(ocnoff) { +              writeln(line); +            }            } -          if (line.matchFirst(rgx.object_number_off)) { -            obj_type_status["ocn_status"] = OCNstatus.off; -          } else if (line.matchFirst(rgx.object_number_off_dummy_heading)) { -            obj_type_status["ocn_status"]           = OCNstatus.off; -            obj_type_status["dummy_heading_status"] = eN.bi.on; +        } else if (pith["no_ocn_multiple_objects"] == eN.ocn.off) { +            pith["dummy_heading_status"]     = eN.bi.off; +            if (pith["heading_multiple_objects"]) { +              pith["dummy_heading_status"] = eN.bi.on; +            } +            if (line.matchFirst(rgx.object_number_off)) { +              pith["ocn"]                    = eN.ocn.off; +            } else if (line.matchFirst(rgx.object_number_off_dummy_heading)) { +              pith["ocn"]                    = eN.ocn.off; +              pith["dummy_heading_status"]   = eN.bi.on; +            } else { +              pith["ocn"]                    = eN.ocn.on; +              pith["dummy_heading_status"]   = eN.bi.off; +            }            } else { -            obj_type_status["ocn_status"]           = OCNstatus.on; -            obj_type_status["dummy_heading_status"] = eN.bi.off; +            pith["ocn"] = pith["no_ocn_multiple_objects"]; +          } +      } else if (pith["no_ocn_multiple_objects"] == eN.ocn.on) { +        if (line.matchFirst(rgx.object_number_off_block_close)) { +          pith["no_ocn_multiple_objects"]    = eN.ocn.off; +          pith["ocn"]                        = eN.ocn.on; +          pith["dummy_heading_status"]       = eN.bi.off; +          debug(ocnoff) { +            writeln(line);            } -        } else { -          obj_type_status["ocn_status"]             = obj_type_status["ocn_status_off_for_multiple_objects"]; -        } -      } -    } else if ( -      !(line.empty) -      && (obj_type_status["ocn_status_off_for_multiple_objects"] > OCN_off_block_status.off) -    ) { -      if (line.matchFirst(rgx.object_number_off_block_close)) { -        obj_type_status["ocn_status_off_for_multiple_objects"] = OCN_off_block_status.off; -        obj_type_status["ocn_status"]                          = OCNstatus.on; -        obj_type_status["dummy_heading_status"]                = eN.bi.off; -        debug(ocnoff) { -          writeln(line);          }        }      } -    return obj_type_status; +    return pith;    }    @safe char[] _doc_header_and_make_substitutions_(CMM)(      char[]  line, @@ -2871,6 +2876,7 @@ template docAbstraction() {                 char[]          line,                 string[string]  an_object,      return ref int[string]     obj_type_status, +    return ref int[string]     pith,      return ref int             cntr,                 string[string]  object_number_poem,                 CMM             conf_make_meta, @@ -2941,7 +2947,7 @@ template docAbstraction() {        } else {          processing["verse"] ~= line ~= "\n";          if (obj_type_status["verse_new"] == eN.bi.on) { -          obj_cite_digits = ocn_emit(obj_type_status["ocn_status"]); +          obj_cite_digits = ocn_emit(pith["ocn"]);            obj_type_status["verse_new"] = eN.bi.off;          } else if (line.matchFirst(rgx.newline_eol_delimiter_only)) {            processing["verse"] = processing["verse"].stripRight; @@ -3049,7 +3055,7 @@ template docAbstraction() {        } else {          processing["verse"] ~= line ~= "\n";          if (obj_type_status["verse_new"] == eN.bi.on) { -          obj_cite_digits = ocn_emit(obj_type_status["ocn_status"]); +          obj_cite_digits = ocn_emit(pith["ocn"]);            obj_type_status["verse_new"] = eN.bi.off;          } else if (line.matchFirst(rgx.newline_eol_delimiter_only)) {            processing["verse"] = processing["verse"].stripRight; @@ -3155,6 +3161,7 @@ template docAbstraction() {                 char[]          line,                 string[string]  an_object,      return ref int[string]     obj_type_status, +    return ref int[string]     pith,      return ref CMM             conf_make_meta,    ) {      static auto rgx = RgxI(); @@ -3184,6 +3191,7 @@ template docAbstraction() {            comp_obj_heading,            cntr,            obj_type_status, +          pith,            conf_make_meta,          );        } else { @@ -3234,13 +3242,13 @@ template docAbstraction() {      return ref int         bib_entry,      return ref string      biblio_entry_str_json,      return ref string[]    biblio_arr_json, -    return ref int[string] track_state, +    return ref int[string] pith,    ) {      mixin spineBiblio;      auto jsn = BibJsnStr();      static auto rgx = RgxI();      if (line.matchFirst(rgx.heading_biblio)) { -      track_state["section"] = eN.sect.bibliography; +      pith["section"] = eN.sect.bibliography;      }      if (line.empty) {        debug { @@ -3357,10 +3365,11 @@ template docAbstraction() {      return ref ObjGenericComposite   _comp_obj_heading,      return ref int                   cntr,      return ref int[string]           obj_type_status, +    return ref int[string]           pith,      CMM                              conf_make_meta    ) {      comp_obj_block = comp_obj_block.init; -    obj_cite_digits = ocn_emit(obj_type_status["ocn_status"]); +    obj_cite_digits = ocn_emit(pith["ocn"]);      auto comp_obj_location        = node_construct.node_location_emitter(          content_non_header, @@ -3400,6 +3409,7 @@ template docAbstraction() {      return ref ObjGenericComposite      _comp_obj_heading,      return ref int                      cntr,      return ref int[string]              obj_type_status, +    return ref int[string]              pith,      string[string]                      object_number_poem,      CMM                                 conf_make_meta,      Ts                                  tag_in_seg, @@ -3416,7 +3426,7 @@ template docAbstraction() {      assertions_flag_types_block_status_none_or_closed(obj_type_status);      static auto rgx = RgxI();      if (obj_type_status["quote"] == eN.tri.closing) { -      obj_cite_digits = ocn_emit(obj_type_status["ocn_status"]); +      obj_cite_digits = ocn_emit(pith["ocn"]);        an_object["bookindex_nugget"]          = ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : "";        bookindex_unordered_hashes @@ -3467,7 +3477,7 @@ template docAbstraction() {        processing.remove("verse");        ++cntr;      } else if (obj_type_status["group"] == eN.tri.closing) { -      obj_cite_digits = ocn_emit(obj_type_status["ocn_status"]); +      obj_cite_digits = ocn_emit(pith["ocn"]);        an_object["bookindex_nugget"]          = ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : "";        bookindex_unordered_hashes @@ -3518,7 +3528,7 @@ template docAbstraction() {        processing.remove("verse");        ++cntr;      } else if (obj_type_status["block"] == eN.tri.closing) { -      obj_cite_digits = ocn_emit(obj_type_status["ocn_status"]); +      obj_cite_digits = ocn_emit(pith["ocn"]);        an_object["bookindex_nugget"]          = ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : "";        bookindex_unordered_hashes @@ -3605,7 +3615,7 @@ template docAbstraction() {        object_reset(an_object);        processing.remove("verse");      } else if (obj_type_status["code"] == eN.tri.closing) { -      obj_cite_digits = ocn_emit(obj_type_status["ocn_status"]); +      obj_cite_digits = ocn_emit(pith["ocn"]);        an_object["bookindex_nugget"]          = ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : "";        bookindex_unordered_hashes @@ -3657,7 +3667,7 @@ template docAbstraction() {        ++cntr;      } else if (obj_type_status["table"] == eN.tri.closing) {        comp_obj_block = comp_obj_block.init; -      obj_cite_digits = ocn_emit(obj_type_status["ocn_status"]); +      obj_cite_digits = ocn_emit(pith["ocn"]);        an_object["bookindex_nugget"]          = ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : "";        bookindex_unordered_hashes @@ -3705,7 +3715,7 @@ template docAbstraction() {                 string[string]  an_object,      return ref string          book_idx_tmp,      return ref int[string]     obj_type_status, -    return ref int[string]     track_state, +    return ref int[string]     pith,                 B               opt_action,    ) {      static auto rgx = RgxI(); @@ -3718,7 +3728,7 @@ template docAbstraction() {        }        an_object["bookindex_nugget"] = m.captures[1].to!string;      } else if (auto m = line.match(rgx.book_index_item_open))  {                      /+ match open book_index +/ -      track_state["section"] = eN.sect.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) { @@ -3728,9 +3738,9 @@ template docAbstraction() {            );          }        } -    } else if (track_state["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))  { -        track_state["section"] = eN.sect.unset; +        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; @@ -3897,7 +3907,7 @@ template docAbstraction() {      return ref int[string]     collapsed_lev,      return ref int[string]     obj_type_status,      return ref CMM             conf_make_meta, -    return ref int[string]     track_state, +    return ref int[string]     pith,    ) {      static auto rgx = RgxI();      if (auto m = line.match(rgx.headings)) {                                      /+ heading match +/ @@ -3905,7 +3915,7 @@ template docAbstraction() {        obj_type_status["heading"]            = eN.bi.on;        obj_type_status["para"]               = eN.bi.off;        if (line.match(rgx.heading_seg_and_above)) { -        track_state["section"]                    = eN.sect.unset; +        pith["section"]                    = eN.sect.unset;        }        an_object[an_object_key] ~= line ~= "\n";        an_object["lev"] ~= m.captures[1]; @@ -4033,7 +4043,7 @@ template docAbstraction() {        default:          an_object["lev_markup_number"] = lv["lv"].to!string;        } -      an_object["dummy_heading_status"] = (obj_type_status["dummy_heading_status"] == eN.bi.off) ? "f" : "t"; +      an_object["dummy_heading_status"] = (pith["dummy_heading_status"] == eN.bi.off) ? "f" : "t";        debug(heading) {          writeln(line.strip);        } @@ -4304,11 +4314,11 @@ template docAbstraction() {      bool ocn_is_off;      @safe auto ocn_emitter(int ocn_status_flag) {        OCNset ocn; -      assert(ocn_status_flag <= OCNstatus.reset); +      assert(ocn_status_flag <= eN.ocn.reset);        ocn_object_number = ocn_bkidx = 0;        object_identifier = "";        ocn_is_off = false; -      switch(ocn_status_flag) with (OCNstatus) { +      switch(ocn_status_flag) with (eN.ocn) {        case reset:          ocn_digit = ocn_on_ = 1;          object_identifier = "1"; @@ -4329,7 +4339,7 @@ template docAbstraction() {        case bkidx:          ocn_bkidx = ++ocn_bkidx_;          break; -      case closing: +      case closing: // unused?          break;        default:          ocn_digit = 0; | 
