diff options
| author | Ralph Amissah <ralph@amissah.com> | 2017-07-29 05:35:06 -0400 | 
|---|---|---|
| committer | Ralph Amissah <ralph@amissah.com> | 2019-04-10 15:14:14 -0400 | 
| commit | 4ce831bbc753ed1352e615ca79daddd13ea448d5 (patch) | |
| tree | d430a75278548827e9414fcaab1c9cb427856934 | |
| parent | fix for: gdc compiled program when run, segfaults on certain actions (diff) | |
0.18.1 ocn, looks promising
| -rw-r--r-- | org/meta_abstraction.org | 458 | ||||
| -rw-r--r-- | org/sdp.org | 11 | ||||
| -rw-r--r-- | src/sdp/meta/metadoc_from_src.d | 456 | ||||
| -rw-r--r-- | src/sdp/meta/metadoc_summary.d | 9 | ||||
| -rw-r--r-- | src/sdp/meta/object_setter.d | 2 | ||||
| -rw-r--r-- | views/version.txt | 2 | 
6 files changed, 574 insertions, 364 deletions
| diff --git a/org/meta_abstraction.org b/org/meta_abstraction.org index 322fb0c..da74f39 100644 --- a/org/meta_abstraction.org +++ b/org/meta_abstraction.org @@ -199,7 +199,7 @@ enum DocStructMarkupHeading {    h_text_5, // extra level, drop    content_non_header  } // header section A-D; header text 1-4 -enum OCNstatus { inc, exc, bkidx, closing, reset, } +enum OCNstatus { on, off, bkidx, closing, reset, }  enum OCNtype { ocn, non, bkidx, }  /+ biblio variables +/  string biblio_tag_name, biblio_tag_entry, st; @@ -221,7 +221,15 @@ string content_non_header = "8";  static auto obj_im = ObjInlineMarkup();  static auto obj_att = ObjAttributes();  /+ ocn +/ -int obj_cite_digit, obj_cite_digit_, obj_cite_digit_bkidx; +struct OCNset { +  int digit; +  int on; +  int off; +  int bkidx; +  int type; +} +OCNset obj_cite_digits; +int obj_cite_digit_, obj_cite_digit_off, obj_cite_digit_bkidx, obj_cite_digit_type;  auto object_citation_number = OCNemitter();  int[] dom_markedup = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,];  int[] dom_markedup_buffer = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; @@ -393,7 +401,7 @@ pure auto obj_dom_set_collapsed_tags(O)(  #+name: abs_top_init_struct  #+BEGIN_SRC d -int ocn_emit(int ocn_status_flag) { +static auto ocn_emit(int ocn_status_flag) {    return object_citation_number.ocn_emitter(ocn_status_flag);  }  /+ book index variables +/ @@ -491,8 +499,8 @@ auto heading_match_rgx = [  ];  string _anchor_tag;  string toc_txt_; -an_object["glossary_nugget"] = ""; -an_object["blurb_nugget"] = ""; +an_object["glossary_nugget"]            = ""; +an_object["blurb_nugget"]               = "";  comp_obj_heading_                       = comp_obj_heading_.init;  comp_obj_heading_.of_part               = "frontmatter";  comp_obj_heading_.of_section            = "toc"; @@ -501,6 +509,8 @@ comp_obj_heading_.is_a                  = "heading";  comp_obj_heading_.text                  = "Table of Contents";  comp_obj_heading_.ocn                   = 0;  comp_obj_heading_.obj_cite_number       = ""; +comp_obj_heading_.obj_cite_number_off   = ""; +comp_obj_heading_.obj_cite_number_type  = 0;  comp_obj_heading_.segment_anchor_tag    = "toc";  comp_obj_heading_.marked_up_level       = "1";  comp_obj_heading_.heading_lev_markup    = 4; @@ -645,6 +655,8 @@ if there is a glossary section you need to:        comp_obj_heading_.text                  = "Glossary";        comp_obj_heading_.ocn                   = 0;        comp_obj_heading_.obj_cite_number       = ""; +      comp_obj_heading_.obj_cite_number_off   = ""; +      comp_obj_heading_.obj_cite_number_type  = 0;        comp_obj_heading_.segment_anchor_tag    = "_part_glossary";        comp_obj_heading_.marked_up_level       = "B";        comp_obj_heading_.heading_lev_markup    = 1; @@ -662,6 +674,8 @@ if there is a glossary section you need to:        comp_obj_heading_.text                  = "Glossary";        comp_obj_heading_.ocn                   = 0;        comp_obj_heading_.obj_cite_number       = ""; +      comp_obj_heading_.obj_cite_number_off   = ""; +      comp_obj_heading_.obj_cite_number_type  = 0;        comp_obj_heading_.segment_anchor_tag    = "glossary";        comp_obj_heading_.marked_up_level       = "1";        comp_obj_heading_.heading_lev_markup    = 4; @@ -682,12 +696,14 @@ if there is a glossary section you need to:        comp_obj_para.text                  = line.to!string.strip;        comp_obj_para.ocn                   = 0;        comp_obj_para.obj_cite_number       = ""; +      comp_obj_para.obj_cite_number_off   = ""; +      comp_obj_para.obj_cite_number_type  = 0;        comp_obj_para.indent_hang           = indent["hang_position"];        comp_obj_para.indent_base           = indent["base_position"];        comp_obj_para.bullet                = bullet;        the_glossary_section                ~= comp_obj_para;      } -    obj_type_status["ocn_status"] = OCNstatus.inc; +    obj_type_status["ocn_status"] = OCNstatus.on;    }    continue;  #+END_SRC @@ -734,6 +750,8 @@ if there is a blurb section you need to:        comp_obj_heading_.text                  = "Blurb";        comp_obj_heading_.ocn                   = 0;        comp_obj_heading_.obj_cite_number       = ""; +      comp_obj_heading_.obj_cite_number_off   = ""; +      comp_obj_heading_.obj_cite_number_type  = 0;        comp_obj_heading_.segment_anchor_tag    = "_part_blurb";        comp_obj_heading_.marked_up_level       = "B";        comp_obj_heading_.heading_lev_markup    = 1; @@ -751,6 +769,8 @@ if there is a blurb section you need to:        comp_obj_heading_.text                  = "Blurb";        comp_obj_heading_.ocn                   = 0;        comp_obj_heading_.obj_cite_number       = ""; +      comp_obj_heading_.obj_cite_number_off   = ""; +      comp_obj_heading_.obj_cite_number_type  = 0;        comp_obj_heading_.segment_anchor_tag    = "blurb";        comp_obj_heading_.marked_up_level       = "1";        comp_obj_heading_.heading_lev_markup    = 4; @@ -771,6 +791,8 @@ if there is a blurb section you need to:        comp_obj_heading_.text                  = line.to!string;        comp_obj_heading_.ocn                   = 0;        comp_obj_heading_.obj_cite_number       = ""; +      comp_obj_heading_.obj_cite_number_off   = ""; +      comp_obj_heading_.obj_cite_number_type  = 0;        comp_obj_heading_.segment_anchor_tag    = "blurb";        comp_obj_heading_.marked_up_level       = an_object["lev"].to!string;        comp_obj_heading_.heading_lev_markup    = an_object["lev_markup_number"].to!int;    // make int, remove need to conv @@ -788,12 +810,14 @@ if there is a blurb section you need to:        comp_obj_para.text                  = line.to!string.strip;        comp_obj_para.ocn                   = 0;        comp_obj_para.obj_cite_number       = ""; +      comp_obj_para.obj_cite_number_off   = ""; +      comp_obj_para.obj_cite_number_type  = 0;        comp_obj_para.indent_hang           = indent["hang_position"];        comp_obj_para.indent_base           = indent["base_position"];        comp_obj_para.bullet                = bullet;        the_blurb_section                   ~= comp_obj_para;      } -    obj_type_status["ocn_status"] = OCNstatus.inc; +    obj_type_status["ocn_status"] = OCNstatus.on;    }    continue;  #+END_SRC @@ -881,7 +905,7 @@ if (line.matchFirst(rgx.block_poem_open)) {    /+ poem to verse exceptions! +/    object_reset(an_object);    processing.remove("verse"); -  obj_cite_number_poem["start"] = obj_cite_digit.to!string; +  obj_cite_number_poem["start"] = obj_cite_digits.on.to!string;  }  _start_block_(line, obj_type_status, obj_cite_number_poem);  continue; @@ -1034,7 +1058,7 @@ _block_flag_line_empty_(    an_object,    the_document_body_section,    bookindex_unordered_hashes, -  obj_cite_digit, +  obj_cite_digits,    comp_obj_heading,    cntr,    obj_type_status, @@ -1066,9 +1090,9 @@ assert(  if ((obj_type_status["heading"] == State.on)  && (line_occur["heading"] > State.off)) {    /+ heading object (current line empty) +/ -  obj_cite_digit = (an_object["lev_markup_number"].to!int == 0) -  ? (ocn_emit(OCNstatus.reset)) -  : (obj_cite_digit = ocn_emit(obj_type_status["ocn_status"])); +  obj_cite_digits = (an_object["lev_markup_number"].to!int == 0) +  ? ocn_emit(OCNstatus.reset) +  : ocn_emit(OCNstatus.on); // : ocn_emit(obj_type_status["ocn_status"]);    an_object["is"] = "heading";    an_object_key="body_nugget";    auto substantive_object_and_anchor_tags_tuple = @@ -1081,7 +1105,7 @@ if ((obj_type_status["heading"] == State.on)      anchor_tag_ = anchor_tags[0];    } else if (an_object["lev_markup_number"].to!int > 4) {      segment_anchor_tag_that_object_belongs_to = anchor_tag_; -    segment_anchor_tag_that_object_belongs_to_uri = anchor_tag_ ~ ".fnSuffix#" ~ obj_cite_digit.to!string; +    segment_anchor_tag_that_object_belongs_to_uri = anchor_tag_ ~ ".fnSuffix#" ~ obj_cite_digits.on.to!string;    } else if (an_object["lev_markup_number"].to!int < 4) {    string segn;      switch (an_object["lev_markup_number"].to!int) { @@ -1109,9 +1133,9 @@ if ((obj_type_status["heading"] == State.on)    an_object["bookindex_nugget"] =      ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : "";    bookindex_unordered_hashes = -    bookindex_extract_hash.bookindex_nugget_hash(an_object["bookindex_nugget"], obj_cite_digit, segment_anchor_tag_that_object_belongs_to); +    bookindex_extract_hash.bookindex_nugget_hash(an_object["bookindex_nugget"], obj_cite_digits, segment_anchor_tag_that_object_belongs_to);    /+ (incrementally build toc) table of contents here! +/ -  _anchor_tag=to!string(obj_cite_digit); +  _anchor_tag=to!string(obj_cite_digits.on);    the_table_of_contents_section = obj_im.table_of_contents_gather_headings(      an_object,      dochead_make_aa, @@ -1132,7 +1156,7 @@ if ((obj_type_status["heading"] == State.on)        an_object["lev_markup_number"],               // string        an_object["lev_collapsed_number"],            // string        segment_anchor_tag_that_object_belongs_to,    // string -      obj_cite_digit,                               // int +      obj_cite_digits,                              // OCNset        cntr,                                         // int        heading_ptr,                                  // int        lv_ancestors_txt,                             // string[] @@ -1165,17 +1189,17 @@ if ((obj_type_status["heading"] == State.on)  } else if ((obj_type_status["para"] == State.on)  && (line_occur["para"] > State.off)) {    /+ paragraph object (current line empty) +/ -  obj_cite_digit = ocn_emit(obj_type_status["ocn_status"]); +  obj_cite_digits = ocn_emit(obj_type_status["ocn_status"]);    an_object["bookindex_nugget"] =      ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : "";    bookindex_unordered_hashes = -    bookindex_extract_hash.bookindex_nugget_hash(an_object["bookindex_nugget"], obj_cite_digit, segment_anchor_tag_that_object_belongs_to); +    bookindex_extract_hash.bookindex_nugget_hash(an_object["bookindex_nugget"], obj_cite_digits, segment_anchor_tag_that_object_belongs_to);    an_object["is"] = "para";    auto comp_obj_heading =      node_construct.node_location_emitter(        content_non_header,        segment_anchor_tag_that_object_belongs_to, -      obj_cite_digit, +      obj_cite_digits,        cntr,        heading_ptr-1,        an_object["is"], @@ -1190,8 +1214,11 @@ if ((obj_type_status["heading"] == State.on)    comp_obj_para.is_of                 = "para";    comp_obj_para.is_a                  = "para";    comp_obj_para.text                  = an_object["substantive"].to!string.strip; -  comp_obj_para.ocn                   = obj_cite_digit; -  comp_obj_para.obj_cite_number       = (obj_cite_digit==0) ? "" : obj_cite_digit.to!string; +  comp_obj_para.ocn                   = obj_cite_digits.digit; +  comp_obj_para.obj_cite_number       = (obj_cite_digits.on==0)    ? "" : obj_cite_digits.on.to!string; +  comp_obj_para.obj_cite_number_off   = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; +  comp_obj_para.obj_cite_number_bkidx = (obj_cite_digits.bkidx==0) ? "" : obj_cite_digits.bkidx.to!string; +  comp_obj_para.obj_cite_number_type  = obj_cite_digits.type;    comp_obj_para.indent_hang           = indent["hang_position"];    comp_obj_para.indent_base           = indent["base_position"];    comp_obj_para.bullet                = bullet; @@ -1284,10 +1311,10 @@ if (the_document_body_section.length > 0) {  #+name: abs_post  #+BEGIN_SRC d  auto en_tuple = -  note_section.endnote_objects(obj_cite_digit, opt_action); +  note_section.endnote_objects(obj_cite_digits, opt_action);  static assert(!isTypeTuple!(en_tuple));  auto the_endnotes_section = en_tuple[0]; -obj_cite_digit = en_tuple[1]; +obj_cite_digits = en_tuple[1];  debug(endnotes) {    writefln(      "%s %s", @@ -1313,6 +1340,8 @@ if (an_object["glossary_nugget"].length == 0) {    comp_obj_heading_.text                  = "(skip) there is no Glossary section";    comp_obj_heading_.ocn                   = 0;    comp_obj_heading_.obj_cite_number       = ""; +  comp_obj_heading_.obj_cite_number_off   = ""; +  comp_obj_heading_.obj_cite_number_type  = 0;    comp_obj_heading_.marked_up_level       = "B";    comp_obj_heading_.heading_lev_markup    = 1;    comp_obj_heading_.heading_lev_collapsed = 1; @@ -1350,6 +1379,8 @@ if (biblio_ordered.length > 0) {    comp_obj_heading_.text                  = "Bibliography";    comp_obj_heading_.ocn                   = 0;    comp_obj_heading_.obj_cite_number       = ""; +  comp_obj_heading_.obj_cite_number_off   = ""; +  comp_obj_heading_.obj_cite_number_type  = 0;    comp_obj_heading_.segment_anchor_tag    = "_part_bibliography";    comp_obj_heading_.marked_up_level       = "B";    comp_obj_heading_.heading_lev_markup    = 1; @@ -1365,6 +1396,8 @@ if (biblio_ordered.length > 0) {    comp_obj_heading_.text                  = "Bibliography";    comp_obj_heading_.ocn                   = 0;    comp_obj_heading_.obj_cite_number       = ""; +  comp_obj_heading_.obj_cite_number_off   = ""; +  comp_obj_heading_.obj_cite_number_type  = 0;    comp_obj_heading_.segment_anchor_tag    = "bibliography";    comp_obj_heading_.marked_up_level       = "1";    comp_obj_heading_.heading_lev_markup    = 4; @@ -1382,6 +1415,8 @@ if (biblio_ordered.length > 0) {    comp_obj_heading_.text                  = "(skip) there is no Bibliography";    comp_obj_heading_.ocn                   = 0;    comp_obj_heading_.obj_cite_number       = ""; +  comp_obj_heading_.obj_cite_number_off   = ""; +  comp_obj_heading_.obj_cite_number_type  = 0;    comp_obj_heading_.marked_up_level       = "B";    comp_obj_heading_.heading_lev_markup    = 1;    comp_obj_heading_.heading_lev_collapsed = 1; @@ -1419,6 +1454,8 @@ foreach (entry; biblio_ordered) {    comp_obj_para.text                  = out_.to!string.strip;    comp_obj_para.ocn                   = 0;    comp_obj_para.obj_cite_number       = ""; +  comp_obj_para.obj_cite_number_off   = ""; +  comp_obj_para.obj_cite_number_type  = 0;    comp_obj_para.indent_hang           = 0;    comp_obj_para.indent_base           = 1;    comp_obj_para.bullet                = bullet; @@ -1476,13 +1513,13 @@ auto bi = BookIndexReportSection();  auto bi_tuple =    bi.bookindex_build_abstraction_section(      bookindex_unordered_hashes, -    obj_cite_digit, +    obj_cite_digits,      opt_action,    );  destroy(bookindex_unordered_hashes);  static assert(!isTypeTuple!(bi_tuple));  auto the_bookindex_section = bi_tuple[0]; -obj_cite_digit = bi_tuple[1]; +obj_cite_digits = bi_tuple[1];  debug(bookindex) {    foreach (bi_entry; the_bookindex_section["seg"]) {      writeln(bi_entry); @@ -1503,6 +1540,8 @@ if (an_object["blurb_nugget"].length == 0) {    comp_obj_heading_.text                  = "(skip) there is no Blurb section";    comp_obj_heading_.ocn                   = 0;    comp_obj_para.obj_cite_number           = ""; +  comp_obj_para.obj_cite_number_off       = ""; +  comp_obj_para.obj_cite_number_type      = 0;    comp_obj_heading_.segment_anchor_tag    = "";    comp_obj_heading_.marked_up_level       = "B";    comp_obj_heading_.heading_lev_markup    = 1; @@ -1533,6 +1572,8 @@ comp_obj_toc.is_of                 = "para";  comp_obj_toc.is_a                  = "toc";  comp_obj_toc.ocn                   = 0;  comp_obj_toc.obj_cite_number       = ""; +comp_obj_toc.obj_cite_number_off   = ""; +comp_obj_toc.obj_cite_number_type  = 0;  comp_obj_toc.indent_hang           = indent["hang_position"];  comp_obj_toc.indent_base           = indent["base_position"];  comp_obj_toc.bullet                = false; @@ -1831,6 +1872,12 @@ foreach (ref obj; the_document_head_section) {      if (obj.heading_lev_markup <= 4) {        segnames_0_4 ~= obj.segment_anchor_tag;      } +    if (obj.heading_lev_markup == 0) { +      assert( obj.ocn == 1, "Title OCN should be 1 not: " ~ obj.ocn.to!string); // bug introduced 0.18.1 +      obj.ocn = 1; +      obj.obj_cite_number = "1"; +      obj.obj_cite_number_type = OCNtype.ocn; +    }      /+ dom structure (marked up & collapsed) +/      if ((opt_action["html"])      || (opt_action["html-scroll"]) @@ -1960,6 +2007,9 @@ if (the_endnotes_section.length > 1) {        debug(dom) {          writeln(obj.text);        } +      obj_cite_digits = ocn_emit(OCNstatus.on); +      obj.ocn = obj_cite_digits.digit; +      obj.obj_cite_number = obj_cite_digits.on.to!string;        if (obj.heading_lev_markup <= 4) {          segnames_0_4 ~= obj.segment_anchor_tag;          if (obj.heading_lev_markup == 4) { @@ -1997,9 +2047,9 @@ if (the_glossary_section.length > 1) {        debug(dom) {          writeln(obj.text);        } -      obj_cite_digit = ocn_emit(OCNstatus.inc); -      obj.ocn = obj_cite_digit; -      obj.obj_cite_number = obj_cite_digit.to!string; +      obj_cite_digits = ocn_emit(OCNstatus.on); +      obj.ocn = obj_cite_digits.digit; +      obj.obj_cite_number = obj_cite_digits.on.to!string;        if (obj.heading_lev_markup <= 4) {          segnames_0_4 ~= obj.segment_anchor_tag;          if (obj.heading_lev_markup == 4) { @@ -2022,9 +2072,9 @@ if (the_glossary_section.length > 1) {        }        obj = obj_heading_ancestors(obj, lv_ancestors_txt);      } else if (obj.is_a == "glossary") { -      obj_cite_digit = ocn_emit(OCNstatus.inc); -      obj.ocn = obj_cite_digit; -      obj.obj_cite_number = obj_cite_digit.to!string; +      obj_cite_digits = ocn_emit(OCNstatus.on); +      obj.ocn = obj_cite_digits.digit; +      obj.obj_cite_number = obj_cite_digits.on.to!string;      }    }  } @@ -2041,9 +2091,9 @@ if (the_bibliography_section.length > 1) {        debug(dom) {          writeln(obj.text);        } -      obj_cite_digit = ocn_emit(OCNstatus.inc); -      obj.ocn = obj_cite_digit; -      obj.obj_cite_number = obj_cite_digit.to!string; +      obj_cite_digits = ocn_emit(OCNstatus.on); +      obj.ocn = obj_cite_digits.digit; +      obj.obj_cite_number = obj_cite_digits.on.to!string; // check        if (obj.heading_lev_markup <= 4) {          segnames_0_4 ~= obj.segment_anchor_tag;          if (obj.heading_lev_markup == 4) { @@ -2066,9 +2116,9 @@ if (the_bibliography_section.length > 1) {        }        obj = obj_heading_ancestors(obj, lv_ancestors_txt);      } else if (obj.is_a == "bibliography") { -      obj_cite_digit = ocn_emit(OCNstatus.inc); -      obj.ocn = obj_cite_digit; -      obj.obj_cite_number = obj_cite_digit.to!string; +      obj_cite_digits = ocn_emit(OCNstatus.on); +      obj.ocn = obj_cite_digits.on; +      obj.obj_cite_number = obj_cite_digits.on.to!string;      }    }  } @@ -2079,7 +2129,7 @@ if (the_bibliography_section.length > 1) {  #+name: abs_post  #+BEGIN_SRC d  /+ optional only one 1~ level +/ -int ocn_ = obj_cite_digit; +int ocn_ = obj_cite_digits.on;  int ocn_bkidx_ = 0;  int ocn_bidx_;  if (the_bookindex_section["scroll"].length > 1) { @@ -2090,9 +2140,9 @@ if (the_bookindex_section["scroll"].length > 1) {      if (obj.is_a == "heading") {        debug(dom) {        } -      obj_cite_digit = ocn_emit(OCNstatus.inc); -      obj.ocn = obj_cite_digit; -      obj.obj_cite_number = obj_cite_digit.to!string; +      obj_cite_digits = ocn_emit(OCNstatus.on); +      obj.ocn = obj_cite_digits.on; +      obj.obj_cite_number = obj_cite_digits.on.to!string;        if (obj.heading_lev_markup <= 4) {          segnames_0_4 ~= obj.segment_anchor_tag;          if (obj.heading_lev_markup == 4) { @@ -2115,8 +2165,9 @@ if (the_bookindex_section["scroll"].length > 1) {        }        obj = obj_heading_ancestors(obj, lv_ancestors_txt);      } else if (obj.is_a == "bookindex") { -      obj_cite_digit_bkidx = ocn_emit(OCNstatus.bkidx); -      obj.obj_cite_number_bkidx = obj_cite_digit_bkidx.to!string; // FIX need to distinguish from regular ocn +      obj_cite_digits = ocn_emit(OCNstatus.bkidx); +      obj.ocn = obj_cite_digits.digit; +      obj.obj_cite_number_bkidx = obj_cite_digits.bkidx.to!string;        obj.obj_cite_number_type = OCNtype.bkidx;      }    } @@ -2157,7 +2208,6 @@ if (the_bookindex_section["scroll"].length > 1) {        obj.obj_cite_number_type = OCNtype.bkidx;      }    } -  assert(obj_cite_digit == ocn_);    assert(obj_cite_digit_bkidx == ocn_bidx_);  }  #+END_SRC @@ -2173,9 +2223,9 @@ if (the_blurb_section.length > 1) {        debug(dom) {          writeln(obj.text);        } -      obj_cite_digit = ocn_emit(OCNstatus.inc); -      obj.ocn = obj_cite_digit; -      obj.obj_cite_number = obj_cite_digit.to!string; +      obj_cite_digits = ocn_emit(OCNstatus.on); +      obj.ocn = obj_cite_digits.on; +      obj.obj_cite_number = obj_cite_digits.on.to!string;        if (obj.heading_lev_markup <= 4) {          segnames_0_4 ~= obj.segment_anchor_tag;          if (obj.heading_lev_markup == 4) { @@ -2198,8 +2248,8 @@ if (the_blurb_section.length > 1) {        }        obj = obj_heading_ancestors(obj, lv_ancestors_txt);      } else if (obj.is_a == "blurb") { -      obj_cite_digit = ocn_emit(OCNstatus.exc); -      obj.obj_cite_number_non = obj_cite_digit.to!string; +      obj_cite_digits = ocn_emit(OCNstatus.off); +      obj.obj_cite_number_off  = obj_cite_digits.off.to!string;        obj.obj_cite_number_type = OCNtype.non;      }    } @@ -2223,6 +2273,8 @@ comp_obj_heading_.is_of                 = "para";  comp_obj_heading_.is_a                  = "heading";  comp_obj_heading_.ocn                   = 0;  comp_obj_para.obj_cite_number           = ""; +comp_obj_para.obj_cite_number_off       = ""; +comp_obj_para.obj_cite_number_type      = 0;  comp_obj_heading_.segment_anchor_tag    = "";  comp_obj_heading_.marked_up_level       = "";  comp_obj_heading_.heading_lev_markup    = 9; @@ -2327,7 +2379,7 @@ destroy(html_segnames);  destroy(bookindex_unordered_hashes);  destroy(an_object);  biblio_arr_json = []; -obj_cite_digit=0; +obj_cite_digits=ocn_emit(OCNstatus.reset);  obj_cite_digit_=0;  html_segnames_ptr=0;  html_segnames_ptr_cntr=0; @@ -2388,10 +2440,10 @@ auto _common_reset_(L,O,T)(      static assert(is(typeof(an_object)       == string[string]));      static assert(is(typeof(obj_type_status) == int[string]));    } -  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"]      = State.off; +  line_occur["para"]         = State.off; +  obj_type_status["heading"] = State.off; +  obj_type_status["para"]    = State.off;    an_object = object_reset(an_object);  }  #+END_SRC @@ -2428,11 +2480,11 @@ static auto _check_ocn_status_(L,T)(      } else {        if (obj_type_status["ocn_status_off_for_multiple_objects"] == TriState.off) {          if (line.matchFirst(rgx.obj_cite_number_off)) { -          obj_type_status["ocn_status"] = OCNstatus.exc; +          obj_type_status["ocn_status"] = OCNstatus.off;          } else if (line.matchFirst(rgx.obj_cite_number_off_dh)) {            obj_type_status["ocn_status"] = OCNstatus.closing;          } else { -          obj_type_status["ocn_status"] = OCNstatus.inc; +          obj_type_status["ocn_status"] = OCNstatus.on;          }        } else {          obj_type_status["ocn_status"] = @@ -2442,7 +2494,7 @@ static auto _check_ocn_status_(L,T)(    } else if ((!line.empty) && (obj_type_status["ocn_status_off_for_multiple_objects"] > TriState.off)) {      if (line.matchFirst(rgx.obj_cite_number_off_block_close)) {        obj_type_status["ocn_status_off_for_multiple_objects"] = TriState.off; -      obj_type_status["ocn_status"]                          = OCNstatus.inc; +      obj_type_status["ocn_status"]                          = OCNstatus.on;        debug(ocnoff) {          writeln(line);        } @@ -2498,8 +2550,7 @@ void _start_block_(L,T,N)(          line        );      } -    obj_cite_number_poem["start"] = -      obj_cite_digit.to!string; +    obj_cite_number_poem["start"] = obj_cite_digits.on.to!string;      obj_type_status["blocks"]     = TriState.on;      obj_type_status["verse_new"]  = State.on;      obj_type_status["poem"]       = TriState.on; @@ -2584,7 +2635,7 @@ void _start_block_(L,T,N)(          line        );      } -    obj_cite_number_poem["start"] = obj_cite_digit.to!string; +    obj_cite_number_poem["start"] = obj_cite_digits.on.to!string;      obj_type_status["blocks"]    = TriState.on;      obj_type_status["verse_new"] = State.on;      obj_type_status["poem"]      = TriState.on; @@ -3111,14 +3162,14 @@ void _poem_block_(L,O,T,C,N,Ma)(            writeln(__LINE__);            writefln(              "* %s %s", -            obj_cite_digit, +            obj_cite_digits.on,              line            );          }          if (an_object.length > 0) {            debug(poem) {                             // poem (curly) close              writeln( -              obj_cite_digit, +              obj_cite_digits.on,                an_object[an_object_key]              );            } @@ -3132,8 +3183,11 @@ void _poem_block_(L,O,T,C,N,Ma)(            comp_obj_block.of_section                 = "body";            comp_obj_block.is_of                      = "block";            comp_obj_block.is_a                       = "verse"; -          comp_obj_block.ocn                        = obj_cite_digit; -          comp_obj_block.obj_cite_number            = (obj_cite_digit==0) ? "" : obj_cite_digit.to!string; +          comp_obj_block.ocn                        = obj_cite_digits.on; +          comp_obj_block.obj_cite_number            = (obj_cite_digits.on==0)    ? "" : obj_cite_digits.on.to!string; +          comp_obj_block.obj_cite_number_off        = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; +          comp_obj_block.obj_cite_number_bkidx      = (obj_cite_digits.bkidx==0) ? "" : obj_cite_digits.bkidx.to!string; +          comp_obj_block.obj_cite_number_type       = obj_cite_digits.type;            comp_obj_block.text                       = an_object["substantive"];            comp_obj_block.inline_notes_reg           = substantive_obj_misc_tuple[sObj.notes_reg];            comp_obj_block.inline_notes_star          = substantive_obj_misc_tuple[sObj.notes_star]; @@ -3144,16 +3198,14 @@ void _poem_block_(L,O,T,C,N,Ma)(          processing.remove("verse");          ++cntr;        } -      obj_cite_number_poem["end"] = -        obj_cite_digit.to!string; +      obj_cite_number_poem["end"] = obj_cite_digits.on.to!string;        obj_type_status["blocks"]     = TriState.closing;        obj_type_status["poem"]       = TriState.closing;        obj_type_status["curly_poem"] = TriState.off;      } else {        processing["verse"] ~= line ~= "\n";        if (obj_type_status["verse_new"] == State.on) { -        obj_cite_digit = -          ocn_emit(obj_type_status["ocn_status"]); +        obj_cite_digits = ocn_emit(OCNstatus.on);          obj_type_status["verse_new"] = State.off;        } else if (line.matchFirst(rgx.newline_eol_delimiter_only)) {          processing["verse"] = processing["verse"].stripRight; @@ -3166,7 +3218,7 @@ void _poem_block_(L,O,T,C,N,Ma)(          debug(poem) {                          // poem verse            writefln(              "* %s curly\n%s", -            obj_cite_digit, +            obj_cite_digits.on,              an_object[an_object_key]            );          } @@ -3175,7 +3227,7 @@ void _poem_block_(L,O,T,C,N,Ma)(          auto comp_obj_location = node_construct.node_location_emitter(            content_non_header,            segment_anchor_tag_that_object_belongs_to, -          obj_cite_digit, +          obj_cite_digits,            cntr,            heading_ptr-1,            an_object["is"] @@ -3189,8 +3241,11 @@ void _poem_block_(L,O,T,C,N,Ma)(          comp_obj_block.of_section                 = "body";          comp_obj_block.is_of                      = "block";          comp_obj_block.is_a                       = "verse"; -        comp_obj_block.ocn                        = obj_cite_digit; -        comp_obj_block.obj_cite_number            = (obj_cite_digit==0) ? "" : obj_cite_digit.to!string; +        comp_obj_block.ocn                        = obj_cite_digits.on; +        comp_obj_block.obj_cite_number            = (obj_cite_digits.on==0)    ? "" : obj_cite_digits.on.to!string; +        comp_obj_block.obj_cite_number_off        = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; +        comp_obj_block.obj_cite_number_bkidx      = (obj_cite_digits.bkidx==0) ? "" : obj_cite_digits.bkidx.to!string; +        comp_obj_block.obj_cite_number_type       = obj_cite_digits.type;          comp_obj_block.text                       = an_object["substantive"];          comp_obj_block.inline_notes_reg           = substantive_obj_misc_tuple[sObj.notes_reg];          comp_obj_block.inline_notes_star          = substantive_obj_misc_tuple[sObj.notes_star]; @@ -3216,7 +3271,7 @@ void _poem_block_(L,O,T,C,N,Ma)(        if (an_object.length > 0) {          debug(poem) {                                     // poem (tic) close            writeln(__LINE__); -          writeln(obj_cite_digit, line); +          writeln(obj_cite_digits.on, line);          }          processing.remove("verse");          an_object["is"]                           = "verse"; @@ -3229,14 +3284,17 @@ void _poem_block_(L,O,T,C,N,Ma)(          comp_obj_block.of_section                 = "body";          comp_obj_block.is_of                      = "block";          comp_obj_block.is_a                       = "verse"; -        comp_obj_block.ocn                        = obj_cite_digit; -        comp_obj_block.obj_cite_number            = (obj_cite_digit==0) ? "" : obj_cite_digit.to!string; +        comp_obj_block.ocn                        = obj_cite_digits.on; +        comp_obj_block.obj_cite_number            = (obj_cite_digits.on==0)    ? "" : obj_cite_digits.on.to!string; +        comp_obj_block.obj_cite_number_off        = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; +        comp_obj_block.obj_cite_number_bkidx      = (obj_cite_digits.bkidx==0) ? "" : obj_cite_digits.bkidx.to!string; +        comp_obj_block.obj_cite_number_type       = obj_cite_digits.type;          comp_obj_block.text                       = an_object["substantive"];          comp_obj_block.inline_notes_reg           = substantive_obj_misc_tuple[sObj.notes_reg];          comp_obj_block.inline_notes_star          = substantive_obj_misc_tuple[sObj.notes_star];          comp_obj_block.inline_links               = substantive_obj_misc_tuple[sObj.links];          the_document_body_section                 ~= comp_obj_block; -        obj_cite_number_poem["end"]               = obj_cite_digit.to!string; +        obj_cite_number_poem["end"]               = obj_cite_digits.on.to!string;          object_reset(an_object);          processing.remove("verse");          ++cntr; @@ -3247,8 +3305,7 @@ void _poem_block_(L,O,T,C,N,Ma)(      } else {        processing["verse"] ~= line ~= "\n";        if (obj_type_status["verse_new"] == State.on) { -        obj_cite_digit = -          ocn_emit(obj_type_status["ocn_status"]); +        obj_cite_digits = ocn_emit(OCNstatus.on);          obj_type_status["verse_new"] = State.off;        } else if (line.matchFirst(rgx.newline_eol_delimiter_only)) {          processing["verse"] = processing["verse"].stripRight; @@ -3261,7 +3318,7 @@ void _poem_block_(L,O,T,C,N,Ma)(          debug(poem) {                            // poem (tic) close            writefln(              "* %s tic\n%s", -            obj_cite_digit, +            obj_cite_digits.on,              an_object[an_object_key]            );          } @@ -3271,7 +3328,7 @@ void _poem_block_(L,O,T,C,N,Ma)(            node_construct.node_location_emitter(              content_non_header,              segment_anchor_tag_that_object_belongs_to, -            obj_cite_digit, +            obj_cite_digits,              cntr,              heading_ptr-1,              an_object["is"] @@ -3285,8 +3342,11 @@ void _poem_block_(L,O,T,C,N,Ma)(          comp_obj_block.of_section                 = "body";          comp_obj_block.is_of                      = "block";          comp_obj_block.is_a                       = "verse"; -        comp_obj_block.ocn                        = obj_cite_digit; -        comp_obj_block.obj_cite_number            = (obj_cite_digit==0) ? "" : obj_cite_digit.to!string; +        comp_obj_block.ocn                        = obj_cite_digits.on; +        comp_obj_block.obj_cite_number            = (obj_cite_digits.on==0)    ? "" : obj_cite_digits.on.to!string; +        comp_obj_block.obj_cite_number_off        = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; +        comp_obj_block.obj_cite_number_bkidx      = (obj_cite_digits.bkidx==0) ? "" : obj_cite_digits.bkidx.to!string; +        comp_obj_block.obj_cite_number_type       = obj_cite_digits.type;          comp_obj_block.text                       = an_object["substantive"];          comp_obj_block.inline_notes_reg           = substantive_obj_misc_tuple[sObj.notes_reg];          comp_obj_block.inline_notes_star          = substantive_obj_misc_tuple[sObj.notes_star]; @@ -3356,7 +3416,7 @@ void _table_block_(L,O,T,Ma)(          line,          an_object,          the_document_body_section, -        obj_cite_digit, +        obj_cite_digits,          comp_obj_heading,          cntr,          obj_type_status, @@ -3396,24 +3456,23 @@ process and use an_object["table_head"] (then empty it)  #+name: abs_functions_block_line_status_empty  #+BEGIN_SRC d -void _table_closed_make_special_notation_table_( +void _table_closed_make_special_notation_table_(N)(    char[]                           line,    return ref string[string]        an_object,    return ref ObjGenericComposite[] the_document_body_section, -  return ref int                   obj_cite_digit, +  return ref N                     obj_cite_digits,    return ref ObjGenericComposite   _comp_obj_heading,    return ref int                   cntr,    return ref int[string]           obj_type_status,    string[string][string]           dochead_make_aa,  ) {      comp_obj_block = comp_obj_block.init; -    obj_cite_digit = -      ocn_emit(obj_type_status["ocn_status"]); +    obj_cite_digits = ocn_emit(OCNstatus.on);      auto comp_obj_location =        node_construct.node_location_emitter(          content_non_header,          segment_anchor_tag_that_object_belongs_to, -        obj_cite_digit, +        obj_cite_digits,          cntr,          heading_ptr-1,          "table" @@ -3421,12 +3480,15 @@ void _table_closed_make_special_notation_table_(      an_object["is"] = "table";      auto substantive_obj_misc_tuple =        obj_im.obj_inline_markup_and_anchor_tags_and_misc(an_object, "body_nugget", dochead_make_aa); -    an_object["substantive"]         = substantive_obj_misc_tuple[sObj.content]; -    comp_obj_block.ocn               = obj_cite_digit; -    comp_obj_block.obj_cite_number   = (obj_cite_digit==0) ? "" : obj_cite_digit.to!string; -    comp_obj_block                   = table_instructions(comp_obj_block, an_object["table_head"]); -    comp_obj_block                   = table_substantive_munge_special(comp_obj_block, an_object["substantive"]); -    the_document_body_section        ~= comp_obj_block; +    an_object["substantive"]             = substantive_obj_misc_tuple[sObj.content]; +    comp_obj_block.ocn                   = obj_cite_digits.on; +    comp_obj_block.obj_cite_number       = (obj_cite_digits.on==0)    ? "" : obj_cite_digits.on.to!string; +    comp_obj_block.obj_cite_number_off   = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; +    comp_obj_block.obj_cite_number_bkidx = (obj_cite_digits.bkidx==0) ? "" : obj_cite_digits.bkidx.to!string; +    comp_obj_block.obj_cite_number_type  = obj_cite_digits.type; +    comp_obj_block                       = table_instructions(comp_obj_block, an_object["table_head"]); +    comp_obj_block                       = table_substantive_munge_special(comp_obj_block, an_object["substantive"]); +    the_document_body_section            ~= comp_obj_block;      object_reset(an_object);      processing.remove("verse");      ++cntr; @@ -3439,13 +3501,13 @@ void _table_closed_make_special_notation_table_(  #+name: abs_functions_block_line_status_empty  #+BEGIN_SRC d -void _block_flag_line_empty_(B)( +void _block_flag_line_empty_(B,N)(    B                                   bookindex_extract_hash,    char[]                              line,    return ref string[string]           an_object,    return ref ObjGenericComposite[]    the_document_body_section,    return ref string[][string][string] bookindex_unordered_hashes, -  return ref int                      obj_cite_digit, +  return ref N                        obj_cite_digits,    return ref ObjGenericComposite      _comp_obj_heading,    return ref int                      cntr,    return ref int[string]              obj_type_status, @@ -3469,14 +3531,13 @@ void _block_flag_line_empty_(B)(  #+name: abs_functions_block_line_status_empty  #+BEGIN_SRC d    if (obj_type_status["quote"] == TriState.closing) { -    obj_cite_digit = -      ocn_emit(obj_type_status["ocn_status"]); +    obj_cite_digits = ocn_emit(OCNstatus.on);      an_object["bookindex_nugget"] =        ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : "";      bookindex_unordered_hashes =        bookindex_extract_hash.bookindex_nugget_hash(          an_object["bookindex_nugget"], -        obj_cite_digit, +        obj_cite_digits,          segment_anchor_tag_that_object_belongs_to        );      an_object["is"] = "quote"; @@ -3484,7 +3545,7 @@ void _block_flag_line_empty_(B)(        node_construct.node_location_emitter(          content_non_header,          segment_anchor_tag_that_object_belongs_to, -        obj_cite_digit, +        obj_cite_digits,          cntr,          heading_ptr-1,          an_object["is"] @@ -3498,8 +3559,11 @@ void _block_flag_line_empty_(B)(      comp_obj_block.of_section                 = "body";      comp_obj_block.is_of                      = "block";      comp_obj_block.is_a                       = "quote"; -    comp_obj_block.ocn                        = obj_cite_digit; -    comp_obj_block.obj_cite_number            = (obj_cite_digit==0) ? "" : obj_cite_digit.to!string; +    comp_obj_block.ocn                        = obj_cite_digits.on; +    comp_obj_block.obj_cite_number            = (obj_cite_digits.on==0)    ? "" : obj_cite_digits.on.to!string; +    comp_obj_block.obj_cite_number_off        = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; +    comp_obj_block.obj_cite_number_bkidx      = (obj_cite_digits.bkidx==0) ? "" : obj_cite_digits.bkidx.to!string; +    comp_obj_block.obj_cite_number_type       = obj_cite_digit_type;      comp_obj_block.text                       = an_object["substantive"];      comp_obj_block.inline_notes_reg           = substantive_obj_misc_tuple[sObj.notes_reg];      comp_obj_block.inline_notes_star          = substantive_obj_misc_tuple[sObj.notes_star]; @@ -3517,14 +3581,13 @@ void _block_flag_line_empty_(B)(  #+name: abs_functions_block_line_status_empty  #+BEGIN_SRC d    } else if (obj_type_status["group"] == TriState.closing) { -    obj_cite_digit = -      ocn_emit(obj_type_status["ocn_status"]); +    obj_cite_digits = ocn_emit(OCNstatus.on);      an_object["bookindex_nugget"] =        ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : "";      bookindex_unordered_hashes =        bookindex_extract_hash.bookindex_nugget_hash(          an_object["bookindex_nugget"], -        obj_cite_digit, +        obj_cite_digits,          segment_anchor_tag_that_object_belongs_to        );      an_object["is"] = "group"; @@ -3532,7 +3595,7 @@ void _block_flag_line_empty_(B)(        node_construct.node_location_emitter(          content_non_header,          segment_anchor_tag_that_object_belongs_to, -        obj_cite_digit, +        obj_cite_digits,          cntr,          heading_ptr-1,          an_object["is"] @@ -3546,8 +3609,11 @@ void _block_flag_line_empty_(B)(      comp_obj_block.of_section                 = "body";      comp_obj_block.is_of                      = "block";      comp_obj_block.is_a                       = "group"; -    comp_obj_block.ocn                        = obj_cite_digit; -    comp_obj_block.obj_cite_number            = (obj_cite_digit==0) ? "" : obj_cite_digit.to!string; +    comp_obj_block.ocn                        = obj_cite_digits.on; +    comp_obj_block.obj_cite_number            = (obj_cite_digits.on==0)    ? "" : obj_cite_digits.on.to!string; +    comp_obj_block.obj_cite_number_off        = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; +    comp_obj_block.obj_cite_number_bkidx      = (obj_cite_digits.bkidx==0) ? "" : obj_cite_digits.bkidx.to!string; +    comp_obj_block.obj_cite_number_type       = obj_cite_digits.type;      comp_obj_block.text                       = an_object["substantive"];      comp_obj_block.inline_notes_reg           = substantive_obj_misc_tuple[sObj.notes_reg];      comp_obj_block.inline_notes_star          = substantive_obj_misc_tuple[sObj.notes_star]; @@ -3565,13 +3631,13 @@ void _block_flag_line_empty_(B)(  #+name: abs_functions_block_line_status_empty  #+BEGIN_SRC d    } else if (obj_type_status["block"] == TriState.closing) { -    obj_cite_digit = ocn_emit(obj_type_status["ocn_status"]); +    obj_cite_digits = ocn_emit(OCNstatus.on);      an_object["bookindex_nugget"] =        ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : "";      bookindex_unordered_hashes =        bookindex_extract_hash.bookindex_nugget_hash(          an_object["bookindex_nugget"], -        obj_cite_digit, +        obj_cite_digits,          segment_anchor_tag_that_object_belongs_to        );      an_object["is"] = "block"; @@ -3579,7 +3645,7 @@ void _block_flag_line_empty_(B)(        node_construct.node_location_emitter(          content_non_header,          segment_anchor_tag_that_object_belongs_to, -        obj_cite_digit, +        obj_cite_digits,          cntr,          heading_ptr-1,          an_object["is"] @@ -3592,8 +3658,11 @@ void _block_flag_line_empty_(B)(      comp_obj_block.of_section                 = "body";      comp_obj_block.is_of                      = "block";      comp_obj_block.is_a                       = "block"; -    comp_obj_block.ocn                        = obj_cite_digit; -    comp_obj_block.obj_cite_number            = (obj_cite_digit==0) ? "" : obj_cite_digit.to!string; +    comp_obj_block.ocn                        = obj_cite_digits.on; +    comp_obj_block.obj_cite_number            = (obj_cite_digits.on==0)    ? "" : obj_cite_digits.on.to!string; +    comp_obj_block.obj_cite_number_off        = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; +    comp_obj_block.obj_cite_number_bkidx      = (obj_cite_digits.bkidx==0) ? "" : obj_cite_digits.bkidx.to!string; +    comp_obj_block.obj_cite_number_type       = obj_cite_digit_type;      comp_obj_block.text                       = an_object["substantive"];      comp_obj_block.inline_notes_reg           = substantive_obj_misc_tuple[sObj.notes_reg];      comp_obj_block.inline_notes_star          = substantive_obj_misc_tuple[sObj.notes_star]; @@ -3616,7 +3685,7 @@ void _block_flag_line_empty_(B)(      bookindex_unordered_hashes =        bookindex_extract_hash.bookindex_nugget_hash(          an_object["bookindex_nugget"], -        obj_cite_digit, +        obj_cite_digits,          segment_anchor_tag_that_object_belongs_to        );      an_object["is"]                           = "verse"; @@ -3624,7 +3693,7 @@ void _block_flag_line_empty_(B)(        node_construct.node_location_emitter(          content_non_header,          segment_anchor_tag_that_object_belongs_to, -        obj_cite_digit, +        obj_cite_digits,          cntr,          heading_ptr-1,          an_object["is"] @@ -3634,8 +3703,11 @@ void _block_flag_line_empty_(B)(      comp_obj_poem_ocn.of_section              = "body";      comp_obj_poem_ocn.is_of                   = "block";      comp_obj_poem_ocn.is_a                    = "poem"; -    comp_obj_poem_ocn.ocn                     = obj_cite_digit; +    comp_obj_poem_ocn.ocn                     = obj_cite_digits.on;      comp_obj_poem_ocn.obj_cite_number         = (obj_cite_number_poem["start"], obj_cite_number_poem["end"]); +    comp_obj_poem_ocn.obj_cite_number_off     = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; // +    comp_obj_poem_ocn.obj_cite_number_bkidx   = (obj_cite_digits.bkidx==0) ? "" : obj_cite_digits.bkidx.to!string; // +    comp_obj_poem_ocn.obj_cite_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; @@ -3649,14 +3721,13 @@ void _block_flag_line_empty_(B)(  #+name: abs_functions_block_line_status_empty  #+BEGIN_SRC d    } else if (obj_type_status["code"] == TriState.closing) { -    obj_cite_digit = -      ocn_emit(obj_type_status["ocn_status"]); +    obj_cite_digits = ocn_emit(OCNstatus.on);      an_object["bookindex_nugget"] =        ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : "";      bookindex_unordered_hashes =        bookindex_extract_hash.bookindex_nugget_hash(          an_object["bookindex_nugget"], -        obj_cite_digit, +        obj_cite_digits,          segment_anchor_tag_that_object_belongs_to        );      an_object["is"] = "code"; @@ -3664,7 +3735,7 @@ void _block_flag_line_empty_(B)(        node_construct.node_location_emitter(          content_non_header,          segment_anchor_tag_that_object_belongs_to, -        obj_cite_digit, +        obj_cite_digits,          cntr,          heading_ptr-1,          an_object["is"] @@ -3678,8 +3749,11 @@ void _block_flag_line_empty_(B)(      comp_obj_code.of_section                  = "body";      comp_obj_code.is_of                       = "block";      comp_obj_code.is_a                        = "code"; -    comp_obj_code.ocn                         = obj_cite_digit; -    comp_obj_code.obj_cite_number             = (obj_cite_digit==0) ? "" : obj_cite_digit.to!string; +    comp_obj_code.ocn                         = obj_cite_digits.on; +    comp_obj_code.obj_cite_number             = (obj_cite_digits.on==0)    ? "" : obj_cite_digits.on.to!string; +    comp_obj_block.obj_cite_number_off        = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; +    comp_obj_block.obj_cite_number_bkidx      = (obj_cite_digits.bkidx==0) ? "" : obj_cite_digits.bkidx.to!string; +    comp_obj_block.obj_cite_number_type       = obj_cite_digits.type;      comp_obj_code.text                        = an_object["substantive"];      comp_obj_code.inline_notes_reg            = substantive_obj_misc_tuple[sObj.notes_reg];      comp_obj_code.inline_notes_star           = substantive_obj_misc_tuple[sObj.notes_star]; @@ -3698,14 +3772,13 @@ void _block_flag_line_empty_(B)(  #+BEGIN_SRC d    } else if (obj_type_status["table"] == TriState.closing) {      comp_obj_block = comp_obj_block.init; -    obj_cite_digit = -      ocn_emit(obj_type_status["ocn_status"]); +    obj_cite_digits = ocn_emit(OCNstatus.on);      an_object["bookindex_nugget"] =        ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : "";      bookindex_unordered_hashes =        bookindex_extract_hash.bookindex_nugget_hash(          an_object["bookindex_nugget"], -        obj_cite_digit, +        obj_cite_digits,          segment_anchor_tag_that_object_belongs_to        );      an_object["is"] = "table"; @@ -3713,7 +3786,7 @@ void _block_flag_line_empty_(B)(        node_construct.node_location_emitter(          content_non_header,          segment_anchor_tag_that_object_belongs_to, -        obj_cite_digit, +        obj_cite_digits,          cntr,          heading_ptr-1,          an_object["is"] @@ -3722,8 +3795,11 @@ void _block_flag_line_empty_(B)(        obj_im.obj_inline_markup_and_anchor_tags_and_misc(an_object, an_object_key, dochead_make_aa);      an_object["substantive"] = substantive_obj_misc_tuple[sObj.content];      comp_obj_block                            = comp_obj_block.init; -    comp_obj_block.ocn                        = obj_cite_digit; -    comp_obj_block.obj_cite_number            = (obj_cite_digit==0) ? "" : obj_cite_digit.to!string; +    comp_obj_block.ocn                        = obj_cite_digits.on; +    comp_obj_block.obj_cite_number            = (obj_cite_digits.on==0)    ? "" : obj_cite_digits.on.to!string; +    comp_obj_block.obj_cite_number_off        = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; +    comp_obj_block.obj_cite_number_bkidx      = (obj_cite_digits.bkidx==0) ? "" : obj_cite_digits.bkidx.to!string; +    comp_obj_block.obj_cite_number_type       = obj_cite_digits.type;      comp_obj_block = table_instructions(comp_obj_block, an_object["table_head"]);      comp_obj_block = table_substantive_munge(comp_obj_block, an_object["substantive"]);      the_document_body_section                 ~= comp_obj_block; @@ -4001,19 +4077,19 @@ auto _heading_matched_(L,C,O,K,Lv,Lc,T,Me)(    static auto rgx = Rgx();    if (auto m = line.match(rgx.heading)) {      /+ heading match +/ -    obj_type_status["heading"] = State.on; +    ++line_occur["heading"]; +    obj_type_status["heading"]            = State.on; +    obj_type_status["para"]               = State.off;      if (line.match(rgx.heading_seg_and_above)) { -      obj_type_status["biblio_section"] = State.off; +      obj_type_status["biblio_section"]   = State.off;        obj_type_status["glossary_section"] = State.off; -      obj_type_status["blurb_section"] = State.off; +      obj_type_status["blurb_section"]    = State.off;      } -    obj_type_status["para"] = State.off; -    ++line_occur["heading"];      an_object[an_object_key] ~= line ~= "\n";      an_object["lev"] ~= m.captures[1];      assertions_doc_structure(an_object, lv); // includes most of the logic for collapsed levels      switch (an_object["lev"]) { -    case "A": +    case "A":                                // Title set        an_object[an_object_key]=(an_object[an_object_key])          .replaceFirst(rgx.variable_doc_title,            (dochead_meta_aa["title"]["full"] ~ ",")) @@ -4465,23 +4541,24 @@ auto table_substantive_munge_special(O,T)(  #+name: meta_emitters_ocn  #+BEGIN_SRC d  pure struct OCNemitter { -  int ocn_, ocn_in, ocn_in_, ocn_out_, ocn_bkidx_; -  int ocn_emitter(int ocn_status_flag) -  in { assert(ocn_status_flag <= OCNstatus.reset); } -  body { +  int ocn_, ocn_on, ocn_on_, ocn_off, ocn_off_, ocn_bkidx, ocn_bkidx_; +  auto ocn_emitter(int ocn_status_flag) { +    OCNset ocn; +    assert(ocn_status_flag <= OCNstatus.reset); +    ocn_on = ocn_off = ocn_bkidx = 0;      switch(ocn_status_flag) {      case OCNstatus.reset: -      ocn_ = ocn_in_ = ocn_out_ = 1; +      ocn_ = ocn_on_ = ocn_off_ = 1;        ocn_bkidx_ = 0;        break; -    case OCNstatus.inc: -      ocn_ = ++ocn_in_; +    case OCNstatus.on: +      ocn_ = ocn_on = ++ocn_on_;        break; -    case OCNstatus.exc: -      ocn_ = ++ocn_out_; +    case OCNstatus.off: +      ocn_ = ocn_off = ++ocn_off_;        break;      case OCNstatus.bkidx: -      ocn_ = ++ocn_bkidx_; +      ocn_ = ocn_bkidx = ++ocn_bkidx_;        break;      case OCNstatus.closing:        break; @@ -4489,7 +4566,12 @@ pure struct OCNemitter {        ocn_ = 0;      }      assert(ocn_ >= 0); -    return ocn_; +    ocn.digit = ocn_; +    ocn.on    = ocn_on; +    ocn.off   = ocn_off; +    ocn.bkidx = ocn_bkidx; +    ocn.type  = ocn_status_flag; +    return ocn;    }    invariant() {    } @@ -4522,7 +4604,7 @@ static struct ObjInlineMarkupMunge {  #+name: meta_emitters_obj_inline_markup_munge  #+BEGIN_SRC d -  static string url_links(Ot)(Ot obj_txt_in) { +  static auto url_links(Ot)(Ot obj_txt_in) {      debug(asserts) {        static assert(is(typeof(obj_txt_in) == string));      } @@ -5088,6 +5170,8 @@ static struct ObjInlineMarkup {        comp_obj_toc.is_a                  = "toc";        comp_obj_toc.ocn                   = 0;        comp_obj_toc.obj_cite_number       = ""; +      comp_obj_toc.obj_cite_number_off   = ""; +      comp_obj_toc.obj_cite_number_type  = 0;        comp_obj_toc.indent_hang           = indent["hang_position"];        comp_obj_toc.indent_base           = indent["base_position"];        comp_obj_toc.bullet                = false; @@ -5106,6 +5190,8 @@ static struct ObjInlineMarkup {        comp_obj_toc.is_a                  = "toc";        comp_obj_toc.ocn                   = 0;        comp_obj_toc.obj_cite_number       = ""; +      comp_obj_toc.obj_cite_number_off   = ""; +      comp_obj_toc.obj_cite_number_type  = 0;        comp_obj_toc.indent_hang           = indent["hang_position"];        comp_obj_toc.indent_base           = indent["base_position"];        comp_obj_toc.bullet                = false; @@ -5120,6 +5206,8 @@ static struct ObjInlineMarkup {      comp_obj_toc.is_a                  = "toc";      comp_obj_toc.ocn                   = 0;      comp_obj_toc.obj_cite_number       = ""; +    comp_obj_toc.obj_cite_number_off   = ""; +    comp_obj_toc.obj_cite_number_type  = 0;      comp_obj_toc.bullet                = false;      comp_obj_toc.inline_links          = true;      switch (obj_["lev_markup_number"].to!int) { @@ -5811,19 +5899,19 @@ struct BookIndexNuggetHash {    string[] bi_main_terms_split_arr;    string[][string][string] bookindex_nugget_hash(BI,N,S)(      BI bookindex_section, -    N  obj_cite_digit, +    N  obj_cite_digits,      S  segment_anchor_tag,    )    in {      debug(asserts) {        static assert(is(typeof(bookindex_section) == string)); -      static assert(is(typeof(obj_cite_digit)   == int)); +      static assert(is(typeof(obj_cite_digits.on) == int));      }      debug(bookindexraw) {        if (!bookindex_section.empty) {          writeln(            "* [bookindex] ", -          "[", obj_cite_digit.to!string, ": ", segment_anchor_tag, "] ", bookindex_section +          "[", obj_cite_digits.on.to!string, ": ", segment_anchor_tag, "] ", bookindex_section          );        }      } @@ -5841,12 +5929,12 @@ struct BookIndexNuggetHash {          ) {            main_term = m.captures[1].strip;            obj_cite_number_offset = m.captures[2].to!int; -          obj_cite_number_endpoint=(obj_cite_digit + obj_cite_number_offset); -          obj_cite_numbers ~= (obj_cite_digit.to!string ~ "-" ~ to!string(obj_cite_number_endpoint) +          obj_cite_number_endpoint=(obj_cite_digits.on + obj_cite_number_offset); +          obj_cite_numbers ~= (obj_cite_digits.on.to!string ~ "-" ~ to!string(obj_cite_number_endpoint)            ~ ":" ~ segment_anchor_tag);          } else {            main_term = bi_main_term_and_rest[0].strip; -          obj_cite_numbers ~= obj_cite_digit.to!string +          obj_cite_numbers ~= obj_cite_digits.on.to!string            ~ ":" ~ segment_anchor_tag;          }          bi[main_term]["_a"] ~= obj_cite_numbers; @@ -5860,12 +5948,12 @@ struct BookIndexNuggetHash {              if (auto m = sub_terms_bits.match(rgx.bi_term_and_obj_cite_numbers_match)) {                sub_term = m.captures[1].strip;                obj_cite_number_offset = m.captures[2].to!int; -              obj_cite_number_endpoint=(obj_cite_digit + obj_cite_number_offset); -              obj_cite_numbers ~= (obj_cite_digit.to!string ~ " - " ~ to!string(obj_cite_number_endpoint) +              obj_cite_number_endpoint=(obj_cite_digits.on + obj_cite_number_offset); +              obj_cite_numbers ~= (obj_cite_digits.on.to!string ~ " - " ~ to!string(obj_cite_number_endpoint)                ~ ":" ~ segment_anchor_tag);              } else {                sub_term = sub_terms_bits.strip; -              obj_cite_numbers ~= to!string(obj_cite_digit) +              obj_cite_numbers ~= to!string(obj_cite_digits.on)                ~ ":" ~ segment_anchor_tag;              }              if (!empty(sub_term)) { @@ -5971,12 +6059,12 @@ struct BookIndexReportSection {  #+BEGIN_SRC d    auto bookindex_build_abstraction_section(BI,N,B)(      BI bookindex_unordered_hashes, -    N  obj_cite_digit, +    N  obj_cite_digits,      B  opt_action,    ) {      debug(asserts) {        static assert(is(typeof(bookindex_unordered_hashes)                == string[][string][string])); -      static assert(is(typeof(obj_cite_digit)                           == int)); +      static assert(is(typeof(obj_cite_digits.on)                        == int));        static assert(is(typeof(opt_action)                                == bool[string]));      }      mixin SiSUnode; @@ -6006,6 +6094,8 @@ struct BookIndexReportSection {        comp_obj_heading_.text                  = "Book Index";        comp_obj_heading_.ocn                   = 0;        comp_obj_heading_.obj_cite_number       = ""; +      comp_obj_heading_.obj_cite_number_off   = ""; +      comp_obj_heading_.obj_cite_number_type  = 0;        comp_obj_heading_.segment_anchor_tag    = "_part_book_index";        comp_obj_heading_.marked_up_level       = "B";        comp_obj_heading_.heading_lev_markup    = 1; @@ -6024,6 +6114,8 @@ struct BookIndexReportSection {        comp_obj_heading_.text                  = "Index";        comp_obj_heading_.ocn                   = 0;        comp_obj_heading_.obj_cite_number       = ""; +      comp_obj_heading_.obj_cite_number_off   = ""; +      comp_obj_heading_.obj_cite_number_type  = 0;        comp_obj_heading_.segment_anchor_tag    = "bookindex";        comp_obj_heading_.marked_up_level       = "1";        comp_obj_heading_.heading_lev_markup    = 4; @@ -6100,6 +6192,8 @@ struct BookIndexReportSection {          comp_obj_para.text                  = bi_tmp_scroll.to!string.strip;          comp_obj_para.ocn                   = 0;          comp_obj_para.obj_cite_number       = ""; +        comp_obj_para.obj_cite_number_off   = ""; +        comp_obj_para.obj_cite_number_type  = 0;          comp_obj_para.anchor_tags           = bi_tmp_tags;          comp_obj_para.indent_hang           = 0;          comp_obj_para.indent_base           = 1; @@ -6115,6 +6209,8 @@ struct BookIndexReportSection {        comp_obj_heading_.text                  = "(skip) there is no Book Index";        comp_obj_heading_.ocn                   = 0;        comp_obj_heading_.obj_cite_number       = ""; +      comp_obj_heading_.obj_cite_number_off   = ""; +      comp_obj_heading_.obj_cite_number_type  = 0;        comp_obj_heading_.marked_up_level       = "B";        comp_obj_heading_.heading_lev_markup    = 1;        comp_obj_heading_.heading_lev_collapsed = 1; @@ -6123,7 +6219,7 @@ struct BookIndexReportSection {        bookindex_section["scroll"]             ~= comp_obj_heading_;        bookindex_section["seg"]                ~= comp_obj_heading_;      } -    auto t = tuple(bookindex_section, obj_cite_digit); +    auto t = tuple(bookindex_section, obj_cite_digits);      return t;    }  #+END_SRC @@ -6232,8 +6328,8 @@ struct NotesSection {  #+name: meta_emitters_endnotes  #+BEGIN_SRC d -  private auto endnote_objects( -    int            obj_cite_digit, +  private auto endnote_objects(N)( +    N              obj_cite_digits,      bool[string]   opt_action,    )    in { @@ -6257,6 +6353,8 @@ struct NotesSection {        comp_obj_heading_.text                  = "Endnotes";        comp_obj_heading_.ocn                   = 0;        comp_obj_heading_.obj_cite_number       = ""; +      comp_obj_heading_.obj_cite_number_off   = ""; +      comp_obj_heading_.obj_cite_number_type  = 0;        comp_obj_heading_.segment_anchor_tag    = "_part_endnotes";        comp_obj_heading_.marked_up_level       = "B";        comp_obj_heading_.heading_lev_markup    = 1; @@ -6264,7 +6362,6 @@ struct NotesSection {        comp_obj_heading_.parent_ocn            = 1;        comp_obj_heading_.parent_lev_markup     = 0;        the_endnotes_section                    ~= comp_obj_heading_; -      ++obj_cite_digit;        ++mkn;        comp_obj_heading_                       = comp_obj_heading_.init;        comp_obj_heading_.of_part               = "backmatter"; @@ -6274,6 +6371,8 @@ struct NotesSection {        comp_obj_heading_.text                  = "Endnotes";        comp_obj_heading_.ocn                   = 0;        comp_obj_heading_.obj_cite_number       = ""; +      comp_obj_heading_.obj_cite_number_off   = ""; +      comp_obj_heading_.obj_cite_number_type  = 0;        comp_obj_heading_.segment_anchor_tag    = "endnotes";        comp_obj_heading_.marked_up_level       = "1";        comp_obj_heading_.heading_lev_markup    = 4; @@ -6282,7 +6381,6 @@ struct NotesSection {        comp_obj_heading_.parent_lev_markup     = 0;        comp_obj_heading_.anchor_tags           = ["endnotes"];        the_endnotes_section                    ~= comp_obj_heading_; -      ++obj_cite_digit;        ++mkn;      } else {        comp_obj_heading_                       = comp_obj_heading_.init; @@ -6293,6 +6391,8 @@ struct NotesSection {        comp_obj_heading_.text                  = "(skip) there are no Endnotes";        comp_obj_heading_.ocn                   = 0;        comp_obj_heading_.obj_cite_number       = ""; +      comp_obj_heading_.obj_cite_number_off   = ""; +      comp_obj_heading_.obj_cite_number_type  = 0;        comp_obj_heading_.marked_up_level       = "B";        comp_obj_heading_.heading_lev_markup    = 1;        comp_obj_heading_.heading_lev_collapsed = 1; @@ -6309,6 +6409,8 @@ struct NotesSection {        comp_obj_endnote_.is_a                  = "endnote";        comp_obj_endnote_.ocn                   = 0;        comp_obj_heading_.obj_cite_number       = ""; +      comp_obj_heading_.obj_cite_number_off   = ""; +      comp_obj_heading_.obj_cite_number_type  = 0;        comp_obj_endnote_.indent_hang           = 0;        comp_obj_endnote_.indent_base           = 0;        comp_obj_endnote_.bullet                = false; @@ -6322,7 +6424,7 @@ struct NotesSection {          the_endnotes_section                  ~= comp_obj_endnote_;        }      } -    auto t = tuple(the_endnotes_section, obj_cite_digit); +    auto t = tuple(the_endnotes_section, obj_cite_digits);      return t;    }  #+END_SRC @@ -6489,7 +6591,7 @@ struct NodeStructureMetadata {    ObjGenericComposite node_location_emitter(Lv,Ta,N,C,P,I)(      Lv lev_markup_number,      Ta segment_anchor_tag, -    N  obj_cite_digit_, +    N  obj_cite_digits,      C  cntr_,      P  ptr_,      I  is_ @@ -6498,18 +6600,17 @@ struct NodeStructureMetadata {      debug(asserts) {        static assert(is(typeof(lev_markup_number)  == string));        static assert(is(typeof(segment_anchor_tag) == string)); -      static assert(is(typeof(obj_cite_digit_)    == int)); +      static assert(is(typeof(obj_cite_digits.on) == int));        static assert(is(typeof(cntr_)              == int));        static assert(is(typeof(ptr_)               == int));        static assert(is(typeof(is_)                == string));      }      assert(is_ != "heading"); -    assert(obj_cite_digit_.to!int >= 0); +    assert(obj_cite_digits.on.to!int >= 0);    }    body {      assert(is_ != "heading"); // should not be necessary -    assert(obj_cite_digit_.to!int >= 0); // should not be necessary -    int obj_cite_digit = obj_cite_digit_.to!int; +    assert(obj_cite_digits.on.to!int >= 0); // should not be necessary      if (lv7 > State.off) {        p_["lev_markup_number"] = DocStructMarkupHeading.h_text_4;        p_["obj_cite_number"] = lv7; @@ -6526,7 +6627,7 @@ struct NodeStructureMetadata {      ObjGenericComposite comp_obj_location;      comp_obj_location                       = comp_obj_location.init;      comp_obj_location.is_a                  = is_; -    comp_obj_location.ocn                   = obj_cite_digit_; +    comp_obj_location.ocn                   = obj_cite_digits.on;      comp_obj_location.segment_anchor_tag    = segment_anchor_tag.to!string;      comp_obj_location.parent_ocn            = p_["obj_cite_number"];      comp_obj_location.parent_lev_markup     = p_["lev_markup_number"]; @@ -6556,7 +6657,7 @@ struct NodeStructureMetadata {      Lm  lev_markup_number,      Lc  lev_collapsed_number,      Ta  segment_anchor_tag, -    N   obj_cite_digit_, +    N   obj_cite_digits,      C   cntr_,      P   ptr_,      LA  lv_ancestors_txt, @@ -6573,7 +6674,7 @@ struct NodeStructureMetadata {        static assert(is(typeof(lev_markup_number)    == string));        static assert(is(typeof(lev_collapsed_number) == string));        static assert(is(typeof(segment_anchor_tag)   == string)); -      static assert(is(typeof(obj_cite_digit_)      == int)); +      static assert(is(typeof(obj_cite_digits.on)   == int));        static assert(is(typeof(cntr_)                == int));        static assert(is(typeof(ptr_)                 == int));        static assert(is(typeof(lv_ancestors_txt)     == string[])); @@ -6581,19 +6682,18 @@ struct NodeStructureMetadata {        static assert(is(typeof(html_segnames_ptr)    == int));      }      assert(is_ == "heading"); -    assert((obj_cite_digit_).to!int >= 0); +    assert((obj_cite_digits.on).to!int >= 0);      assert(        lev_markup_number.match(rgx.levels_numbered), -      ("not a valid heading level: " ~ lev_markup_number ~ " at " ~ obj_cite_digit_.to!string) +      ("not a valid heading level: " ~ lev_markup_number ~ " at " ~ obj_cite_digits.on.to!string)      );      if (lev_markup_number.match(rgx.levels_numbered)) {        if (lev_markup_number.to!int == 0) { -        assert(obj_cite_digit_.to!int == 1); +        assert(obj_cite_digits.on.to!int == 1);        }      }    }    body { -    int obj_cite_digit = obj_cite_digit_.to!int;      switch (lev_markup_number.to!int) {      case 0:        lv = DocStructMarkupHeading.h_sect_A; @@ -6681,8 +6781,10 @@ struct NodeStructureMetadata {      _comp_obj_heading_.is_of                     = "para";      _comp_obj_heading_.is_a                      = "heading";      _comp_obj_heading_.text                      = _text.to!string.strip; -    _comp_obj_heading_.ocn                       = obj_cite_digit_; -    _comp_obj_heading_.obj_cite_number           = (obj_cite_digit==0) ? "" : obj_cite_digit.to!string; +    _comp_obj_heading_.ocn                       = obj_cite_digits.on; +    _comp_obj_heading_.obj_cite_number           = (obj_cite_digits.on==0)    ? "" : obj_cite_digits.on.to!string; +    _comp_obj_heading_.obj_cite_number_off       = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; +    _comp_obj_heading_.obj_cite_number_type      = obj_cite_digits.type;      _comp_obj_heading_.segment_anchor_tag        = segment_anchor_tag.to!string;      _comp_obj_heading_.marked_up_level           = lev;      _comp_obj_heading_.heading_lev_markup        = (!(lev_markup_number.empty) ? lev_markup_number.to!int : 0); @@ -7035,7 +7137,7 @@ struct ObjGenericComposite {    string                 is_a                         = "";    string                 text                         = "";    string                 obj_cite_number              = ""; -  string                 obj_cite_number_non          = ""; +  string                 obj_cite_number_off          = "";    string                 obj_cite_number_bkidx        = "";    int                    obj_cite_number_type         = 0;    string[]               anchor_tags                  = []; diff --git a/org/sdp.org b/org/sdp.org index cc9eee2..032448e 100644 --- a/org/sdp.org +++ b/org/sdp.org @@ -27,7 +27,7 @@ struct Version {    int minor;    int patch;  } -enum ver = Version(0, 18, 0); +enum ver = Version(0, 18, 1);  #+END_SRC  #+NAME: version_txt @@ -714,10 +714,13 @@ foreach (k; doc_matters.keys_seq.seg) {          if (k == "body") {            check["last_obj_cite_number_body"] = obj.obj_cite_number;          } -        if ((k != "bookindex_seg") && (k != "blurb")) { +        if (!(obj.obj_cite_number.empty)) {            check["last_obj_cite_number"] = obj.obj_cite_number; -        } else if (k == "bookindex_seg") { -          check["last_obj_cite_number_bkidx"] = obj.obj_cite_number; +        } +      } +      if (k == "bookindex_seg") { +        if (obj.obj_cite_number_type == 2) { +          check["last_obj_cite_number_bkidx"] = obj.obj_cite_number_bkidx;          }        }      } diff --git a/src/sdp/meta/metadoc_from_src.d b/src/sdp/meta/metadoc_from_src.d index 920e7af..e3cbe2d 100644 --- a/src/sdp/meta/metadoc_from_src.d +++ b/src/sdp/meta/metadoc_from_src.d @@ -47,7 +47,7 @@ template SiSUdocAbstraction() {      h_text_5, // extra level, drop      content_non_header    } // header section A-D; header text 1-4 -  enum OCNstatus { inc, exc, bkidx, closing, reset, } +  enum OCNstatus { on, off, bkidx, closing, reset, }    enum OCNtype { ocn, non, bkidx, }    /+ biblio variables +/    string biblio_tag_name, biblio_tag_entry, st; @@ -69,7 +69,15 @@ template SiSUdocAbstraction() {    static auto obj_im = ObjInlineMarkup();    static auto obj_att = ObjAttributes();    /+ ocn +/ -  int obj_cite_digit, obj_cite_digit_, obj_cite_digit_bkidx; +  struct OCNset { +    int digit; +    int on; +    int off; +    int bkidx; +    int type; +  } +  OCNset obj_cite_digits; +  int obj_cite_digit_, obj_cite_digit_off, obj_cite_digit_bkidx, obj_cite_digit_type;    auto object_citation_number = OCNemitter();    int[] dom_markedup = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,];    int[] dom_markedup_buffer = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; @@ -217,7 +225,7 @@ template SiSUdocAbstraction() {      obj.dom_collapsed = dom.dup;      return obj;    } -  int ocn_emit(int ocn_status_flag) { +  static auto ocn_emit(int ocn_status_flag) {      return object_citation_number.ocn_emitter(ocn_status_flag);    }    /+ book index variables +/ @@ -318,8 +326,8 @@ template SiSUdocAbstraction() {      ];      string _anchor_tag;      string toc_txt_; -    an_object["glossary_nugget"] = ""; -    an_object["blurb_nugget"] = ""; +    an_object["glossary_nugget"]            = ""; +    an_object["blurb_nugget"]               = "";      comp_obj_heading_                       = comp_obj_heading_.init;      comp_obj_heading_.of_part               = "frontmatter";      comp_obj_heading_.of_section            = "toc"; @@ -328,6 +336,8 @@ template SiSUdocAbstraction() {      comp_obj_heading_.text                  = "Table of Contents";      comp_obj_heading_.ocn                   = 0;      comp_obj_heading_.obj_cite_number       = ""; +    comp_obj_heading_.obj_cite_number_off   = ""; +    comp_obj_heading_.obj_cite_number_type  = 0;      comp_obj_heading_.segment_anchor_tag    = "toc";      comp_obj_heading_.marked_up_level       = "1";      comp_obj_heading_.heading_lev_markup    = 4; @@ -442,6 +452,8 @@ template SiSUdocAbstraction() {                comp_obj_heading_.text                  = "Glossary";                comp_obj_heading_.ocn                   = 0;                comp_obj_heading_.obj_cite_number       = ""; +              comp_obj_heading_.obj_cite_number_off   = ""; +              comp_obj_heading_.obj_cite_number_type  = 0;                comp_obj_heading_.segment_anchor_tag    = "_part_glossary";                comp_obj_heading_.marked_up_level       = "B";                comp_obj_heading_.heading_lev_markup    = 1; @@ -459,6 +471,8 @@ template SiSUdocAbstraction() {                comp_obj_heading_.text                  = "Glossary";                comp_obj_heading_.ocn                   = 0;                comp_obj_heading_.obj_cite_number       = ""; +              comp_obj_heading_.obj_cite_number_off   = ""; +              comp_obj_heading_.obj_cite_number_type  = 0;                comp_obj_heading_.segment_anchor_tag    = "glossary";                comp_obj_heading_.marked_up_level       = "1";                comp_obj_heading_.heading_lev_markup    = 4; @@ -479,12 +493,14 @@ template SiSUdocAbstraction() {                comp_obj_para.text                  = line.to!string.strip;                comp_obj_para.ocn                   = 0;                comp_obj_para.obj_cite_number       = ""; +              comp_obj_para.obj_cite_number_off   = ""; +              comp_obj_para.obj_cite_number_type  = 0;                comp_obj_para.indent_hang           = indent["hang_position"];                comp_obj_para.indent_base           = indent["base_position"];                comp_obj_para.bullet                = bullet;                the_glossary_section                ~= comp_obj_para;              } -            obj_type_status["ocn_status"] = OCNstatus.inc; +            obj_type_status["ocn_status"] = OCNstatus.on;            }            continue;          } else if (line.matchFirst(rgx.heading_blurb) @@ -518,6 +534,8 @@ template SiSUdocAbstraction() {                comp_obj_heading_.text                  = "Blurb";                comp_obj_heading_.ocn                   = 0;                comp_obj_heading_.obj_cite_number       = ""; +              comp_obj_heading_.obj_cite_number_off   = ""; +              comp_obj_heading_.obj_cite_number_type  = 0;                comp_obj_heading_.segment_anchor_tag    = "_part_blurb";                comp_obj_heading_.marked_up_level       = "B";                comp_obj_heading_.heading_lev_markup    = 1; @@ -535,6 +553,8 @@ template SiSUdocAbstraction() {                comp_obj_heading_.text                  = "Blurb";                comp_obj_heading_.ocn                   = 0;                comp_obj_heading_.obj_cite_number       = ""; +              comp_obj_heading_.obj_cite_number_off   = ""; +              comp_obj_heading_.obj_cite_number_type  = 0;                comp_obj_heading_.segment_anchor_tag    = "blurb";                comp_obj_heading_.marked_up_level       = "1";                comp_obj_heading_.heading_lev_markup    = 4; @@ -555,6 +575,8 @@ template SiSUdocAbstraction() {                comp_obj_heading_.text                  = line.to!string;                comp_obj_heading_.ocn                   = 0;                comp_obj_heading_.obj_cite_number       = ""; +              comp_obj_heading_.obj_cite_number_off   = ""; +              comp_obj_heading_.obj_cite_number_type  = 0;                comp_obj_heading_.segment_anchor_tag    = "blurb";                comp_obj_heading_.marked_up_level       = an_object["lev"].to!string;                comp_obj_heading_.heading_lev_markup    = an_object["lev_markup_number"].to!int;    // make int, remove need to conv @@ -572,12 +594,14 @@ template SiSUdocAbstraction() {                comp_obj_para.text                  = line.to!string.strip;                comp_obj_para.ocn                   = 0;                comp_obj_para.obj_cite_number       = ""; +              comp_obj_para.obj_cite_number_off   = ""; +              comp_obj_para.obj_cite_number_type  = 0;                comp_obj_para.indent_hang           = indent["hang_position"];                comp_obj_para.indent_base           = indent["base_position"];                comp_obj_para.bullet                = bullet;                the_blurb_section                   ~= comp_obj_para;              } -            obj_type_status["ocn_status"] = OCNstatus.inc; +            obj_type_status["ocn_status"] = OCNstatus.on;            }            continue;          } else if (obj_type_status["quote"] == TriState.on) { @@ -624,7 +648,7 @@ template SiSUdocAbstraction() {                /+ poem to verse exceptions! +/                object_reset(an_object);                processing.remove("verse"); -              obj_cite_number_poem["start"] = obj_cite_digit.to!string; +              obj_cite_number_poem["start"] = obj_cite_digits.on.to!string;              }              _start_block_(line, obj_type_status, obj_cite_number_poem);              continue; @@ -733,7 +757,7 @@ template SiSUdocAbstraction() {                an_object,                the_document_body_section,                bookindex_unordered_hashes, -              obj_cite_digit, +              obj_cite_digits,                comp_obj_heading,                cntr,                obj_type_status, @@ -754,9 +778,9 @@ template SiSUdocAbstraction() {              if ((obj_type_status["heading"] == State.on)              && (line_occur["heading"] > State.off)) {                /+ heading object (current line empty) +/ -              obj_cite_digit = (an_object["lev_markup_number"].to!int == 0) -              ? (ocn_emit(OCNstatus.reset)) -              : (obj_cite_digit = ocn_emit(obj_type_status["ocn_status"])); +              obj_cite_digits = (an_object["lev_markup_number"].to!int == 0) +              ? ocn_emit(OCNstatus.reset) +              : ocn_emit(OCNstatus.on); // : ocn_emit(obj_type_status["ocn_status"]);                an_object["is"] = "heading";                an_object_key="body_nugget";                auto substantive_object_and_anchor_tags_tuple = @@ -769,7 +793,7 @@ template SiSUdocAbstraction() {                  anchor_tag_ = anchor_tags[0];                } else if (an_object["lev_markup_number"].to!int > 4) {                  segment_anchor_tag_that_object_belongs_to = anchor_tag_; -                segment_anchor_tag_that_object_belongs_to_uri = anchor_tag_ ~ ".fnSuffix#" ~ obj_cite_digit.to!string; +                segment_anchor_tag_that_object_belongs_to_uri = anchor_tag_ ~ ".fnSuffix#" ~ obj_cite_digits.on.to!string;                } else if (an_object["lev_markup_number"].to!int < 4) {                string segn;                  switch (an_object["lev_markup_number"].to!int) { @@ -797,9 +821,9 @@ template SiSUdocAbstraction() {                an_object["bookindex_nugget"] =                  ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : "";                bookindex_unordered_hashes = -                bookindex_extract_hash.bookindex_nugget_hash(an_object["bookindex_nugget"], obj_cite_digit, segment_anchor_tag_that_object_belongs_to); +                bookindex_extract_hash.bookindex_nugget_hash(an_object["bookindex_nugget"], obj_cite_digits, segment_anchor_tag_that_object_belongs_to);                /+ (incrementally build toc) table of contents here! +/ -              _anchor_tag=to!string(obj_cite_digit); +              _anchor_tag=to!string(obj_cite_digits.on);                the_table_of_contents_section = obj_im.table_of_contents_gather_headings(                  an_object,                  dochead_make_aa, @@ -820,7 +844,7 @@ template SiSUdocAbstraction() {                    an_object["lev_markup_number"],               // string                    an_object["lev_collapsed_number"],            // string                    segment_anchor_tag_that_object_belongs_to,    // string -                  obj_cite_digit,                               // int +                  obj_cite_digits,                              // OCNset                    cntr,                                         // int                    heading_ptr,                                  // int                    lv_ancestors_txt,                             // string[] @@ -847,17 +871,17 @@ template SiSUdocAbstraction() {              } else if ((obj_type_status["para"] == State.on)              && (line_occur["para"] > State.off)) {                /+ paragraph object (current line empty) +/ -              obj_cite_digit = ocn_emit(obj_type_status["ocn_status"]); +              obj_cite_digits = ocn_emit(obj_type_status["ocn_status"]);                an_object["bookindex_nugget"] =                  ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : "";                bookindex_unordered_hashes = -                bookindex_extract_hash.bookindex_nugget_hash(an_object["bookindex_nugget"], obj_cite_digit, segment_anchor_tag_that_object_belongs_to); +                bookindex_extract_hash.bookindex_nugget_hash(an_object["bookindex_nugget"], obj_cite_digits, segment_anchor_tag_that_object_belongs_to);                an_object["is"] = "para";                auto comp_obj_heading =                  node_construct.node_location_emitter(                    content_non_header,                    segment_anchor_tag_that_object_belongs_to, -                  obj_cite_digit, +                  obj_cite_digits,                    cntr,                    heading_ptr-1,                    an_object["is"], @@ -872,8 +896,11 @@ template SiSUdocAbstraction() {                comp_obj_para.is_of                 = "para";                comp_obj_para.is_a                  = "para";                comp_obj_para.text                  = an_object["substantive"].to!string.strip; -              comp_obj_para.ocn                   = obj_cite_digit; -              comp_obj_para.obj_cite_number       = (obj_cite_digit==0) ? "" : obj_cite_digit.to!string; +              comp_obj_para.ocn                   = obj_cite_digits.digit; +              comp_obj_para.obj_cite_number       = (obj_cite_digits.on==0)    ? "" : obj_cite_digits.on.to!string; +              comp_obj_para.obj_cite_number_off   = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; +              comp_obj_para.obj_cite_number_bkidx = (obj_cite_digits.bkidx==0) ? "" : obj_cite_digits.bkidx.to!string; +              comp_obj_para.obj_cite_number_type  = obj_cite_digits.type;                comp_obj_para.indent_hang           = indent["hang_position"];                comp_obj_para.indent_base           = indent["base_position"];                comp_obj_para.bullet                = bullet; @@ -946,10 +973,10 @@ template SiSUdocAbstraction() {      } /+ ← closed: loop markup document/text line by line +/      /+ ↓ post loop markup document/text +/      auto en_tuple = -      note_section.endnote_objects(obj_cite_digit, opt_action); +      note_section.endnote_objects(obj_cite_digits, opt_action);      static assert(!isTypeTuple!(en_tuple));      auto the_endnotes_section = en_tuple[0]; -    obj_cite_digit = en_tuple[1]; +    obj_cite_digits = en_tuple[1];      debug(endnotes) {        writefln(          "%s %s", @@ -969,6 +996,8 @@ template SiSUdocAbstraction() {        comp_obj_heading_.text                  = "(skip) there is no Glossary section";        comp_obj_heading_.ocn                   = 0;        comp_obj_heading_.obj_cite_number       = ""; +      comp_obj_heading_.obj_cite_number_off   = ""; +      comp_obj_heading_.obj_cite_number_type  = 0;        comp_obj_heading_.marked_up_level       = "B";        comp_obj_heading_.heading_lev_markup    = 1;        comp_obj_heading_.heading_lev_collapsed = 1; @@ -996,6 +1025,8 @@ template SiSUdocAbstraction() {        comp_obj_heading_.text                  = "Bibliography";        comp_obj_heading_.ocn                   = 0;        comp_obj_heading_.obj_cite_number       = ""; +      comp_obj_heading_.obj_cite_number_off   = ""; +      comp_obj_heading_.obj_cite_number_type  = 0;        comp_obj_heading_.segment_anchor_tag    = "_part_bibliography";        comp_obj_heading_.marked_up_level       = "B";        comp_obj_heading_.heading_lev_markup    = 1; @@ -1011,6 +1042,8 @@ template SiSUdocAbstraction() {        comp_obj_heading_.text                  = "Bibliography";        comp_obj_heading_.ocn                   = 0;        comp_obj_heading_.obj_cite_number       = ""; +      comp_obj_heading_.obj_cite_number_off   = ""; +      comp_obj_heading_.obj_cite_number_type  = 0;        comp_obj_heading_.segment_anchor_tag    = "bibliography";        comp_obj_heading_.marked_up_level       = "1";        comp_obj_heading_.heading_lev_markup    = 4; @@ -1028,6 +1061,8 @@ template SiSUdocAbstraction() {        comp_obj_heading_.text                  = "(skip) there is no Bibliography";        comp_obj_heading_.ocn                   = 0;        comp_obj_heading_.obj_cite_number       = ""; +      comp_obj_heading_.obj_cite_number_off   = ""; +      comp_obj_heading_.obj_cite_number_type  = 0;        comp_obj_heading_.marked_up_level       = "B";        comp_obj_heading_.heading_lev_markup    = 1;        comp_obj_heading_.heading_lev_collapsed = 1; @@ -1059,6 +1094,8 @@ template SiSUdocAbstraction() {        comp_obj_para.text                  = out_.to!string.strip;        comp_obj_para.ocn                   = 0;        comp_obj_para.obj_cite_number       = ""; +      comp_obj_para.obj_cite_number_off   = ""; +      comp_obj_para.obj_cite_number_type  = 0;        comp_obj_para.indent_hang           = 0;        comp_obj_para.indent_base           = 1;        comp_obj_para.bullet                = bullet; @@ -1074,13 +1111,13 @@ template SiSUdocAbstraction() {      auto bi_tuple =        bi.bookindex_build_abstraction_section(          bookindex_unordered_hashes, -        obj_cite_digit, +        obj_cite_digits,          opt_action,        );      destroy(bookindex_unordered_hashes);      static assert(!isTypeTuple!(bi_tuple));      auto the_bookindex_section = bi_tuple[0]; -    obj_cite_digit = bi_tuple[1]; +    obj_cite_digits = bi_tuple[1];      debug(bookindex) {        foreach (bi_entry; the_bookindex_section["seg"]) {          writeln(bi_entry); @@ -1095,6 +1132,8 @@ template SiSUdocAbstraction() {        comp_obj_heading_.text                  = "(skip) there is no Blurb section";        comp_obj_heading_.ocn                   = 0;        comp_obj_para.obj_cite_number           = ""; +      comp_obj_para.obj_cite_number_off       = ""; +      comp_obj_para.obj_cite_number_type      = 0;        comp_obj_heading_.segment_anchor_tag    = "";        comp_obj_heading_.marked_up_level       = "B";        comp_obj_heading_.heading_lev_markup    = 1; @@ -1119,6 +1158,8 @@ template SiSUdocAbstraction() {      comp_obj_toc.is_a                  = "toc";      comp_obj_toc.ocn                   = 0;      comp_obj_toc.obj_cite_number       = ""; +    comp_obj_toc.obj_cite_number_off   = ""; +    comp_obj_toc.obj_cite_number_type  = 0;      comp_obj_toc.indent_hang           = indent["hang_position"];      comp_obj_toc.indent_base           = indent["base_position"];      comp_obj_toc.bullet                = false; @@ -1326,6 +1367,12 @@ template SiSUdocAbstraction() {          if (obj.heading_lev_markup <= 4) {            segnames_0_4 ~= obj.segment_anchor_tag;          } +        if (obj.heading_lev_markup == 0) { +          assert( obj.ocn == 1, "Title OCN should be 1 not: " ~ obj.ocn.to!string); // bug introduced 0.18.1 +          obj.ocn = 1; +          obj.obj_cite_number = "1"; +          obj.obj_cite_number_type = OCNtype.ocn; +        }          /+ dom structure (marked up & collapsed) +/          if ((opt_action["html"])          || (opt_action["html-scroll"]) @@ -1437,6 +1484,9 @@ template SiSUdocAbstraction() {            debug(dom) {              writeln(obj.text);            } +          obj_cite_digits = ocn_emit(OCNstatus.on); +          obj.ocn = obj_cite_digits.digit; +          obj.obj_cite_number = obj_cite_digits.on.to!string;            if (obj.heading_lev_markup <= 4) {              segnames_0_4 ~= obj.segment_anchor_tag;              if (obj.heading_lev_markup == 4) { @@ -1468,9 +1518,9 @@ template SiSUdocAbstraction() {            debug(dom) {              writeln(obj.text);            } -          obj_cite_digit = ocn_emit(OCNstatus.inc); -          obj.ocn = obj_cite_digit; -          obj.obj_cite_number = obj_cite_digit.to!string; +          obj_cite_digits = ocn_emit(OCNstatus.on); +          obj.ocn = obj_cite_digits.digit; +          obj.obj_cite_number = obj_cite_digits.on.to!string;            if (obj.heading_lev_markup <= 4) {              segnames_0_4 ~= obj.segment_anchor_tag;              if (obj.heading_lev_markup == 4) { @@ -1493,9 +1543,9 @@ template SiSUdocAbstraction() {            }            obj = obj_heading_ancestors(obj, lv_ancestors_txt);          } else if (obj.is_a == "glossary") { -          obj_cite_digit = ocn_emit(OCNstatus.inc); -          obj.ocn = obj_cite_digit; -          obj.obj_cite_number = obj_cite_digit.to!string; +          obj_cite_digits = ocn_emit(OCNstatus.on); +          obj.ocn = obj_cite_digits.digit; +          obj.obj_cite_number = obj_cite_digits.on.to!string;          }        }      } @@ -1506,9 +1556,9 @@ template SiSUdocAbstraction() {            debug(dom) {              writeln(obj.text);            } -          obj_cite_digit = ocn_emit(OCNstatus.inc); -          obj.ocn = obj_cite_digit; -          obj.obj_cite_number = obj_cite_digit.to!string; +          obj_cite_digits = ocn_emit(OCNstatus.on); +          obj.ocn = obj_cite_digits.digit; +          obj.obj_cite_number = obj_cite_digits.on.to!string; // check            if (obj.heading_lev_markup <= 4) {              segnames_0_4 ~= obj.segment_anchor_tag;              if (obj.heading_lev_markup == 4) { @@ -1531,14 +1581,14 @@ template SiSUdocAbstraction() {            }            obj = obj_heading_ancestors(obj, lv_ancestors_txt);          } else if (obj.is_a == "bibliography") { -          obj_cite_digit = ocn_emit(OCNstatus.inc); -          obj.ocn = obj_cite_digit; -          obj.obj_cite_number = obj_cite_digit.to!string; +          obj_cite_digits = ocn_emit(OCNstatus.on); +          obj.ocn = obj_cite_digits.on; +          obj.obj_cite_number = obj_cite_digits.on.to!string;          }        }      }      /+ optional only one 1~ level +/ -    int ocn_ = obj_cite_digit; +    int ocn_ = obj_cite_digits.on;      int ocn_bkidx_ = 0;      int ocn_bidx_;      if (the_bookindex_section["scroll"].length > 1) { @@ -1549,9 +1599,9 @@ template SiSUdocAbstraction() {          if (obj.is_a == "heading") {            debug(dom) {            } -          obj_cite_digit = ocn_emit(OCNstatus.inc); -          obj.ocn = obj_cite_digit; -          obj.obj_cite_number = obj_cite_digit.to!string; +          obj_cite_digits = ocn_emit(OCNstatus.on); +          obj.ocn = obj_cite_digits.on; +          obj.obj_cite_number = obj_cite_digits.on.to!string;            if (obj.heading_lev_markup <= 4) {              segnames_0_4 ~= obj.segment_anchor_tag;              if (obj.heading_lev_markup == 4) { @@ -1574,8 +1624,9 @@ template SiSUdocAbstraction() {            }            obj = obj_heading_ancestors(obj, lv_ancestors_txt);          } else if (obj.is_a == "bookindex") { -          obj_cite_digit_bkidx = ocn_emit(OCNstatus.bkidx); -          obj.obj_cite_number_bkidx = obj_cite_digit_bkidx.to!string; // FIX need to distinguish from regular ocn +          obj_cite_digits = ocn_emit(OCNstatus.bkidx); +          obj.ocn = obj_cite_digits.digit; +          obj.obj_cite_number_bkidx = obj_cite_digits.bkidx.to!string;            obj.obj_cite_number_type = OCNtype.bkidx;          }        } @@ -1616,7 +1667,6 @@ template SiSUdocAbstraction() {            obj.obj_cite_number_type = OCNtype.bkidx;          }        } -      assert(obj_cite_digit == ocn_);        assert(obj_cite_digit_bkidx == ocn_bidx_);      }      /+ optional only one 1~ level +/ @@ -1626,9 +1676,9 @@ template SiSUdocAbstraction() {            debug(dom) {              writeln(obj.text);            } -          obj_cite_digit = ocn_emit(OCNstatus.inc); -          obj.ocn = obj_cite_digit; -          obj.obj_cite_number = obj_cite_digit.to!string; +          obj_cite_digits = ocn_emit(OCNstatus.on); +          obj.ocn = obj_cite_digits.on; +          obj.obj_cite_number = obj_cite_digits.on.to!string;            if (obj.heading_lev_markup <= 4) {              segnames_0_4 ~= obj.segment_anchor_tag;              if (obj.heading_lev_markup == 4) { @@ -1651,8 +1701,8 @@ template SiSUdocAbstraction() {            }            obj = obj_heading_ancestors(obj, lv_ancestors_txt);          } else if (obj.is_a == "blurb") { -          obj_cite_digit = ocn_emit(OCNstatus.exc); -          obj.obj_cite_number_non = obj_cite_digit.to!string; +          obj_cite_digits = ocn_emit(OCNstatus.off); +          obj.obj_cite_number_off  = obj_cite_digits.off.to!string;            obj.obj_cite_number_type = OCNtype.non;          }        } @@ -1670,6 +1720,8 @@ template SiSUdocAbstraction() {      comp_obj_heading_.is_a                  = "heading";      comp_obj_heading_.ocn                   = 0;      comp_obj_para.obj_cite_number           = ""; +    comp_obj_para.obj_cite_number_off       = ""; +    comp_obj_para.obj_cite_number_type      = 0;      comp_obj_heading_.segment_anchor_tag    = "";      comp_obj_heading_.marked_up_level       = "";      comp_obj_heading_.heading_lev_markup    = 9; @@ -1749,7 +1801,7 @@ template SiSUdocAbstraction() {      destroy(bookindex_unordered_hashes);      destroy(an_object);      biblio_arr_json = []; -    obj_cite_digit=0; +    obj_cite_digits=ocn_emit(OCNstatus.reset);      obj_cite_digit_=0;      html_segnames_ptr=0;      html_segnames_ptr_cntr=0; @@ -1790,10 +1842,10 @@ template SiSUdocAbstraction() {        static assert(is(typeof(an_object)       == string[string]));        static assert(is(typeof(obj_type_status) == int[string]));      } -    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"]      = State.off; +    line_occur["para"]         = State.off; +    obj_type_status["heading"] = State.off; +    obj_type_status["para"]    = State.off;      an_object = object_reset(an_object);    }    static auto _check_ocn_status_(L,T)( @@ -1824,11 +1876,11 @@ template SiSUdocAbstraction() {        } else {          if (obj_type_status["ocn_status_off_for_multiple_objects"] == TriState.off) {            if (line.matchFirst(rgx.obj_cite_number_off)) { -            obj_type_status["ocn_status"] = OCNstatus.exc; +            obj_type_status["ocn_status"] = OCNstatus.off;            } else if (line.matchFirst(rgx.obj_cite_number_off_dh)) {              obj_type_status["ocn_status"] = OCNstatus.closing;            } else { -            obj_type_status["ocn_status"] = OCNstatus.inc; +            obj_type_status["ocn_status"] = OCNstatus.on;            }          } else {            obj_type_status["ocn_status"] = @@ -1838,7 +1890,7 @@ template SiSUdocAbstraction() {      } else if ((!line.empty) && (obj_type_status["ocn_status_off_for_multiple_objects"] > TriState.off)) {        if (line.matchFirst(rgx.obj_cite_number_off_block_close)) {          obj_type_status["ocn_status_off_for_multiple_objects"] = TriState.off; -        obj_type_status["ocn_status"]                          = OCNstatus.inc; +        obj_type_status["ocn_status"]                          = OCNstatus.on;          debug(ocnoff) {            writeln(line);          } @@ -1880,8 +1932,7 @@ template SiSUdocAbstraction() {            line          );        } -      obj_cite_number_poem["start"] = -        obj_cite_digit.to!string; +      obj_cite_number_poem["start"] = obj_cite_digits.on.to!string;        obj_type_status["blocks"]     = TriState.on;        obj_type_status["verse_new"]  = State.on;        obj_type_status["poem"]       = TriState.on; @@ -1960,7 +2011,7 @@ template SiSUdocAbstraction() {            line          );        } -      obj_cite_number_poem["start"] = obj_cite_digit.to!string; +      obj_cite_number_poem["start"] = obj_cite_digits.on.to!string;        obj_type_status["blocks"]    = TriState.on;        obj_type_status["verse_new"] = State.on;        obj_type_status["poem"]      = TriState.on; @@ -2177,14 +2228,14 @@ template SiSUdocAbstraction() {              writeln(__LINE__);              writefln(                "* %s %s", -              obj_cite_digit, +              obj_cite_digits.on,                line              );            }            if (an_object.length > 0) {              debug(poem) {                             // poem (curly) close                writeln( -                obj_cite_digit, +                obj_cite_digits.on,                  an_object[an_object_key]                );              } @@ -2198,8 +2249,11 @@ template SiSUdocAbstraction() {              comp_obj_block.of_section                 = "body";              comp_obj_block.is_of                      = "block";              comp_obj_block.is_a                       = "verse"; -            comp_obj_block.ocn                        = obj_cite_digit; -            comp_obj_block.obj_cite_number            = (obj_cite_digit==0) ? "" : obj_cite_digit.to!string; +            comp_obj_block.ocn                        = obj_cite_digits.on; +            comp_obj_block.obj_cite_number            = (obj_cite_digits.on==0)    ? "" : obj_cite_digits.on.to!string; +            comp_obj_block.obj_cite_number_off        = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; +            comp_obj_block.obj_cite_number_bkidx      = (obj_cite_digits.bkidx==0) ? "" : obj_cite_digits.bkidx.to!string; +            comp_obj_block.obj_cite_number_type       = obj_cite_digits.type;              comp_obj_block.text                       = an_object["substantive"];              comp_obj_block.inline_notes_reg           = substantive_obj_misc_tuple[sObj.notes_reg];              comp_obj_block.inline_notes_star          = substantive_obj_misc_tuple[sObj.notes_star]; @@ -2210,16 +2264,14 @@ template SiSUdocAbstraction() {            processing.remove("verse");            ++cntr;          } -        obj_cite_number_poem["end"] = -          obj_cite_digit.to!string; +        obj_cite_number_poem["end"] = obj_cite_digits.on.to!string;          obj_type_status["blocks"]     = TriState.closing;          obj_type_status["poem"]       = TriState.closing;          obj_type_status["curly_poem"] = TriState.off;        } else {          processing["verse"] ~= line ~= "\n";          if (obj_type_status["verse_new"] == State.on) { -          obj_cite_digit = -            ocn_emit(obj_type_status["ocn_status"]); +          obj_cite_digits = ocn_emit(OCNstatus.on);            obj_type_status["verse_new"] = State.off;          } else if (line.matchFirst(rgx.newline_eol_delimiter_only)) {            processing["verse"] = processing["verse"].stripRight; @@ -2232,7 +2284,7 @@ template SiSUdocAbstraction() {            debug(poem) {                          // poem verse              writefln(                "* %s curly\n%s", -              obj_cite_digit, +              obj_cite_digits.on,                an_object[an_object_key]              );            } @@ -2241,7 +2293,7 @@ template SiSUdocAbstraction() {            auto comp_obj_location = node_construct.node_location_emitter(              content_non_header,              segment_anchor_tag_that_object_belongs_to, -            obj_cite_digit, +            obj_cite_digits,              cntr,              heading_ptr-1,              an_object["is"] @@ -2255,8 +2307,11 @@ template SiSUdocAbstraction() {            comp_obj_block.of_section                 = "body";            comp_obj_block.is_of                      = "block";            comp_obj_block.is_a                       = "verse"; -          comp_obj_block.ocn                        = obj_cite_digit; -          comp_obj_block.obj_cite_number            = (obj_cite_digit==0) ? "" : obj_cite_digit.to!string; +          comp_obj_block.ocn                        = obj_cite_digits.on; +          comp_obj_block.obj_cite_number            = (obj_cite_digits.on==0)    ? "" : obj_cite_digits.on.to!string; +          comp_obj_block.obj_cite_number_off        = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; +          comp_obj_block.obj_cite_number_bkidx      = (obj_cite_digits.bkidx==0) ? "" : obj_cite_digits.bkidx.to!string; +          comp_obj_block.obj_cite_number_type       = obj_cite_digits.type;            comp_obj_block.text                       = an_object["substantive"];            comp_obj_block.inline_notes_reg           = substantive_obj_misc_tuple[sObj.notes_reg];            comp_obj_block.inline_notes_star          = substantive_obj_misc_tuple[sObj.notes_star]; @@ -2282,7 +2337,7 @@ template SiSUdocAbstraction() {          if (an_object.length > 0) {            debug(poem) {                                     // poem (tic) close              writeln(__LINE__); -            writeln(obj_cite_digit, line); +            writeln(obj_cite_digits.on, line);            }            processing.remove("verse");            an_object["is"]                           = "verse"; @@ -2295,14 +2350,17 @@ template SiSUdocAbstraction() {            comp_obj_block.of_section                 = "body";            comp_obj_block.is_of                      = "block";            comp_obj_block.is_a                       = "verse"; -          comp_obj_block.ocn                        = obj_cite_digit; -          comp_obj_block.obj_cite_number            = (obj_cite_digit==0) ? "" : obj_cite_digit.to!string; +          comp_obj_block.ocn                        = obj_cite_digits.on; +          comp_obj_block.obj_cite_number            = (obj_cite_digits.on==0)    ? "" : obj_cite_digits.on.to!string; +          comp_obj_block.obj_cite_number_off        = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; +          comp_obj_block.obj_cite_number_bkidx      = (obj_cite_digits.bkidx==0) ? "" : obj_cite_digits.bkidx.to!string; +          comp_obj_block.obj_cite_number_type       = obj_cite_digits.type;            comp_obj_block.text                       = an_object["substantive"];            comp_obj_block.inline_notes_reg           = substantive_obj_misc_tuple[sObj.notes_reg];            comp_obj_block.inline_notes_star          = substantive_obj_misc_tuple[sObj.notes_star];            comp_obj_block.inline_links               = substantive_obj_misc_tuple[sObj.links];            the_document_body_section                 ~= comp_obj_block; -          obj_cite_number_poem["end"]               = obj_cite_digit.to!string; +          obj_cite_number_poem["end"]               = obj_cite_digits.on.to!string;            object_reset(an_object);            processing.remove("verse");            ++cntr; @@ -2313,8 +2371,7 @@ template SiSUdocAbstraction() {        } else {          processing["verse"] ~= line ~= "\n";          if (obj_type_status["verse_new"] == State.on) { -          obj_cite_digit = -            ocn_emit(obj_type_status["ocn_status"]); +          obj_cite_digits = ocn_emit(OCNstatus.on);            obj_type_status["verse_new"] = State.off;          } else if (line.matchFirst(rgx.newline_eol_delimiter_only)) {            processing["verse"] = processing["verse"].stripRight; @@ -2327,7 +2384,7 @@ template SiSUdocAbstraction() {            debug(poem) {                            // poem (tic) close              writefln(                "* %s tic\n%s", -              obj_cite_digit, +              obj_cite_digits.on,                an_object[an_object_key]              );            } @@ -2337,7 +2394,7 @@ template SiSUdocAbstraction() {              node_construct.node_location_emitter(                content_non_header,                segment_anchor_tag_that_object_belongs_to, -              obj_cite_digit, +              obj_cite_digits,                cntr,                heading_ptr-1,                an_object["is"] @@ -2351,8 +2408,11 @@ template SiSUdocAbstraction() {            comp_obj_block.of_section                 = "body";            comp_obj_block.is_of                      = "block";            comp_obj_block.is_a                       = "verse"; -          comp_obj_block.ocn                        = obj_cite_digit; -          comp_obj_block.obj_cite_number            = (obj_cite_digit==0) ? "" : obj_cite_digit.to!string; +          comp_obj_block.ocn                        = obj_cite_digits.on; +          comp_obj_block.obj_cite_number            = (obj_cite_digits.on==0)    ? "" : obj_cite_digits.on.to!string; +          comp_obj_block.obj_cite_number_off        = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; +          comp_obj_block.obj_cite_number_bkidx      = (obj_cite_digits.bkidx==0) ? "" : obj_cite_digits.bkidx.to!string; +          comp_obj_block.obj_cite_number_type       = obj_cite_digits.type;            comp_obj_block.text                       = an_object["substantive"];            comp_obj_block.inline_notes_reg           = substantive_obj_misc_tuple[sObj.notes_reg];            comp_obj_block.inline_notes_star          = substantive_obj_misc_tuple[sObj.notes_star]; @@ -2447,7 +2507,7 @@ template SiSUdocAbstraction() {            line,            an_object,            the_document_body_section, -          obj_cite_digit, +          obj_cite_digits,            comp_obj_heading,            cntr,            obj_type_status, @@ -2619,24 +2679,23 @@ template SiSUdocAbstraction() {        header_tag_value="";      }    } -  void _table_closed_make_special_notation_table_( +  void _table_closed_make_special_notation_table_(N)(      char[]                           line,      return ref string[string]        an_object,      return ref ObjGenericComposite[] the_document_body_section, -    return ref int                   obj_cite_digit, +    return ref N                     obj_cite_digits,      return ref ObjGenericComposite   _comp_obj_heading,      return ref int                   cntr,      return ref int[string]           obj_type_status,      string[string][string]           dochead_make_aa,    ) {        comp_obj_block = comp_obj_block.init; -      obj_cite_digit = -        ocn_emit(obj_type_status["ocn_status"]); +      obj_cite_digits = ocn_emit(OCNstatus.on);        auto comp_obj_location =          node_construct.node_location_emitter(            content_non_header,            segment_anchor_tag_that_object_belongs_to, -          obj_cite_digit, +          obj_cite_digits,            cntr,            heading_ptr-1,            "table" @@ -2644,23 +2703,26 @@ template SiSUdocAbstraction() {        an_object["is"] = "table";        auto substantive_obj_misc_tuple =          obj_im.obj_inline_markup_and_anchor_tags_and_misc(an_object, "body_nugget", dochead_make_aa); -      an_object["substantive"]         = substantive_obj_misc_tuple[sObj.content]; -      comp_obj_block.ocn               = obj_cite_digit; -      comp_obj_block.obj_cite_number   = (obj_cite_digit==0) ? "" : obj_cite_digit.to!string; -      comp_obj_block                   = table_instructions(comp_obj_block, an_object["table_head"]); -      comp_obj_block                   = table_substantive_munge_special(comp_obj_block, an_object["substantive"]); -      the_document_body_section        ~= comp_obj_block; +      an_object["substantive"]             = substantive_obj_misc_tuple[sObj.content]; +      comp_obj_block.ocn                   = obj_cite_digits.on; +      comp_obj_block.obj_cite_number       = (obj_cite_digits.on==0)    ? "" : obj_cite_digits.on.to!string; +      comp_obj_block.obj_cite_number_off   = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; +      comp_obj_block.obj_cite_number_bkidx = (obj_cite_digits.bkidx==0) ? "" : obj_cite_digits.bkidx.to!string; +      comp_obj_block.obj_cite_number_type  = obj_cite_digits.type; +      comp_obj_block                       = table_instructions(comp_obj_block, an_object["table_head"]); +      comp_obj_block                       = table_substantive_munge_special(comp_obj_block, an_object["substantive"]); +      the_document_body_section            ~= comp_obj_block;        object_reset(an_object);        processing.remove("verse");        ++cntr;    } -  void _block_flag_line_empty_(B)( +  void _block_flag_line_empty_(B,N)(      B                                   bookindex_extract_hash,      char[]                              line,      return ref string[string]           an_object,      return ref ObjGenericComposite[]    the_document_body_section,      return ref string[][string][string] bookindex_unordered_hashes, -    return ref int                      obj_cite_digit, +    return ref N                        obj_cite_digits,      return ref ObjGenericComposite      _comp_obj_heading,      return ref int                      cntr,      return ref int[string]              obj_type_status, @@ -2678,14 +2740,13 @@ template SiSUdocAbstraction() {      );      assertions_flag_types_block_status_none_or_closed(obj_type_status);      if (obj_type_status["quote"] == TriState.closing) { -      obj_cite_digit = -        ocn_emit(obj_type_status["ocn_status"]); +      obj_cite_digits = ocn_emit(OCNstatus.on);        an_object["bookindex_nugget"] =          ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : "";        bookindex_unordered_hashes =          bookindex_extract_hash.bookindex_nugget_hash(            an_object["bookindex_nugget"], -          obj_cite_digit, +          obj_cite_digits,            segment_anchor_tag_that_object_belongs_to          );        an_object["is"] = "quote"; @@ -2693,7 +2754,7 @@ template SiSUdocAbstraction() {          node_construct.node_location_emitter(            content_non_header,            segment_anchor_tag_that_object_belongs_to, -          obj_cite_digit, +          obj_cite_digits,            cntr,            heading_ptr-1,            an_object["is"] @@ -2707,8 +2768,11 @@ template SiSUdocAbstraction() {        comp_obj_block.of_section                 = "body";        comp_obj_block.is_of                      = "block";        comp_obj_block.is_a                       = "quote"; -      comp_obj_block.ocn                        = obj_cite_digit; -      comp_obj_block.obj_cite_number            = (obj_cite_digit==0) ? "" : obj_cite_digit.to!string; +      comp_obj_block.ocn                        = obj_cite_digits.on; +      comp_obj_block.obj_cite_number            = (obj_cite_digits.on==0)    ? "" : obj_cite_digits.on.to!string; +      comp_obj_block.obj_cite_number_off        = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; +      comp_obj_block.obj_cite_number_bkidx      = (obj_cite_digits.bkidx==0) ? "" : obj_cite_digits.bkidx.to!string; +      comp_obj_block.obj_cite_number_type       = obj_cite_digit_type;        comp_obj_block.text                       = an_object["substantive"];        comp_obj_block.inline_notes_reg           = substantive_obj_misc_tuple[sObj.notes_reg];        comp_obj_block.inline_notes_star          = substantive_obj_misc_tuple[sObj.notes_star]; @@ -2720,14 +2784,13 @@ template SiSUdocAbstraction() {        processing.remove("verse");        ++cntr;      } else if (obj_type_status["group"] == TriState.closing) { -      obj_cite_digit = -        ocn_emit(obj_type_status["ocn_status"]); +      obj_cite_digits = ocn_emit(OCNstatus.on);        an_object["bookindex_nugget"] =          ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : "";        bookindex_unordered_hashes =          bookindex_extract_hash.bookindex_nugget_hash(            an_object["bookindex_nugget"], -          obj_cite_digit, +          obj_cite_digits,            segment_anchor_tag_that_object_belongs_to          );        an_object["is"] = "group"; @@ -2735,7 +2798,7 @@ template SiSUdocAbstraction() {          node_construct.node_location_emitter(            content_non_header,            segment_anchor_tag_that_object_belongs_to, -          obj_cite_digit, +          obj_cite_digits,            cntr,            heading_ptr-1,            an_object["is"] @@ -2749,8 +2812,11 @@ template SiSUdocAbstraction() {        comp_obj_block.of_section                 = "body";        comp_obj_block.is_of                      = "block";        comp_obj_block.is_a                       = "group"; -      comp_obj_block.ocn                        = obj_cite_digit; -      comp_obj_block.obj_cite_number            = (obj_cite_digit==0) ? "" : obj_cite_digit.to!string; +      comp_obj_block.ocn                        = obj_cite_digits.on; +      comp_obj_block.obj_cite_number            = (obj_cite_digits.on==0)    ? "" : obj_cite_digits.on.to!string; +      comp_obj_block.obj_cite_number_off        = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; +      comp_obj_block.obj_cite_number_bkidx      = (obj_cite_digits.bkidx==0) ? "" : obj_cite_digits.bkidx.to!string; +      comp_obj_block.obj_cite_number_type       = obj_cite_digits.type;        comp_obj_block.text                       = an_object["substantive"];        comp_obj_block.inline_notes_reg           = substantive_obj_misc_tuple[sObj.notes_reg];        comp_obj_block.inline_notes_star          = substantive_obj_misc_tuple[sObj.notes_star]; @@ -2762,13 +2828,13 @@ template SiSUdocAbstraction() {        processing.remove("verse");        ++cntr;      } else if (obj_type_status["block"] == TriState.closing) { -      obj_cite_digit = ocn_emit(obj_type_status["ocn_status"]); +      obj_cite_digits = ocn_emit(OCNstatus.on);        an_object["bookindex_nugget"] =          ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : "";        bookindex_unordered_hashes =          bookindex_extract_hash.bookindex_nugget_hash(            an_object["bookindex_nugget"], -          obj_cite_digit, +          obj_cite_digits,            segment_anchor_tag_that_object_belongs_to          );        an_object["is"] = "block"; @@ -2776,7 +2842,7 @@ template SiSUdocAbstraction() {          node_construct.node_location_emitter(            content_non_header,            segment_anchor_tag_that_object_belongs_to, -          obj_cite_digit, +          obj_cite_digits,            cntr,            heading_ptr-1,            an_object["is"] @@ -2789,8 +2855,11 @@ template SiSUdocAbstraction() {        comp_obj_block.of_section                 = "body";        comp_obj_block.is_of                      = "block";        comp_obj_block.is_a                       = "block"; -      comp_obj_block.ocn                        = obj_cite_digit; -      comp_obj_block.obj_cite_number            = (obj_cite_digit==0) ? "" : obj_cite_digit.to!string; +      comp_obj_block.ocn                        = obj_cite_digits.on; +      comp_obj_block.obj_cite_number            = (obj_cite_digits.on==0)    ? "" : obj_cite_digits.on.to!string; +      comp_obj_block.obj_cite_number_off        = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; +      comp_obj_block.obj_cite_number_bkidx      = (obj_cite_digits.bkidx==0) ? "" : obj_cite_digits.bkidx.to!string; +      comp_obj_block.obj_cite_number_type       = obj_cite_digit_type;        comp_obj_block.text                       = an_object["substantive"];        comp_obj_block.inline_notes_reg           = substantive_obj_misc_tuple[sObj.notes_reg];        comp_obj_block.inline_notes_star          = substantive_obj_misc_tuple[sObj.notes_star]; @@ -2807,7 +2876,7 @@ template SiSUdocAbstraction() {        bookindex_unordered_hashes =          bookindex_extract_hash.bookindex_nugget_hash(            an_object["bookindex_nugget"], -          obj_cite_digit, +          obj_cite_digits,            segment_anchor_tag_that_object_belongs_to          );        an_object["is"]                           = "verse"; @@ -2815,7 +2884,7 @@ template SiSUdocAbstraction() {          node_construct.node_location_emitter(            content_non_header,            segment_anchor_tag_that_object_belongs_to, -          obj_cite_digit, +          obj_cite_digits,            cntr,            heading_ptr-1,            an_object["is"] @@ -2825,8 +2894,11 @@ template SiSUdocAbstraction() {        comp_obj_poem_ocn.of_section              = "body";        comp_obj_poem_ocn.is_of                   = "block";        comp_obj_poem_ocn.is_a                    = "poem"; -      comp_obj_poem_ocn.ocn                     = obj_cite_digit; +      comp_obj_poem_ocn.ocn                     = obj_cite_digits.on;        comp_obj_poem_ocn.obj_cite_number         = (obj_cite_number_poem["start"], obj_cite_number_poem["end"]); +      comp_obj_poem_ocn.obj_cite_number_off     = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; // +      comp_obj_poem_ocn.obj_cite_number_bkidx   = (obj_cite_digits.bkidx==0) ? "" : obj_cite_digits.bkidx.to!string; // +      comp_obj_poem_ocn.obj_cite_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; @@ -2834,14 +2906,13 @@ template SiSUdocAbstraction() {        object_reset(an_object);        processing.remove("verse");      } else if (obj_type_status["code"] == TriState.closing) { -      obj_cite_digit = -        ocn_emit(obj_type_status["ocn_status"]); +      obj_cite_digits = ocn_emit(OCNstatus.on);        an_object["bookindex_nugget"] =          ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : "";        bookindex_unordered_hashes =          bookindex_extract_hash.bookindex_nugget_hash(            an_object["bookindex_nugget"], -          obj_cite_digit, +          obj_cite_digits,            segment_anchor_tag_that_object_belongs_to          );        an_object["is"] = "code"; @@ -2849,7 +2920,7 @@ template SiSUdocAbstraction() {          node_construct.node_location_emitter(            content_non_header,            segment_anchor_tag_that_object_belongs_to, -          obj_cite_digit, +          obj_cite_digits,            cntr,            heading_ptr-1,            an_object["is"] @@ -2863,8 +2934,11 @@ template SiSUdocAbstraction() {        comp_obj_code.of_section                  = "body";        comp_obj_code.is_of                       = "block";        comp_obj_code.is_a                        = "code"; -      comp_obj_code.ocn                         = obj_cite_digit; -      comp_obj_code.obj_cite_number             = (obj_cite_digit==0) ? "" : obj_cite_digit.to!string; +      comp_obj_code.ocn                         = obj_cite_digits.on; +      comp_obj_code.obj_cite_number             = (obj_cite_digits.on==0)    ? "" : obj_cite_digits.on.to!string; +      comp_obj_block.obj_cite_number_off        = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; +      comp_obj_block.obj_cite_number_bkidx      = (obj_cite_digits.bkidx==0) ? "" : obj_cite_digits.bkidx.to!string; +      comp_obj_block.obj_cite_number_type       = obj_cite_digits.type;        comp_obj_code.text                        = an_object["substantive"];        comp_obj_code.inline_notes_reg            = substantive_obj_misc_tuple[sObj.notes_reg];        comp_obj_code.inline_notes_star           = substantive_obj_misc_tuple[sObj.notes_star]; @@ -2877,14 +2951,13 @@ template SiSUdocAbstraction() {        ++cntr;      } else if (obj_type_status["table"] == TriState.closing) {        comp_obj_block = comp_obj_block.init; -      obj_cite_digit = -        ocn_emit(obj_type_status["ocn_status"]); +      obj_cite_digits = ocn_emit(OCNstatus.on);        an_object["bookindex_nugget"] =          ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : "";        bookindex_unordered_hashes =          bookindex_extract_hash.bookindex_nugget_hash(            an_object["bookindex_nugget"], -          obj_cite_digit, +          obj_cite_digits,            segment_anchor_tag_that_object_belongs_to          );        an_object["is"] = "table"; @@ -2892,7 +2965,7 @@ template SiSUdocAbstraction() {          node_construct.node_location_emitter(            content_non_header,            segment_anchor_tag_that_object_belongs_to, -          obj_cite_digit, +          obj_cite_digits,            cntr,            heading_ptr-1,            an_object["is"] @@ -2901,8 +2974,11 @@ template SiSUdocAbstraction() {          obj_im.obj_inline_markup_and_anchor_tags_and_misc(an_object, an_object_key, dochead_make_aa);        an_object["substantive"] = substantive_obj_misc_tuple[sObj.content];        comp_obj_block                            = comp_obj_block.init; -      comp_obj_block.ocn                        = obj_cite_digit; -      comp_obj_block.obj_cite_number            = (obj_cite_digit==0) ? "" : obj_cite_digit.to!string; +      comp_obj_block.ocn                        = obj_cite_digits.on; +      comp_obj_block.obj_cite_number            = (obj_cite_digits.on==0)    ? "" : obj_cite_digits.on.to!string; +      comp_obj_block.obj_cite_number_off        = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; +      comp_obj_block.obj_cite_number_bkidx      = (obj_cite_digits.bkidx==0) ? "" : obj_cite_digits.bkidx.to!string; +      comp_obj_block.obj_cite_number_type       = obj_cite_digits.type;        comp_obj_block = table_instructions(comp_obj_block, an_object["table_head"]);        comp_obj_block = table_substantive_munge(comp_obj_block, an_object["substantive"]);        the_document_body_section                 ~= comp_obj_block; @@ -3149,19 +3225,19 @@ template SiSUdocAbstraction() {      static auto rgx = Rgx();      if (auto m = line.match(rgx.heading)) {        /+ heading match +/ -      obj_type_status["heading"] = State.on; +      ++line_occur["heading"]; +      obj_type_status["heading"]            = State.on; +      obj_type_status["para"]               = State.off;        if (line.match(rgx.heading_seg_and_above)) { -        obj_type_status["biblio_section"] = State.off; +        obj_type_status["biblio_section"]   = State.off;          obj_type_status["glossary_section"] = State.off; -        obj_type_status["blurb_section"] = State.off; +        obj_type_status["blurb_section"]    = State.off;        } -      obj_type_status["para"] = State.off; -      ++line_occur["heading"];        an_object[an_object_key] ~= line ~= "\n";        an_object["lev"] ~= m.captures[1];        assertions_doc_structure(an_object, lv); // includes most of the logic for collapsed levels        switch (an_object["lev"]) { -      case "A": +      case "A":                                // Title set          an_object[an_object_key]=(an_object[an_object_key])            .replaceFirst(rgx.variable_doc_title,              (dochead_meta_aa["title"]["full"] ~ ",")) @@ -3556,23 +3632,24 @@ template SiSUdocAbstraction() {    /+ abstraction functions ↑ +/    /+ ↓ abstraction function emitters +/    pure struct OCNemitter { -    int ocn_, ocn_in, ocn_in_, ocn_out_, ocn_bkidx_; -    int ocn_emitter(int ocn_status_flag) -    in { assert(ocn_status_flag <= OCNstatus.reset); } -    body { +    int ocn_, ocn_on, ocn_on_, ocn_off, ocn_off_, ocn_bkidx, ocn_bkidx_; +    auto ocn_emitter(int ocn_status_flag) { +      OCNset ocn; +      assert(ocn_status_flag <= OCNstatus.reset); +      ocn_on = ocn_off = ocn_bkidx = 0;        switch(ocn_status_flag) {        case OCNstatus.reset: -        ocn_ = ocn_in_ = ocn_out_ = 1; +        ocn_ = ocn_on_ = ocn_off_ = 1;          ocn_bkidx_ = 0;          break; -      case OCNstatus.inc: -        ocn_ = ++ocn_in_; +      case OCNstatus.on: +        ocn_ = ocn_on = ++ocn_on_;          break; -      case OCNstatus.exc: -        ocn_ = ++ocn_out_; +      case OCNstatus.off: +        ocn_ = ocn_off = ++ocn_off_;          break;        case OCNstatus.bkidx: -        ocn_ = ++ocn_bkidx_; +        ocn_ = ocn_bkidx = ++ocn_bkidx_;          break;        case OCNstatus.closing:          break; @@ -3580,7 +3657,12 @@ template SiSUdocAbstraction() {          ocn_ = 0;        }        assert(ocn_ >= 0); -      return ocn_; +      ocn.digit = ocn_; +      ocn.on    = ocn_on; +      ocn.off   = ocn_off; +      ocn.bkidx = ocn_bkidx; +      ocn.type  = ocn_status_flag; +      return ocn;      }      invariant() {      } @@ -3600,7 +3682,7 @@ template SiSUdocAbstraction() {        n_foot_sp_asterisk = 0;        n_foot_sp_plus = 0;      } -    static string url_links(Ot)(Ot obj_txt_in) { +    static auto url_links(Ot)(Ot obj_txt_in) {        debug(asserts) {          static assert(is(typeof(obj_txt_in) == string));        } @@ -4038,6 +4120,8 @@ template SiSUdocAbstraction() {          comp_obj_toc.is_a                  = "toc";          comp_obj_toc.ocn                   = 0;          comp_obj_toc.obj_cite_number       = ""; +        comp_obj_toc.obj_cite_number_off   = ""; +        comp_obj_toc.obj_cite_number_type  = 0;          comp_obj_toc.indent_hang           = indent["hang_position"];          comp_obj_toc.indent_base           = indent["base_position"];          comp_obj_toc.bullet                = false; @@ -4056,6 +4140,8 @@ template SiSUdocAbstraction() {          comp_obj_toc.is_a                  = "toc";          comp_obj_toc.ocn                   = 0;          comp_obj_toc.obj_cite_number       = ""; +        comp_obj_toc.obj_cite_number_off   = ""; +        comp_obj_toc.obj_cite_number_type  = 0;          comp_obj_toc.indent_hang           = indent["hang_position"];          comp_obj_toc.indent_base           = indent["base_position"];          comp_obj_toc.bullet                = false; @@ -4070,6 +4156,8 @@ template SiSUdocAbstraction() {        comp_obj_toc.is_a                  = "toc";        comp_obj_toc.ocn                   = 0;        comp_obj_toc.obj_cite_number       = ""; +      comp_obj_toc.obj_cite_number_off   = ""; +      comp_obj_toc.obj_cite_number_type  = 0;        comp_obj_toc.bullet                = false;        comp_obj_toc.inline_links          = true;        switch (obj_["lev_markup_number"].to!int) { @@ -4634,19 +4722,19 @@ template SiSUdocAbstraction() {      string[] bi_main_terms_split_arr;      string[][string][string] bookindex_nugget_hash(BI,N,S)(        BI bookindex_section, -      N  obj_cite_digit, +      N  obj_cite_digits,        S  segment_anchor_tag,      )      in {        debug(asserts) {          static assert(is(typeof(bookindex_section) == string)); -        static assert(is(typeof(obj_cite_digit)   == int)); +        static assert(is(typeof(obj_cite_digits.on) == int));        }        debug(bookindexraw) {          if (!bookindex_section.empty) {            writeln(              "* [bookindex] ", -            "[", obj_cite_digit.to!string, ": ", segment_anchor_tag, "] ", bookindex_section +            "[", obj_cite_digits.on.to!string, ": ", segment_anchor_tag, "] ", bookindex_section            );          }        } @@ -4664,12 +4752,12 @@ template SiSUdocAbstraction() {            ) {              main_term = m.captures[1].strip;              obj_cite_number_offset = m.captures[2].to!int; -            obj_cite_number_endpoint=(obj_cite_digit + obj_cite_number_offset); -            obj_cite_numbers ~= (obj_cite_digit.to!string ~ "-" ~ to!string(obj_cite_number_endpoint) +            obj_cite_number_endpoint=(obj_cite_digits.on + obj_cite_number_offset); +            obj_cite_numbers ~= (obj_cite_digits.on.to!string ~ "-" ~ to!string(obj_cite_number_endpoint)              ~ ":" ~ segment_anchor_tag);            } else {              main_term = bi_main_term_and_rest[0].strip; -            obj_cite_numbers ~= obj_cite_digit.to!string +            obj_cite_numbers ~= obj_cite_digits.on.to!string              ~ ":" ~ segment_anchor_tag;            }            bi[main_term]["_a"] ~= obj_cite_numbers; @@ -4683,12 +4771,12 @@ template SiSUdocAbstraction() {                if (auto m = sub_terms_bits.match(rgx.bi_term_and_obj_cite_numbers_match)) {                  sub_term = m.captures[1].strip;                  obj_cite_number_offset = m.captures[2].to!int; -                obj_cite_number_endpoint=(obj_cite_digit + obj_cite_number_offset); -                obj_cite_numbers ~= (obj_cite_digit.to!string ~ " - " ~ to!string(obj_cite_number_endpoint) +                obj_cite_number_endpoint=(obj_cite_digits.on + obj_cite_number_offset); +                obj_cite_numbers ~= (obj_cite_digits.on.to!string ~ " - " ~ to!string(obj_cite_number_endpoint)                  ~ ":" ~ segment_anchor_tag);                } else {                  sub_term = sub_terms_bits.strip; -                obj_cite_numbers ~= to!string(obj_cite_digit) +                obj_cite_numbers ~= to!string(obj_cite_digits.on)                  ~ ":" ~ segment_anchor_tag;                }                if (!empty(sub_term)) { @@ -4769,12 +4857,12 @@ template SiSUdocAbstraction() {      }      auto bookindex_build_abstraction_section(BI,N,B)(        BI bookindex_unordered_hashes, -      N  obj_cite_digit, +      N  obj_cite_digits,        B  opt_action,      ) {        debug(asserts) {          static assert(is(typeof(bookindex_unordered_hashes)                == string[][string][string])); -        static assert(is(typeof(obj_cite_digit)                           == int)); +        static assert(is(typeof(obj_cite_digits.on)                        == int));          static assert(is(typeof(opt_action)                                == bool[string]));        }        mixin SiSUnode; @@ -4804,6 +4892,8 @@ template SiSUdocAbstraction() {          comp_obj_heading_.text                  = "Book Index";          comp_obj_heading_.ocn                   = 0;          comp_obj_heading_.obj_cite_number       = ""; +        comp_obj_heading_.obj_cite_number_off   = ""; +        comp_obj_heading_.obj_cite_number_type  = 0;          comp_obj_heading_.segment_anchor_tag    = "_part_book_index";          comp_obj_heading_.marked_up_level       = "B";          comp_obj_heading_.heading_lev_markup    = 1; @@ -4822,6 +4912,8 @@ template SiSUdocAbstraction() {          comp_obj_heading_.text                  = "Index";          comp_obj_heading_.ocn                   = 0;          comp_obj_heading_.obj_cite_number       = ""; +        comp_obj_heading_.obj_cite_number_off   = ""; +        comp_obj_heading_.obj_cite_number_type  = 0;          comp_obj_heading_.segment_anchor_tag    = "bookindex";          comp_obj_heading_.marked_up_level       = "1";          comp_obj_heading_.heading_lev_markup    = 4; @@ -4898,6 +4990,8 @@ template SiSUdocAbstraction() {            comp_obj_para.text                  = bi_tmp_scroll.to!string.strip;            comp_obj_para.ocn                   = 0;            comp_obj_para.obj_cite_number       = ""; +          comp_obj_para.obj_cite_number_off   = ""; +          comp_obj_para.obj_cite_number_type  = 0;            comp_obj_para.anchor_tags           = bi_tmp_tags;            comp_obj_para.indent_hang           = 0;            comp_obj_para.indent_base           = 1; @@ -4913,6 +5007,8 @@ template SiSUdocAbstraction() {          comp_obj_heading_.text                  = "(skip) there is no Book Index";          comp_obj_heading_.ocn                   = 0;          comp_obj_heading_.obj_cite_number       = ""; +        comp_obj_heading_.obj_cite_number_off   = ""; +        comp_obj_heading_.obj_cite_number_type  = 0;          comp_obj_heading_.marked_up_level       = "B";          comp_obj_heading_.heading_lev_markup    = 1;          comp_obj_heading_.heading_lev_collapsed = 1; @@ -4921,7 +5017,7 @@ template SiSUdocAbstraction() {          bookindex_section["scroll"]             ~= comp_obj_heading_;          bookindex_section["seg"]                ~= comp_obj_heading_;        } -      auto t = tuple(bookindex_section, obj_cite_digit); +      auto t = tuple(bookindex_section, obj_cite_digits);        return t;      }    } @@ -5001,8 +5097,8 @@ template SiSUdocAbstraction() {        }        return endnotes_;      } -    private auto endnote_objects( -      int            obj_cite_digit, +    private auto endnote_objects(N)( +      N              obj_cite_digits,        bool[string]   opt_action,      )      in { @@ -5026,6 +5122,8 @@ template SiSUdocAbstraction() {          comp_obj_heading_.text                  = "Endnotes";          comp_obj_heading_.ocn                   = 0;          comp_obj_heading_.obj_cite_number       = ""; +        comp_obj_heading_.obj_cite_number_off   = ""; +        comp_obj_heading_.obj_cite_number_type  = 0;          comp_obj_heading_.segment_anchor_tag    = "_part_endnotes";          comp_obj_heading_.marked_up_level       = "B";          comp_obj_heading_.heading_lev_markup    = 1; @@ -5033,7 +5131,6 @@ template SiSUdocAbstraction() {          comp_obj_heading_.parent_ocn            = 1;          comp_obj_heading_.parent_lev_markup     = 0;          the_endnotes_section                    ~= comp_obj_heading_; -        ++obj_cite_digit;          ++mkn;          comp_obj_heading_                       = comp_obj_heading_.init;          comp_obj_heading_.of_part               = "backmatter"; @@ -5043,6 +5140,8 @@ template SiSUdocAbstraction() {          comp_obj_heading_.text                  = "Endnotes";          comp_obj_heading_.ocn                   = 0;          comp_obj_heading_.obj_cite_number       = ""; +        comp_obj_heading_.obj_cite_number_off   = ""; +        comp_obj_heading_.obj_cite_number_type  = 0;          comp_obj_heading_.segment_anchor_tag    = "endnotes";          comp_obj_heading_.marked_up_level       = "1";          comp_obj_heading_.heading_lev_markup    = 4; @@ -5051,7 +5150,6 @@ template SiSUdocAbstraction() {          comp_obj_heading_.parent_lev_markup     = 0;          comp_obj_heading_.anchor_tags           = ["endnotes"];          the_endnotes_section                    ~= comp_obj_heading_; -        ++obj_cite_digit;          ++mkn;        } else {          comp_obj_heading_                       = comp_obj_heading_.init; @@ -5062,6 +5160,8 @@ template SiSUdocAbstraction() {          comp_obj_heading_.text                  = "(skip) there are no Endnotes";          comp_obj_heading_.ocn                   = 0;          comp_obj_heading_.obj_cite_number       = ""; +        comp_obj_heading_.obj_cite_number_off   = ""; +        comp_obj_heading_.obj_cite_number_type  = 0;          comp_obj_heading_.marked_up_level       = "B";          comp_obj_heading_.heading_lev_markup    = 1;          comp_obj_heading_.heading_lev_collapsed = 1; @@ -5078,6 +5178,8 @@ template SiSUdocAbstraction() {          comp_obj_endnote_.is_a                  = "endnote";          comp_obj_endnote_.ocn                   = 0;          comp_obj_heading_.obj_cite_number       = ""; +        comp_obj_heading_.obj_cite_number_off   = ""; +        comp_obj_heading_.obj_cite_number_type  = 0;          comp_obj_endnote_.indent_hang           = 0;          comp_obj_endnote_.indent_base           = 0;          comp_obj_endnote_.bullet                = false; @@ -5091,7 +5193,7 @@ template SiSUdocAbstraction() {            the_endnotes_section                  ~= comp_obj_endnote_;          }        } -      auto t = tuple(the_endnotes_section, obj_cite_digit); +      auto t = tuple(the_endnotes_section, obj_cite_digits);        return t;      }    } @@ -5204,7 +5306,7 @@ template SiSUdocAbstraction() {      ObjGenericComposite node_location_emitter(Lv,Ta,N,C,P,I)(        Lv lev_markup_number,        Ta segment_anchor_tag, -      N  obj_cite_digit_, +      N  obj_cite_digits,        C  cntr_,        P  ptr_,        I  is_ @@ -5213,18 +5315,17 @@ template SiSUdocAbstraction() {        debug(asserts) {          static assert(is(typeof(lev_markup_number)  == string));          static assert(is(typeof(segment_anchor_tag) == string)); -        static assert(is(typeof(obj_cite_digit_)    == int)); +        static assert(is(typeof(obj_cite_digits.on) == int));          static assert(is(typeof(cntr_)              == int));          static assert(is(typeof(ptr_)               == int));          static assert(is(typeof(is_)                == string));        }        assert(is_ != "heading"); -      assert(obj_cite_digit_.to!int >= 0); +      assert(obj_cite_digits.on.to!int >= 0);      }      body {        assert(is_ != "heading"); // should not be necessary -      assert(obj_cite_digit_.to!int >= 0); // should not be necessary -      int obj_cite_digit = obj_cite_digit_.to!int; +      assert(obj_cite_digits.on.to!int >= 0); // should not be necessary        if (lv7 > State.off) {          p_["lev_markup_number"] = DocStructMarkupHeading.h_text_4;          p_["obj_cite_number"] = lv7; @@ -5241,7 +5342,7 @@ template SiSUdocAbstraction() {        ObjGenericComposite comp_obj_location;        comp_obj_location                       = comp_obj_location.init;        comp_obj_location.is_a                  = is_; -      comp_obj_location.ocn                   = obj_cite_digit_; +      comp_obj_location.ocn                   = obj_cite_digits.on;        comp_obj_location.segment_anchor_tag    = segment_anchor_tag.to!string;        comp_obj_location.parent_ocn            = p_["obj_cite_number"];        comp_obj_location.parent_lev_markup     = p_["lev_markup_number"]; @@ -5265,7 +5366,7 @@ template SiSUdocAbstraction() {        Lm  lev_markup_number,        Lc  lev_collapsed_number,        Ta  segment_anchor_tag, -      N   obj_cite_digit_, +      N   obj_cite_digits,        C   cntr_,        P   ptr_,        LA  lv_ancestors_txt, @@ -5282,7 +5383,7 @@ template SiSUdocAbstraction() {          static assert(is(typeof(lev_markup_number)    == string));          static assert(is(typeof(lev_collapsed_number) == string));          static assert(is(typeof(segment_anchor_tag)   == string)); -        static assert(is(typeof(obj_cite_digit_)      == int)); +        static assert(is(typeof(obj_cite_digits.on)   == int));          static assert(is(typeof(cntr_)                == int));          static assert(is(typeof(ptr_)                 == int));          static assert(is(typeof(lv_ancestors_txt)     == string[])); @@ -5290,19 +5391,18 @@ template SiSUdocAbstraction() {          static assert(is(typeof(html_segnames_ptr)    == int));        }        assert(is_ == "heading"); -      assert((obj_cite_digit_).to!int >= 0); +      assert((obj_cite_digits.on).to!int >= 0);        assert(          lev_markup_number.match(rgx.levels_numbered), -        ("not a valid heading level: " ~ lev_markup_number ~ " at " ~ obj_cite_digit_.to!string) +        ("not a valid heading level: " ~ lev_markup_number ~ " at " ~ obj_cite_digits.on.to!string)        );        if (lev_markup_number.match(rgx.levels_numbered)) {          if (lev_markup_number.to!int == 0) { -          assert(obj_cite_digit_.to!int == 1); +          assert(obj_cite_digits.on.to!int == 1);          }        }      }      body { -      int obj_cite_digit = obj_cite_digit_.to!int;        switch (lev_markup_number.to!int) {        case 0:          lv = DocStructMarkupHeading.h_sect_A; @@ -5390,8 +5490,10 @@ template SiSUdocAbstraction() {        _comp_obj_heading_.is_of                     = "para";        _comp_obj_heading_.is_a                      = "heading";        _comp_obj_heading_.text                      = _text.to!string.strip; -      _comp_obj_heading_.ocn                       = obj_cite_digit_; -      _comp_obj_heading_.obj_cite_number           = (obj_cite_digit==0) ? "" : obj_cite_digit.to!string; +      _comp_obj_heading_.ocn                       = obj_cite_digits.on; +      _comp_obj_heading_.obj_cite_number           = (obj_cite_digits.on==0)    ? "" : obj_cite_digits.on.to!string; +      _comp_obj_heading_.obj_cite_number_off       = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; +      _comp_obj_heading_.obj_cite_number_type      = obj_cite_digits.type;        _comp_obj_heading_.segment_anchor_tag        = segment_anchor_tag.to!string;        _comp_obj_heading_.marked_up_level           = lev;        _comp_obj_heading_.heading_lev_markup        = (!(lev_markup_number.empty) ? lev_markup_number.to!int : 0); diff --git a/src/sdp/meta/metadoc_summary.d b/src/sdp/meta/metadoc_summary.d index 591844f..a415387 100644 --- a/src/sdp/meta/metadoc_summary.d +++ b/src/sdp/meta/metadoc_summary.d @@ -33,10 +33,13 @@ template SiSUabstractionSummary() {                if (k == "body") {                  check["last_obj_cite_number_body"] = obj.obj_cite_number;                } -              if ((k != "bookindex_seg") && (k != "blurb")) { +              if (!(obj.obj_cite_number.empty)) {                  check["last_obj_cite_number"] = obj.obj_cite_number; -              } else if (k == "bookindex_seg") { -                check["last_obj_cite_number_bkidx"] = obj.obj_cite_number; +              } +            } +            if (k == "bookindex_seg") { +              if (obj.obj_cite_number_type == 2) { +                check["last_obj_cite_number_bkidx"] = obj.obj_cite_number_bkidx;                }              }            } diff --git a/src/sdp/meta/object_setter.d b/src/sdp/meta/object_setter.d index 805afd3..e4bb05f 100644 --- a/src/sdp/meta/object_setter.d +++ b/src/sdp/meta/object_setter.d @@ -23,7 +23,7 @@ template ObjectSetter() {      string                 is_a                         = "";      string                 text                         = "";      string                 obj_cite_number              = ""; -    string                 obj_cite_number_non          = ""; +    string                 obj_cite_number_off          = "";      string                 obj_cite_number_bkidx        = "";      int                    obj_cite_number_type         = 0;      string[]               anchor_tags                  = []; diff --git a/views/version.txt b/views/version.txt index db9b02e..09db722 100644 --- a/views/version.txt +++ b/views/version.txt @@ -4,7 +4,7 @@ struct Version {    int minor;    int patch;  } -enum ver = Version(0, 18, 0); +enum ver = Version(0, 18, 1);  version (Posix) {    version (DigitalMars) {    } else version (LDC) { | 
