diff options
| author | Ralph Amissah <ralph.amissah@gmail.com> | 2020-05-04 14:52:55 -0400 | 
|---|---|---|
| committer | Ralph Amissah <ralph.amissah@gmail.com> | 2020-05-20 11:27:26 -0400 | 
| commit | 8ac1f18739dfd2b0c0323c66d3b65def39b271ce (patch) | |
| tree | c8433a6f61ecc6415f12f08202e6620ba55135ba | |
| parent | ext_lib (external libraries dir) moved into ./misc/ (diff) | |
renaming
| -rw-r--r-- | org/default_misc.org | 32 | ||||
| -rw-r--r-- | org/metaverse.org | 841 | ||||
| -rw-r--r-- | src/doc_reform/meta/defaults.d | 32 | ||||
| -rw-r--r-- | src/doc_reform/meta/metadoc_from_src.d | 841 | 
4 files changed, 858 insertions, 888 deletions
| diff --git a/org/default_misc.org b/org/default_misc.org index 2ba2b8d..ab7033f 100644 --- a/org/default_misc.org +++ b/org/default_misc.org @@ -37,38 +37,6 @@ module doc_reform.meta.defaults;  #+NAME: meta_defaults_template_init_flags  #+BEGIN_SRC d -template spineDocStatus() { -  @safe static auto status() { -    struct _e { -      enum sect { -        unset, -        head, -        toc, -        substantive, -        bibliography, -        glossary, -        book_index, -        blurb, -      } -      enum block { -        off, -        closing, -        code, -        poem, -        block, -        group, -        table, -        quote, -      } -      enum ocn { -        on,    // 0 object_number; -        off,   // 1 no object_number; -        dummy, // 2 no object_number & dummy headings -      } -    } -    return _e(); -  } -}  template spineRgxDocStructFlags() {    /+ regex flags +/    @safe static int[string] flags_type_init() { diff --git a/org/metaverse.org b/org/metaverse.org index 88c5e59..0192f1a 100644 --- a/org/metaverse.org +++ b/org/metaverse.org @@ -54,7 +54,7 @@ template docAbstraction() {      foreach (line; markup_sourcefile_content) {                                 /+ ↓ markup document/text line by line +/                                                                                  // "line" variable can be empty but should never be null        <<abs_in_loop_body_00>> -      if (obj_type_status["code"] == TriState.on) { +      if (obj_type_status["code"] == eN.tri.on) {          <<abs_in_loop_body_00_code_block>>        } else if (!matchFirst(line, rgx.skip_from_regular_parse)) {              /+ object other than "code block" object +/                                                                                  /+ (includes regular text paragraph, headings & blocks other than code) +/ @@ -67,7 +67,7 @@ template docAbstraction() {            } else if (!line.empty) {                                             /+ line not empty +/                                                                                  /+ non blocks (headings, paragraphs) & closed blocks +/              <<abs_in_loop_body_not_block_obj>> -          } else if (obj_type_status["blocks"] == TriState.closing) {           /+ line empty, with blocks flag +/ +          } else if (obj_type_status["blocks"] == eN.tri.closing) {           /+ line empty, with blocks flag +/              <<abs_in_loop_body_not_block_obj_line_empty_blocks_flags>>            } else {                                                              /+ line.empty, post contents, empty variables: +/              <<abs_in_loop_body_not_block_obj_line_empty>> @@ -163,6 +163,30 @@ import  mixin ObjectSetter;  mixin InternalMarkup;  mixin spineRgxIn; +@safe static auto eN() { +  struct _e { +    enum bi { +      off, +      on, +    } +    enum tri { +      off, +      on, +      closing, +    } +    enum sect { +      unset, +      head, +      toc, +      substantive, +      bibliography, +      glossary, +      book_index, +      blurb, +    } +  } +  return _e(); +}  #+END_SRC  *** initialize                                                 :initialize: @@ -184,8 +208,6 @@ string lev_anchor_tag;  string[string][string] tag_assoc;  string[] lv0_to_3_tags;  /+ enum +/ -enum State { off, on } -enum TriState { off, on, closing }  enum DocStructMarkupHeading {    h_sect_A,    h_sect_B, @@ -198,7 +220,6 @@ enum DocStructMarkupHeading {    h_text_5, // extra level, drop    content_non_header  } // header section A-D; header text 1-4 -enum Status { off, on, }  enum OCNstatus { on, off, bkidx, closing, reset, }  enum OCN_off_block_status { off, on }  enum OCNtype { ocn, non, bkidx, } @@ -536,7 +557,6 @@ scope(exit) {  #+NAME: abs_init_rest  #+BEGIN_SRC d  mixin spineRgxDocStructFlags; -mixin spineDocStatus;  mixin spineNode;  auto node_para_int_    = node_metadata_para_int;  auto node_para_str_    = node_metadata_para_str; @@ -560,7 +580,7 @@ uint[string] dochas = [    "images"            : 0,  ];  auto obj_type_status = flags_type_init; -int[string] track = [ +int[string] track_state = [    "section" : 0,    "block"   : 0,    "obj"     : 0, @@ -572,26 +592,26 @@ string[string] object_number_poem = [  ];  string[] lv_ancestors_txt = [ "", "", "", "", "", "", "", "", ];  int[string] lv = [ -  "lv" : State.off, -  "h0" : State.off, -  "h1" : State.off, -  "h2" : State.off, -  "h3" : State.off, -  "h4" : State.off, -  "h5" : State.off, -  "h6" : State.off, -  "h7" : State.off, +  "lv" : eN.bi.off, +  "h0" : eN.bi.off, +  "h1" : eN.bi.off, +  "h2" : eN.bi.off, +  "h3" : eN.bi.off, +  "h4" : eN.bi.off, +  "h5" : eN.bi.off, +  "h6" : eN.bi.off, +  "h7" : eN.bi.off,    "lev_int_collapsed" : 0,  ];  int[string] collapsed_lev = [ -  "h0" : State.off, -  "h1" : State.off, -  "h2" : State.off, -  "h3" : State.off, -  "h4" : State.off, -  "h5" : State.off, -  "h6" : State.off, -  "h7" : State.off +  "h0" : eN.bi.off, +  "h1" : eN.bi.off, +  "h2" : eN.bi.off, +  "h3" : eN.bi.off, +  "h4" : eN.bi.off, +  "h5" : eN.bi.off, +  "h6" : eN.bi.off, +  "h7" : eN.bi.off  ];  string[string] heading_match_str = [    "h_A": "^(none)", @@ -746,15 +766,15 @@ line = line.inline_markup_faces; // by text line (rather than by text object), l  #+NAME: abs_in_loop_body_non_code_obj  #+BEGIN_SRC d  if (line.matchFirst(rgx.heading_biblio) -|| (track["section"] == status.sect.bibliography +|| (track_state["section"] == eN.sect.bibliography    && ((!(line.matchFirst(rgx.heading_glossary)))    && (!(line.matchFirst(rgx.heading_blurb)))    && (!(line.matchFirst(rgx.heading)))    && (!(line.matchFirst(rgx.comment)))))  ) { -  track["section"] = status.sect.bibliography; +  track_state["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); +    line.flow_txt_block_biblio(obj_type_status, bib_entry, biblio_entry_str_json, biblio_arr_json, track_state);      debug(bibliobuild) {        writeln("-  ", biblio_entry_str_json);        writeln("-> ", biblio_arr_json.length); @@ -775,7 +795,7 @@ if there is a glossary section you need to:  #+NAME: abs_in_loop_body_non_code_obj  #+BEGIN_SRC d  } else if (line.matchFirst(rgx.heading_glossary) -|| (track["section"] == status.sect.glossary +|| (track_state["section"] == eN.sect.glossary    && ((!(line.matchFirst(rgx.heading_biblio)))    && (!(line.matchFirst(rgx.heading_blurb)))    && (!(line.matchFirst(rgx.heading))) @@ -786,15 +806,15 @@ if there is a glossary section you need to:      writeln(__LINE__);      writeln(line);    } -  track["section"] = status.sect.glossary; +  track_state["section"] = eN.sect.glossary;    if (opt_action.backmatter && opt_action.section_glossary) {      indent=[        "hang_position" : 0,        "base_position" : 0,      ];      bullet = false; -    obj_type_status["para"] = State.on; -    line_occur["para"] = State.off; +    obj_type_status["para"] = eN.bi.on; +    line_occur["para"] = eN.bi.off;      an_object_key="glossary_nugget"; //      if (line.matchFirst(rgx.heading_glossary)) {        { @@ -883,13 +903,13 @@ if there is a blurb section you need to:  #+NAME: abs_in_loop_body_non_code_obj  #+BEGIN_SRC d  } else if (line.matchFirst(rgx.heading_blurb) -|| (track["section"] == status.sect.blurb +|| (track_state["section"] == eN.sect.blurb    && ((!(line.matchFirst(rgx.heading_glossary)))    && (!(line.matchFirst(rgx.heading_biblio)))    && (!(line.matchFirst(rgx.heading)))    && (!(line.matchFirst(rgx.comment)))))  ) { -  track["section"] = status.sect.blurb; +  track_state["section"] = eN.sect.blurb;    debug(blurb) {      writeln(__LINE__);      writeln(line); @@ -929,8 +949,8 @@ if there is a blurb section you need to:        ];        bullet = true;      } -    obj_type_status["para"] = State.on; -    line_occur["para"] = State.off; +    obj_type_status["para"] = eN.bi.on; +    line_occur["para"] = eN.bi.off;      an_object_key="blurb_nugget";      if (line.matchFirst(rgx.heading_blurb)) {        { @@ -1036,7 +1056,7 @@ if there is a blurb section you need to:  #+NAME: abs_in_loop_body_non_code_obj  #+BEGIN_SRC d -} else if (obj_type_status["quote"] == TriState.on) {                          /+ within block object: quote +/ +} else if (obj_type_status["quote"] == eN.tri.on) {                          /+ within block object: quote +/    line = line      ._doc_header_and_make_substitutions_(conf_make_meta)      ._doc_header_and_make_substitutions_fontface_(conf_make_meta); @@ -1049,7 +1069,7 @@ if there is a blurb section you need to:  #+NAME: abs_in_loop_body_non_code_obj  #+BEGIN_SRC d  /+ within block object: group +/ -} else if (obj_type_status["group"] == TriState.on) {                          /+ within block object: group +/ +} else if (obj_type_status["group"] == eN.tri.on) {                          /+ within block object: group +/    line = line      ._doc_header_and_make_substitutions_(conf_make_meta)      ._doc_header_and_make_substitutions_fontface_(conf_make_meta) @@ -1062,7 +1082,7 @@ if there is a blurb section you need to:  #+NAME: abs_in_loop_body_non_code_obj  #+BEGIN_SRC d -} else if (obj_type_status["block"] == TriState.on) {                          /+ within block object: block +/ +} else if (obj_type_status["block"] == eN.tri.on) {                          /+ within block object: block +/    line = line      ._doc_header_and_make_substitutions_(conf_make_meta)      ._doc_header_and_make_substitutions_fontface_(conf_make_meta); @@ -1078,7 +1098,7 @@ if there is a blurb section you need to:  #+NAME: abs_in_loop_body_non_code_obj  #+BEGIN_SRC d -} else if (obj_type_status["poem"] == TriState.on) {                           /+ within block object: poem +/ +} 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);    continue;  #+END_SRC @@ -1087,7 +1107,7 @@ if there is a blurb section you need to:  #+NAME: abs_in_loop_body_non_code_obj  #+BEGIN_SRC d -} else if (obj_type_status["table"] == TriState.on) {                          /+ within block object: table +/ +} 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);    continue;  #+END_SRC @@ -1098,8 +1118,8 @@ if there is a blurb section you need to:  #+NAME: abs_in_loop_body_open_block_obj_assert  #+BEGIN_SRC d  assert( -  (obj_type_status["blocks"] == TriState.off) -  || (obj_type_status["blocks"] == TriState.closing), +  (obj_type_status["blocks"] == eN.tri.off) +  || (obj_type_status["blocks"] == eN.tri.closing),    "block status: none or closed"  );  assertions_flag_types_block_status_none_or_closed(obj_type_status); @@ -1128,11 +1148,11 @@ assert(    "line tested, line not empty surely:\n  \"" ~ line ~ "\""  );  assert( -  (obj_type_status["blocks"] == TriState.off) -  || (obj_type_status["blocks"] == TriState.closing), +  (obj_type_status["blocks"] == eN.tri.off) +  || (obj_type_status["blocks"] == eN.tri.closing),    "code block status: none or closed"  ); -if (obj_type_status["blocks"] == TriState.closing) { +if (obj_type_status["blocks"] == eN.tri.closing) {    debug(check) {      writeln(__LINE__);      writeln(line); @@ -1140,7 +1160,7 @@ if (obj_type_status["blocks"] == TriState.closing) {    assert(      line.matchFirst(rgx.book_index_item)      || line.matchFirst(rgx.book_index_item_open) -    || track["section"] == status.sect.book_index, +    || track_state["section"] == eN.sect.book_index,      "\nblocks closed, unless followed by book index, non-matching line:\n  \""      ~ line ~ "\""    ); @@ -1153,8 +1173,8 @@ if (obj_type_status["blocks"] == TriState.closing) {  #+BEGIN_SRC d  if (line.matchFirst(rgx.book_index_item)  || line.matchFirst(rgx.book_index_item_open) -|| track["section"] == status.sect.book_index)  {                              /+ book_index +/ -  an_object = line.flow_book_index_(an_object, book_idx_tmp, obj_type_status, track, opt_action); +|| 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);  #+END_SRC  ******* not book index [+1] @@ -1190,19 +1210,19 @@ if (line.matchFirst(rgx.book_index_item)  #+NAME: abs_in_loop_body_not_block_obj  #+BEGIN_SRC d -  } else if (((line_occur["para"] == State.off) -  && (line_occur["heading"] == State.off)) -  && ((obj_type_status["para"] == State.off) -  && (obj_type_status["heading"] == State.off))) {                             /+ heading or para but neither flag nor line exists +/ +  } else if (((line_occur["para"] == eN.bi.off) +  && (line_occur["heading"] == eN.bi.off)) +  && ((obj_type_status["para"] == eN.bi.off) +  && (obj_type_status["heading"] == eN.bi.off))) {                             /+ heading or para but neither flag nor line exists +/      if ((conf_make_meta.make.headings.length > 2) -    && (obj_type_status["make_headings"] == State.off)) {                      /+ heading found +/ +    && (obj_type_status["make_headings"] == eN.bi.off)) {                      /+ heading found +/        heading_match_str = line.flow_heading_found_(heading_match_str, conf_make_meta.make.headings, heading_match_rgx, obj_type_status);      } -    if ((obj_type_status["make_headings"] == State.on) -    && ((line_occur["para"] == State.off) -    && (line_occur["heading"] == State.off)) -    && ((obj_type_status["para"] == State.off) -    && (obj_type_status["heading"] == State.off))) {                           /+ heading make set +/ +    if ((obj_type_status["make_headings"] == eN.bi.on) +    && ((line_occur["para"] == eN.bi.off) +    && (line_occur["heading"] == eN.bi.off)) +    && ((obj_type_status["para"] == eN.bi.off) +    && (obj_type_status["heading"] == eN.bi.off))) {                           /+ heading make set +/        line = line.flow_heading_make_set_(line_occur, heading_match_rgx, obj_type_status);      }      /+ TODO node info: all headings identified at this point, @@ -1221,9 +1241,9 @@ if (line.matchFirst(rgx.book_index_item)          collapsed_lev,          obj_type_status,          conf_make_meta, -        track, +        track_state,        ); -    } else if (line_occur["para"] == State.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) @@ -1236,7 +1256,7 @@ if (line.matchFirst(rgx.book_index_item)  #+NAME: abs_in_loop_body_not_block_obj  #+BEGIN_SRC d -  } else if (line_occur["heading"] > State.off) {                              /+ heading +/ +  } else if (line_occur["heading"] > eN.bi.off) {                              /+ heading +/      debug(heading) {        writeln(line);      } @@ -1248,7 +1268,7 @@ if (line.matchFirst(rgx.book_index_item)  #+NAME: abs_in_loop_body_not_block_obj  #+BEGIN_SRC d -  } else if (line_occur["para"] > State.off) {                                 /+ paragraph +/ +  } else if (line_occur["para"] > eN.bi.off) {                                 /+ paragraph +/      debug(para) {        writeln(an_object_key, "-> ", line);      } @@ -1291,7 +1311,7 @@ assert(    ~ line ~ "\""  );  assert( -  (obj_type_status["blocks"] == State.off), +  (obj_type_status["blocks"] == eN.bi.off),    "code block status: none"  );  #+END_SRC @@ -1305,8 +1325,8 @@ if (_new_doc) {    lv0_to_3_tags = lv0_to_3_tags.init;    tag_in_seg = tag_in_seg.init;  } -if ((obj_type_status["heading"] == State.on) -&& (line_occur["heading"] > State.off)) {                                      /+ heading object (current line empty) +/ +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"]); @@ -1433,8 +1453,8 @@ if ((obj_type_status["heading"] == State.on)  #+NAME: abs_in_loop_body_not_block_obj_line_empty  #+BEGIN_SRC d -} else if ((obj_type_status["para"] == State.on) -&& (line_occur["para"] > State.off)) { +} else if ((obj_type_status["para"] == eN.bi.on) +&& (line_occur["para"] > eN.bi.off)) {    /+ paragraph object (current line empty) +/    /+ repeated character paragraph separator +/    if ((an_object[an_object_key].to!string).matchFirst(rgx.repeated_character_line_separator)) { @@ -1512,7 +1532,7 @@ if (the_document_body_section.length > 0) {    && (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["section"] = status.sect.unset; +      track_state["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) { @@ -3134,10 +3154,10 @@ functions used in document abstraction    return ref string[string]  an_object,    return ref int[string]     obj_type_status,  ) { -  line_occur["heading"]      = State.off; -  line_occur["para"]         = State.off; -  obj_type_status["heading"] = State.off; -  obj_type_status["para"]    = State.off; +  line_occur["heading"]      = eN.bi.off; +  line_occur["para"]         = eN.bi.off; +  obj_type_status["heading"] = eN.bi.off; +  obj_type_status["para"]    = eN.bi.off;    an_object                  = an_object.object_reset;  }  #+END_SRC @@ -3165,7 +3185,7 @@ functions used in document abstraction        }        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"]    = Status.on; +        obj_type_status["heading_off_for_multiple_objects"]    = eN.bi.on;          obj_type_status["ocn_status"]                          = OCNstatus.off;          debug(ocnoff) {            writeln(line); @@ -3173,18 +3193,18 @@ functions used in document abstraction        }      } else {        if (obj_type_status["ocn_status_off_for_multiple_objects"] == OCN_off_block_status.off) { -        obj_type_status["dummy_heading_status"] = 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"] = Status.on; +          obj_type_status["dummy_heading_status"] = eN.bi.on;          }          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"] = Status.on; +          obj_type_status["dummy_heading_status"] = eN.bi.on;          } else {            obj_type_status["ocn_status"]           = OCNstatus.on; -          obj_type_status["dummy_heading_status"] = Status.off; +          obj_type_status["dummy_heading_status"] = eN.bi.off;          }        } else {          obj_type_status["ocn_status"]             = obj_type_status["ocn_status_off_for_multiple_objects"]; @@ -3197,7 +3217,7 @@ functions used in document abstraction      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"]                = Status.off; +      obj_type_status["dummy_heading_status"]                = eN.bi.off;        debug(ocnoff) {          writeln(line);        } @@ -3296,9 +3316,9 @@ functions used in document abstraction          line        );      } -    obj_type_status["blocks"]     = TriState.on; -    obj_type_status["code"]       = TriState.on; -    obj_type_status["curly_code"] = TriState.on; +    obj_type_status["blocks"]     = eN.tri.on; +    obj_type_status["code"]       = eN.tri.on; +    obj_type_status["curly_code"] = eN.tri.on;  #+END_SRC  ******* poem @@ -3317,10 +3337,10 @@ functions used in document abstraction        );      }      object_number_poem["start"]   = obj_cite_digits.object_number.to!string; -    obj_type_status["blocks"]     = TriState.on; -    obj_type_status["verse_new"]  = State.on; -    obj_type_status["poem"]       = TriState.on; -    obj_type_status["curly_poem"] = TriState.on; +    obj_type_status["blocks"]     = eN.tri.on; +    obj_type_status["verse_new"]  = eN.bi.on; +    obj_type_status["poem"]       = eN.tri.on; +    obj_type_status["curly_poem"] = eN.tri.on;  #+END_SRC  ******* group @@ -3338,9 +3358,9 @@ functions used in document abstraction          line        );      } -    obj_type_status["blocks"]      = TriState.on; -    obj_type_status["group"]       = TriState.on; -    obj_type_status["curly_group"] = TriState.on; +    obj_type_status["blocks"]      = eN.tri.on; +    obj_type_status["group"]       = eN.tri.on; +    obj_type_status["curly_group"] = eN.tri.on;  #+END_SRC  ******* block @@ -3358,9 +3378,9 @@ functions used in document abstraction          line        );      } -    obj_type_status["blocks"]      = TriState.on; -    obj_type_status["block"]       = TriState.on; -    obj_type_status["curly_block"] = TriState.on; +    obj_type_status["blocks"]      = eN.tri.on; +    obj_type_status["block"]       = eN.tri.on; +    obj_type_status["curly_block"] = eN.tri.on;  #+END_SRC  ******* quote @@ -3378,9 +3398,9 @@ functions used in document abstraction          line        );      } -    obj_type_status["blocks"]      = TriState.on; -    obj_type_status["quote"]       = TriState.on; -    obj_type_status["curly_quote"] = TriState.on; +    obj_type_status["blocks"]      = eN.tri.on; +    obj_type_status["quote"]       = eN.tri.on; +    obj_type_status["curly_quote"] = eN.tri.on;  #+END_SRC  ******* table @@ -3397,9 +3417,9 @@ functions used in document abstraction      dochas["table"] ++;      an_object["table_head"]        = m["attrib"].to!string;      an_object["block_type"]        = "curly"; -    obj_type_status["blocks"]      = TriState.on; -    obj_type_status["table"]       = TriState.on; -    obj_type_status["curly_table"] = TriState.on; +    obj_type_status["blocks"]      = eN.tri.on; +    obj_type_status["table"]       = eN.tri.on; +    obj_type_status["curly_table"] = eN.tri.on;  #+END_SRC  ******* table special @@ -3410,9 +3430,9 @@ functions used in document abstraction      dochas["table"]++;      an_object["table_head"]                       = m["attrib"].to!string;      an_object["block_type"]                       = "special"; -    obj_type_status["blocks"]                     = TriState.on; -    obj_type_status["table"]                      = TriState.on; -    obj_type_status["curly_table_special_markup"] = TriState.on; +    obj_type_status["blocks"]                     = eN.tri.on; +    obj_type_status["table"]                      = eN.tri.on; +    obj_type_status["curly_table_special_markup"] = eN.tri.on;  #+END_SRC  ****** block (various) tic open                                    :tic: @@ -3431,9 +3451,9 @@ functions used in document abstraction          line        );      } -    obj_type_status["blocks"]   = TriState.on; -    obj_type_status["code"]     = TriState.on; -    obj_type_status["tic_code"] = TriState.on; +    obj_type_status["blocks"]   = eN.tri.on; +    obj_type_status["code"]     = eN.tri.on; +    obj_type_status["tic_code"] = eN.tri.on;  #+END_SRC  ******* poem @@ -3452,10 +3472,10 @@ functions used in document abstraction        );      }      object_number_poem["start"]  = obj_cite_digits.object_number.to!string; -    obj_type_status["blocks"]    = TriState.on; -    obj_type_status["verse_new"] = State.on; -    obj_type_status["poem"]      = TriState.on; -    obj_type_status["tic_poem"]  = TriState.on; +    obj_type_status["blocks"]    = eN.tri.on; +    obj_type_status["verse_new"] = eN.bi.on; +    obj_type_status["poem"]      = eN.tri.on; +    obj_type_status["tic_poem"]  = eN.tri.on;  #+END_SRC  ******* group @@ -3473,9 +3493,9 @@ functions used in document abstraction          line        );      } -    obj_type_status["blocks"]    = TriState.on; -    obj_type_status["group"]     = TriState.on; -    obj_type_status["tic_group"] = TriState.on; +    obj_type_status["blocks"]    = eN.tri.on; +    obj_type_status["group"]     = eN.tri.on; +    obj_type_status["tic_group"] = eN.tri.on;  #+END_SRC  ******* block @@ -3493,9 +3513,9 @@ functions used in document abstraction          line        );      } -    obj_type_status["blocks"]    = TriState.on; -    obj_type_status["block"]     = TriState.on; -    obj_type_status["tic_block"] = TriState.on; +    obj_type_status["blocks"]    = eN.tri.on; +    obj_type_status["block"]     = eN.tri.on; +    obj_type_status["tic_block"] = eN.tri.on;  #+END_SRC  ******* quote @@ -3513,9 +3533,9 @@ functions used in document abstraction          line        );      } -    obj_type_status["blocks"]    = TriState.on; -    obj_type_status["quote"]     = TriState.on; -    obj_type_status["tic_quote"] = TriState.on; +    obj_type_status["blocks"]    = eN.tri.on; +    obj_type_status["quote"]     = eN.tri.on; +    obj_type_status["tic_quote"] = eN.tri.on;  #+END_SRC  ******* table @@ -3532,9 +3552,9 @@ functions used in document abstraction      dochas["table"] ++;      an_object["table_head"]      = m["attrib"].to!string;      an_object["block_type"]      = "tic"; -    obj_type_status["blocks"]    = TriState.on; -    obj_type_status["table"]     = TriState.on; -    obj_type_status["tic_table"] = TriState.on; +    obj_type_status["blocks"]    = eN.tri.on; +    obj_type_status["table"]     = eN.tri.on; +    obj_type_status["tic_table"] = eN.tri.on;    }  #+END_SRC @@ -3556,7 +3576,7 @@ functions used in document abstraction    return ref int[string]     obj_type_status  ) {    static auto rgx = RgxI(); -  if (obj_type_status["curly_code"] == TriState.on) { +  if (obj_type_status["curly_code"] == eN.tri.on) {      if (line.matchFirst(rgx.block_curly_code_close)) {        debug(codecurly) {                                    // code (curly) close          writeln(line); @@ -3564,16 +3584,16 @@ functions used in document abstraction        an_object[an_object_key] = an_object[an_object_key]          .replaceFirst(rgx.newline_eol_delimiter_only, "")          .stripRight; -      obj_type_status["blocks"]     = TriState.closing; -      obj_type_status["code"]       = TriState.closing; -      obj_type_status["curly_code"] = TriState.off; +      obj_type_status["blocks"]     = eN.tri.closing; +      obj_type_status["code"]       = eN.tri.closing; +      obj_type_status["curly_code"] = eN.tri.off;      } else {        debug(codecurly) {                                    // code (curly) line          writeln(line);        }        an_object[an_object_key] ~= line ~= "\n";        // code (curly) line      } -  } else if (obj_type_status["tic_code"] == TriState.on) { +  } else if (obj_type_status["tic_code"] == eN.tri.on) {      if (line.matchFirst(rgx.block_tic_close)) {        debug(codetic) {                                    // code (tic) close          writeln(line); @@ -3581,9 +3601,9 @@ functions used in document abstraction        an_object[an_object_key] = an_object[an_object_key]          .replaceFirst(rgx.newline_eol_delimiter_only, "")          .stripRight; -      obj_type_status["blocks"]   = TriState.closing; -      obj_type_status["code"]     = TriState.closing; -      obj_type_status["tic_code"] = TriState.off; +      obj_type_status["blocks"]   = eN.tri.closing; +      obj_type_status["code"]     = eN.tri.closing; +      obj_type_status["tic_code"] = eN.tri.off;      } else {        debug(codetic) {                                    // code (tic) line          writeln(line); @@ -3657,14 +3677,13 @@ final string biblio_tag_map_()(string abr) {    return ref int         bib_entry,    return ref string      biblio_entry_str_json,    return ref string[]    biblio_arr_json, -  return ref int[string] track, +  return ref int[string] track_state,  ) {    mixin spineBiblio; -  mixin spineDocStatus;    auto jsn = BibJsnStr();    static auto rgx = RgxI();    if (line.matchFirst(rgx.heading_biblio)) { -    track["section"] = status.sect.bibliography; +    track_state["section"] = eN.sect.bibliography;    }    if (line.empty) {      debug { @@ -3675,12 +3694,12 @@ final string biblio_tag_map_()(string abr) {          writeln(biblio_entry_str_json.length);        }      } -    if ((bib_entry == State.off) +    if ((bib_entry == eN.bi.off)      && (biblio_entry_str_json.empty)) { -      bib_entry = State.on; +      bib_entry = eN.bi.on;        biblio_entry_str_json = jsn.biblio_entry_tags_jsonstr;      } else if (!(biblio_entry_str_json.empty)) { -      bib_entry = State.off; +      bib_entry = eN.bi.off;        if (!(biblio_entry_str_json == jsn.biblio_entry_tags_jsonstr)) {          auto biblio_entry = parseJSON(biblio_entry_str_json);          if (biblio_entry["fulltitle"].str.empty) { @@ -3701,7 +3720,7 @@ final string biblio_tag_map_()(string abr) {        writeln(line);      }      auto bt = line.match(rgx.biblio_tags); -    bib_entry = State.off; +    bib_entry = eN.bi.off;      st = bt.captures[1].to!string;      auto header_tag_value=(bt.captures[2]).to!string;      JSONValue j = parseJSON(biblio_entry_str_json); @@ -3785,30 +3804,30 @@ final string biblio_tag_map_()(string abr) {    return ref int[string]     obj_type_status  ) {    static auto rgx = RgxI(); -  if (obj_type_status["curly_quote"] == TriState.on) { +  if (obj_type_status["curly_quote"] == eN.tri.on) {      if (line.matchFirst(rgx.block_curly_quote_close)) {        debug(quote) {                              // quote (curly) close          writeln(line);        }        an_object[an_object_key]       = an_object[an_object_key].stripRight; -      obj_type_status["blocks"]      = TriState.closing; -      obj_type_status["quote"]       = TriState.closing; -      obj_type_status["curly_quote"] = TriState.off; +      obj_type_status["blocks"]      = eN.tri.closing; +      obj_type_status["quote"]       = eN.tri.closing; +      obj_type_status["curly_quote"] = eN.tri.off;      } else {        debug(quote) {          writeln(line);        }        an_object[an_object_key] ~= line ~= "\n";   // build quote array (or string)      } -  } else if (obj_type_status["tic_quote"] == TriState.on) { +  } else if (obj_type_status["tic_quote"] == eN.tri.on) {      if (line.matchFirst(rgx.block_tic_close)) {        debug(quote) {                              // quote (tic) close          writeln(line);        }        an_object[an_object_key]     = an_object[an_object_key].stripRight; -      obj_type_status["blocks"]    = TriState.closing; -      obj_type_status["quote"]     = TriState.closing; -      obj_type_status["tic_quote"] = TriState.off; +      obj_type_status["blocks"]    = eN.tri.closing; +      obj_type_status["quote"]     = eN.tri.closing; +      obj_type_status["tic_quote"] = eN.tri.off;      } else {        debug(quote) {          writeln(line); @@ -3833,30 +3852,30 @@ final string biblio_tag_map_()(string abr) {    return ref int[string]     obj_type_status  ) {    static auto rgx = RgxI(); -  if (obj_type_status["curly_group"] == State.on) { +  if (obj_type_status["curly_group"] == eN.bi.on) {      if (line.matchFirst(rgx.block_curly_group_close)) {        debug(group) {          writeln(line);        }        an_object[an_object_key]       = an_object[an_object_key].stripRight; -      obj_type_status["blocks"]      = TriState.closing; -      obj_type_status["group"]       = TriState.closing; -      obj_type_status["curly_group"] = TriState.off; +      obj_type_status["blocks"]      = eN.tri.closing; +      obj_type_status["group"]       = eN.tri.closing; +      obj_type_status["curly_group"] = eN.tri.off;      } else {        debug(group) {          writeln(line);        }        an_object[an_object_key] ~= line ~= "\n";   // build group array (or string)      } -  } else if (obj_type_status["tic_group"] == TriState.on) { +  } else if (obj_type_status["tic_group"] == eN.tri.on) {      if (line.matchFirst(rgx.block_tic_close)) {        debug(group) {          writeln(line);        }        an_object[an_object_key]     = an_object[an_object_key].stripRight; -      obj_type_status["blocks"]    = TriState.closing; -      obj_type_status["group"]     = TriState.closing; -      obj_type_status["tic_group"] = TriState.off; +      obj_type_status["blocks"]    = eN.tri.closing; +      obj_type_status["group"]     = eN.tri.closing; +      obj_type_status["tic_group"] = eN.tri.off;      } else {        debug(group) {          writeln(line); @@ -3882,30 +3901,30 @@ final string biblio_tag_map_()(string abr) {    return ref int[string]     obj_type_status  ) {    static auto rgx = RgxI(); -  if (obj_type_status["curly_block"] == TriState.on) { +  if (obj_type_status["curly_block"] == eN.tri.on) {      if (line.matchFirst(rgx.block_curly_block_close)) {        debug(block) {                             // block (curly) close          writeln(line);        }        an_object[an_object_key]       = an_object[an_object_key].stripRight; -      obj_type_status["blocks"]      = TriState.closing; -      obj_type_status["block"]       = TriState.closing; -      obj_type_status["curly_block"] = TriState.off; +      obj_type_status["blocks"]      = eN.tri.closing; +      obj_type_status["block"]       = eN.tri.closing; +      obj_type_status["curly_block"] = eN.tri.off;      } else {        debug(block) {          writeln(line);        }        an_object[an_object_key] ~= line ~= "\n";   // build block array (or string)      } -  } else if (obj_type_status["tic_block"] == TriState.on) { +  } else if (obj_type_status["tic_block"] == eN.tri.on) {      if (line.matchFirst(rgx.block_tic_close)) {        debug(block) {          writeln(line);        }        an_object[an_object_key]     = an_object[an_object_key].stripRight; -      obj_type_status["blocks"]    = TriState.closing; -      obj_type_status["block"]     = TriState.closing; -      obj_type_status["tic_block"] = TriState.off; +      obj_type_status["blocks"]    = eN.tri.closing; +      obj_type_status["block"]     = eN.tri.closing; +      obj_type_status["tic_block"] = eN.tri.off;      } else {        debug(block) {          writeln(line); @@ -3933,7 +3952,7 @@ why extra object stuff only in poem/verse?               string[string]  tag_in_seg,  ) {    static auto rgx = RgxI(); -  if (obj_type_status["curly_poem"] == TriState.on) { +  if (obj_type_status["curly_poem"] == eN.tri.on) {      if (line.matchFirst(rgx.block_curly_poem_close)) {        if (an_object_key in an_object        || processing.length > 0) { @@ -3991,20 +4010,20 @@ why extra object stuff only in poem/verse?          ++cntr;        }        object_number_poem["end"]     = obj_cite_digits.object_number.to!string; -      obj_type_status["blocks"]     = TriState.closing; -      obj_type_status["poem"]       = TriState.closing; -      obj_type_status["curly_poem"] = TriState.off; +      obj_type_status["blocks"]     = eN.tri.closing; +      obj_type_status["poem"]       = eN.tri.closing; +      obj_type_status["curly_poem"] = eN.tri.off;      } else {        processing["verse"] ~= line ~= "\n"; -      if (obj_type_status["verse_new"] == State.on) { +      if (obj_type_status["verse_new"] == eN.bi.on) {          obj_cite_digits = ocn_emit(obj_type_status["ocn_status"]); -        obj_type_status["verse_new"] = State.off; +        obj_type_status["verse_new"] = eN.bi.off;        } else if (line.matchFirst(rgx.newline_eol_delimiter_only)) {          processing["verse"] = processing["verse"].stripRight; -        verse_line = TriState.off; -        obj_type_status["verse_new"] = State.on; +        verse_line = eN.tri.off; +        obj_type_status["verse_new"] = eN.bi.on;        } -      if (obj_type_status["verse_new"] == State.on) { +      if (obj_type_status["verse_new"] == eN.bi.on) {          verse_line=1;          an_object[an_object_key] = processing["verse"];          debug(poem) {                          // poem verse @@ -4053,7 +4072,7 @@ why extra object stuff only in poem/verse?          ++cntr;        }      } -  } else if (obj_type_status["tic_poem"] == TriState.on) { +  } else if (obj_type_status["tic_poem"] == eN.tri.on) {      if (auto m = line.matchFirst(rgx.block_tic_close)) { // tic_poem_close        an_object[an_object_key]="verse";        debug(poem) { @@ -4099,20 +4118,20 @@ why extra object stuff only in poem/verse?          processing.remove("verse");          ++cntr;        } -      obj_type_status["blocks"]   = TriState.closing; -      obj_type_status["poem"]     = TriState.closing; -      obj_type_status["tic_poem"] = TriState.off; +      obj_type_status["blocks"]   = eN.tri.closing; +      obj_type_status["poem"]     = eN.tri.closing; +      obj_type_status["tic_poem"] = eN.tri.off;      } else {        processing["verse"] ~= line ~= "\n"; -      if (obj_type_status["verse_new"] == State.on) { +      if (obj_type_status["verse_new"] == eN.bi.on) {          obj_cite_digits = ocn_emit(obj_type_status["ocn_status"]); -        obj_type_status["verse_new"] = State.off; +        obj_type_status["verse_new"] = eN.bi.off;        } else if (line.matchFirst(rgx.newline_eol_delimiter_only)) {          processing["verse"] = processing["verse"].stripRight; -        obj_type_status["verse_new"] = State.on; -        verse_line = TriState.off; +        obj_type_status["verse_new"] = eN.bi.on; +        verse_line = eN.tri.off;        } -      if (obj_type_status["verse_new"] == State.on) { +      if (obj_type_status["verse_new"] == eN.bi.on) {          verse_line=1;          an_object[an_object_key] = processing["verse"];          debug(poem) {                            // poem (tic) close @@ -4194,25 +4213,25 @@ you need:    return ref CMM             conf_make_meta,  ) {    static auto rgx = RgxI(); -  if (obj_type_status["curly_table"] == TriState.on) { +  if (obj_type_status["curly_table"] == eN.tri.on) {      if (line.matchFirst(rgx.block_curly_table_close)) {        debug(table) {                           // table (curly) close          writeln(line);        } -      obj_type_status["blocks"]      = TriState.closing; -      obj_type_status["table"]       = TriState.closing; -      obj_type_status["curly_table"] = TriState.off; +      obj_type_status["blocks"]      = eN.tri.closing; +      obj_type_status["table"]       = eN.tri.closing; +      obj_type_status["curly_table"] = eN.tri.off;      } else {        debug(table) {                           // table          writeln(line);        }        an_object[an_object_key] ~= line ~= "\n";           // build table array (or string)      } -  } else if (obj_type_status["curly_table_special_markup"] == TriState.on) { +  } else if (obj_type_status["curly_table_special_markup"] == eN.tri.on) {      if (line.empty) { -      obj_type_status["blocks"]                     = TriState.off; -      obj_type_status["table"]                      = TriState.off; -      obj_type_status["curly_table_special_markup"] = TriState.off; +      obj_type_status["blocks"]                     = eN.tri.off; +      obj_type_status["table"]                      = eN.tri.off; +      obj_type_status["curly_table_special_markup"] = eN.tri.off;        line.flow_table_closed_make_special_notation_table_(          an_object,          the_document_body_section, @@ -4228,14 +4247,14 @@ you need:        }        an_object[an_object_key] ~= line ~= "\n";      } -  } else if (obj_type_status["tic_table"] == TriState.on) { +  } else if (obj_type_status["tic_table"] == eN.tri.on) {      if (line.matchFirst(rgx.block_tic_close)) {        debug(table) {                           // table (tic) close          writeln(line);        } -      obj_type_status["blocks"]    = TriState.closing; -      obj_type_status["table"]     = TriState.closing; -      obj_type_status["tic_table"] = TriState.off; +      obj_type_status["blocks"]    = eN.tri.closing; +      obj_type_status["table"]     = eN.tri.closing; +      obj_type_status["tic_table"] = eN.tri.off;      } else {        debug(table) {                           // table          writeln(line); @@ -4326,7 +4345,7 @@ process and use an_object["table_head"] (then empty it)      ~ line ~ "\""    );    assert( -    (obj_type_status["blocks"] == TriState.closing), +    (obj_type_status["blocks"] == eN.tri.closing),      "code block status: closed"    );    assertions_flag_types_block_status_none_or_closed(obj_type_status); @@ -4337,7 +4356,7 @@ process and use an_object["table_head"] (then empty it)  #+NAME: abs_functions_block_line_status_empty  #+BEGIN_SRC d -  if (obj_type_status["quote"] == TriState.closing) { +  if (obj_type_status["quote"] == eN.tri.closing) {      obj_cite_digits = ocn_emit(obj_type_status["ocn_status"]);      an_object["bookindex_nugget"]        = ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : ""; @@ -4383,8 +4402,8 @@ process and use an_object["table_head"] (then empty it)      comp_obj_block.has.inline_links                = substantive_obj_misc_tuple[sObj.links];      the_document_body_section                      ~= comp_obj_block;      tag_assoc                                      = an_object.inline_para_link_anchor(tag_in_seg, tag_assoc); -    obj_type_status["blocks"]                      = TriState.off; -    obj_type_status["quote"]                       = TriState.off; +    obj_type_status["blocks"]                      = eN.tri.off; +    obj_type_status["quote"]                       = eN.tri.off;      object_reset(an_object);      processing.remove("verse");      ++cntr; @@ -4394,7 +4413,7 @@ process and use an_object["table_head"] (then empty it)  #+NAME: abs_functions_block_line_status_empty  #+BEGIN_SRC d -  } else if (obj_type_status["group"] == TriState.closing) { +  } else if (obj_type_status["group"] == eN.tri.closing) {      obj_cite_digits = ocn_emit(obj_type_status["ocn_status"]);      an_object["bookindex_nugget"]        = ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : ""; @@ -4440,8 +4459,8 @@ process and use an_object["table_head"] (then empty it)      comp_obj_block.has.inline_links                = substantive_obj_misc_tuple[sObj.links];      the_document_body_section                      ~= comp_obj_block;      tag_assoc                                      = an_object.inline_para_link_anchor(tag_in_seg, tag_assoc); -    obj_type_status["blocks"]                      = TriState.off; -    obj_type_status["group"]                       = TriState.off; +    obj_type_status["blocks"]                      = eN.tri.off; +    obj_type_status["group"]                       = eN.tri.off;      object_reset(an_object);      processing.remove("verse");      ++cntr; @@ -4451,7 +4470,7 @@ process and use an_object["table_head"] (then empty it)  #+NAME: abs_functions_block_line_status_empty  #+BEGIN_SRC d -  } else if (obj_type_status["block"] == TriState.closing) { +  } else if (obj_type_status["block"] == eN.tri.closing) {      obj_cite_digits = ocn_emit(obj_type_status["ocn_status"]);      an_object["bookindex_nugget"]        = ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : ""; @@ -4496,8 +4515,8 @@ process and use an_object["table_head"] (then empty it)      comp_obj_block.has.inline_notes_star           = substantive_obj_misc_tuple[sObj.notes_star];      comp_obj_block.has.inline_links                = substantive_obj_misc_tuple[sObj.links];      the_document_body_section                      ~= comp_obj_block; -    obj_type_status["blocks"]                      = TriState.off; -    obj_type_status["block"]                       = TriState.off; +    obj_type_status["blocks"]                      = eN.tri.off; +    obj_type_status["block"]                       = eN.tri.off;      object_reset(an_object);      processing.remove("verse");      ++cntr; @@ -4507,7 +4526,7 @@ process and use an_object["table_head"] (then empty it)  #+NAME: abs_functions_block_line_status_empty  #+BEGIN_SRC d -  } else if (obj_type_status["poem"] == TriState.closing) { +  } else if (obj_type_status["poem"] == eN.tri.closing) {      an_object["bookindex_nugget"]        = ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : "";      bookindex_unordered_hashes @@ -4540,8 +4559,8 @@ process and use an_object["table_head"] (then empty it)      comp_obj_poem_ocn.metainfo.object_number_type   = obj_cite_digits.type;      comp_obj_poem_ocn.text                          = "";      the_document_body_section                       ~= comp_obj_poem_ocn; -    obj_type_status["blocks"]                       = TriState.off; -    obj_type_status["poem"]                         = TriState.off; +    obj_type_status["blocks"]                       = eN.tri.off; +    obj_type_status["poem"]                         = eN.tri.off;      object_reset(an_object);      processing.remove("verse");  #+END_SRC @@ -4550,7 +4569,7 @@ process and use an_object["table_head"] (then empty it)  #+NAME: abs_functions_block_line_status_empty  #+BEGIN_SRC d -  } else if (obj_type_status["code"] == TriState.closing) { +  } else if (obj_type_status["code"] == eN.tri.closing) {      obj_cite_digits = ocn_emit(obj_type_status["ocn_status"]);      an_object["bookindex_nugget"]        = ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : ""; @@ -4596,8 +4615,8 @@ process and use an_object["table_head"] (then empty it)      comp_obj_code.has.inline_notes_star           = substantive_obj_misc_tuple[sObj.notes_star];      comp_obj_code.has.inline_links                = substantive_obj_misc_tuple[sObj.links];      the_document_body_section                     ~= comp_obj_code; -    obj_type_status["blocks"]                     = TriState.off; -    obj_type_status["code"]                       = TriState.off; +    obj_type_status["blocks"]                     = eN.tri.off; +    obj_type_status["code"]                       = eN.tri.off;      object_reset(an_object);      processing.remove("verse");      ++cntr; @@ -4607,7 +4626,7 @@ process and use an_object["table_head"] (then empty it)  #+NAME: abs_functions_block_line_status_empty  #+BEGIN_SRC d -  } else if (obj_type_status["table"] == TriState.closing) { +  } 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"]);      an_object["bookindex_nugget"] @@ -4644,8 +4663,8 @@ process and use an_object["table_head"] (then empty it)      comp_obj_block                                 = comp_obj_block.flow_table_instructions(an_object["table_head"]);      comp_obj_block                                 = comp_obj_block.flow_table_substantive_munge(an_object["substantive"]);      the_document_body_section                      ~= comp_obj_block; -    obj_type_status["blocks"]                      = TriState.off; -    obj_type_status["table"]                       = TriState.off; +    obj_type_status["blocks"]                      = eN.tri.off; +    obj_type_status["table"]                       = eN.tri.off;      object_reset(an_object);      processing.remove("verse");      ++cntr; @@ -4669,10 +4688,9 @@ process and use an_object["table_head"] (then empty it)               string[string]  an_object,    return ref string          book_idx_tmp,    return ref int[string]     obj_type_status, -  return ref int[string]     track, +  return ref int[string]     track_state,               B               opt_action,  ) { -  mixin spineDocStatus;    static auto rgx = RgxI();    if (auto m = line.match(rgx.book_index_item)) {                                   /+ match book_index +/      debug(bookindexmatch) { @@ -4683,7 +4701,7 @@ process and use an_object["table_head"] (then empty it)      }      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["section"] = status.sect.book_index; +    track_state["section"] = eN.sect.book_index;      if (opt_action.backmatter && opt_action.section_bookindex) {        book_idx_tmp = m.captures[1].to!string;        debug(bookindexmatch) { @@ -4693,9 +4711,9 @@ process and use an_object["table_head"] (then empty it)          );        }      } -  } else if (track["section"] == status.sect.book_index)  {                    /+ book_index flag set +/ +  } else if (track_state["section"] == eN.sect.book_index)  {                    /+ book_index flag set +/      if (auto m = line.match(rgx.book_index_item_close))  { -      track["section"] = status.sect.unset; +      track_state["section"] = eN.sect.unset;        if (opt_action.backmatter        && opt_action.section_bookindex) {          an_object["bookindex_nugget"] = book_idx_tmp ~ m.captures[1].to!string; @@ -4732,7 +4750,7 @@ process and use an_object["table_head"] (then empty it)  ) {    static auto rgx = RgxI();    if ((_make_unmarked_headings.length > 2) -  && (obj_type_status["make_headings"] == State.off)) {                        /+ headings found +/ +  && (obj_type_status["make_headings"] == eN.bi.off)) {                        /+ headings found +/      debug(headingsfound) {        writeln(_make_unmarked_headings);      } @@ -4800,7 +4818,7 @@ process and use an_object["table_head"] (then empty it)      default:        break;      } -    obj_type_status["make_headings"] = State.on; +    obj_type_status["make_headings"] = eN.bi.on;    }    return heading_match_str;  } @@ -4816,11 +4834,11 @@ process and use an_object["table_head"] (then empty it)    return ref Regex!(char)[string]  heading_match_rgx,    return ref int[string]           obj_type_status  ) { -  if ((obj_type_status["make_headings"] == State.on) -  && ((line_occur["para"] == State.off) -  && (line_occur["heading"] == State.off)) -  && ((obj_type_status["para"] == State.off) -  && (obj_type_status["heading"] == State.off))) {                             /+ heading make set +/ +  if ((obj_type_status["make_headings"] == eN.bi.on) +  && ((line_occur["para"] == eN.bi.off) +  && (line_occur["heading"] == eN.bi.off)) +  && ((obj_type_status["para"] == eN.bi.off) +  && (obj_type_status["heading"] == eN.bi.off))) {                             /+ heading make set +/      if (line.matchFirst(heading_match_rgx["h_B"])) {        line = "B~ " ~ line;        debug(headingsfound) { @@ -4881,16 +4899,15 @@ process and use an_object["table_head"] (then empty it)    return ref int[string]     collapsed_lev,    return ref int[string]     obj_type_status,    return ref CMM             conf_make_meta, -  return ref int[string]     track, +  return ref int[string]     track_state,  ) { -  mixin spineDocStatus;    static auto rgx = RgxI();    if (auto m = line.match(rgx.headings)) {                                      /+ heading match +/      ++line_occur["heading"]; -    obj_type_status["heading"]            = State.on; -    obj_type_status["para"]               = State.off; +    obj_type_status["heading"]            = eN.bi.on; +    obj_type_status["para"]               = eN.bi.off;      if (line.match(rgx.heading_seg_and_above)) { -      track["section"]                    = status.sect.unset; +      track_state["section"]                    = eN.sect.unset;      }      an_object[an_object_key] ~= line ~= "\n";      an_object["lev"] ~= m.captures[1]; @@ -4914,13 +4931,13 @@ process and use an_object["table_head"] (then empty it)          = collapsed_lev["h0"].to!string;        lv["lv"] = DocStructMarkupHeading.h_sect_A;        ++lv["h0"]; -      lv["h1"] = State.off; -      lv["h2"] = State.off; -      lv["h3"] = State.off; -      lv["h4"] = State.off; -      lv["h5"] = State.off; -      lv["h6"] = State.off; -      lv["h7"] = State.off; +      lv["h1"] = eN.bi.off; +      lv["h2"] = eN.bi.off; +      lv["h3"] = eN.bi.off; +      lv["h4"] = eN.bi.off; +      lv["h5"] = eN.bi.off; +      lv["h6"] = eN.bi.off; +      lv["h7"] = eN.bi.off;        goto default;      case "B":        collapsed_lev["h1"] = collapsed_lev["h0"] + 1; @@ -4928,12 +4945,12 @@ process and use an_object["table_head"] (then empty it)          = collapsed_lev["h1"].to!string;        lv["lv"] = DocStructMarkupHeading.h_sect_B;        ++lv["h1"]; -      lv["h2"] = State.off; -      lv["h3"] = State.off; -      lv["h4"] = State.off; -      lv["h5"] = State.off; -      lv["h6"] = State.off; -      lv["h7"] = State.off; +      lv["h2"] = eN.bi.off; +      lv["h3"] = eN.bi.off; +      lv["h4"] = eN.bi.off; +      lv["h5"] = eN.bi.off; +      lv["h6"] = eN.bi.off; +      lv["h7"] = eN.bi.off;        goto default;      case "C":        collapsed_lev["h2"] = collapsed_lev["h1"] + 1; @@ -4941,11 +4958,11 @@ process and use an_object["table_head"] (then empty it)          = collapsed_lev["h2"].to!string;        lv["lv"] = DocStructMarkupHeading.h_sect_C;        ++lv["h2"]; -      lv["h3"] = State.off; -      lv["h4"] = State.off; -      lv["h5"] = State.off; -      lv["h6"] = State.off; -      lv["h7"] = State.off; +      lv["h3"] = eN.bi.off; +      lv["h4"] = eN.bi.off; +      lv["h5"] = eN.bi.off; +      lv["h6"] = eN.bi.off; +      lv["h7"] = eN.bi.off;        goto default;      case "D":        collapsed_lev["h3"] = collapsed_lev["h2"] + 1; @@ -4953,61 +4970,61 @@ process and use an_object["table_head"] (then empty it)          = collapsed_lev["h3"].to!string;        lv["lv"] = DocStructMarkupHeading.h_sect_D;        ++lv["h3"]; -      lv["h4"] = State.off; -      lv["h5"] = State.off; -      lv["h6"] = State.off; -      lv["h7"] = State.off; +      lv["h4"] = eN.bi.off; +      lv["h5"] = eN.bi.off; +      lv["h6"] = eN.bi.off; +      lv["h7"] = eN.bi.off;        goto default;      case "1": -      if (lv["h3"] > State.off) { +      if (lv["h3"] > eN.bi.off) {          collapsed_lev["h4"] = collapsed_lev["h3"] + 1; -      } else if (lv["h2"] > State.off) { +      } else if (lv["h2"] > eN.bi.off) {          collapsed_lev["h4"] = collapsed_lev["h2"] + 1; -      } else if (lv["h1"] > State.off) { +      } else if (lv["h1"] > eN.bi.off) {          collapsed_lev["h4"] = collapsed_lev["h1"] + 1; -      } else if (lv["h0"] > State.off) { +      } else if (lv["h0"] > eN.bi.off) {          collapsed_lev["h4"] = collapsed_lev["h0"] + 1;        }        an_object["lev_collapsed_number"]          = collapsed_lev["h4"].to!string;        lv["lv"] = DocStructMarkupHeading.h_text_1;        ++lv["h4"]; -      lv["h5"] = State.off; -      lv["h6"] = State.off; -      lv["h7"] = State.off; +      lv["h5"] = eN.bi.off; +      lv["h6"] = eN.bi.off; +      lv["h7"] = eN.bi.off;        goto default;      case "2": -      if (lv["h5"] > State.off) { +      if (lv["h5"] > eN.bi.off) {          an_object["lev_collapsed_number"]            = collapsed_lev["h5"].to!string; -      } else if (lv["h4"] > State.off) { +      } else if (lv["h4"] > eN.bi.off) {          collapsed_lev["h5"] = collapsed_lev["h4"] + 1;          an_object["lev_collapsed_number"]            = collapsed_lev["h5"].to!string;        }        lv["lv"] = DocStructMarkupHeading.h_text_2;        ++lv["h5"]; -      lv["h6"] = State.off; -      lv["h7"] = State.off; +      lv["h6"] = eN.bi.off; +      lv["h7"] = eN.bi.off;        goto default;      case "3": -      if (lv["h6"] > State.off) { +      if (lv["h6"] > eN.bi.off) {          an_object["lev_collapsed_number"]            = collapsed_lev["h6"].to!string; -      } else if (lv["h5"] > State.off) { +      } else if (lv["h5"] > eN.bi.off) {          collapsed_lev["h6"] = collapsed_lev["h5"] + 1;          an_object["lev_collapsed_number"]            = collapsed_lev["h6"].to!string;        }        lv["lv"] = DocStructMarkupHeading.h_text_3;        ++lv["h6"]; -      lv["h7"] = State.off; +      lv["h7"] = eN.bi.off;        goto default;      case "4": -      if (lv["h7"] > State.off) { +      if (lv["h7"] > eN.bi.off) {          an_object["lev_collapsed_number"]            = collapsed_lev["h7"].to!string; -      } else if (lv["h6"] > State.off) { +      } else if (lv["h6"] > eN.bi.off) {          collapsed_lev["h7"] = collapsed_lev["h6"] + 1;          an_object["lev_collapsed_number"]            = collapsed_lev["h7"].to!string; @@ -5018,7 +5035,7 @@ process and use an_object["table_head"] (then empty it)      default:        an_object["lev_markup_number"] = lv["lv"].to!string;      } -    an_object["dummy_heading_status"] = (obj_type_status["dummy_heading_status"] == State.off) ? "f" : "t"; +    an_object["dummy_heading_status"] = (obj_type_status["dummy_heading_status"] == eN.bi.off) ? "f" : "t";      debug(heading) {        writeln(line.strip);      } @@ -5041,10 +5058,10 @@ process and use an_object["table_head"] (then empty it)    return ref int[string]     line_occur,  ) {    static auto rgx = RgxI(); -  if (line_occur["para"] == State.off) { +  if (line_occur["para"] == eN.bi.off) {      line = font_faces_line(line);      /+ para matches +/ -    obj_type_status["para"] = State.on; +    obj_type_status["para"] = eN.bi.on;      an_object[an_object_key] ~= line;      indent=[        "hang_position" : 0, @@ -7171,13 +7188,13 @@ struct NodeStructureMetadata {      assert(obj_cite_digits.object_number.to!int >= 0);      assert(is_ != "heading");                          // should not be necessary      assert(obj_cite_digits.object_number.to!int >= 0); // should not be necessary -    if (lv7 > State.off) { +    if (lv7 > eN.bi.off) {        p_["lev_markup_number"] = DocStructMarkupHeading.h_text_4;        p_["object_number"] = lv7; -    } else if (lv6 > State.off) { +    } else if (lv6 > eN.bi.off) {        p_["lev_markup_number"] = DocStructMarkupHeading.h_text_3;        p_["object_number"] = lv6; -    } else if (lv5 > State.off) { +    } else if (lv5 > eN.bi.off) {        p_["lev_markup_number"] = DocStructMarkupHeading.h_text_2;        p_["object_number"] = lv5;      } else { @@ -7290,15 +7307,15 @@ struct NodeStructureMetadata {        lv = DocStructMarkupHeading.h_text_1;        lv4 = obj_cite_digit;        lv5=0; lv6=0; lv7=0; -      if (lv3 > State.off) { +      if (lv3 > eN.bi.off) {          p_["lev_markup_number"]            = DocStructMarkupHeading.h_sect_D;          p_["object_number"] = lv3; -      } else if (lv2 > State.off) { +      } else if (lv2 > eN.bi.off) {          p_["lev_markup_number"]            = DocStructMarkupHeading.h_sect_C;          p_["object_number"] = lv2; -      } else if (lv1 > State.off) { +      } else if (lv1 > eN.bi.off) {          p_["lev_markup_number"]            = DocStructMarkupHeading.h_sect_B;          p_["object_number"] = lv1; @@ -7428,171 +7445,171 @@ struct NodeStructureMetadata {    string[string]  an_object,    int[string]     lv  ) { -  if (lv["h3"] > State.off) { -    assert(lv["h0"] > State.off); -    assert(lv["h1"] > State.off); -    assert(lv["h2"] > State.off); -  } else if (lv["h2"] > State.off) { -    assert(lv["h0"] > State.off); -    assert(lv["h1"] > State.off); -    assert(lv["h3"] == State.off); -  } else if (lv["h1"] > State.off) { -    assert(lv["h0"] > State.off); -    assert(lv["h2"] == State.off); -    assert(lv["h3"] == State.off); -  } else if (lv["h0"] > State.off) { -    assert(lv["h1"] == State.off); -    assert(lv["h2"] == State.off); -    assert(lv["h3"] == State.off); +  if (lv["h3"] > eN.bi.off) { +    assert(lv["h0"] > eN.bi.off); +    assert(lv["h1"] > eN.bi.off); +    assert(lv["h2"] > eN.bi.off); +  } else if (lv["h2"] > eN.bi.off) { +    assert(lv["h0"] > eN.bi.off); +    assert(lv["h1"] > eN.bi.off); +    assert(lv["h3"] == eN.bi.off); +  } else if (lv["h1"] > eN.bi.off) { +    assert(lv["h0"] > eN.bi.off); +    assert(lv["h2"] == eN.bi.off); +    assert(lv["h3"] == eN.bi.off); +  } else if (lv["h0"] > eN.bi.off) { +    assert(lv["h1"] == eN.bi.off); +    assert(lv["h2"] == eN.bi.off); +    assert(lv["h3"] == eN.bi.off);    } else { -    assert(lv["h0"] == State.off); -    assert(lv["h1"] == State.off); -    assert(lv["h2"] == State.off); -    assert(lv["h3"] == State.off); -  } -  if (lv["h7"] > State.off) { -    assert(lv["h4"] > State.off); -    assert(lv["h5"] > State.off); -    assert(lv["h6"] > State.off); -  } else if (lv["h6"] > State.off) { -    assert(lv["h4"] > State.off); -    assert(lv["h5"] > State.off); -    assert(lv["h7"] == State.off); -  } else if (lv["h5"] > State.off) { -    assert(lv["h4"] > State.off); -    assert(lv["h6"] == State.off); -    assert(lv["h7"] == State.off); -  } else if (lv["h4"] > State.off) { -    assert(lv["h5"] == State.off); -    assert(lv["h6"] == State.off); -    assert(lv["h7"] == State.off); +    assert(lv["h0"] == eN.bi.off); +    assert(lv["h1"] == eN.bi.off); +    assert(lv["h2"] == eN.bi.off); +    assert(lv["h3"] == eN.bi.off); +  } +  if (lv["h7"] > eN.bi.off) { +    assert(lv["h4"] > eN.bi.off); +    assert(lv["h5"] > eN.bi.off); +    assert(lv["h6"] > eN.bi.off); +  } else if (lv["h6"] > eN.bi.off) { +    assert(lv["h4"] > eN.bi.off); +    assert(lv["h5"] > eN.bi.off); +    assert(lv["h7"] == eN.bi.off); +  } else if (lv["h5"] > eN.bi.off) { +    assert(lv["h4"] > eN.bi.off); +    assert(lv["h6"] == eN.bi.off); +    assert(lv["h7"] == eN.bi.off); +  } else if (lv["h4"] > eN.bi.off) { +    assert(lv["h5"] == eN.bi.off); +    assert(lv["h6"] == eN.bi.off); +    assert(lv["h7"] == eN.bi.off);    } else { -    assert(lv["h4"] == State.off); -    assert(lv["h5"] == State.off); -    assert(lv["h6"] == State.off); -    assert(lv["h7"] == State.off); +    assert(lv["h4"] == eN.bi.off); +    assert(lv["h5"] == eN.bi.off); +    assert(lv["h6"] == eN.bi.off); +    assert(lv["h7"] == eN.bi.off);    } -  if (lv["h0"] == State.off) { -    assert(lv["h1"] == State.off); -    assert(lv["h2"] == State.off); -    assert(lv["h3"] == State.off); -    assert(lv["h4"] == State.off); -    assert(lv["h5"] == State.off); -    assert(lv["h6"] == State.off); -    assert(lv["h7"] == State.off); +  if (lv["h0"] == eN.bi.off) { +    assert(lv["h1"] == eN.bi.off); +    assert(lv["h2"] == eN.bi.off); +    assert(lv["h3"] == eN.bi.off); +    assert(lv["h4"] == eN.bi.off); +    assert(lv["h5"] == eN.bi.off); +    assert(lv["h6"] == eN.bi.off); +    assert(lv["h7"] == eN.bi.off);    } -  if (lv["h1"] == State.off) { -    assert(lv["h2"] == State.off); -    assert(lv["h3"] == State.off); +  if (lv["h1"] == eN.bi.off) { +    assert(lv["h2"] == eN.bi.off); +    assert(lv["h3"] == eN.bi.off);    } -  if (lv["h2"] == State.off) { -    assert(lv["h3"] == State.off); +  if (lv["h2"] == eN.bi.off) { +    assert(lv["h3"] == eN.bi.off);    } -  if (lv["h3"] == State.off) { +  if (lv["h3"] == eN.bi.off) {    } -  if (lv["h4"] == State.off) { -    assert(lv["h5"] == State.off); -    assert(lv["h6"] == State.off); -    assert(lv["h7"] == State.off); +  if (lv["h4"] == eN.bi.off) { +    assert(lv["h5"] == eN.bi.off); +    assert(lv["h6"] == eN.bi.off); +    assert(lv["h7"] == eN.bi.off);    } -  if (lv["h5"] == State.off) { -    assert(lv["h6"] == State.off); -    assert(lv["h7"] == State.off); +  if (lv["h5"] == eN.bi.off) { +    assert(lv["h6"] == eN.bi.off); +    assert(lv["h7"] == eN.bi.off);    } -  if (lv["h6"] == State.off) { -    assert(lv["h7"] == State.off); +  if (lv["h6"] == eN.bi.off) { +    assert(lv["h7"] == eN.bi.off);    } -  if (lv["h7"] == State.off) { +  if (lv["h7"] == eN.bi.off) {    }    switch ((an_object["lev"]).to!string) {    case "A": -    if (lv["h0"] == State.off) { -      assert(lv["h1"] == State.off); -      assert(lv["h2"] == State.off); -      assert(lv["h3"] == State.off); -      assert(lv["h4"] == State.off); -      assert(lv["h5"] == State.off); -      assert(lv["h6"] == State.off); -      assert(lv["h7"] == State.off); -    } else {                       // (lv["h0"] > State.off) -      assert(lv["h0"] == State.off,"error should not enter level A a second time"); +    if (lv["h0"] == eN.bi.off) { +      assert(lv["h1"] == eN.bi.off); +      assert(lv["h2"] == eN.bi.off); +      assert(lv["h3"] == eN.bi.off); +      assert(lv["h4"] == eN.bi.off); +      assert(lv["h5"] == eN.bi.off); +      assert(lv["h6"] == eN.bi.off); +      assert(lv["h7"] == eN.bi.off); +    } else {                       // (lv["h0"] > eN.bi.off) +      assert(lv["h0"] == eN.bi.off,"error should not enter level A a second time");      }      break;    case "B": -    if (lv["h1"] == State.off) { -      assert(lv["h0"] > State.off); -      assert(lv["h2"] == State.off); -      assert(lv["h3"] == State.off); -    } else {                       // (lv["h1"] > State.off) -      assert(lv["h0"] > State.off); -      assert(lv["h1"] > State.off); +    if (lv["h1"] == eN.bi.off) { +      assert(lv["h0"] > eN.bi.off); +      assert(lv["h2"] == eN.bi.off); +      assert(lv["h3"] == eN.bi.off); +    } else {                       // (lv["h1"] > eN.bi.off) +      assert(lv["h0"] > eN.bi.off); +      assert(lv["h1"] > eN.bi.off);      }      break;    case "C": -    if (lv["h2"] == State.off) { -      assert(lv["h0"] > State.off); -      assert(lv["h1"] > State.off); -      assert(lv["h3"] == State.off); -    } else {                       // (lv["h2"] > State.off) -      assert(lv["h0"] > State.off); -      assert(lv["h1"] > State.off); -      assert(lv["h2"] > State.off); +    if (lv["h2"] == eN.bi.off) { +      assert(lv["h0"] > eN.bi.off); +      assert(lv["h1"] > eN.bi.off); +      assert(lv["h3"] == eN.bi.off); +    } else {                       // (lv["h2"] > eN.bi.off) +      assert(lv["h0"] > eN.bi.off); +      assert(lv["h1"] > eN.bi.off); +      assert(lv["h2"] > eN.bi.off);      }      break;    case "D": -    if (lv["h3"] == State.off) { -      assert(lv["h0"] > State.off); -      assert(lv["h1"] > State.off); -      assert(lv["h2"] > State.off); -    } else {                      // (lv["h3"] > State.off) -      assert(lv["h0"] > State.off); -      assert(lv["h1"] > State.off); -      assert(lv["h2"] > State.off); -      assert(lv["h3"] > State.off); +    if (lv["h3"] == eN.bi.off) { +      assert(lv["h0"] > eN.bi.off); +      assert(lv["h1"] > eN.bi.off); +      assert(lv["h2"] > eN.bi.off); +    } else {                      // (lv["h3"] > eN.bi.off) +      assert(lv["h0"] > eN.bi.off); +      assert(lv["h1"] > eN.bi.off); +      assert(lv["h2"] > eN.bi.off); +      assert(lv["h3"] > eN.bi.off);      }      break;    case "1": -    if (lv["h4"] == State.off) { -      assert(lv["h0"] > State.off); -    } else {                      // (lv["h4"] > State.off) -      assert(lv["h0"] > State.off); -      assert(lv["h4"] > State.off); +    if (lv["h4"] == eN.bi.off) { +      assert(lv["h0"] > eN.bi.off); +    } else {                      // (lv["h4"] > eN.bi.off) +      assert(lv["h0"] > eN.bi.off); +      assert(lv["h4"] > eN.bi.off);      }      break;    case "2": -    if (lv["h5"] == State.off) { -      assert(lv["h0"] > State.off); -      assert(lv["h4"] > State.off); -    } else {                      // (lv["h5"] > State.off) -      assert(lv["h0"] > State.off); -      assert(lv["h4"] > State.off); -      assert(lv["h5"] > State.off); +    if (lv["h5"] == eN.bi.off) { +      assert(lv["h0"] > eN.bi.off); +      assert(lv["h4"] > eN.bi.off); +    } else {                      // (lv["h5"] > eN.bi.off) +      assert(lv["h0"] > eN.bi.off); +      assert(lv["h4"] > eN.bi.off); +      assert(lv["h5"] > eN.bi.off);      }      break;    case "3": -    if (lv["h6"] == State.off) { -      assert(lv["h0"] > State.off); -      assert(lv["h4"] > State.off); -      assert(lv["h5"] > State.off); -    } else {                      // (lv["h6"] > State.off) -      assert(lv["h0"] > State.off); -      assert(lv["h4"] > State.off); -      assert(lv["h5"] > State.off); -      assert(lv["h6"] > State.off); +    if (lv["h6"] == eN.bi.off) { +      assert(lv["h0"] > eN.bi.off); +      assert(lv["h4"] > eN.bi.off); +      assert(lv["h5"] > eN.bi.off); +    } else {                      // (lv["h6"] > eN.bi.off) +      assert(lv["h0"] > eN.bi.off); +      assert(lv["h4"] > eN.bi.off); +      assert(lv["h5"] > eN.bi.off); +      assert(lv["h6"] > eN.bi.off);      }      break;    case "4": -    if (lv["h7"] == State.off) { -      assert(lv["h0"] > State.off); -      assert(lv["h4"] > State.off); -      assert(lv["h5"] > State.off); -      assert(lv["h6"] > State.off); -    } else {                      // (lv["h7"] > State.off) -      assert(lv["h0"] > State.off); -      assert(lv["h4"] > State.off); -      assert(lv["h5"] > State.off); -      assert(lv["h6"] > State.off); -      assert(lv["h7"] > State.off); +    if (lv["h7"] == eN.bi.off) { +      assert(lv["h0"] > eN.bi.off); +      assert(lv["h4"] > eN.bi.off); +      assert(lv["h5"] > eN.bi.off); +      assert(lv["h6"] > eN.bi.off); +    } else {                      // (lv["h7"] > eN.bi.off) +      assert(lv["h0"] > eN.bi.off); +      assert(lv["h4"] > eN.bi.off); +      assert(lv["h5"] > eN.bi.off); +      assert(lv["h6"] > eN.bi.off); +      assert(lv["h7"] > eN.bi.off);      }      break;    default: @@ -7607,24 +7624,24 @@ struct NodeStructureMetadata {  #+BEGIN_SRC d  @safe pure void assertions_flag_types_block_status_none_or_closed()(int[string] obj_type_status) {    assert( -    (obj_type_status["code"] == TriState.off) -    || (obj_type_status["code"] == TriState.closing), +    (obj_type_status["code"] == eN.tri.off) +    || (obj_type_status["code"] == eN.tri.closing),      "code block status: off or closing");    assert( -    (obj_type_status["poem"] == TriState.off) -    || (obj_type_status["poem"] == TriState.closing), +    (obj_type_status["poem"] == eN.tri.off) +    || (obj_type_status["poem"] == eN.tri.closing),      "poem status: off or closing");    assert( -    (obj_type_status["table"] == TriState.off) -    || (obj_type_status["table"] == TriState.closing), +    (obj_type_status["table"] == eN.tri.off) +    || (obj_type_status["table"] == eN.tri.closing),      "table status: off or closing");    assert( -    (obj_type_status["group"] == TriState.off) -    || (obj_type_status["group"] == TriState.closing), +    (obj_type_status["group"] == eN.tri.off) +    || (obj_type_status["group"] == eN.tri.closing),      "group block status: off or closing");    assert( -    (obj_type_status["block"] == TriState.off) -    || (obj_type_status["block"] == TriState.closing), +    (obj_type_status["block"] == eN.tri.off) +    || (obj_type_status["block"] == eN.tri.closing),      "block status: off or closing");  }  #+END_SRC diff --git a/src/doc_reform/meta/defaults.d b/src/doc_reform/meta/defaults.d index 8b6edad..e592be7 100644 --- a/src/doc_reform/meta/defaults.d +++ b/src/doc_reform/meta/defaults.d @@ -2,38 +2,6 @@    default settings  +/  module doc_reform.meta.defaults; -template spineDocStatus() { -  @safe static auto status() { -    struct _e { -      enum sect { -        unset, -        head, -        toc, -        substantive, -        bibliography, -        glossary, -        book_index, -        blurb, -      } -      enum block { -        off, -        closing, -        code, -        poem, -        block, -        group, -        table, -        quote, -      } -      enum ocn { -        on,    // 0 object_number; -        off,   // 1 no object_number; -        dummy, // 2 no object_number & dummy headings -      } -    } -    return _e(); -  } -}  template spineRgxDocStructFlags() {    /+ regex flags +/    @safe static int[string] flags_type_init() { diff --git a/src/doc_reform/meta/metadoc_from_src.d b/src/doc_reform/meta/metadoc_from_src.d index 6aa1eb6..1ae2e01 100644 --- a/src/doc_reform/meta/metadoc_from_src.d +++ b/src/doc_reform/meta/metadoc_from_src.d @@ -21,6 +21,30 @@ template docAbstraction() {    mixin ObjectSetter;    mixin InternalMarkup;    mixin spineRgxIn; +  @safe static auto eN() { +    struct _e { +      enum bi { +        off, +        on, +      } +      enum tri { +        off, +        on, +        closing, +      } +      enum sect { +        unset, +        head, +        toc, +        substantive, +        bibliography, +        glossary, +        book_index, +        blurb, +      } +    } +    return _e(); +  }                                                                                  /+ ↓ abstraction struct init +/    /+ initialize +/    ObjGenericComposite[] the_table_of_contents_section; @@ -36,8 +60,6 @@ template docAbstraction() {    string[string][string] tag_assoc;    string[] lv0_to_3_tags;    /+ enum +/ -  enum State { off, on } -  enum TriState { off, on, closing }    enum DocStructMarkupHeading {      h_sect_A,      h_sect_B, @@ -50,7 +72,6 @@ template docAbstraction() {      h_text_5, // extra level, drop      content_non_header    } // header section A-D; header text 1-4 -  enum Status { off, on, }    enum OCNstatus { on, off, bkidx, closing, reset, }    enum OCN_off_block_status { off, on }    enum OCNtype { ocn, non, bkidx, } @@ -356,7 +377,6 @@ template docAbstraction() {        reset_note_numbers=true;      }      mixin spineRgxDocStructFlags; -    mixin spineDocStatus;      mixin spineNode;      auto node_para_int_    = node_metadata_para_int;      auto node_para_str_    = node_metadata_para_str; @@ -380,7 +400,7 @@ template docAbstraction() {        "images"            : 0,      ];      auto obj_type_status = flags_type_init; -    int[string] track = [ +    int[string] track_state = [        "section" : 0,        "block"   : 0,        "obj"     : 0, @@ -392,26 +412,26 @@ template docAbstraction() {      ];      string[] lv_ancestors_txt = [ "", "", "", "", "", "", "", "", ];      int[string] lv = [ -      "lv" : State.off, -      "h0" : State.off, -      "h1" : State.off, -      "h2" : State.off, -      "h3" : State.off, -      "h4" : State.off, -      "h5" : State.off, -      "h6" : State.off, -      "h7" : State.off, +      "lv" : eN.bi.off, +      "h0" : eN.bi.off, +      "h1" : eN.bi.off, +      "h2" : eN.bi.off, +      "h3" : eN.bi.off, +      "h4" : eN.bi.off, +      "h5" : eN.bi.off, +      "h6" : eN.bi.off, +      "h7" : eN.bi.off,        "lev_int_collapsed" : 0,      ];      int[string] collapsed_lev = [ -      "h0" : State.off, -      "h1" : State.off, -      "h2" : State.off, -      "h3" : State.off, -      "h4" : State.off, -      "h5" : State.off, -      "h6" : State.off, -      "h7" : State.off +      "h0" : eN.bi.off, +      "h1" : eN.bi.off, +      "h2" : eN.bi.off, +      "h3" : eN.bi.off, +      "h4" : eN.bi.off, +      "h5" : eN.bi.off, +      "h6" : eN.bi.off, +      "h7" : eN.bi.off      ];      string[string] heading_match_str = [        "h_A": "^(none)", @@ -526,7 +546,7 @@ template docAbstraction() {        if (!line.empty) {          obj_type_status = line._check_ocn_status_(obj_type_status);        } -      if (obj_type_status["code"] == TriState.on) { +      if (obj_type_status["code"] == eN.tri.on) {          /+ block object: code +/          line.flow_txt_block_code(an_object, obj_type_status);          continue; @@ -535,15 +555,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["section"] == status.sect.bibliography +        || (track_state["section"] == eN.sect.bibliography            && ((!(line.matchFirst(rgx.heading_glossary)))            && (!(line.matchFirst(rgx.heading_blurb)))            && (!(line.matchFirst(rgx.heading)))            && (!(line.matchFirst(rgx.comment)))))          ) { -          track["section"] = status.sect.bibliography; +          track_state["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); +            line.flow_txt_block_biblio(obj_type_status, bib_entry, biblio_entry_str_json, biblio_arr_json, track_state);              debug(bibliobuild) {                writeln("-  ", biblio_entry_str_json);                writeln("-> ", biblio_arr_json.length); @@ -551,7 +571,7 @@ template docAbstraction() {            }            continue;          } else if (line.matchFirst(rgx.heading_glossary) -        || (track["section"] == status.sect.glossary +        || (track_state["section"] == eN.sect.glossary            && ((!(line.matchFirst(rgx.heading_biblio)))            && (!(line.matchFirst(rgx.heading_blurb)))            && (!(line.matchFirst(rgx.heading))) @@ -562,15 +582,15 @@ template docAbstraction() {              writeln(__LINE__);              writeln(line);            } -          track["section"] = status.sect.glossary; +          track_state["section"] = eN.sect.glossary;            if (opt_action.backmatter && opt_action.section_glossary) {              indent=[                "hang_position" : 0,                "base_position" : 0,              ];              bullet = false; -            obj_type_status["para"] = State.on; -            line_occur["para"] = State.off; +            obj_type_status["para"] = eN.bi.on; +            line_occur["para"] = eN.bi.off;              an_object_key="glossary_nugget"; //              if (line.matchFirst(rgx.heading_glossary)) {                { @@ -646,13 +666,13 @@ template docAbstraction() {            }            continue;          } else if (line.matchFirst(rgx.heading_blurb) -        || (track["section"] == status.sect.blurb +        || (track_state["section"] == eN.sect.blurb            && ((!(line.matchFirst(rgx.heading_glossary)))            && (!(line.matchFirst(rgx.heading_biblio)))            && (!(line.matchFirst(rgx.heading)))            && (!(line.matchFirst(rgx.comment)))))          ) { -          track["section"] = status.sect.blurb; +          track_state["section"] = eN.sect.blurb;            debug(blurb) {              writeln(__LINE__);              writeln(line); @@ -692,8 +712,8 @@ template docAbstraction() {                ];                bullet = true;              } -            obj_type_status["para"] = State.on; -            line_occur["para"] = State.off; +            obj_type_status["para"] = eN.bi.on; +            line_occur["para"] = eN.bi.off;              an_object_key="blurb_nugget";              if (line.matchFirst(rgx.heading_blurb)) {                { @@ -792,21 +812,21 @@ template docAbstraction() {              obj_type_status["ocn_status"] = OCNstatus.on;            }            continue; -        } else if (obj_type_status["quote"] == TriState.on) {                          /+ within block object: quote +/ +        } else if (obj_type_status["quote"] == eN.tri.on) {                          /+ within block object: quote +/            line = line              ._doc_header_and_make_substitutions_(conf_make_meta)              ._doc_header_and_make_substitutions_fontface_(conf_make_meta);            an_object = line.flow_txt_block_quote(an_object, obj_type_status);            continue;          /+ within block object: group +/ -        } else if (obj_type_status["group"] == TriState.on) {                          /+ within block object: group +/ +        } else if (obj_type_status["group"] == eN.tri.on) {                          /+ within block object: group +/            line = line              ._doc_header_and_make_substitutions_(conf_make_meta)              ._doc_header_and_make_substitutions_fontface_(conf_make_meta)              .replaceAll(rgx.para_delimiter, mkup.br_paragraph ~ "$1");            an_object = line.flow_txt_block_group(an_object, obj_type_status);            continue; -        } else if (obj_type_status["block"] == TriState.on) {                          /+ within block object: block +/ +        } else if (obj_type_status["block"] == eN.tri.on) {                          /+ within block object: block +/            line = line              ._doc_header_and_make_substitutions_(conf_make_meta)              ._doc_header_and_make_substitutions_fontface_(conf_make_meta); @@ -816,16 +836,16 @@ template docAbstraction() {            }            an_object = line.flow_txt_block_block(an_object, obj_type_status);            continue; -        } else if (obj_type_status["poem"] == TriState.on) {                           /+ within block object: poem +/ +        } 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);            continue; -        } else if (obj_type_status["table"] == TriState.on) {                          /+ within block object: table +/ +        } 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);            continue;          } else {                                                                /+ not within a block group +/            assert( -            (obj_type_status["blocks"] == TriState.off) -            || (obj_type_status["blocks"] == TriState.closing), +            (obj_type_status["blocks"] == eN.tri.off) +            || (obj_type_status["blocks"] == eN.tri.closing),              "block status: none or closed"            );            assertions_flag_types_block_status_none_or_closed(obj_type_status); @@ -844,11 +864,11 @@ template docAbstraction() {                "line tested, line not empty surely:\n  \"" ~ line ~ "\""              );              assert( -              (obj_type_status["blocks"] == TriState.off) -              || (obj_type_status["blocks"] == TriState.closing), +              (obj_type_status["blocks"] == eN.tri.off) +              || (obj_type_status["blocks"] == eN.tri.closing),                "code block status: none or closed"              ); -            if (obj_type_status["blocks"] == TriState.closing) { +            if (obj_type_status["blocks"] == eN.tri.closing) {                debug(check) {                  writeln(__LINE__);                  writeln(line); @@ -856,15 +876,15 @@ template docAbstraction() {                assert(                  line.matchFirst(rgx.book_index_item)                  || line.matchFirst(rgx.book_index_item_open) -                || track["section"] == status.sect.book_index, +                || track_state["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["section"] == status.sect.book_index)  {                              /+ book_index +/ -              an_object = line.flow_book_index_(an_object, book_idx_tmp, obj_type_status, track, opt_action); +            || 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);              } else {                                                                       /+ not book_index +/                an_object_key="body_nugget";                if (auto m = line.matchFirst(rgx.comment)) {                                 /+ matched comment +/ @@ -882,19 +902,19 @@ template docAbstraction() {                  flow_common_reset_(line_occur, an_object, obj_type_status);                  processing.remove("verse");                  ++cntr; -              } else if (((line_occur["para"] == State.off) -              && (line_occur["heading"] == State.off)) -              && ((obj_type_status["para"] == State.off) -              && (obj_type_status["heading"] == State.off))) {                             /+ heading or para but neither flag nor line exists +/ +              } else if (((line_occur["para"] == eN.bi.off) +              && (line_occur["heading"] == eN.bi.off)) +              && ((obj_type_status["para"] == eN.bi.off) +              && (obj_type_status["heading"] == eN.bi.off))) {                             /+ heading or para but neither flag nor line exists +/                  if ((conf_make_meta.make.headings.length > 2) -                && (obj_type_status["make_headings"] == State.off)) {                      /+ heading found +/ +                && (obj_type_status["make_headings"] == eN.bi.off)) {                      /+ heading found +/                    heading_match_str = line.flow_heading_found_(heading_match_str, conf_make_meta.make.headings, heading_match_rgx, obj_type_status);                  } -                if ((obj_type_status["make_headings"] == State.on) -                && ((line_occur["para"] == State.off) -                && (line_occur["heading"] == State.off)) -                && ((obj_type_status["para"] == State.off) -                && (obj_type_status["heading"] == State.off))) {                           /+ heading make set +/ +                if ((obj_type_status["make_headings"] == eN.bi.on) +                && ((line_occur["para"] == eN.bi.off) +                && (line_occur["heading"] == eN.bi.off)) +                && ((obj_type_status["para"] == eN.bi.off) +                && (obj_type_status["heading"] == eN.bi.off))) {                           /+ heading make set +/                    line = line.flow_heading_make_set_(line_occur, heading_match_rgx, obj_type_status);                  }                  /+ TODO node info: all headings identified at this point, @@ -913,22 +933,22 @@ template docAbstraction() {                      collapsed_lev,                      obj_type_status,                      conf_make_meta, -                    track, +                    track_state,                    ); -                } else if (line_occur["para"] == State.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)                      ._doc_header_and_make_substitutions_fontface_(conf_make_meta);                    an_object = line.flow_para_match_(an_object, an_object_key, indent, bullet, obj_type_status, line_occur);                  } -              } else if (line_occur["heading"] > State.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"] > State.off) {                                 /+ paragraph +/ +              } else if (line_occur["para"] > eN.bi.off) {                                 /+ paragraph +/                  debug(para) {                    writeln(an_object_key, "-> ", line);                  } @@ -939,7 +959,7 @@ template docAbstraction() {                  ++line_occur["para"];                }              } -          } else if (obj_type_status["blocks"] == TriState.closing) {           /+ line empty, with blocks flag +/ +          } else if (obj_type_status["blocks"] == eN.tri.closing) {           /+ line empty, with blocks flag +/              an_object = line.flow_block_flag_line_empty_(                an_object,                bookindex_extract_hash, @@ -960,7 +980,7 @@ template docAbstraction() {                ~ line ~ "\""              );              assert( -              (obj_type_status["blocks"] == State.off), +              (obj_type_status["blocks"] == eN.bi.off),                "code block status: none"              );              if (_new_doc) { @@ -968,8 +988,8 @@ template docAbstraction() {                lv0_to_3_tags = lv0_to_3_tags.init;                tag_in_seg = tag_in_seg.init;              } -            if ((obj_type_status["heading"] == State.on) -            && (line_occur["heading"] > State.off)) {                                      /+ heading object (current line empty) +/ +            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"]); @@ -1090,8 +1110,8 @@ template docAbstraction() {                an_object.remove("lev_markup_number");                processing.remove("verse");                ++cntr; -            } else if ((obj_type_status["para"] == State.on) -            && (line_occur["para"] > State.off)) { +            } else if ((obj_type_status["para"] == eN.bi.on) +            && (line_occur["para"] > eN.bi.off)) {                /+ paragraph object (current line empty) +/                /+ repeated character paragraph separator +/                if ((an_object[an_object_key].to!string).matchFirst(rgx.repeated_character_line_separator)) { @@ -1166,7 +1186,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["section"] = status.sect.unset; +            track_state["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) { @@ -2439,10 +2459,10 @@ template docAbstraction() {      return ref string[string]  an_object,      return ref int[string]     obj_type_status,    ) { -    line_occur["heading"]      = State.off; -    line_occur["para"]         = State.off; -    obj_type_status["heading"] = State.off; -    obj_type_status["para"]    = State.off; +    line_occur["heading"]      = eN.bi.off; +    line_occur["para"]         = eN.bi.off; +    obj_type_status["heading"] = eN.bi.off; +    obj_type_status["para"]    = eN.bi.off;      an_object                  = an_object.object_reset;    }    @safe static int[string] _check_ocn_status_()( @@ -2464,7 +2484,7 @@ template docAbstraction() {          }          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"]    = Status.on; +          obj_type_status["heading_off_for_multiple_objects"]    = eN.bi.on;            obj_type_status["ocn_status"]                          = OCNstatus.off;            debug(ocnoff) {              writeln(line); @@ -2472,18 +2492,18 @@ template docAbstraction() {          }        } else {          if (obj_type_status["ocn_status_off_for_multiple_objects"] == OCN_off_block_status.off) { -          obj_type_status["dummy_heading_status"] = 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"] = Status.on; +            obj_type_status["dummy_heading_status"] = eN.bi.on;            }            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"] = Status.on; +            obj_type_status["dummy_heading_status"] = eN.bi.on;            } else {              obj_type_status["ocn_status"]           = OCNstatus.on; -            obj_type_status["dummy_heading_status"] = Status.off; +            obj_type_status["dummy_heading_status"] = eN.bi.off;            }          } else {            obj_type_status["ocn_status"]             = obj_type_status["ocn_status_off_for_multiple_objects"]; @@ -2496,7 +2516,7 @@ template docAbstraction() {        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"]                = Status.off; +        obj_type_status["dummy_heading_status"]                = eN.bi.off;          debug(ocnoff) {            writeln(line);          } @@ -2562,9 +2582,9 @@ template docAbstraction() {            line          );        } -      obj_type_status["blocks"]     = TriState.on; -      obj_type_status["code"]       = TriState.on; -      obj_type_status["curly_code"] = TriState.on; +      obj_type_status["blocks"]     = eN.tri.on; +      obj_type_status["code"]       = eN.tri.on; +      obj_type_status["curly_code"] = eN.tri.on;      } else if (auto m = line.matchFirst(rgx.block_curly_poem_open)) {        dochas["poem"]++;        an_object["syntax"]            = ""; @@ -2577,10 +2597,10 @@ template docAbstraction() {          );        }        object_number_poem["start"]   = obj_cite_digits.object_number.to!string; -      obj_type_status["blocks"]     = TriState.on; -      obj_type_status["verse_new"]  = State.on; -      obj_type_status["poem"]       = TriState.on; -      obj_type_status["curly_poem"] = TriState.on; +      obj_type_status["blocks"]     = eN.tri.on; +      obj_type_status["verse_new"]  = eN.bi.on; +      obj_type_status["poem"]       = eN.tri.on; +      obj_type_status["curly_poem"] = eN.tri.on;      } else if (auto m = line.matchFirst(rgx.block_curly_group_open)) {        dochas["group"]++;        an_object["syntax"]            = ""; @@ -2592,9 +2612,9 @@ template docAbstraction() {            line          );        } -      obj_type_status["blocks"]      = TriState.on; -      obj_type_status["group"]       = TriState.on; -      obj_type_status["curly_group"] = TriState.on; +      obj_type_status["blocks"]      = eN.tri.on; +      obj_type_status["group"]       = eN.tri.on; +      obj_type_status["curly_group"] = eN.tri.on;      } else if (auto m = line.matchFirst(rgx.block_curly_block_open)) {        dochas["block"]++;        an_object["syntax"]            = ""; @@ -2606,9 +2626,9 @@ template docAbstraction() {            line          );        } -      obj_type_status["blocks"]      = TriState.on; -      obj_type_status["block"]       = TriState.on; -      obj_type_status["curly_block"] = TriState.on; +      obj_type_status["blocks"]      = eN.tri.on; +      obj_type_status["block"]       = eN.tri.on; +      obj_type_status["curly_block"] = eN.tri.on;      } else if (auto m = line.matchFirst(rgx.block_curly_quote_open)) {        dochas["quote"]++;        an_object["syntax"]            = ""; @@ -2620,9 +2640,9 @@ template docAbstraction() {            line          );        } -      obj_type_status["blocks"]      = TriState.on; -      obj_type_status["quote"]       = TriState.on; -      obj_type_status["curly_quote"] = TriState.on; +      obj_type_status["blocks"]      = eN.tri.on; +      obj_type_status["quote"]       = eN.tri.on; +      obj_type_status["curly_quote"] = eN.tri.on;      } else if (auto m = line.matchFirst(rgx.block_curly_table_open)) {           /+ curly table open +/        debug(table) {                             // table (curly) open          writefln( @@ -2633,16 +2653,16 @@ template docAbstraction() {        dochas["table"] ++;        an_object["table_head"]        = m["attrib"].to!string;        an_object["block_type"]        = "curly"; -      obj_type_status["blocks"]      = TriState.on; -      obj_type_status["table"]       = TriState.on; -      obj_type_status["curly_table"] = TriState.on; +      obj_type_status["blocks"]      = eN.tri.on; +      obj_type_status["table"]       = eN.tri.on; +      obj_type_status["curly_table"] = eN.tri.on;      } 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"; -      obj_type_status["blocks"]                     = TriState.on; -      obj_type_status["table"]                      = TriState.on; -      obj_type_status["curly_table_special_markup"] = TriState.on; +      obj_type_status["blocks"]                     = eN.tri.on; +      obj_type_status["table"]                      = eN.tri.on; +      obj_type_status["curly_table_special_markup"] = eN.tri.on;      } else if (auto m = line.matchFirst(rgx.block_tic_code_open)) {        dochas["codeblock"]++;        an_object["lang"]              = ""; @@ -2654,9 +2674,9 @@ template docAbstraction() {            line          );        } -      obj_type_status["blocks"]   = TriState.on; -      obj_type_status["code"]     = TriState.on; -      obj_type_status["tic_code"] = TriState.on; +      obj_type_status["blocks"]   = eN.tri.on; +      obj_type_status["code"]     = eN.tri.on; +      obj_type_status["tic_code"] = eN.tri.on;      } else if (auto m = line.matchFirst(rgx.block_tic_poem_open)) {        dochas["poem"]++;        an_object["syntax"]            = ""; @@ -2669,10 +2689,10 @@ template docAbstraction() {          );        }        object_number_poem["start"]  = obj_cite_digits.object_number.to!string; -      obj_type_status["blocks"]    = TriState.on; -      obj_type_status["verse_new"] = State.on; -      obj_type_status["poem"]      = TriState.on; -      obj_type_status["tic_poem"]  = TriState.on; +      obj_type_status["blocks"]    = eN.tri.on; +      obj_type_status["verse_new"] = eN.bi.on; +      obj_type_status["poem"]      = eN.tri.on; +      obj_type_status["tic_poem"]  = eN.tri.on;      } else if (auto m = line.matchFirst(rgx.block_tic_group_open)) {        dochas["group"]++;        an_object["syntax"]            = ""; @@ -2684,9 +2704,9 @@ template docAbstraction() {            line          );        } -      obj_type_status["blocks"]    = TriState.on; -      obj_type_status["group"]     = TriState.on; -      obj_type_status["tic_group"] = TriState.on; +      obj_type_status["blocks"]    = eN.tri.on; +      obj_type_status["group"]     = eN.tri.on; +      obj_type_status["tic_group"] = eN.tri.on;      } else if (auto m = line.matchFirst(rgx.block_tic_block_open)) {        dochas["block"]++;        an_object["syntax"]            = ""; @@ -2698,9 +2718,9 @@ template docAbstraction() {            line          );        } -      obj_type_status["blocks"]    = TriState.on; -      obj_type_status["block"]     = TriState.on; -      obj_type_status["tic_block"] = TriState.on; +      obj_type_status["blocks"]    = eN.tri.on; +      obj_type_status["block"]     = eN.tri.on; +      obj_type_status["tic_block"] = eN.tri.on;      } else if (auto m = line.matchFirst(rgx.block_tic_quote_open)) {        dochas["quote"]++;        an_object["syntax"]            = ""; @@ -2712,9 +2732,9 @@ template docAbstraction() {            line          );        } -      obj_type_status["blocks"]    = TriState.on; -      obj_type_status["quote"]     = TriState.on; -      obj_type_status["tic_quote"] = TriState.on; +      obj_type_status["blocks"]    = eN.tri.on; +      obj_type_status["quote"]     = eN.tri.on; +      obj_type_status["tic_quote"] = eN.tri.on;      } else if (auto m = line.matchFirst(rgx.block_tic_table_open)) {             /+ tic table open +/        debug(table) {                             // table (tic) open          writefln( @@ -2725,9 +2745,9 @@ template docAbstraction() {        dochas["table"] ++;        an_object["table_head"]      = m["attrib"].to!string;        an_object["block_type"]      = "tic"; -      obj_type_status["blocks"]    = TriState.on; -      obj_type_status["table"]     = TriState.on; -      obj_type_status["tic_table"] = TriState.on; +      obj_type_status["blocks"]    = eN.tri.on; +      obj_type_status["table"]     = eN.tri.on; +      obj_type_status["tic_table"] = eN.tri.on;      }    }    @safe string[string] flow_txt_block_quote()( @@ -2736,30 +2756,30 @@ template docAbstraction() {      return ref int[string]     obj_type_status    ) {      static auto rgx = RgxI(); -    if (obj_type_status["curly_quote"] == TriState.on) { +    if (obj_type_status["curly_quote"] == eN.tri.on) {        if (line.matchFirst(rgx.block_curly_quote_close)) {          debug(quote) {                              // quote (curly) close            writeln(line);          }          an_object[an_object_key]       = an_object[an_object_key].stripRight; -        obj_type_status["blocks"]      = TriState.closing; -        obj_type_status["quote"]       = TriState.closing; -        obj_type_status["curly_quote"] = TriState.off; +        obj_type_status["blocks"]      = eN.tri.closing; +        obj_type_status["quote"]       = eN.tri.closing; +        obj_type_status["curly_quote"] = eN.tri.off;        } else {          debug(quote) {            writeln(line);          }          an_object[an_object_key] ~= line ~= "\n";   // build quote array (or string)        } -    } else if (obj_type_status["tic_quote"] == TriState.on) { +    } else if (obj_type_status["tic_quote"] == eN.tri.on) {        if (line.matchFirst(rgx.block_tic_close)) {          debug(quote) {                              // quote (tic) close            writeln(line);          }          an_object[an_object_key]     = an_object[an_object_key].stripRight; -        obj_type_status["blocks"]    = TriState.closing; -        obj_type_status["quote"]     = TriState.closing; -        obj_type_status["tic_quote"] = TriState.off; +        obj_type_status["blocks"]    = eN.tri.closing; +        obj_type_status["quote"]     = eN.tri.closing; +        obj_type_status["tic_quote"] = eN.tri.off;        } else {          debug(quote) {            writeln(line); @@ -2775,30 +2795,30 @@ template docAbstraction() {      return ref int[string]     obj_type_status    ) {      static auto rgx = RgxI(); -    if (obj_type_status["curly_group"] == State.on) { +    if (obj_type_status["curly_group"] == eN.bi.on) {        if (line.matchFirst(rgx.block_curly_group_close)) {          debug(group) {            writeln(line);          }          an_object[an_object_key]       = an_object[an_object_key].stripRight; -        obj_type_status["blocks"]      = TriState.closing; -        obj_type_status["group"]       = TriState.closing; -        obj_type_status["curly_group"] = TriState.off; +        obj_type_status["blocks"]      = eN.tri.closing; +        obj_type_status["group"]       = eN.tri.closing; +        obj_type_status["curly_group"] = eN.tri.off;        } else {          debug(group) {            writeln(line);          }          an_object[an_object_key] ~= line ~= "\n";   // build group array (or string)        } -    } else if (obj_type_status["tic_group"] == TriState.on) { +    } else if (obj_type_status["tic_group"] == eN.tri.on) {        if (line.matchFirst(rgx.block_tic_close)) {          debug(group) {            writeln(line);          }          an_object[an_object_key]     = an_object[an_object_key].stripRight; -        obj_type_status["blocks"]    = TriState.closing; -        obj_type_status["group"]     = TriState.closing; -        obj_type_status["tic_group"] = TriState.off; +        obj_type_status["blocks"]    = eN.tri.closing; +        obj_type_status["group"]     = eN.tri.closing; +        obj_type_status["tic_group"] = eN.tri.off;        } else {          debug(group) {            writeln(line); @@ -2814,30 +2834,30 @@ template docAbstraction() {      return ref int[string]     obj_type_status    ) {      static auto rgx = RgxI(); -    if (obj_type_status["curly_block"] == TriState.on) { +    if (obj_type_status["curly_block"] == eN.tri.on) {        if (line.matchFirst(rgx.block_curly_block_close)) {          debug(block) {                             // block (curly) close            writeln(line);          }          an_object[an_object_key]       = an_object[an_object_key].stripRight; -        obj_type_status["blocks"]      = TriState.closing; -        obj_type_status["block"]       = TriState.closing; -        obj_type_status["curly_block"] = TriState.off; +        obj_type_status["blocks"]      = eN.tri.closing; +        obj_type_status["block"]       = eN.tri.closing; +        obj_type_status["curly_block"] = eN.tri.off;        } else {          debug(block) {            writeln(line);          }          an_object[an_object_key] ~= line ~= "\n";   // build block array (or string)        } -    } else if (obj_type_status["tic_block"] == TriState.on) { +    } else if (obj_type_status["tic_block"] == eN.tri.on) {        if (line.matchFirst(rgx.block_tic_close)) {          debug(block) {            writeln(line);          }          an_object[an_object_key]     = an_object[an_object_key].stripRight; -        obj_type_status["blocks"]    = TriState.closing; -        obj_type_status["block"]     = TriState.closing; -        obj_type_status["tic_block"] = TriState.off; +        obj_type_status["blocks"]    = eN.tri.closing; +        obj_type_status["block"]     = eN.tri.closing; +        obj_type_status["tic_block"] = eN.tri.off;        } else {          debug(block) {            writeln(line); @@ -2857,7 +2877,7 @@ template docAbstraction() {                 string[string]  tag_in_seg,    ) {      static auto rgx = RgxI(); -    if (obj_type_status["curly_poem"] == TriState.on) { +    if (obj_type_status["curly_poem"] == eN.tri.on) {        if (line.matchFirst(rgx.block_curly_poem_close)) {          if (an_object_key in an_object          || processing.length > 0) { @@ -2915,20 +2935,20 @@ template docAbstraction() {            ++cntr;          }          object_number_poem["end"]     = obj_cite_digits.object_number.to!string; -        obj_type_status["blocks"]     = TriState.closing; -        obj_type_status["poem"]       = TriState.closing; -        obj_type_status["curly_poem"] = TriState.off; +        obj_type_status["blocks"]     = eN.tri.closing; +        obj_type_status["poem"]       = eN.tri.closing; +        obj_type_status["curly_poem"] = eN.tri.off;        } else {          processing["verse"] ~= line ~= "\n"; -        if (obj_type_status["verse_new"] == State.on) { +        if (obj_type_status["verse_new"] == eN.bi.on) {            obj_cite_digits = ocn_emit(obj_type_status["ocn_status"]); -          obj_type_status["verse_new"] = State.off; +          obj_type_status["verse_new"] = eN.bi.off;          } else if (line.matchFirst(rgx.newline_eol_delimiter_only)) {            processing["verse"] = processing["verse"].stripRight; -          verse_line = TriState.off; -          obj_type_status["verse_new"] = State.on; +          verse_line = eN.tri.off; +          obj_type_status["verse_new"] = eN.bi.on;          } -        if (obj_type_status["verse_new"] == State.on) { +        if (obj_type_status["verse_new"] == eN.bi.on) {            verse_line=1;            an_object[an_object_key] = processing["verse"];            debug(poem) {                          // poem verse @@ -2977,7 +2997,7 @@ template docAbstraction() {            ++cntr;          }        } -    } else if (obj_type_status["tic_poem"] == TriState.on) { +    } else if (obj_type_status["tic_poem"] == eN.tri.on) {        if (auto m = line.matchFirst(rgx.block_tic_close)) { // tic_poem_close          an_object[an_object_key]="verse";          debug(poem) { @@ -3023,20 +3043,20 @@ template docAbstraction() {            processing.remove("verse");            ++cntr;          } -        obj_type_status["blocks"]   = TriState.closing; -        obj_type_status["poem"]     = TriState.closing; -        obj_type_status["tic_poem"] = TriState.off; +        obj_type_status["blocks"]   = eN.tri.closing; +        obj_type_status["poem"]     = eN.tri.closing; +        obj_type_status["tic_poem"] = eN.tri.off;        } else {          processing["verse"] ~= line ~= "\n"; -        if (obj_type_status["verse_new"] == State.on) { +        if (obj_type_status["verse_new"] == eN.bi.on) {            obj_cite_digits = ocn_emit(obj_type_status["ocn_status"]); -          obj_type_status["verse_new"] = State.off; +          obj_type_status["verse_new"] = eN.bi.off;          } else if (line.matchFirst(rgx.newline_eol_delimiter_only)) {            processing["verse"] = processing["verse"].stripRight; -          obj_type_status["verse_new"] = State.on; -          verse_line = TriState.off; +          obj_type_status["verse_new"] = eN.bi.on; +          verse_line = eN.tri.off;          } -        if (obj_type_status["verse_new"] == State.on) { +        if (obj_type_status["verse_new"] == eN.bi.on) {            verse_line=1;            an_object[an_object_key] = processing["verse"];            debug(poem) {                            // poem (tic) close @@ -3095,7 +3115,7 @@ template docAbstraction() {      return ref int[string]     obj_type_status    ) {      static auto rgx = RgxI(); -    if (obj_type_status["curly_code"] == TriState.on) { +    if (obj_type_status["curly_code"] == eN.tri.on) {        if (line.matchFirst(rgx.block_curly_code_close)) {          debug(codecurly) {                                    // code (curly) close            writeln(line); @@ -3103,16 +3123,16 @@ template docAbstraction() {          an_object[an_object_key] = an_object[an_object_key]            .replaceFirst(rgx.newline_eol_delimiter_only, "")            .stripRight; -        obj_type_status["blocks"]     = TriState.closing; -        obj_type_status["code"]       = TriState.closing; -        obj_type_status["curly_code"] = TriState.off; +        obj_type_status["blocks"]     = eN.tri.closing; +        obj_type_status["code"]       = eN.tri.closing; +        obj_type_status["curly_code"] = eN.tri.off;        } else {          debug(codecurly) {                                    // code (curly) line            writeln(line);          }          an_object[an_object_key] ~= line ~= "\n";        // code (curly) line        } -    } else if (obj_type_status["tic_code"] == TriState.on) { +    } else if (obj_type_status["tic_code"] == eN.tri.on) {        if (line.matchFirst(rgx.block_tic_close)) {          debug(codetic) {                                    // code (tic) close            writeln(line); @@ -3120,9 +3140,9 @@ template docAbstraction() {          an_object[an_object_key] = an_object[an_object_key]            .replaceFirst(rgx.newline_eol_delimiter_only, "")            .stripRight; -        obj_type_status["blocks"]   = TriState.closing; -        obj_type_status["code"]     = TriState.closing; -        obj_type_status["tic_code"] = TriState.off; +        obj_type_status["blocks"]   = eN.tri.closing; +        obj_type_status["code"]     = eN.tri.closing; +        obj_type_status["tic_code"] = eN.tri.off;        } else {          debug(codetic) {                                    // code (tic) line            writeln(line); @@ -3138,25 +3158,25 @@ template docAbstraction() {      return ref CMM             conf_make_meta,    ) {      static auto rgx = RgxI(); -    if (obj_type_status["curly_table"] == TriState.on) { +    if (obj_type_status["curly_table"] == eN.tri.on) {        if (line.matchFirst(rgx.block_curly_table_close)) {          debug(table) {                           // table (curly) close            writeln(line);          } -        obj_type_status["blocks"]      = TriState.closing; -        obj_type_status["table"]       = TriState.closing; -        obj_type_status["curly_table"] = TriState.off; +        obj_type_status["blocks"]      = eN.tri.closing; +        obj_type_status["table"]       = eN.tri.closing; +        obj_type_status["curly_table"] = eN.tri.off;        } else {          debug(table) {                           // table            writeln(line);          }          an_object[an_object_key] ~= line ~= "\n";           // build table array (or string)        } -    } else if (obj_type_status["curly_table_special_markup"] == TriState.on) { +    } else if (obj_type_status["curly_table_special_markup"] == eN.tri.on) {        if (line.empty) { -        obj_type_status["blocks"]                     = TriState.off; -        obj_type_status["table"]                      = TriState.off; -        obj_type_status["curly_table_special_markup"] = TriState.off; +        obj_type_status["blocks"]                     = eN.tri.off; +        obj_type_status["table"]                      = eN.tri.off; +        obj_type_status["curly_table_special_markup"] = eN.tri.off;          line.flow_table_closed_make_special_notation_table_(            an_object,            the_document_body_section, @@ -3172,14 +3192,14 @@ template docAbstraction() {          }          an_object[an_object_key] ~= line ~= "\n";        } -    } else if (obj_type_status["tic_table"] == TriState.on) { +    } else if (obj_type_status["tic_table"] == eN.tri.on) {        if (line.matchFirst(rgx.block_tic_close)) {          debug(table) {                           // table (tic) close            writeln(line);          } -        obj_type_status["blocks"]    = TriState.closing; -        obj_type_status["table"]     = TriState.closing; -        obj_type_status["tic_table"] = TriState.off; +        obj_type_status["blocks"]    = eN.tri.closing; +        obj_type_status["table"]     = eN.tri.closing; +        obj_type_status["tic_table"] = eN.tri.off;        } else {          debug(table) {                           // table            writeln(line); @@ -3214,14 +3234,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, +    return ref int[string] track_state,    ) {      mixin spineBiblio; -    mixin spineDocStatus;      auto jsn = BibJsnStr();      static auto rgx = RgxI();      if (line.matchFirst(rgx.heading_biblio)) { -      track["section"] = status.sect.bibliography; +      track_state["section"] = eN.sect.bibliography;      }      if (line.empty) {        debug { @@ -3232,12 +3251,12 @@ template docAbstraction() {            writeln(biblio_entry_str_json.length);          }        } -      if ((bib_entry == State.off) +      if ((bib_entry == eN.bi.off)        && (biblio_entry_str_json.empty)) { -        bib_entry = State.on; +        bib_entry = eN.bi.on;          biblio_entry_str_json = jsn.biblio_entry_tags_jsonstr;        } else if (!(biblio_entry_str_json.empty)) { -        bib_entry = State.off; +        bib_entry = eN.bi.off;          if (!(biblio_entry_str_json == jsn.biblio_entry_tags_jsonstr)) {            auto biblio_entry = parseJSON(biblio_entry_str_json);            if (biblio_entry["fulltitle"].str.empty) { @@ -3258,7 +3277,7 @@ template docAbstraction() {          writeln(line);        }        auto bt = line.match(rgx.biblio_tags); -      bib_entry = State.off; +      bib_entry = eN.bi.off;        st = bt.captures[1].to!string;        auto header_tag_value=(bt.captures[2]).to!string;        JSONValue j = parseJSON(biblio_entry_str_json); @@ -3391,12 +3410,12 @@ template docAbstraction() {        ~ line ~ "\""      );      assert( -      (obj_type_status["blocks"] == TriState.closing), +      (obj_type_status["blocks"] == eN.tri.closing),        "code block status: closed"      );      assertions_flag_types_block_status_none_or_closed(obj_type_status);      static auto rgx = RgxI(); -    if (obj_type_status["quote"] == TriState.closing) { +    if (obj_type_status["quote"] == eN.tri.closing) {        obj_cite_digits = ocn_emit(obj_type_status["ocn_status"]);        an_object["bookindex_nugget"]          = ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : ""; @@ -3442,12 +3461,12 @@ template docAbstraction() {        comp_obj_block.has.inline_links                = substantive_obj_misc_tuple[sObj.links];        the_document_body_section                      ~= comp_obj_block;        tag_assoc                                      = an_object.inline_para_link_anchor(tag_in_seg, tag_assoc); -      obj_type_status["blocks"]                      = TriState.off; -      obj_type_status["quote"]                       = TriState.off; +      obj_type_status["blocks"]                      = eN.tri.off; +      obj_type_status["quote"]                       = eN.tri.off;        object_reset(an_object);        processing.remove("verse");        ++cntr; -    } else if (obj_type_status["group"] == TriState.closing) { +    } else if (obj_type_status["group"] == eN.tri.closing) {        obj_cite_digits = ocn_emit(obj_type_status["ocn_status"]);        an_object["bookindex_nugget"]          = ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : ""; @@ -3493,12 +3512,12 @@ template docAbstraction() {        comp_obj_block.has.inline_links                = substantive_obj_misc_tuple[sObj.links];        the_document_body_section                      ~= comp_obj_block;        tag_assoc                                      = an_object.inline_para_link_anchor(tag_in_seg, tag_assoc); -      obj_type_status["blocks"]                      = TriState.off; -      obj_type_status["group"]                       = TriState.off; +      obj_type_status["blocks"]                      = eN.tri.off; +      obj_type_status["group"]                       = eN.tri.off;        object_reset(an_object);        processing.remove("verse");        ++cntr; -    } else if (obj_type_status["block"] == TriState.closing) { +    } else if (obj_type_status["block"] == eN.tri.closing) {        obj_cite_digits = ocn_emit(obj_type_status["ocn_status"]);        an_object["bookindex_nugget"]          = ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : ""; @@ -3543,12 +3562,12 @@ template docAbstraction() {        comp_obj_block.has.inline_notes_star           = substantive_obj_misc_tuple[sObj.notes_star];        comp_obj_block.has.inline_links                = substantive_obj_misc_tuple[sObj.links];        the_document_body_section                      ~= comp_obj_block; -      obj_type_status["blocks"]                      = TriState.off; -      obj_type_status["block"]                       = TriState.off; +      obj_type_status["blocks"]                      = eN.tri.off; +      obj_type_status["block"]                       = eN.tri.off;        object_reset(an_object);        processing.remove("verse");        ++cntr; -    } else if (obj_type_status["poem"] == TriState.closing) { +    } else if (obj_type_status["poem"] == eN.tri.closing) {        an_object["bookindex_nugget"]          = ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : "";        bookindex_unordered_hashes @@ -3581,11 +3600,11 @@ template docAbstraction() {        comp_obj_poem_ocn.metainfo.object_number_type   = obj_cite_digits.type;        comp_obj_poem_ocn.text                          = "";        the_document_body_section                       ~= comp_obj_poem_ocn; -      obj_type_status["blocks"]                       = TriState.off; -      obj_type_status["poem"]                         = TriState.off; +      obj_type_status["blocks"]                       = eN.tri.off; +      obj_type_status["poem"]                         = eN.tri.off;        object_reset(an_object);        processing.remove("verse"); -    } else if (obj_type_status["code"] == TriState.closing) { +    } else if (obj_type_status["code"] == eN.tri.closing) {        obj_cite_digits = ocn_emit(obj_type_status["ocn_status"]);        an_object["bookindex_nugget"]          = ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : ""; @@ -3631,12 +3650,12 @@ template docAbstraction() {        comp_obj_code.has.inline_notes_star           = substantive_obj_misc_tuple[sObj.notes_star];        comp_obj_code.has.inline_links                = substantive_obj_misc_tuple[sObj.links];        the_document_body_section                     ~= comp_obj_code; -      obj_type_status["blocks"]                     = TriState.off; -      obj_type_status["code"]                       = TriState.off; +      obj_type_status["blocks"]                     = eN.tri.off; +      obj_type_status["code"]                       = eN.tri.off;        object_reset(an_object);        processing.remove("verse");        ++cntr; -    } else if (obj_type_status["table"] == TriState.closing) { +    } 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"]);        an_object["bookindex_nugget"] @@ -3673,8 +3692,8 @@ template docAbstraction() {        comp_obj_block                                 = comp_obj_block.flow_table_instructions(an_object["table_head"]);        comp_obj_block                                 = comp_obj_block.flow_table_substantive_munge(an_object["substantive"]);        the_document_body_section                      ~= comp_obj_block; -      obj_type_status["blocks"]                      = TriState.off; -      obj_type_status["table"]                       = TriState.off; +      obj_type_status["blocks"]                      = eN.tri.off; +      obj_type_status["table"]                       = eN.tri.off;        object_reset(an_object);        processing.remove("verse");        ++cntr; @@ -3686,10 +3705,9 @@ template docAbstraction() {                 string[string]  an_object,      return ref string          book_idx_tmp,      return ref int[string]     obj_type_status, -    return ref int[string]     track, +    return ref int[string]     track_state,                 B               opt_action,    ) { -    mixin spineDocStatus;      static auto rgx = RgxI();      if (auto m = line.match(rgx.book_index_item)) {                                   /+ match book_index +/        debug(bookindexmatch) { @@ -3700,7 +3718,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["section"] = status.sect.book_index; +      track_state["section"] = eN.sect.book_index;        if (opt_action.backmatter && opt_action.section_bookindex) {          book_idx_tmp = m.captures[1].to!string;          debug(bookindexmatch) { @@ -3710,9 +3728,9 @@ template docAbstraction() {            );          }        } -    } else if (track["section"] == status.sect.book_index)  {                    /+ book_index flag set +/ +    } else if (track_state["section"] == eN.sect.book_index)  {                    /+ book_index flag set +/        if (auto m = line.match(rgx.book_index_item_close))  { -        track["section"] = status.sect.unset; +        track_state["section"] = eN.sect.unset;          if (opt_action.backmatter          && opt_action.section_bookindex) {            an_object["bookindex_nugget"] = book_idx_tmp ~ m.captures[1].to!string; @@ -3742,7 +3760,7 @@ template docAbstraction() {    ) {      static auto rgx = RgxI();      if ((_make_unmarked_headings.length > 2) -    && (obj_type_status["make_headings"] == State.off)) {                        /+ headings found +/ +    && (obj_type_status["make_headings"] == eN.bi.off)) {                        /+ headings found +/        debug(headingsfound) {          writeln(_make_unmarked_headings);        } @@ -3810,7 +3828,7 @@ template docAbstraction() {        default:          break;        } -      obj_type_status["make_headings"] = State.on; +      obj_type_status["make_headings"] = eN.bi.on;      }      return heading_match_str;    } @@ -3820,11 +3838,11 @@ template docAbstraction() {      return ref Regex!(char)[string]  heading_match_rgx,      return ref int[string]           obj_type_status    ) { -    if ((obj_type_status["make_headings"] == State.on) -    && ((line_occur["para"] == State.off) -    && (line_occur["heading"] == State.off)) -    && ((obj_type_status["para"] == State.off) -    && (obj_type_status["heading"] == State.off))) {                             /+ heading make set +/ +    if ((obj_type_status["make_headings"] == eN.bi.on) +    && ((line_occur["para"] == eN.bi.off) +    && (line_occur["heading"] == eN.bi.off)) +    && ((obj_type_status["para"] == eN.bi.off) +    && (obj_type_status["heading"] == eN.bi.off))) {                             /+ heading make set +/        if (line.matchFirst(heading_match_rgx["h_B"])) {          line = "B~ " ~ line;          debug(headingsfound) { @@ -3879,16 +3897,15 @@ 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, +    return ref int[string]     track_state,    ) { -    mixin spineDocStatus;      static auto rgx = RgxI();      if (auto m = line.match(rgx.headings)) {                                      /+ heading match +/        ++line_occur["heading"]; -      obj_type_status["heading"]            = State.on; -      obj_type_status["para"]               = State.off; +      obj_type_status["heading"]            = eN.bi.on; +      obj_type_status["para"]               = eN.bi.off;        if (line.match(rgx.heading_seg_and_above)) { -        track["section"]                    = status.sect.unset; +        track_state["section"]                    = eN.sect.unset;        }        an_object[an_object_key] ~= line ~= "\n";        an_object["lev"] ~= m.captures[1]; @@ -3912,13 +3929,13 @@ template docAbstraction() {            = collapsed_lev["h0"].to!string;          lv["lv"] = DocStructMarkupHeading.h_sect_A;          ++lv["h0"]; -        lv["h1"] = State.off; -        lv["h2"] = State.off; -        lv["h3"] = State.off; -        lv["h4"] = State.off; -        lv["h5"] = State.off; -        lv["h6"] = State.off; -        lv["h7"] = State.off; +        lv["h1"] = eN.bi.off; +        lv["h2"] = eN.bi.off; +        lv["h3"] = eN.bi.off; +        lv["h4"] = eN.bi.off; +        lv["h5"] = eN.bi.off; +        lv["h6"] = eN.bi.off; +        lv["h7"] = eN.bi.off;          goto default;        case "B":          collapsed_lev["h1"] = collapsed_lev["h0"] + 1; @@ -3926,12 +3943,12 @@ template docAbstraction() {            = collapsed_lev["h1"].to!string;          lv["lv"] = DocStructMarkupHeading.h_sect_B;          ++lv["h1"]; -        lv["h2"] = State.off; -        lv["h3"] = State.off; -        lv["h4"] = State.off; -        lv["h5"] = State.off; -        lv["h6"] = State.off; -        lv["h7"] = State.off; +        lv["h2"] = eN.bi.off; +        lv["h3"] = eN.bi.off; +        lv["h4"] = eN.bi.off; +        lv["h5"] = eN.bi.off; +        lv["h6"] = eN.bi.off; +        lv["h7"] = eN.bi.off;          goto default;        case "C":          collapsed_lev["h2"] = collapsed_lev["h1"] + 1; @@ -3939,11 +3956,11 @@ template docAbstraction() {            = collapsed_lev["h2"].to!string;          lv["lv"] = DocStructMarkupHeading.h_sect_C;          ++lv["h2"]; -        lv["h3"] = State.off; -        lv["h4"] = State.off; -        lv["h5"] = State.off; -        lv["h6"] = State.off; -        lv["h7"] = State.off; +        lv["h3"] = eN.bi.off; +        lv["h4"] = eN.bi.off; +        lv["h5"] = eN.bi.off; +        lv["h6"] = eN.bi.off; +        lv["h7"] = eN.bi.off;          goto default;        case "D":          collapsed_lev["h3"] = collapsed_lev["h2"] + 1; @@ -3951,61 +3968,61 @@ template docAbstraction() {            = collapsed_lev["h3"].to!string;          lv["lv"] = DocStructMarkupHeading.h_sect_D;          ++lv["h3"]; -        lv["h4"] = State.off; -        lv["h5"] = State.off; -        lv["h6"] = State.off; -        lv["h7"] = State.off; +        lv["h4"] = eN.bi.off; +        lv["h5"] = eN.bi.off; +        lv["h6"] = eN.bi.off; +        lv["h7"] = eN.bi.off;          goto default;        case "1": -        if (lv["h3"] > State.off) { +        if (lv["h3"] > eN.bi.off) {            collapsed_lev["h4"] = collapsed_lev["h3"] + 1; -        } else if (lv["h2"] > State.off) { +        } else if (lv["h2"] > eN.bi.off) {            collapsed_lev["h4"] = collapsed_lev["h2"] + 1; -        } else if (lv["h1"] > State.off) { +        } else if (lv["h1"] > eN.bi.off) {            collapsed_lev["h4"] = collapsed_lev["h1"] + 1; -        } else if (lv["h0"] > State.off) { +        } else if (lv["h0"] > eN.bi.off) {            collapsed_lev["h4"] = collapsed_lev["h0"] + 1;          }          an_object["lev_collapsed_number"]            = collapsed_lev["h4"].to!string;          lv["lv"] = DocStructMarkupHeading.h_text_1;          ++lv["h4"]; -        lv["h5"] = State.off; -        lv["h6"] = State.off; -        lv["h7"] = State.off; +        lv["h5"] = eN.bi.off; +        lv["h6"] = eN.bi.off; +        lv["h7"] = eN.bi.off;          goto default;        case "2": -        if (lv["h5"] > State.off) { +        if (lv["h5"] > eN.bi.off) {            an_object["lev_collapsed_number"]              = collapsed_lev["h5"].to!string; -        } else if (lv["h4"] > State.off) { +        } else if (lv["h4"] > eN.bi.off) {            collapsed_lev["h5"] = collapsed_lev["h4"] + 1;            an_object["lev_collapsed_number"]              = collapsed_lev["h5"].to!string;          }          lv["lv"] = DocStructMarkupHeading.h_text_2;          ++lv["h5"]; -        lv["h6"] = State.off; -        lv["h7"] = State.off; +        lv["h6"] = eN.bi.off; +        lv["h7"] = eN.bi.off;          goto default;        case "3": -        if (lv["h6"] > State.off) { +        if (lv["h6"] > eN.bi.off) {            an_object["lev_collapsed_number"]              = collapsed_lev["h6"].to!string; -        } else if (lv["h5"] > State.off) { +        } else if (lv["h5"] > eN.bi.off) {            collapsed_lev["h6"] = collapsed_lev["h5"] + 1;            an_object["lev_collapsed_number"]              = collapsed_lev["h6"].to!string;          }          lv["lv"] = DocStructMarkupHeading.h_text_3;          ++lv["h6"]; -        lv["h7"] = State.off; +        lv["h7"] = eN.bi.off;          goto default;        case "4": -        if (lv["h7"] > State.off) { +        if (lv["h7"] > eN.bi.off) {            an_object["lev_collapsed_number"]              = collapsed_lev["h7"].to!string; -        } else if (lv["h6"] > State.off) { +        } else if (lv["h6"] > eN.bi.off) {            collapsed_lev["h7"] = collapsed_lev["h6"] + 1;            an_object["lev_collapsed_number"]              = collapsed_lev["h7"].to!string; @@ -4016,7 +4033,7 @@ template docAbstraction() {        default:          an_object["lev_markup_number"] = lv["lv"].to!string;        } -      an_object["dummy_heading_status"] = (obj_type_status["dummy_heading_status"] == State.off) ? "f" : "t"; +      an_object["dummy_heading_status"] = (obj_type_status["dummy_heading_status"] == eN.bi.off) ? "f" : "t";        debug(heading) {          writeln(line.strip);        } @@ -4033,10 +4050,10 @@ template docAbstraction() {      return ref int[string]     line_occur,    ) {      static auto rgx = RgxI(); -    if (line_occur["para"] == State.off) { +    if (line_occur["para"] == eN.bi.off) {        line = font_faces_line(line);        /+ para matches +/ -      obj_type_status["para"] = State.on; +      obj_type_status["para"] = eN.bi.on;        an_object[an_object_key] ~= line;        indent=[          "hang_position" : 0, @@ -5748,13 +5765,13 @@ template docAbstraction() {        assert(obj_cite_digits.object_number.to!int >= 0);        assert(is_ != "heading");                          // should not be necessary        assert(obj_cite_digits.object_number.to!int >= 0); // should not be necessary -      if (lv7 > State.off) { +      if (lv7 > eN.bi.off) {          p_["lev_markup_number"] = DocStructMarkupHeading.h_text_4;          p_["object_number"] = lv7; -      } else if (lv6 > State.off) { +      } else if (lv6 > eN.bi.off) {          p_["lev_markup_number"] = DocStructMarkupHeading.h_text_3;          p_["object_number"] = lv6; -      } else if (lv5 > State.off) { +      } else if (lv5 > eN.bi.off) {          p_["lev_markup_number"] = DocStructMarkupHeading.h_text_2;          p_["object_number"] = lv5;        } else { @@ -5861,15 +5878,15 @@ template docAbstraction() {          lv = DocStructMarkupHeading.h_text_1;          lv4 = obj_cite_digit;          lv5=0; lv6=0; lv7=0; -        if (lv3 > State.off) { +        if (lv3 > eN.bi.off) {            p_["lev_markup_number"]              = DocStructMarkupHeading.h_sect_D;            p_["object_number"] = lv3; -        } else if (lv2 > State.off) { +        } else if (lv2 > eN.bi.off) {            p_["lev_markup_number"]              = DocStructMarkupHeading.h_sect_C;            p_["object_number"] = lv2; -        } else if (lv1 > State.off) { +        } else if (lv1 > eN.bi.off) {            p_["lev_markup_number"]              = DocStructMarkupHeading.h_sect_B;            p_["object_number"] = lv1; @@ -5988,171 +6005,171 @@ template docAbstraction() {      string[string]  an_object,      int[string]     lv    ) { -    if (lv["h3"] > State.off) { -      assert(lv["h0"] > State.off); -      assert(lv["h1"] > State.off); -      assert(lv["h2"] > State.off); -    } else if (lv["h2"] > State.off) { -      assert(lv["h0"] > State.off); -      assert(lv["h1"] > State.off); -      assert(lv["h3"] == State.off); -    } else if (lv["h1"] > State.off) { -      assert(lv["h0"] > State.off); -      assert(lv["h2"] == State.off); -      assert(lv["h3"] == State.off); -    } else if (lv["h0"] > State.off) { -      assert(lv["h1"] == State.off); -      assert(lv["h2"] == State.off); -      assert(lv["h3"] == State.off); +    if (lv["h3"] > eN.bi.off) { +      assert(lv["h0"] > eN.bi.off); +      assert(lv["h1"] > eN.bi.off); +      assert(lv["h2"] > eN.bi.off); +    } else if (lv["h2"] > eN.bi.off) { +      assert(lv["h0"] > eN.bi.off); +      assert(lv["h1"] > eN.bi.off); +      assert(lv["h3"] == eN.bi.off); +    } else if (lv["h1"] > eN.bi.off) { +      assert(lv["h0"] > eN.bi.off); +      assert(lv["h2"] == eN.bi.off); +      assert(lv["h3"] == eN.bi.off); +    } else if (lv["h0"] > eN.bi.off) { +      assert(lv["h1"] == eN.bi.off); +      assert(lv["h2"] == eN.bi.off); +      assert(lv["h3"] == eN.bi.off);      } else { -      assert(lv["h0"] == State.off); -      assert(lv["h1"] == State.off); -      assert(lv["h2"] == State.off); -      assert(lv["h3"] == State.off); -    } -    if (lv["h7"] > State.off) { -      assert(lv["h4"] > State.off); -      assert(lv["h5"] > State.off); -      assert(lv["h6"] > State.off); -    } else if (lv["h6"] > State.off) { -      assert(lv["h4"] > State.off); -      assert(lv["h5"] > State.off); -      assert(lv["h7"] == State.off); -    } else if (lv["h5"] > State.off) { -      assert(lv["h4"] > State.off); -      assert(lv["h6"] == State.off); -      assert(lv["h7"] == State.off); -    } else if (lv["h4"] > State.off) { -      assert(lv["h5"] == State.off); -      assert(lv["h6"] == State.off); -      assert(lv["h7"] == State.off); +      assert(lv["h0"] == eN.bi.off); +      assert(lv["h1"] == eN.bi.off); +      assert(lv["h2"] == eN.bi.off); +      assert(lv["h3"] == eN.bi.off); +    } +    if (lv["h7"] > eN.bi.off) { +      assert(lv["h4"] > eN.bi.off); +      assert(lv["h5"] > eN.bi.off); +      assert(lv["h6"] > eN.bi.off); +    } else if (lv["h6"] > eN.bi.off) { +      assert(lv["h4"] > eN.bi.off); +      assert(lv["h5"] > eN.bi.off); +      assert(lv["h7"] == eN.bi.off); +    } else if (lv["h5"] > eN.bi.off) { +      assert(lv["h4"] > eN.bi.off); +      assert(lv["h6"] == eN.bi.off); +      assert(lv["h7"] == eN.bi.off); +    } else if (lv["h4"] > eN.bi.off) { +      assert(lv["h5"] == eN.bi.off); +      assert(lv["h6"] == eN.bi.off); +      assert(lv["h7"] == eN.bi.off);      } else { -      assert(lv["h4"] == State.off); -      assert(lv["h5"] == State.off); -      assert(lv["h6"] == State.off); -      assert(lv["h7"] == State.off); +      assert(lv["h4"] == eN.bi.off); +      assert(lv["h5"] == eN.bi.off); +      assert(lv["h6"] == eN.bi.off); +      assert(lv["h7"] == eN.bi.off);      } -    if (lv["h0"] == State.off) { -      assert(lv["h1"] == State.off); -      assert(lv["h2"] == State.off); -      assert(lv["h3"] == State.off); -      assert(lv["h4"] == State.off); -      assert(lv["h5"] == State.off); -      assert(lv["h6"] == State.off); -      assert(lv["h7"] == State.off); +    if (lv["h0"] == eN.bi.off) { +      assert(lv["h1"] == eN.bi.off); +      assert(lv["h2"] == eN.bi.off); +      assert(lv["h3"] == eN.bi.off); +      assert(lv["h4"] == eN.bi.off); +      assert(lv["h5"] == eN.bi.off); +      assert(lv["h6"] == eN.bi.off); +      assert(lv["h7"] == eN.bi.off);      } -    if (lv["h1"] == State.off) { -      assert(lv["h2"] == State.off); -      assert(lv["h3"] == State.off); +    if (lv["h1"] == eN.bi.off) { +      assert(lv["h2"] == eN.bi.off); +      assert(lv["h3"] == eN.bi.off);      } -    if (lv["h2"] == State.off) { -      assert(lv["h3"] == State.off); +    if (lv["h2"] == eN.bi.off) { +      assert(lv["h3"] == eN.bi.off);      } -    if (lv["h3"] == State.off) { +    if (lv["h3"] == eN.bi.off) {      } -    if (lv["h4"] == State.off) { -      assert(lv["h5"] == State.off); -      assert(lv["h6"] == State.off); -      assert(lv["h7"] == State.off); +    if (lv["h4"] == eN.bi.off) { +      assert(lv["h5"] == eN.bi.off); +      assert(lv["h6"] == eN.bi.off); +      assert(lv["h7"] == eN.bi.off);      } -    if (lv["h5"] == State.off) { -      assert(lv["h6"] == State.off); -      assert(lv["h7"] == State.off); +    if (lv["h5"] == eN.bi.off) { +      assert(lv["h6"] == eN.bi.off); +      assert(lv["h7"] == eN.bi.off);      } -    if (lv["h6"] == State.off) { -      assert(lv["h7"] == State.off); +    if (lv["h6"] == eN.bi.off) { +      assert(lv["h7"] == eN.bi.off);      } -    if (lv["h7"] == State.off) { +    if (lv["h7"] == eN.bi.off) {      }      switch ((an_object["lev"]).to!string) {      case "A": -      if (lv["h0"] == State.off) { -        assert(lv["h1"] == State.off); -        assert(lv["h2"] == State.off); -        assert(lv["h3"] == State.off); -        assert(lv["h4"] == State.off); -        assert(lv["h5"] == State.off); -        assert(lv["h6"] == State.off); -        assert(lv["h7"] == State.off); -      } else {                       // (lv["h0"] > State.off) -        assert(lv["h0"] == State.off,"error should not enter level A a second time"); +      if (lv["h0"] == eN.bi.off) { +        assert(lv["h1"] == eN.bi.off); +        assert(lv["h2"] == eN.bi.off); +        assert(lv["h3"] == eN.bi.off); +        assert(lv["h4"] == eN.bi.off); +        assert(lv["h5"] == eN.bi.off); +        assert(lv["h6"] == eN.bi.off); +        assert(lv["h7"] == eN.bi.off); +      } else {                       // (lv["h0"] > eN.bi.off) +        assert(lv["h0"] == eN.bi.off,"error should not enter level A a second time");        }        break;      case "B": -      if (lv["h1"] == State.off) { -        assert(lv["h0"] > State.off); -        assert(lv["h2"] == State.off); -        assert(lv["h3"] == State.off); -      } else {                       // (lv["h1"] > State.off) -        assert(lv["h0"] > State.off); -        assert(lv["h1"] > State.off); +      if (lv["h1"] == eN.bi.off) { +        assert(lv["h0"] > eN.bi.off); +        assert(lv["h2"] == eN.bi.off); +        assert(lv["h3"] == eN.bi.off); +      } else {                       // (lv["h1"] > eN.bi.off) +        assert(lv["h0"] > eN.bi.off); +        assert(lv["h1"] > eN.bi.off);        }        break;      case "C": -      if (lv["h2"] == State.off) { -        assert(lv["h0"] > State.off); -        assert(lv["h1"] > State.off); -        assert(lv["h3"] == State.off); -      } else {                       // (lv["h2"] > State.off) -        assert(lv["h0"] > State.off); -        assert(lv["h1"] > State.off); -        assert(lv["h2"] > State.off); +      if (lv["h2"] == eN.bi.off) { +        assert(lv["h0"] > eN.bi.off); +        assert(lv["h1"] > eN.bi.off); +        assert(lv["h3"] == eN.bi.off); +      } else {                       // (lv["h2"] > eN.bi.off) +        assert(lv["h0"] > eN.bi.off); +        assert(lv["h1"] > eN.bi.off); +        assert(lv["h2"] > eN.bi.off);        }        break;      case "D": -      if (lv["h3"] == State.off) { -        assert(lv["h0"] > State.off); -        assert(lv["h1"] > State.off); -        assert(lv["h2"] > State.off); -      } else {                      // (lv["h3"] > State.off) -        assert(lv["h0"] > State.off); -        assert(lv["h1"] > State.off); -        assert(lv["h2"] > State.off); -        assert(lv["h3"] > State.off); +      if (lv["h3"] == eN.bi.off) { +        assert(lv["h0"] > eN.bi.off); +        assert(lv["h1"] > eN.bi.off); +        assert(lv["h2"] > eN.bi.off); +      } else {                      // (lv["h3"] > eN.bi.off) +        assert(lv["h0"] > eN.bi.off); +        assert(lv["h1"] > eN.bi.off); +        assert(lv["h2"] > eN.bi.off); +        assert(lv["h3"] > eN.bi.off);        }        break;      case "1": -      if (lv["h4"] == State.off) { -        assert(lv["h0"] > State.off); -      } else {                      // (lv["h4"] > State.off) -        assert(lv["h0"] > State.off); -        assert(lv["h4"] > State.off); +      if (lv["h4"] == eN.bi.off) { +        assert(lv["h0"] > eN.bi.off); +      } else {                      // (lv["h4"] > eN.bi.off) +        assert(lv["h0"] > eN.bi.off); +        assert(lv["h4"] > eN.bi.off);        }        break;      case "2": -      if (lv["h5"] == State.off) { -        assert(lv["h0"] > State.off); -        assert(lv["h4"] > State.off); -      } else {                      // (lv["h5"] > State.off) -        assert(lv["h0"] > State.off); -        assert(lv["h4"] > State.off); -        assert(lv["h5"] > State.off); +      if (lv["h5"] == eN.bi.off) { +        assert(lv["h0"] > eN.bi.off); +        assert(lv["h4"] > eN.bi.off); +      } else {                      // (lv["h5"] > eN.bi.off) +        assert(lv["h0"] > eN.bi.off); +        assert(lv["h4"] > eN.bi.off); +        assert(lv["h5"] > eN.bi.off);        }        break;      case "3": -      if (lv["h6"] == State.off) { -        assert(lv["h0"] > State.off); -        assert(lv["h4"] > State.off); -        assert(lv["h5"] > State.off); -      } else {                      // (lv["h6"] > State.off) -        assert(lv["h0"] > State.off); -        assert(lv["h4"] > State.off); -        assert(lv["h5"] > State.off); -        assert(lv["h6"] > State.off); +      if (lv["h6"] == eN.bi.off) { +        assert(lv["h0"] > eN.bi.off); +        assert(lv["h4"] > eN.bi.off); +        assert(lv["h5"] > eN.bi.off); +      } else {                      // (lv["h6"] > eN.bi.off) +        assert(lv["h0"] > eN.bi.off); +        assert(lv["h4"] > eN.bi.off); +        assert(lv["h5"] > eN.bi.off); +        assert(lv["h6"] > eN.bi.off);        }        break;      case "4": -      if (lv["h7"] == State.off) { -        assert(lv["h0"] > State.off); -        assert(lv["h4"] > State.off); -        assert(lv["h5"] > State.off); -        assert(lv["h6"] > State.off); -      } else {                      // (lv["h7"] > State.off) -        assert(lv["h0"] > State.off); -        assert(lv["h4"] > State.off); -        assert(lv["h5"] > State.off); -        assert(lv["h6"] > State.off); -        assert(lv["h7"] > State.off); +      if (lv["h7"] == eN.bi.off) { +        assert(lv["h0"] > eN.bi.off); +        assert(lv["h4"] > eN.bi.off); +        assert(lv["h5"] > eN.bi.off); +        assert(lv["h6"] > eN.bi.off); +      } else {                      // (lv["h7"] > eN.bi.off) +        assert(lv["h0"] > eN.bi.off); +        assert(lv["h4"] > eN.bi.off); +        assert(lv["h5"] > eN.bi.off); +        assert(lv["h6"] > eN.bi.off); +        assert(lv["h7"] > eN.bi.off);        }        break;      default: @@ -6161,24 +6178,24 @@ template docAbstraction() {    }    @safe pure void assertions_flag_types_block_status_none_or_closed()(int[string] obj_type_status) {      assert( -      (obj_type_status["code"] == TriState.off) -      || (obj_type_status["code"] == TriState.closing), +      (obj_type_status["code"] == eN.tri.off) +      || (obj_type_status["code"] == eN.tri.closing),        "code block status: off or closing");      assert( -      (obj_type_status["poem"] == TriState.off) -      || (obj_type_status["poem"] == TriState.closing), +      (obj_type_status["poem"] == eN.tri.off) +      || (obj_type_status["poem"] == eN.tri.closing),        "poem status: off or closing");      assert( -      (obj_type_status["table"] == TriState.off) -      || (obj_type_status["table"] == TriState.closing), +      (obj_type_status["table"] == eN.tri.off) +      || (obj_type_status["table"] == eN.tri.closing),        "table status: off or closing");      assert( -      (obj_type_status["group"] == TriState.off) -      || (obj_type_status["group"] == TriState.closing), +      (obj_type_status["group"] == eN.tri.off) +      || (obj_type_status["group"] == eN.tri.closing),        "group block status: off or closing");      assert( -      (obj_type_status["block"] == TriState.off) -      || (obj_type_status["block"] == TriState.closing), +      (obj_type_status["block"] == eN.tri.off) +      || (obj_type_status["block"] == eN.tri.closing),        "block status: off or closing");    }                                                                                  /+ abstraction functions assertions ↑ +/ | 
