diff options
| -rw-r--r-- | org/ao_abstract_doc_source.org | 799 | ||||
| -rw-r--r-- | org/ao_defaults.org | 40 | ||||
| -rw-r--r-- | org/sdp.org | 2 | ||||
| -rw-r--r-- | src/sdp/ao_abstract_doc_source.d | 762 | ||||
| -rw-r--r-- | src/sdp/ao_defaults.d | 40 | ||||
| -rw-r--r-- | src/sdp/ao_object_setter.d | 33 | ||||
| -rw-r--r-- | views/version.txt | 2 | 
7 files changed, 830 insertions, 848 deletions
| diff --git a/org/ao_abstract_doc_source.org b/org/ao_abstract_doc_source.org index 63daac5..724e44a 100644 --- a/org/ao_abstract_doc_source.org +++ b/org/ao_abstract_doc_source.org @@ -75,12 +75,12 @@ string biblio_entry_str_json;  JSONValue[] bib_arr_json;  int bib_entry;  /+ counters +/ -long cntr, previous_count, previous_length; +int cntr, previous_count, previous_length;  int[string] line_occur;  int verse_line, heading_ptr;  string[] html_segnames=[]; -uint html_segnames_ptr=0; -uint html_segnames_ptr_cntr=0; +int html_segnames_ptr=0; +int html_segnames_ptr_cntr=0;  /+ paragraph attributes +/  int[string] indent;  bool bullet = true; @@ -104,7 +104,8 @@ string[][string][string] bkidx_hash(    return bookindex_extract_hash.bookindex_nugget_hash(bookindex_section, obj_cite_number);  }  /+ node +/ -string[string][string] _node; +string[string] _node_str; +int[string]    _node_int;  auto node_construct = NodeStructureMetadata();  #+END_SRC @@ -131,7 +132,8 @@ scope(exit) {  #+name: abs_init_rest  #+BEGIN_SRC d -auto node_ = node_metadata; +auto node_int_ = node_metadata_int; +auto node_str_ = node_metadata_str;  line_occur = [    "heading"  : 0,    "para"     : 0, @@ -189,21 +191,21 @@ string _anchor_tag;  string toc_txt_;  an_object["glossary_nugget"] = "";  an_object["blurb_nugget"] = ""; -node_["object"]["is"]                       = "heading"; -node_["object"]["obj_cite_number"]          = "0"; -node_["object"]["segment_anchor_tag"]       = "toc"; -node_["object"]["parent_obj_cite_number"]   = "1"; -node_["object"]["parent_lev_markup_number"] = "0"; +node_str_["is"]                           = "heading"; +node_str_["ocn"]                          = "0"; +node_str_["segment_anchor_tag"]           = "toc"; +node_str_["attrib"]                       = ""; +node_str_["marked_up_lev"]                = "1"; +node_int_["heading_lev_markup"]           = 4; +node_int_["heading_lev_collapsed"]        = 2; +node_int_["parent_ocn"]                   = 1; +node_int_["parent_lev_markup"]            = 0;  auto toc_head =    set_abstract_object.contents_heading(      "Table of Contents", // nugget/object -    "",                  // attrib -    0,                   // obj_cite_number +    node_str_, +    node_int_,      ["toc"],             // anchor tag -    "1",                 // lev -    4,                   // lev_int_markup -    2,                   // lev_int_collapsed -    node_,    );  the_table_of_contents_section = [    "seg": [toc_head], @@ -290,7 +292,7 @@ if ((matchFirst(line, rgx.heading_biblio)    continue;  #+END_SRC -****** TODO within section: glossary                               :glossary: +****** within section: glossary                               :glossary:  if there is a glossary section you need to:  - extract it @@ -325,37 +327,37 @@ if there is a glossary section you need to:      line_occur["para"] = State.off;      an_object_key="glossary_nugget"; //      if (matchFirst(line, rgx.heading_glossary)) { -      node_["object"]["is"]                       = "heading"; -      node_["object"]["obj_cite_number"]          = "0"; -      node_["object"]["segment_anchor_tag"]       = "glossary"; -      node_["object"]["parent_obj_cite_number"]   = "1"; -      node_["object"]["parent_lev_markup_number"] = "0"; +      node_str_["is"]                       = "heading"; +      node_str_["ocn"]                      = "0"; +      node_str_["segment_anchor_tag"]       = ""; +      node_str_["attrib"]                   = ""; +      node_str_["marked_up_lev"]            = "B"; +      node_int_["heading_lev_markup"]       = 1; +      node_int_["heading_lev_collapsed"]    = 1; +      node_int_["parent_ocn"]               = 1; +      node_int_["parent_lev_markup"]        = 0;        the_glossary_section ~=          set_abstract_object.contents_heading(            "Glossary",       // nugget/object -          "",               // attrib -          0,                // obj_cite_number +          node_str_, +          node_int_,            [""],             // anchor tag -          "B",              // lev -          1,                // lev_int_markup -          1,                // lev_int_collapsed -          node_,          ); -      node_["object"]["is"]                       = "heading"; -      node_["object"]["obj_cite_number"]          = "0"; -      node_["object"]["segment_anchor_tag"]       = "glossary"; -      node_["object"]["parent_obj_cite_number"]   = "1"; -      node_["object"]["parent_lev_markup_number"] = "0"; +      node_str_["is"]                       = "heading"; +      node_str_["ocn"]                      = "0"; +      node_str_["segment_anchor_tag"]       = "glossary"; +      node_str_["attrib"]                   = ""; +      node_str_["marked_up_lev"]            = "1"; +      node_int_["heading_lev_markup"]       = 4; +      node_int_["heading_lev_collapsed"]    = 2; +      node_int_["parent_ocn"]               = 1; +      node_int_["parent_lev_markup"]        = 0;        the_glossary_section ~=          set_abstract_object.contents_heading(            "Glossary",       // nugget/object -          "",               // attrib -          0,                // obj_cite_number +          node_str_, +          node_int_,            ["glossary"],     // anchor tag -          "1",              // lev -          4,                // lev_int_markup -          2,                // lev_int_collapsed -          node_,          );      // } else if (matchFirst(line, rgx.heading)) {      //   _heading_matched_(line, line_occur, an_object, an_object_key, lv, collapsed_lev, type, dochead_meta_aa); // levels? @@ -376,7 +378,7 @@ if there is a glossary section you need to:    continue;  #+END_SRC -****** TODO within section: blurb                                     :blurb: +****** within section: blurb                                     :blurb:  if there is a blurb section you need to:  - extract it @@ -411,56 +413,56 @@ if there is a blurb section you need to:      line_occur["para"] = State.off;      an_object_key="blurb_nugget";      if (matchFirst(line, rgx.heading_blurb)) { -      node_["object"]["is"]                       = "heading"; -      node_["object"]["obj_cite_number"]          = "0"; -      node_["object"]["segment_anchor_tag"]       = "blurb"; -      node_["object"]["parent_obj_cite_number"]   = "1"; -      node_["object"]["parent_lev_markup_number"] = "0"; +      node_str_["is"]                       = "heading"; +      node_str_["ocn"]                      = "0"; +      node_str_["segment_anchor_tag"]       = ""; +      node_str_["attrib"]                   = ""; +      node_str_["marked_up_lev"]            = "B"; +      node_int_["heading_lev_markup"]       = 1; +      node_int_["heading_lev_collapsed"]    = 1; +      node_int_["parent_ocn"]               = 1; +      node_int_["parent_lev_markup"]        = 0;        the_blurb_section ~=          set_abstract_object.contents_heading(            "Blurb",          // nugget/object -          "",               // attrib -          0,                // obj_cite_number +          node_str_, +          node_int_,            [""],             // anchor tag -          "B",              // lev -          1,                // lev_int_markup -          1,                // lev_int_collapsed -          node_,          ); -      node_["object"]["is"]                       = "heading"; -      node_["object"]["obj_cite_number"]          = "0"; -      node_["object"]["segment_anchor_tag"]       = "blurb"; -      node_["object"]["parent_obj_cite_number"]   = "1"; -      node_["object"]["parent_lev_markup_number"] = "0"; +      node_str_["is"]                       = "heading"; +      node_str_["ocn"]                      = "0"; +      node_str_["segment_anchor_tag"]       = "blurb"; +      node_str_["attrib"]                   = ""; +      node_str_["marked_up_lev"]            = "1"; +      node_int_["heading_lev_markup"]       = 4; +      node_int_["heading_lev_collapsed"]    = 2; +      node_int_["parent_ocn"]               = 1; +      node_int_["parent_lev_markup"]        = 0;        the_blurb_section ~=          set_abstract_object.contents_heading(            "Blurb",          // nugget/object -          "",               // attrib -          0,                // obj_cite_number +          node_str_, +          node_int_,            ["blurb"],        // anchor tag -          "1",              // lev -          4,                // lev_int_markup -          2,                // lev_int_collapsed -          node_,          );      } else if ((matchFirst(line, rgx.heading))      && (opt_action_bool["backmatter"] && opt_action_bool["section_blurb"])) {        _heading_matched_(line, line_occur, an_object, an_object_key, lv, collapsed_lev, type, dochead_meta_aa); // levels? -      node_["object"]["is"]                       = "heading"; -      node_["object"]["obj_cite_number"]          = "0"; -      node_["object"]["segment_anchor_tag"]       = "blurb"; -      node_["object"]["parent_obj_cite_number"]   = "1"; -      node_["object"]["parent_lev_markup_number"] = "0"; +      node_str_["is"]                       = "heading"; +      node_str_["ocn"]                      = "0"; +      node_str_["segment_anchor_tag"]       = "blurb"; +      node_str_["attrib"]                   = ""; +      node_str_["marked_up_lev"]            = to!string(an_object["lev"]); +      node_int_["heading_lev_markup"]       = to!int(an_object["lev_markup_number"]);    // make int, remove need to conv +      node_int_["heading_lev_collapsed"]    = to!int(an_object["lev_collapsed_number"]); // make int, remove need to conv +      node_int_["parent_ocn"]               = 1; +      node_int_["parent_lev_markup"]        = 0;        the_blurb_section ~=          set_abstract_object.contents_heading(            to!string(line),           //  an_object["substantive"], -          "",                        // attrib -          0,                         // obj_cite_number +          node_str_, +          node_int_,            [""],                      // anchor tag -          to!string(an_object["lev"]), -          to!int(an_object["lev_markup_number"]), -          to!int(an_object["lev_collapsed_number"]), -          node_,          );      } else {        _para_match_(line, an_object, an_object_key, indent, bullet, type, line_occur); @@ -701,7 +703,8 @@ _block_flag_line_empty_(    the_document_body_section,    bookindex_unordered_hashes,    obj_cite_number, -  _node, +  _node_str, +  _node_int,    cntr,    type,    obj_cite_number_poem, @@ -761,19 +764,22 @@ if ((type["heading"] == State.on)      html_segnames_ptr = html_segnames_ptr_cntr;      html_segnames_ptr_cntr++;    } -  _node = +  auto _node_t =      node_construct.node_emitter_heading( -      an_object["lev_markup_number"], -      an_object["lev_collapsed_number"], -      segment_anchor_tag_that_object_belongs_to, -      obj_cite_number, -      cntr, -      heading_ptr, -      an_object["is"], -      html_segnames_ptr, -    ); // heading +      an_object["lev"],                             // string +      an_object["lev_markup_number"],               // string +      an_object["lev_collapsed_number"],            // string +      segment_anchor_tag_that_object_belongs_to,    // string +      obj_cite_number,                              // int +      cntr,                                         // int +      heading_ptr,                                  // int +      an_object["is"],                              // string +      html_segnames_ptr,                            // int +    ); +   _node_str = _node_t[0]; +   _node_int = _node_t[1];    an_object["attrib"] = -    obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node); +    obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node_str, _node_int);    ++heading_ptr;    debug(segments) {      writeln(an_object["lev_markup_number"]); @@ -782,13 +788,9 @@ if ((type["heading"] == State.on)    the_document_body_section ~=      set_abstract_object.contents_heading(        an_object["substantive"], -      an_object["attrib"], -      obj_cite_number, +      _node_str, +      _node_int,        anchor_tags, -      to!string(an_object["lev"]), -      to!int(an_object["lev_markup_number"]), -      to!int(an_object["lev_collapsed_number"]), -      _node,      );    // track previous heading and make assertions    debug(objectrelated1) { // check @@ -813,7 +815,7 @@ if ((type["heading"] == State.on)    bookindex_unordered_hashes =      bkidx_hash(an_object["bookindex_nugget"], obj_cite_number);    an_object["is"] = "para"; -  _node = +  auto _node_t =      node_construct.node_emitter(        content_non_header,        segment_anchor_tag_that_object_belongs_to, @@ -822,12 +824,14 @@ if ((type["heading"] == State.on)        heading_ptr-1,        an_object["is"],      ); +  _node_str = _node_t[0]; +  _node_int = _node_t[1];    auto substantive_object_and_anchor_tags_tuple =      obj_im.obj_inline_markup_and_anchor_tags(an_object, an_object_key, dochead_make_aa); // ...    an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0];    anchor_tags = substantive_object_and_anchor_tags_tuple[1];    an_object["attrib"] = -    obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node); +    obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node_str, _node_int);    the_document_body_section ~=      set_abstract_object.contents_para(        an_object["is"], @@ -873,16 +877,16 @@ if (the_document_body_section.length > 0) {        type["glossary_section"] = State.off;        type["blurb_section"] = State.off;      } -    previous_length = the_document_body_section.length; +    previous_length = to!int(the_document_body_section.length);      if (        match(the_document_body_section[$-1].object,        rgx.inline_notes_delimiter_al_regular_number_note)      ) { -      previous_count=the_document_body_section.length -1; +      previous_count=to!int(the_document_body_section.length -1);        note_section.gather_notes_for_endnote_section(          the_document_body_section,          segment_anchor_tag_that_object_belongs_to, -        the_document_body_section.length-1, +        to!int(the_document_body_section.length-1),        );      }    } @@ -937,21 +941,21 @@ debug(endnotes) {  #+BEGIN_SRC d  if (an_object["glossary_nugget"].length == 0) {    writeln("no gloss"); -  node_["object"]["is"]                       = "heading"; -  node_["object"]["obj_cite_number"]          = "0"; -  node_["object"]["segment_anchor_tag"]       = "glossary"; -  node_["object"]["parent_obj_cite_number"]   = "1"; -  node_["object"]["parent_lev_markup_number"] = "0"; +  node_str_["is"]                       = "heading"; +  node_str_["ocn"]                      = "0"; +  node_str_["segment_anchor_tag"]       = ""; +  node_str_["attrib"]                   = ""; +  node_str_["marked_up_lev"]            = "B"; +  node_int_["heading_lev_markup"]       = 1; +  node_int_["heading_lev_collapsed"]    = 1; +  node_int_["parent_ocn"]               = 1; +  node_int_["parent_lev_markup"]        = 0;    the_glossary_section ~=      set_abstract_object.contents_heading(        "(skip) there is no Glossary section",   // nugget/object -      "",               // attrib -      0,                // obj_cite_number +      node_str_, +      node_int_,        [""],             // anchor tag -      "B",              // lev -      1,                // lev_int_markup -      1,                // lev_int_collapsed -      node_,      );  } else {    writeln("gloss"); @@ -977,54 +981,54 @@ auto biblio_ordered =  #+name: abs_post  #+BEGIN_SRC d  if (biblio_ordered.length > 0) { -  node_["object"]["is"]                       = "heading"; -  node_["object"]["obj_cite_number"]          = "0"; -  node_["object"]["segment_anchor_tag"]       = "bibliography"; -  node_["object"]["parent_obj_cite_number"]   = "1"; -  node_["object"]["parent_lev_markup_number"] = "0"; +  node_str_["is"]                       = "heading"; +  node_str_["ocn"]                      = "0"; +  node_str_["segment_anchor_tag"]       = ""; +  node_str_["attrib"]                   = ""; +  node_str_["marked_up_lev"]            = "B"; +  node_int_["heading_lev_markup"]       = 1; +  node_int_["heading_lev_collapsed"]    = 1; +  node_int_["parent_ocn"]               = 1; +  node_int_["parent_lev_markup"]        = 0;    the_bibliography_section ~=      set_abstract_object.contents_heading(        "Bibliography",   // nugget/object -      "",               // attrib -      0,                // obj_cite_number +      node_str_, +      node_int_,        [""],             // anchor tag -      "B",              // lev -      1,                // lev_int_markup -      1,                // lev_int_collapsed -      node_,      ); -  node_["object"]["is"]                       = "heading"; -  node_["object"]["obj_cite_number"]          = "0"; -  node_["object"]["segment_anchor_tag"]       = "bibliography"; -  node_["object"]["parent_obj_cite_number"]   = "1"; -  node_["object"]["parent_lev_markup_number"] = "0"; +  node_str_["is"]                       = "heading"; +  node_str_["ocn"]                      = "0"; +  node_str_["segment_anchor_tag"]       = "bibliography"; +  node_str_["attrib"]                   = ""; +  node_str_["marked_up_lev"]            = "1"; +  node_int_["heading_lev_markup"]       = 4; +  node_int_["heading_lev_collapsed"]    = 2; +  node_int_["parent_ocn"]               = 1; +  node_int_["parent_lev_markup"]        = 0;    the_bibliography_section ~=      set_abstract_object.contents_heading( -      "Bibliography",   // nugget/object -      "",               // attrib -      0,                // obj_cite_number +      "Bibliography", +      node_str_, +      node_int_,        ["bibliography"], // anchor tag -      "1",              // lev -      4,                // lev_int_markup -      2,                // lev_int_collapsed -      node_,      );  } else { -  node_["object"]["is"]                       = "heading"; -  node_["object"]["obj_cite_number"]          = "0"; -  node_["object"]["segment_anchor_tag"]       = "bibliography"; -  node_["object"]["parent_obj_cite_number"]   = "1"; -  node_["object"]["parent_lev_markup_number"] = "0"; +  node_str_["is"]                       = "heading"; +  node_str_["ocn"]                      = "0"; +  node_str_["segment_anchor_tag"]       = ""; +  node_str_["attrib"]                   = ""; +  node_str_["marked_up_lev"]            = "B"; +  node_int_["heading_lev_markup"]       = 1; +  node_int_["heading_lev_collapsed"]    = 1; +  node_int_["parent_ocn"]               = 1; +  node_int_["parent_lev_markup"]        = 0;    the_bibliography_section ~=      set_abstract_object.contents_heading(        "(skip) there is no Bibliography",   // nugget/object -      "",               // attrib -      0,                // obj_cite_number +      node_str_, +      node_int_,        [""],             // anchor tag -      "B",              // lev -      1,                // lev_int_markup -      1,                // lev_int_collapsed -      node_,      );  }  #+END_SRC @@ -1130,21 +1134,21 @@ debug(bookindex) {                         // bookindex  #+BEGIN_SRC d  if (an_object["blurb_nugget"].length == 0) {    writeln("no blurb"); -  node_["object"]["is"]                       = "heading"; -  node_["object"]["obj_cite_number"]          = "0"; -  node_["object"]["segment_anchor_tag"]       = "blurb"; -  node_["object"]["parent_obj_cite_number"]   = "1"; -  node_["object"]["parent_lev_markup_number"] = "0"; +  node_str_["is"]                       = "heading"; +  node_str_["ocn"]                      = "0"; +  node_str_["segment_anchor_tag"]       = ""; +  node_str_["attrib"]                   = ""; +  node_str_["marked_up_lev"]            = "B"; +  node_int_["heading_lev_markup"]       = 1; +  node_int_["heading_lev_collapsed"]    = 1; +  node_int_["parent_ocn"]               = 1; +  node_int_["parent_lev_markup"]        = 0;    the_blurb_section ~=      set_abstract_object.contents_heading(        "(skip) there is no Blurb section",   // nugget/object -      "",               // attrib -      0,                // obj_cite_number +      node_str_, +      node_int_,        [""],             // anchor tag -      "B",              // lev -      1,                // lev_int_markup -      1,                // lev_int_collapsed -      node_,      );  } else {    writeln("blurb"); @@ -1897,7 +1901,7 @@ void _poem_block_(    char[] line,    ref string[string] an_object,    ref int[string] type, -  ref long cntr, +  ref int cntr,    string[string] obj_cite_number_poem,    string[string][string] dochead_make_aa,  ) { @@ -1934,7 +1938,7 @@ void _poem_block_(          an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0];          anchor_tags = substantive_object_and_anchor_tags_tuple[1];          an_object["attrib"] = -          obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node); +          obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node_str, _node_int);          the_document_body_section ~=            set_abstract_object.contents_block(              an_object["is"], @@ -1973,7 +1977,7 @@ void _poem_block_(          }          processing.remove("verse");          an_object["is"] = "verse"; -        _node = node_construct.node_emitter( +        auto _node_t = node_construct.node_emitter(            content_non_header,            segment_anchor_tag_that_object_belongs_to,            obj_cite_number, @@ -1981,12 +1985,14 @@ void _poem_block_(            heading_ptr-1,            an_object["is"]          ); +        _node_str = _node_t[0]; +        _node_int = _node_t[1];          auto substantive_object_and_anchor_tags_tuple =            obj_im.obj_inline_markup_and_anchor_tags(an_object, an_object_key, dochead_make_aa);          an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0];          anchor_tags = substantive_object_and_anchor_tags_tuple[1];          an_object["attrib"] = -          obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node); +          obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node_str, _node_int);          the_document_body_section ~=            set_abstract_object.contents_block(              an_object["is"], @@ -2023,7 +2029,7 @@ void _poem_block_(          an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0];          anchor_tags = substantive_object_and_anchor_tags_tuple[1];          an_object["attrib"] = -          obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node); +          obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node_str, _node_int);          the_document_body_section ~=            set_abstract_object.contents_block(              an_object["is"], @@ -2061,7 +2067,7 @@ void _poem_block_(          }          processing.remove("verse");          an_object["is"] = "verse"; -        _node = +        auto _node_t =            node_construct.node_emitter(              content_non_header,              segment_anchor_tag_that_object_belongs_to, @@ -2070,12 +2076,14 @@ void _poem_block_(              heading_ptr-1,              an_object["is"]            ); +        _node_str = _node_t[0]; +        _node_int = _node_t[1];          auto substantive_object_and_anchor_tags_tuple =            obj_im.obj_inline_markup_and_anchor_tags(an_object, an_object_key, dochead_make_aa);          an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0];          anchor_tags = substantive_object_and_anchor_tags_tuple[1];          an_object["attrib"] = -          obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node); +          obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node_str, _node_int);          the_document_body_section ~=            set_abstract_object.contents_block(              an_object["is"], @@ -2266,8 +2274,9 @@ void _block_flag_line_empty_(    ref ObjComposite[] the_document_body_section,    ref string[][string][string] bookindex_unordered_hashes,    ref int obj_cite_number, -  ref string[string][string] _node, -  ref long cntr, +  ref string[string] _node_str, +  ref int[string] _node_int, +  ref int cntr,    ref int[string] type,    string[string] obj_cite_number_poem,    string[string][string] dochead_make_aa, @@ -2290,7 +2299,7 @@ void _block_flag_line_empty_(      bookindex_unordered_hashes =        bkidx_hash(an_object["bookindex_nugget"], obj_cite_number);      an_object["is"] = "code"; -    _node = +    auto _node_t =        node_construct.node_emitter(          content_non_header,          segment_anchor_tag_that_object_belongs_to, @@ -2299,12 +2308,14 @@ void _block_flag_line_empty_(          heading_ptr-1,          an_object["is"]        ); +    _node_str = _node_t[0]; +    _node_int = _node_t[1];      auto substantive_object_and_anchor_tags_tuple =        obj_im.obj_inline_markup_and_anchor_tags(an_object, an_object_key, dochead_make_aa);      an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0];      anchor_tags = substantive_object_and_anchor_tags_tuple[1];      an_object["attrib"] = -      obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node); +      obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node_str, _node_int);      the_document_body_section ~=        set_abstract_object.contents_block_code(          an_object["is"], @@ -2323,8 +2334,8 @@ void _block_flag_line_empty_(      bookindex_unordered_hashes =        bkidx_hash(an_object["bookindex_nugget"], obj_cite_number);      an_object["is"] = "verse"; // check also -    _node = -      node_construct.node_emitter( +    auto _node_t = +      node_construct.node_emitter( //          content_non_header,          segment_anchor_tag_that_object_belongs_to,          obj_cite_number, @@ -2332,12 +2343,15 @@ void _block_flag_line_empty_(          heading_ptr-1,          an_object["is"]        ); +    _node_str = _node_t[0]; +    _node_int = _node_t[1];      the_document_body_section ~=        set_abstract_object.contents_block_obj_cite_number_string(          "poem",          "",          (obj_cite_number_poem["start"], obj_cite_number_poem["end"]), -        _node +        _node_str, +        _node_int,        ); // bookindex      object_reset(an_object);      processing.remove("verse"); @@ -2351,7 +2365,7 @@ void _block_flag_line_empty_(      bookindex_unordered_hashes =        bkidx_hash(an_object["bookindex_nugget"], obj_cite_number);      an_object["is"] = "table"; -    _node = +    auto _node_t =        node_construct.node_emitter(          content_non_header,          segment_anchor_tag_that_object_belongs_to, @@ -2360,12 +2374,14 @@ void _block_flag_line_empty_(          heading_ptr-1,          an_object["is"]        ); +    _node_str = _node_t[0]; +    _node_int = _node_t[1];      auto substantive_object_and_anchor_tags_tuple =        obj_im.obj_inline_markup_and_anchor_tags(an_object, an_object_key, dochead_make_aa);      an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0];      anchor_tags = substantive_object_and_anchor_tags_tuple[1];      an_object["attrib"] = -      obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node); +      obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node_str, _node_int);      the_document_body_section ~=        set_abstract_object.contents_block(          an_object["is"], @@ -2386,7 +2402,7 @@ void _block_flag_line_empty_(      bookindex_unordered_hashes =        bkidx_hash(an_object["bookindex_nugget"], obj_cite_number);      an_object["is"] = "group"; -    _node = +    auto _node_t =        node_construct.node_emitter(          content_non_header,          segment_anchor_tag_that_object_belongs_to, @@ -2395,12 +2411,14 @@ void _block_flag_line_empty_(          heading_ptr-1,          an_object["is"]        ); +    _node_str = _node_t[0]; +    _node_int = _node_t[1];      auto substantive_object_and_anchor_tags_tuple =        obj_im.obj_inline_markup_and_anchor_tags(an_object, an_object_key, dochead_make_aa);      an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0];      anchor_tags = substantive_object_and_anchor_tags_tuple[1];      an_object["attrib"] = -      obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node); +      obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node_str, _node_int);      the_document_body_section ~=        set_abstract_object.contents_block(          an_object["is"], @@ -2420,7 +2438,7 @@ void _block_flag_line_empty_(      bookindex_unordered_hashes =        bkidx_hash(an_object["bookindex_nugget"], obj_cite_number);      an_object["is"] = "block"; -    _node = +    auto _node_t =        node_construct.node_emitter(          content_non_header,          segment_anchor_tag_that_object_belongs_to, @@ -2429,12 +2447,14 @@ void _block_flag_line_empty_(          heading_ptr-1,          an_object["is"]         ); +    _node_str = _node_t[0]; +    _node_int = _node_t[1];      auto substantive_object_and_anchor_tags_tuple =        obj_im.obj_inline_markup_and_anchor_tags(an_object, an_object_key, dochead_make_aa);      an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0];      anchor_tags = substantive_object_and_anchor_tags_tuple[1];      an_object["attrib"] = -      obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node); +      obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node_str, _node_int);      the_document_body_section ~=        set_abstract_object.contents_block(          an_object["is"], @@ -2455,8 +2475,8 @@ void _block_flag_line_empty_(      bookindex_unordered_hashes =        bkidx_hash(an_object["bookindex_nugget"], obj_cite_number);      an_object["is"] = "quote"; -    _node = -      node_construct.node_emitter( +    auto _node_t = +      node_construct.node_emitter( //          content_non_header,          segment_anchor_tag_that_object_belongs_to,          obj_cite_number, @@ -2464,12 +2484,14 @@ void _block_flag_line_empty_(          heading_ptr-1,          an_object["is"]        ); +    _node_str = _node_t[0]; +    _node_int = _node_t[1];      auto substantive_object_and_anchor_tags_tuple =        obj_im.obj_inline_markup_and_anchor_tags(an_object, an_object_key, dochead_make_aa);      an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0];      anchor_tags = substantive_object_and_anchor_tags_tuple[1];      an_object["attrib"] = -      obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node); +      obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node_str, _node_int);      the_document_body_section ~=        set_abstract_object.contents_block(          an_object["is"], @@ -3418,12 +3440,12 @@ private:    ) {      if (dochead_make_aa["make"]["num_top"].length > 0) {        if (!(match(munge_, rgx.heading_anchor_tag))) { -        static __gshared uint heading_num_top_level=9; -        static __gshared uint heading_num_depth=2; -        static __gshared uint heading_num_0 = 0; -        static __gshared uint heading_num_1 = 0; -        static __gshared uint heading_num_2 = 0; -        static __gshared uint heading_num_3 = 0; +        static __gshared int heading_num_top_level=9; +        static __gshared int heading_num_depth=2; +        static __gshared int heading_num_0 = 0; +        static __gshared int heading_num_1 = 0; +        static __gshared int heading_num_2 = 0; +        static __gshared int heading_num_3 = 0;          static __gshared string heading_number_auto_composite = "";          if (heading_num_top_level==9) {            if (dochead_make_aa["make"]["num_depth"].length > 0) { @@ -3550,7 +3572,7 @@ private:              "$1~" ~ "s" ~ m.captures[1] ~ " ");          }        } else if (lev_ == "1") { // (if not successful) manufacture a unique anchor tag for lev=="1" -        static __gshared uint heading_num_lev1 = 0; +        static __gshared int heading_num_lev1 = 0;          heading_num_lev1 ++;          munge_=replaceFirst(munge_, rgx.heading_marker_missing_tag,            "$1~" ~ "x" ~ to!string(heading_num_lev1) ~ " "); @@ -3633,14 +3655,16 @@ struct ObjAttributes {    string obj_attributes(      string obj_is_,      string obj_raw, -    string[string][string] _node +    string[string] _node_str, +    int[string] _node_int    )    in { }    body {      scope(exit) {        destroy(obj_is_);        destroy(obj_raw); -      destroy(_node); +      destroy(_node_str); +      destroy(_node_int);      }      _obj_attrib.remove("json");      _obj_attrib["json"] ="{"; @@ -3680,7 +3704,7 @@ struct ObjAttributes {        break;      }      _obj_attrib["json"] ~=" }"; -    _obj_attrib["json"]=_set_additional_values_parse_as_json(_obj_attrib["json"], obj_is_, _node); +    _obj_attrib["json"]=_set_additional_values_parse_as_json(_obj_attrib["json"], obj_is_, _node_str, _node_int); // check      debug(structattrib) {        if (oa_j["is"].str() == "heading") {          writeln(_obj_attrib["json"]); @@ -3889,23 +3913,24 @@ struct ObjAttributes {    string _set_additional_values_parse_as_json(      string _obj_attrib,      string obj_is_, -    string[string][string] _node +    string[string] _node_str, +    int[string] _node_int    ) {                                                  //      JSONValue oa_j = parseJSON(_obj_attrib);      assert(        (oa_j.type == JSON_TYPE.OBJECT)      );      if (obj_is_ == "heading") { -      oa_j.object["obj_cite_number"] = _node["object"]["obj_cite_number"]; -      oa_j.object["lev_markup_number"] = _node["heading"]["lev_markup_number"]; -      oa_j.object["lev_collapsed_number"] = _node["heading"]["lev_collapsed_number"]; +      oa_j.object["obj_cite_number"] = _node_str["ocn"]; +      oa_j.object["lev_markup_number"] = _node_int["heading_lev_markup"]; +      oa_j.object["lev_collapsed_number"] = _node_int["heading_lev_collapsed"];        oa_j.object["heading_ptr"] = -        _node["object"]["heading_ptr"]; // check +        _node_int["ptr_heading"];        oa_j.object["doc_object_ptr"] = -        _node["object"]["doc_object_ptr"]; // check +        _node_int["ptr_doc_object"];      } -    oa_j.object["parent_obj_cite_number"] = _node["object"]["parent_obj_cite_number"]; -    oa_j.object["parent_lev_markup_number"] = _node["object"]["parent_lev_markup_number"]; +    oa_j.object["parent_obj_cite_number"] = _node_int["parent_ocn"]; +    oa_j.object["parent_lev_markup_number"] = _node_int["parent_lev_markup"];      _obj_attrib = oa_j.toString();      return _obj_attrib;    } @@ -4093,74 +4118,59 @@ struct BookIndexReportSection {      auto mainkeys =        bookindex_unordered_hashes.byKey.array.sort().release;      ObjComposite[][string] bookindex_section; -    auto node_ = node_metadata; +    auto node_int_ = node_metadata_int; +    auto node_str_ = node_metadata_str;      if ((mainkeys.length > 0)      && (opt_action_bool["backmatter"] && opt_action_bool["section_bookindex"])) {        string bi_tmp_seg, bi_tmp_scroll; -      attrib=""; -      lev="B"; -      lev_int_markup=1; -      lev_int_collapsed=1; -      node_["object"]["is"]                       = "heading"; -      node_["object"]["obj_cite_number"]          = "0"; -      node_["object"]["segment_anchor_tag"]       = "bookindex"; -      node_["object"]["parent_obj_cite_number"]   = "1"; -      node_["object"]["parent_lev_markup_number"] = "0"; +      node_str_["is"]                       = "heading"; +      node_str_["ocn"]                      = "0"; +      node_str_["segment_anchor_tag"]       = ""; +      node_str_["attrib"]                   = ""; +      node_str_["marked_up_lev"]            = "B"; +      node_int_["heading_lev_markup"]       = 1; +      node_int_["heading_lev_collapsed"]    = 1; +      node_int_["parent_ocn"]               = 1; +      node_int_["parent_lev_markup"]        = 0;        bookindex_section["scroll"] ~=          set_abstract_object.contents_heading(            "Book Index", -          attrib, -          obj_cite_number, +          node_str_, +          node_int_,            [], -          to!string(lev), -          lev_int_markup, -          lev_int_collapsed, -          node_,          );        bookindex_section["seg"] ~=          set_abstract_object.contents_heading(            "Book Index", -          attrib, -          obj_cite_number, +          node_str_, +          node_int_,            [], -          to!string(lev), -          lev_int_markup, -          lev_int_collapsed, -          node_,          );        ++obj_cite_number;        ++mkn;        // 1~ Index -      attrib=""; -      lev="1"; -      lev_int_markup=4; -      lev_int_collapsed=2; -      node_["object"]["is"]                       = "heading"; -      node_["object"]["obj_cite_number"]          = "0"; -      node_["object"]["segment_anchor_tag"]       = "bookindex"; -      node_["object"]["parent_obj_cite_number"]   = "1"; -      node_["object"]["parent_lev_markup_number"] = "0"; +      node_str_["is"]                       = "heading"; +      node_str_["ocn"]                      = "0"; +      node_str_["segment_anchor_tag"]       = "bookindex"; +      node_str_["attrib"]                   = ""; +      node_str_["marked_up_lev"]            = "1"; +      node_int_["heading_lev_markup"]       = 4; +      node_int_["heading_lev_collapsed"]    = 2; +      node_int_["parent_ocn"]               = 1; +      node_int_["parent_lev_markup"]        = 0;        bookindex_section["scroll"] ~=          set_abstract_object.contents_heading(            "Index", -          attrib, -          obj_cite_number, +          node_str_, +          node_int_,            ["book_index"], -          to!string(lev), -          lev_int_markup, -          lev_int_collapsed, -          node_,          );        bookindex_section["seg"] ~=          set_abstract_object.contents_heading(            "Index", -          attrib, -          obj_cite_number, +          node_str_, +          node_int_,            ["book_index"], -          to!string(lev), -          lev_int_markup, -          lev_int_collapsed, -          node_,          );        ++obj_cite_number;        ++mkn; @@ -4223,32 +4233,28 @@ struct BookIndexReportSection {          ++mkn;        }      } else {                              // no book index, (figure out what to do here) -      node_["object"]["is"]                       = "heading"; -      node_["object"]["obj_cite_number"]          = "0"; -      node_["object"]["segment_anchor_tag"]       = "bookindex"; -      node_["object"]["parent_obj_cite_number"]   = "1"; -      node_["object"]["parent_lev_markup_number"] = "0"; +      node_str_["is"]                       = "heading"; +      node_str_["ocn"]                      = "0"; +      node_str_["segment_anchor_tag"]       = ""; +      node_str_["attrib"]                   = ""; +      node_str_["marked_up_lev"]            = "B"; +      node_int_["heading_lev_markup"]       = 1; +      node_int_["heading_lev_collapsed"]    = 1; +      node_int_["parent_ocn"]               = 1; +      node_int_["parent_lev_markup"]        = 0;        bookindex_section["scroll"] ~=          set_abstract_object.contents_heading(            "(skip) there is no Book Index", -          "",                             // attrib, -          0, +          node_str_, +          node_int_,            [""], -          "B", -          1, -          1, -          node_,          );        bookindex_section["seg"] ~=          set_abstract_object.contents_heading(            "(skip) there is no Book Index", -          "",                             // attrib, -          0, +          node_str_, +          node_int_,            [""], -          "B", -          1, -          1, -          node_,          );      }      auto t = tuple(bookindex_section, obj_cite_number); @@ -4269,7 +4275,7 @@ struct BookIndexReportSection {  #+BEGIN_SRC d  struct NotesSection {    string[string] object_notes; -  long previous_count; +  int previous_count;    int mkn;    auto rgx = Rgx();  #+END_SRC @@ -4281,7 +4287,7 @@ struct NotesSection {    private auto gather_notes_for_endnote_section(      ObjComposite[] contents_am,      string         segment_anchor_tag_that_object_belongs_to, -    ulong          cntr, +    int            cntr,    )    in {      // endnotes/ footnotes for @@ -4373,102 +4379,83 @@ struct NotesSection {      string lev, lev_markup_number, lev_collapsed_number;      string attrib;      int[string] indent; -    auto node_ = node_metadata; +    auto node_int_ = node_metadata_int; +    auto node_str_ = node_metadata_str;      if ((endnotes_["seg"].length > 0)      && (opt_action_bool["backmatter"] && opt_action_bool["section_endnotes"])) { -      attrib=""; -      lev="B"; -      lev_markup_number="1"; -      lev_collapsed_number="1"; -      node_["object"]["is"]                       = "heading"; -      node_["object"]["obj_cite_number"]          = "0"; -      node_["object"]["segment_anchor_tag"]       = "endnotes"; -      node_["object"]["parent_obj_cite_number"]   = "1"; -      node_["object"]["parent_lev_markup_number"] = "0"; +      node_str_["is"]                       = "heading"; +      node_str_["ocn"]                      = "0"; +      node_str_["segment_anchor_tag"]       = ""; +      node_str_["attrib"]                   = ""; +      node_str_["marked_up_lev"]            = "B"; +      node_int_["heading_lev_markup"]       = 1; +      node_int_["heading_lev_collapsed"]    = 1; +      node_int_["parent_ocn"]               = 1; +      node_int_["parent_lev_markup"]        = 0;        the_endnotes_section["seg"] ~=          set_abstract_object.contents_heading(            "Endnotes", -          attrib, -          obj_cite_number, +          node_str_, +          node_int_,            [], -          to!string(lev), -          to!int(lev_markup_number), -          to!int(lev_collapsed_number), -          node_,          );        the_endnotes_section["scroll"] ~=          set_abstract_object.contents_heading(            "Endnotes", -          attrib, -          obj_cite_number, +          node_str_, +          node_int_,            [], -          to!string(lev), -          to!int(lev_markup_number), -          to!int(lev_collapsed_number), -          node_,          );        ++obj_cite_number;        ++mkn; -      attrib=""; -      lev="1"; -      lev_markup_number="4"; -      lev_collapsed_number="2"; -      node_["object"]["is"]                       = "heading"; -      node_["object"]["obj_cite_number"]          = "0"; -      node_["object"]["segment_anchor_tag"]       = "endnotes"; -      node_["object"]["parent_obj_cite_number"]   = "1"; -      node_["object"]["parent_lev_markup_number"] = "0"; +      node_str_["is"]                       = "heading"; +      node_str_["ocn"]                      = "0"; +      node_str_["segment_anchor_tag"]       = "endnotes"; +      node_str_["attrib"]                   = ""; +      node_str_["marked_up_lev"]            = "1"; +      node_int_["heading_lev_markup"]       = 4; +      node_int_["heading_lev_collapsed"]    = 2; +      node_int_["parent_ocn"]               = 1; +      node_int_["parent_lev_markup"]        = 0;        the_endnotes_section["seg"] ~=          set_abstract_object.contents_heading(            "Endnotes", -          attrib, -          obj_cite_number, +          node_str_, +          node_int_,            ["endnotes"], -          to!string(lev), -          to!int(lev_markup_number), -          to!int(lev_collapsed_number), -          node_,          );        the_endnotes_section["scroll"] ~=          set_abstract_object.contents_heading(            "Endnotes", -          attrib, -          obj_cite_number, +          node_str_, +          node_int_,            ["endnotes"], -          to!string(lev), -          to!int(lev_markup_number), -          to!int(lev_collapsed_number), -          node_,          );        ++obj_cite_number;        ++mkn;      } else { -      node_["object"]["is"]                       = "heading"; -      node_["object"]["obj_cite_number"]          = "0"; -      node_["object"]["segment_anchor_tag"]       = "endnotes"; -      node_["object"]["parent_obj_cite_number"]   = "1"; -      node_["object"]["parent_lev_markup_number"] = "0"; +      node_str_["is"]                       = "heading"; +      node_str_["ocn"]                      = "0"; +      node_str_["segment_anchor_tag"]       = ""; +      node_str_["attrib"]                   = ""; +      node_str_["marked_up_lev"]            = "B"; +      node_int_["heading_lev_markup"]       = 1; +      node_int_["heading_lev_collapsed"]    = 1; +      node_int_["parent_ocn"]               = 1; +      node_int_["parent_lev_markup"]        = 0;        the_endnotes_section["seg"] ~=          set_abstract_object.contents_heading(            "(skip) there are no Endnotes", -          "",                             // attrib, -          0, +          node_str_, +          node_int_,            [""], -          "B", -          1, -          1, -          node_,          );        the_endnotes_section["scroll"] ~=          set_abstract_object.contents_heading(            "(skip) there are no Endnotes", -          "",                             // attrib, -          0, +          node_str_, +          node_int_,            [""], -          "B", -          1, -          1, -          node_,          );      }      if (opt_action_bool["backmatter"] && opt_action_bool["section_endnotes"]) { @@ -4621,18 +4608,17 @@ struct NodeStructureMetadata {    int lv, lv0, lv1, lv2, lv3, lv4, lv5, lv6, lv7;    int obj_cite_number;    int[string] p_; // p_ parent_ -  string[string][string] _node;  #+END_SRC  **** TODO node metadata emitter  #+name: ao_emitters_metadata  #+BEGIN_SRC d -  string[string][string] node_emitter( +  auto node_emitter(      string lev_markup_number,      string segment_anchor_tag,      int    obj_cite_number_, -    long   cntr_, +    int   cntr_,      int    ptr_,      string is_    ) @@ -4658,23 +4644,22 @@ struct NodeStructureMetadata {        p_["lev_markup_number"] = DocStructMarkupHeading.h_text_1;        p_["obj_cite_number"] = lv4;      } -    auto _node = [ -      "object" : [ -        "is"                         : is_, -        "heading_ptr"                : to!string(ptr_), -        "doc_object_ptr"             : to!string(cntr_), -        "obj_cite_number"            : to!string(obj_cite_number_), -        "segment_anchor_tag"         : to!string(segment_anchor_tag), -        "parent_obj_cite_number"     : to!string(p_["obj_cite_number"]), -        "parent_lev_markup_number"   : to!string(p_["lev_markup_number"]), -      ], -      "heading" : [ -        "html_segnames_ptr"          : "", -        "lev_markup_number"          : "", -        "lev_collapsed_number"       : "", -        // "ancestors"                  : "", -        // "open_headings_to_close"     : "", -      ] +    string[string] _node_str = [ +      "is"                            : is_, +      "ocn"                           : to!string(obj_cite_number_), +      "marked_up_lev"                 : "", +      "segment_anchor_tag"            : to!string(segment_anchor_tag), +      "attrib"                        : "", +    ]; +    int[string] _node_int = [ +      "ocn"                           : obj_cite_number_, +      "ptr_doc_object"                : 0, +      "ptr_html_segnames"             : 0, +      "ptr_heading"                   : 0, +      "heading_lev_markup"            : 0, +      "heading_lev_collapsed"         : 0, +      "parent_ocn"                    : p_["obj_cite_number"], +      "parent_lev_markup"             : p_["lev_markup_number"],      ];      debug(node) {        if (match(lev_markup_number, rgx.levels_numbered_headings)) { @@ -4683,10 +4668,14 @@ struct NodeStructureMetadata {          writeln("- ", to!string(_node));        }      } -    assert(to!int(_node["object"]["parent_lev_markup_number"]) >= 4); -    assert(to!int(_node["object"]["parent_lev_markup_number"]) <= 7); -    assert(to!int(_node["object"]["parent_obj_cite_number"]) >= 0);      // hmm, perhaps -    return _node; +    assert(_node_int["parent_lev_markup"] >= 4);         // +    assert(_node_int["parent_lev_markup"] <= 7);         // +    assert(_node_int["parent_ocn"] >= 0);      // hmm, perhaps         // +    auto t = tuple( +      _node_str, +      _node_int, +    ); +    return t;    }    invariant() {    } @@ -4696,15 +4685,16 @@ struct NodeStructureMetadata {  #+name: ao_emitters_metadata  #+BEGIN_SRC d -  string[string][string] node_emitter_heading( +  auto node_emitter_heading( +    string lev,      string lev_markup_number,      string lev_collapsed_number,      string segment_anchor_tag,      int    obj_cite_number_, -    long   cntr_, +    int    cntr_,      int    ptr_,      string is_, -    uint html_segnames_ptr, +    int html_segnames_ptr,    )    in {      auto rgx = Rgx(); @@ -4803,23 +4793,22 @@ struct NodeStructureMetadata {      default:        break;      } -    auto _node = [ -      "object" : [ -        "is"                         : is_, -        "heading_ptr"                : to!string(ptr_), -        "doc_object_ptr"             : to!string(cntr_), -        "obj_cite_number"            : to!string(obj_cite_number_), -        "segment_anchor_tag"         : to!string(segment_anchor_tag), -        "parent_obj_cite_number"     : to!string(p_["obj_cite_number"]), -        "parent_lev_markup_number"   : to!string(p_["lev_markup_number"]), -      ], -      "heading" : [ -        "html_segnames_ptr"          : ((lev_markup_number == "4") ? (to!string(html_segnames_ptr)) : ""), -        "lev_markup_number"          : to!string(lev_markup_number), -        "lev_collapsed_number"       : to!string(lev_collapsed_number), -        // "ancestors"                  : to!string(ancestors), -        // "open_headings_to_close"     : to!string(open_headings_to_close), -      ] +    string[string] _node_str = [ +      "is"                            : is_, +      "ocn"                           : to!string(obj_cite_number_), +      "marked_up_lev"                 : lev, +      "segment_anchor_tag"            : to!string(segment_anchor_tag), +      "attrib"                        : "", +    ]; +    int[string] _node_int = [ +      "ocn"                           : obj_cite_number_, +      "ptr_doc_object"                : cntr_, +      "ptr_html_segnames"             : ((lev_markup_number == "4") ? html_segnames_ptr : 0), +      "ptr_heading"                   : ptr_, +      "heading_lev_markup"            : (!(lev_markup_number.empty) ? to!int(lev_markup_number) : 0),       // switch to use int if possible +      "heading_lev_collapsed"         : (!(lev_collapsed_number.empty) ? to!int(lev_collapsed_number) : 0), // switch to use int if possible +      "parent_ocn"                    : p_["obj_cite_number"], +      "parent_lev_markup"             : p_["lev_markup_number"],      ];      debug(node) {        if (match(lev_markup_number, rgx.levels_numbered_headings)) { @@ -4831,37 +4820,44 @@ struct NodeStructureMetadata {          writeln("* ", to!string(_node));        }      } -    assert(to!int(_node["object"]["parent_lev_markup_number"]) <= 7); -    assert(to!int(_node["object"]["parent_obj_cite_number"]) >= 0); +    assert(_node_int["parent_lev_markup"] <= 7); +    assert(_node_int["parent_ocn"] >= 0);      if (match(lev_markup_number, rgx.levels_numbered_headings)) { -      assert(to!int(_node["heading"]["lev_markup_number"]) <= 7); -      assert(to!int(_node["object"]["obj_cite_number"]) >= 0); -      if (to!int(_node["object"]["parent_lev_markup_number"]) > 0) { -        assert(to!int(_node["object"]["parent_lev_markup_number"]) < to!int(_node["heading"]["lev_markup_number"])); -        if (to!int(_node["object"]["obj_cite_number"]) != 0) { -          assert(to!int(_node["object"]["parent_obj_cite_number"]) < to!int(_node["object"]["obj_cite_number"])); +      assert(_node_int["heading_lev_markup"] <= 7);         // issues +      assert(to!int(_node_str["ocn"]) >= 0); +      if (_node_int["parent_lev_markup"] > 0) { +        assert(_node_int["parent_lev_markup"] < _node_int["heading_lev_markup"]); +        if (to!int(_node_str["ocn"]) != 0) { +          assert(_node_int["parent_ocn"] < to!int(_node_str["ocn"]));          }        } -      if (to!int(_node["heading"]["lev_markup_number"]) == 0) { -        assert(to!int(_node["object"]["parent_lev_markup_number"]) == DocStructMarkupHeading.h_sect_A); -      } else if  (to!int(_node["heading"]["lev_markup_number"]) == DocStructMarkupHeading.h_sect_B) { -        assert(to!int(_node["object"]["parent_lev_markup_number"]) == DocStructMarkupHeading.h_sect_A); -      } else if  (to!int(_node["heading"]["lev_markup_number"]) == DocStructMarkupHeading.h_sect_C) { -        assert(to!int(_node["object"]["parent_lev_markup_number"]) == DocStructMarkupHeading.h_sect_B); -      } else if  (to!int(_node["heading"]["lev_markup_number"]) == DocStructMarkupHeading.h_sect_D) { -        assert(to!int(_node["object"]["parent_lev_markup_number"]) == DocStructMarkupHeading.h_sect_C); -      } else if  (to!int(_node["heading"]["lev_markup_number"]) == DocStructMarkupHeading.h_text_1) { -        assert(to!int(_node["object"]["parent_lev_markup_number"]) <= DocStructMarkupHeading.h_sect_D); -      } else if  (to!int(_node["heading"]["lev_markup_number"]) == DocStructMarkupHeading.h_text_2) { -        assert(to!int(_node["object"]["parent_lev_markup_number"]) == DocStructMarkupHeading.h_text_1); -      } else if  (to!int(_node["heading"]["lev_markup_number"]) == DocStructMarkupHeading.h_text_3) { -        assert(to!int(_node["object"]["parent_lev_markup_number"]) == DocStructMarkupHeading.h_text_2); -      } else if  (to!int(_node["heading"]["lev_markup_number"]) == DocStructMarkupHeading.h_text_4) { -        assert(to!int(_node["object"]["parent_lev_markup_number"]) == DocStructMarkupHeading.h_text_3); -      } else if  (to!int(_node["heading"]["lev_markup_number"]) == DocStructMarkupHeading.h_text_5) { +      if (_node_int["heading_lev_markup"] == 0) { +        assert(_node_int["parent_lev_markup"] == DocStructMarkupHeading.h_sect_A); +      } else if  (_node_int["heading_lev_markup"] == DocStructMarkupHeading.h_sect_B) { +        assert(_node_int["parent_lev_markup"] == DocStructMarkupHeading.h_sect_A); +      } else if  (_node_int["heading_lev_markup"] == DocStructMarkupHeading.h_sect_C) { +        assert(_node_int["parent_lev_markup"] == DocStructMarkupHeading.h_sect_B); +      } else if  (_node_int["heading_lev_markup"] == DocStructMarkupHeading.h_sect_D) { +        assert(_node_int["parent_lev_markup"] == DocStructMarkupHeading.h_sect_C); +      } else if  (_node_int["heading_lev_markup"] == DocStructMarkupHeading.h_text_1) { +        assert(_node_int["parent_lev_markup"] <= DocStructMarkupHeading.h_sect_D); +      } else if  (_node_int["heading_lev_markup"] == DocStructMarkupHeading.h_text_2) { +        assert(_node_int["parent_lev_markup"] == DocStructMarkupHeading.h_text_1); +      } else if  (_node_int["heading_lev_markup"] == DocStructMarkupHeading.h_text_3) { +        assert(_node_int["parent_lev_markup"] == DocStructMarkupHeading.h_text_2); +      } else if  (_node_int["heading_lev_markup"] == DocStructMarkupHeading.h_text_4) { +        assert(_node_int["parent_lev_markup"] == DocStructMarkupHeading.h_text_3); +      } else if  (_node_int["heading_lev_markup"] == DocStructMarkupHeading.h_text_5) { +        // // writeln(to!int(_node_int["parent_lev_markup"])); +        // // assert(to!int(_node_int["parent_lev_markup"]) >= 4); +        // // assert(to!int(_node_int["parent_lev_markup"]) <= 7);        }      } -    return _node; +    auto t = tuple( +      _node_str, +      _node_int, +    ); +    return t;    }    invariant() {    } @@ -5205,25 +5201,21 @@ auto contents_comment(in string object) {  #+name: ao_object_setter_heading  #+BEGIN_SRC d  auto contents_heading( -  in string object, -  in string attrib, -  in int obj_cite_number, -  in string[] tags, -  in string lev, -  in int lev_int_markup, -  in int lev_int_collapsed, -  in string[string][string] _node, +  in string         object, +  in string[string] _node_str, +  in int[string]    _node_int, +  in string[]       tags,  ) {    ObjComposite object_set;    object_set.use                                 = "content";    object_set.of                                  = "para";    object_set.is_a                                = "heading";    object_set.object                              = object; -  object_set.obj_cite_number                     = (obj_cite_number==0) ? "" : to!string(obj_cite_number); +  object_set.obj_cite_number                     = _node_str["ocn"];    object_set.anchor_tags                         ~= tags; -  object_set.heading_attrib.lev                  = lev; -  object_set.heading_attrib.lev_int_markup       = lev_int_markup; -  object_set.heading_attrib.lev_int_collapsed    = lev_int_collapsed; +  object_set.heading_attrib.lev                  = _node_str["marked_up_lev"]; +  object_set.heading_attrib.lev_int_markup       = _node_int["heading_lev_markup"]; +  object_set.heading_attrib.lev_int_collapsed    = _node_int["heading_lev_collapsed"];    return object_set;  }  #+END_SRC @@ -5249,7 +5241,6 @@ auto contents_para(    object_set.para_attrib.indent_start = to!int(indent["hang_position"]);    object_set.para_attrib.indent_rest  = to!int(indent["base_position"]);    object_set.para_attrib.bullet       = false; // bullet; -  // object_set.node_structure.node   = _node;    return object_set;  }  #+END_SRC @@ -5320,7 +5311,6 @@ auto contents_block(    object_set.is_a                = type;    object_set.object              = object;    object_set.obj_cite_number     = (obj_cite_number==0) ? "" : to!string(obj_cite_number); -  // object_set.node_structure.node               = _node;    return object_set;  }  #+END_SRC @@ -5342,7 +5332,6 @@ auto contents_block_code(    object_set.block_attrib.syntax = attrib_language_syntax;    object_set.object              = object;    object_set.obj_cite_number     = (obj_cite_number==0) ? "" : to!string(obj_cite_number); -  // object_set.node_structure.node               = _node;    return object_set;  }  #+END_SRC @@ -5352,10 +5341,11 @@ auto contents_block_code(  #+name: ao_object_setter_block_obj_cite_number_string  #+BEGIN_SRC d  auto contents_block_obj_cite_number_string( -  in string type, -  in string object, -  in string obj_cite_number, -  in string[string][string] _node +  in string         type, +  in string         object, +  in string         obj_cite_number, +  in string[string] _node_str, +  in int[string]    _node_int,  ) {    ObjComposite object_set;    object_set.use                               = "content"; @@ -5363,7 +5353,6 @@ auto contents_block_obj_cite_number_string(    object_set.is_a                              = type;    object_set.object                            = object;    object_set.obj_cite_number                   = obj_cite_number; -  object_set.node_structure.node               = _node;    return object_set;  }  #+END_SRC diff --git a/org/ao_defaults.org b/org/ao_defaults.org index 4f9777c..39cfff8 100644 --- a/org/ao_defaults.org +++ b/org/ao_defaults.org @@ -392,26 +392,28 @@ template SiSUrgxInitFlags() {  #+name: ao_defaults_templates  #+BEGIN_SRC d  template SiSUnode() { -  string[string][string] node_metadata() { -    auto node_ = [ -      "object" : [ -        "is"                         : "", -        "heading_ptr"                : "", -        "doc_object_ptr"             : "", -        "obj_cite_number"            : "", -        "segment_anchor_tag"         : "", -        "parent_obj_cite_number"     : "", -        "parent_lev_markup_number"   : "", -      ], -      "heading" : [ -        "html_segnames_ptr"          : "", -        "lev_markup_number"          : "", -        "lev_collapsed_number"       : "", -      //   "ancestors"                  : "", -      //   "open_headings_to_close"     : "", -      ], +  string[string] node_metadata_str() { +    auto _node = [ +        "is"                            : "", +        "ocn"                           : "", +        "marked_up_lev"                 : "", +        "segment_anchor_tag"            : "", +        "attrib"                        : "", +    ]; +    return _node; +  } +  int[string] node_metadata_int() { +    auto _node = [ +        "ocn"                           : 0, // decide whether to use or keep? +        "ptr_doc_object"                : 0, +        "ptr_html_segnames"             : 0, +        "ptr_heading"                   : 0, +        "heading_lev_markup"            : 9, +        "heading_lev_collapsed"         : 9, +        "parent_ocn"                    : 0, +        "parent_lev_markup"             : 9,      ]; -    return node_; +    return _node;    }  }  #+END_SRC diff --git a/org/sdp.org b/org/sdp.org index 6a2c0b7..fad6f12 100644 --- a/org/sdp.org +++ b/org/sdp.org @@ -24,7 +24,7 @@ struct Version {    int minor;    int patch;  } -enum ver = Version(0, 9, 3); +enum ver = Version(0, 9, 4);  #+END_SRC  * sdp.d   sisu document parser                                       :sdp.d: diff --git a/src/sdp/ao_abstract_doc_source.d b/src/sdp/ao_abstract_doc_source.d index c2cf32b..5431b3d 100644 --- a/src/sdp/ao_abstract_doc_source.d +++ b/src/sdp/ao_abstract_doc_source.d @@ -48,12 +48,12 @@ template SiSUdocAbstraction() {      JSONValue[] bib_arr_json;      int bib_entry;      /+ counters +/ -    long cntr, previous_count, previous_length; +    int cntr, previous_count, previous_length;      int[string] line_occur;      int verse_line, heading_ptr;      string[] html_segnames=[]; -    uint html_segnames_ptr=0; -    uint html_segnames_ptr_cntr=0; +    int html_segnames_ptr=0; +    int html_segnames_ptr_cntr=0;      /+ paragraph attributes +/      int[string] indent;      bool bullet = true; @@ -77,7 +77,8 @@ template SiSUdocAbstraction() {        return bookindex_extract_hash.bookindex_nugget_hash(bookindex_section, obj_cite_number);      }      /+ node +/ -    string[string][string] _node; +    string[string] _node_str; +    int[string]    _node_int;      auto node_construct = NodeStructureMetadata();      /+ ↓ abstract marked up document +/      auto abstract_doc_source( @@ -100,7 +101,8 @@ template SiSUdocAbstraction() {          destroy(processing);          destroy(biblio_arr_json);        } -      auto node_ = node_metadata; +      auto node_int_ = node_metadata_int; +      auto node_str_ = node_metadata_str;        line_occur = [          "heading"  : 0,          "para"     : 0, @@ -158,21 +160,21 @@ template SiSUdocAbstraction() {        string toc_txt_;        an_object["glossary_nugget"] = "";        an_object["blurb_nugget"] = ""; -      node_["object"]["is"]                       = "heading"; -      node_["object"]["obj_cite_number"]          = "0"; -      node_["object"]["segment_anchor_tag"]       = "toc"; -      node_["object"]["parent_obj_cite_number"]   = "1"; -      node_["object"]["parent_lev_markup_number"] = "0"; +      node_str_["is"]                           = "heading"; +      node_str_["ocn"]                          = "0"; +      node_str_["segment_anchor_tag"]           = "toc"; +      node_str_["attrib"]                       = ""; +      node_str_["marked_up_lev"]                = "1"; +      node_int_["heading_lev_markup"]           = 4; +      node_int_["heading_lev_collapsed"]        = 2; +      node_int_["parent_ocn"]                   = 1; +      node_int_["parent_lev_markup"]            = 0;        auto toc_head =          set_abstract_object.contents_heading(            "Table of Contents", // nugget/object -          "",                  // attrib -          0,                   // obj_cite_number +          node_str_, +          node_int_,            ["toc"],             // anchor tag -          "1",                 // lev -          4,                   // lev_int_markup -          2,                   // lev_int_collapsed -          node_,          );        the_table_of_contents_section = [          "seg": [toc_head], @@ -261,37 +263,37 @@ template SiSUdocAbstraction() {                line_occur["para"] = State.off;                an_object_key="glossary_nugget"; //                if (matchFirst(line, rgx.heading_glossary)) { -                node_["object"]["is"]                       = "heading"; -                node_["object"]["obj_cite_number"]          = "0"; -                node_["object"]["segment_anchor_tag"]       = "glossary"; -                node_["object"]["parent_obj_cite_number"]   = "1"; -                node_["object"]["parent_lev_markup_number"] = "0"; +                node_str_["is"]                       = "heading"; +                node_str_["ocn"]                      = "0"; +                node_str_["segment_anchor_tag"]       = ""; +                node_str_["attrib"]                   = ""; +                node_str_["marked_up_lev"]            = "B"; +                node_int_["heading_lev_markup"]       = 1; +                node_int_["heading_lev_collapsed"]    = 1; +                node_int_["parent_ocn"]               = 1; +                node_int_["parent_lev_markup"]        = 0;                  the_glossary_section ~=                    set_abstract_object.contents_heading(                      "Glossary",       // nugget/object -                    "",               // attrib -                    0,                // obj_cite_number +                    node_str_, +                    node_int_,                      [""],             // anchor tag -                    "B",              // lev -                    1,                // lev_int_markup -                    1,                // lev_int_collapsed -                    node_,                    ); -                node_["object"]["is"]                       = "heading"; -                node_["object"]["obj_cite_number"]          = "0"; -                node_["object"]["segment_anchor_tag"]       = "glossary"; -                node_["object"]["parent_obj_cite_number"]   = "1"; -                node_["object"]["parent_lev_markup_number"] = "0"; +                node_str_["is"]                       = "heading"; +                node_str_["ocn"]                      = "0"; +                node_str_["segment_anchor_tag"]       = "glossary"; +                node_str_["attrib"]                   = ""; +                node_str_["marked_up_lev"]            = "1"; +                node_int_["heading_lev_markup"]       = 4; +                node_int_["heading_lev_collapsed"]    = 2; +                node_int_["parent_ocn"]               = 1; +                node_int_["parent_lev_markup"]        = 0;                  the_glossary_section ~=                    set_abstract_object.contents_heading(                      "Glossary",       // nugget/object -                    "",               // attrib -                    0,                // obj_cite_number +                    node_str_, +                    node_int_,                      ["glossary"],     // anchor tag -                    "1",              // lev -                    4,                // lev_int_markup -                    2,                // lev_int_collapsed -                    node_,                    );                // } else if (matchFirst(line, rgx.heading)) {                //   _heading_matched_(line, line_occur, an_object, an_object_key, lv, collapsed_lev, type, dochead_meta_aa); // levels? @@ -334,56 +336,56 @@ template SiSUdocAbstraction() {                line_occur["para"] = State.off;                an_object_key="blurb_nugget";                if (matchFirst(line, rgx.heading_blurb)) { -                node_["object"]["is"]                       = "heading"; -                node_["object"]["obj_cite_number"]          = "0"; -                node_["object"]["segment_anchor_tag"]       = "blurb"; -                node_["object"]["parent_obj_cite_number"]   = "1"; -                node_["object"]["parent_lev_markup_number"] = "0"; +                node_str_["is"]                       = "heading"; +                node_str_["ocn"]                      = "0"; +                node_str_["segment_anchor_tag"]       = ""; +                node_str_["attrib"]                   = ""; +                node_str_["marked_up_lev"]            = "B"; +                node_int_["heading_lev_markup"]       = 1; +                node_int_["heading_lev_collapsed"]    = 1; +                node_int_["parent_ocn"]               = 1; +                node_int_["parent_lev_markup"]        = 0;                  the_blurb_section ~=                    set_abstract_object.contents_heading(                      "Blurb",          // nugget/object -                    "",               // attrib -                    0,                // obj_cite_number +                    node_str_, +                    node_int_,                      [""],             // anchor tag -                    "B",              // lev -                    1,                // lev_int_markup -                    1,                // lev_int_collapsed -                    node_,                    ); -                node_["object"]["is"]                       = "heading"; -                node_["object"]["obj_cite_number"]          = "0"; -                node_["object"]["segment_anchor_tag"]       = "blurb"; -                node_["object"]["parent_obj_cite_number"]   = "1"; -                node_["object"]["parent_lev_markup_number"] = "0"; +                node_str_["is"]                       = "heading"; +                node_str_["ocn"]                      = "0"; +                node_str_["segment_anchor_tag"]       = "blurb"; +                node_str_["attrib"]                   = ""; +                node_str_["marked_up_lev"]            = "1"; +                node_int_["heading_lev_markup"]       = 4; +                node_int_["heading_lev_collapsed"]    = 2; +                node_int_["parent_ocn"]               = 1; +                node_int_["parent_lev_markup"]        = 0;                  the_blurb_section ~=                    set_abstract_object.contents_heading(                      "Blurb",          // nugget/object -                    "",               // attrib -                    0,                // obj_cite_number +                    node_str_, +                    node_int_,                      ["blurb"],        // anchor tag -                    "1",              // lev -                    4,                // lev_int_markup -                    2,                // lev_int_collapsed -                    node_,                    );                } else if ((matchFirst(line, rgx.heading))                && (opt_action_bool["backmatter"] && opt_action_bool["section_blurb"])) {                  _heading_matched_(line, line_occur, an_object, an_object_key, lv, collapsed_lev, type, dochead_meta_aa); // levels? -                node_["object"]["is"]                       = "heading"; -                node_["object"]["obj_cite_number"]          = "0"; -                node_["object"]["segment_anchor_tag"]       = "blurb"; -                node_["object"]["parent_obj_cite_number"]   = "1"; -                node_["object"]["parent_lev_markup_number"] = "0"; +                node_str_["is"]                       = "heading"; +                node_str_["ocn"]                      = "0"; +                node_str_["segment_anchor_tag"]       = "blurb"; +                node_str_["attrib"]                   = ""; +                node_str_["marked_up_lev"]            = to!string(an_object["lev"]); +                node_int_["heading_lev_markup"]       = to!int(an_object["lev_markup_number"]);    // make int, remove need to conv +                node_int_["heading_lev_collapsed"]    = to!int(an_object["lev_collapsed_number"]); // make int, remove need to conv +                node_int_["parent_ocn"]               = 1; +                node_int_["parent_lev_markup"]        = 0;                  the_blurb_section ~=                    set_abstract_object.contents_heading(                      to!string(line),           //  an_object["substantive"], -                    "",                        // attrib -                    0,                         // obj_cite_number +                    node_str_, +                    node_int_,                      [""],                      // anchor tag -                    to!string(an_object["lev"]), -                    to!int(an_object["lev_markup_number"]), -                    to!int(an_object["lev_collapsed_number"]), -                    node_,                    );                } else {                  _para_match_(line, an_object, an_object_key, indent, bullet, type, line_occur); @@ -538,7 +540,8 @@ template SiSUdocAbstraction() {                  the_document_body_section,                  bookindex_unordered_hashes,                  obj_cite_number, -                _node, +                _node_str, +                _node_int,                  cntr,                  type,                  obj_cite_number_poem, @@ -587,19 +590,22 @@ template SiSUdocAbstraction() {                    html_segnames_ptr = html_segnames_ptr_cntr;                    html_segnames_ptr_cntr++;                  } -                _node = +                auto _node_t =                    node_construct.node_emitter_heading( -                    an_object["lev_markup_number"], -                    an_object["lev_collapsed_number"], -                    segment_anchor_tag_that_object_belongs_to, -                    obj_cite_number, -                    cntr, -                    heading_ptr, -                    an_object["is"], -                    html_segnames_ptr, -                  ); // heading +                    an_object["lev"],                             // string +                    an_object["lev_markup_number"],               // string +                    an_object["lev_collapsed_number"],            // string +                    segment_anchor_tag_that_object_belongs_to,    // string +                    obj_cite_number,                              // int +                    cntr,                                         // int +                    heading_ptr,                                  // int +                    an_object["is"],                              // string +                    html_segnames_ptr,                            // int +                  ); +                 _node_str = _node_t[0]; +                 _node_int = _node_t[1];                  an_object["attrib"] = -                  obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node); +                  obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node_str, _node_int);                  ++heading_ptr;                  debug(segments) {                    writeln(an_object["lev_markup_number"]); @@ -608,13 +614,9 @@ template SiSUdocAbstraction() {                  the_document_body_section ~=                    set_abstract_object.contents_heading(                      an_object["substantive"], -                    an_object["attrib"], -                    obj_cite_number, +                    _node_str, +                    _node_int,                      anchor_tags, -                    to!string(an_object["lev"]), -                    to!int(an_object["lev_markup_number"]), -                    to!int(an_object["lev_collapsed_number"]), -                    _node,                    );                  // track previous heading and make assertions                  debug(objectrelated1) { // check @@ -633,7 +635,7 @@ template SiSUdocAbstraction() {                  bookindex_unordered_hashes =                    bkidx_hash(an_object["bookindex_nugget"], obj_cite_number);                  an_object["is"] = "para"; -                _node = +                auto _node_t =                    node_construct.node_emitter(                      content_non_header,                      segment_anchor_tag_that_object_belongs_to, @@ -642,12 +644,14 @@ template SiSUdocAbstraction() {                      heading_ptr-1,                      an_object["is"],                    ); +                _node_str = _node_t[0]; +                _node_int = _node_t[1];                  auto substantive_object_and_anchor_tags_tuple =                    obj_im.obj_inline_markup_and_anchor_tags(an_object, an_object_key, dochead_make_aa); // ...                  an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0];                  anchor_tags = substantive_object_and_anchor_tags_tuple[1];                  an_object["attrib"] = -                  obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node); +                  obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node_str, _node_int);                  the_document_body_section ~=                    set_abstract_object.contents_para(                      an_object["is"], @@ -688,16 +692,16 @@ template SiSUdocAbstraction() {                type["glossary_section"] = State.off;                type["blurb_section"] = State.off;              } -            previous_length = the_document_body_section.length; +            previous_length = to!int(the_document_body_section.length);              if (                match(the_document_body_section[$-1].object,                rgx.inline_notes_delimiter_al_regular_number_note)              ) { -              previous_count=the_document_body_section.length -1; +              previous_count=to!int(the_document_body_section.length -1);                note_section.gather_notes_for_endnote_section(                  the_document_body_section,                  segment_anchor_tag_that_object_belongs_to, -                the_document_body_section.length-1, +                to!int(the_document_body_section.length-1),                );              }            } @@ -734,21 +738,21 @@ template SiSUdocAbstraction() {        }        if (an_object["glossary_nugget"].length == 0) {          writeln("no gloss"); -        node_["object"]["is"]                       = "heading"; -        node_["object"]["obj_cite_number"]          = "0"; -        node_["object"]["segment_anchor_tag"]       = "glossary"; -        node_["object"]["parent_obj_cite_number"]   = "1"; -        node_["object"]["parent_lev_markup_number"] = "0"; +        node_str_["is"]                       = "heading"; +        node_str_["ocn"]                      = "0"; +        node_str_["segment_anchor_tag"]       = ""; +        node_str_["attrib"]                   = ""; +        node_str_["marked_up_lev"]            = "B"; +        node_int_["heading_lev_markup"]       = 1; +        node_int_["heading_lev_collapsed"]    = 1; +        node_int_["parent_ocn"]               = 1; +        node_int_["parent_lev_markup"]        = 0;          the_glossary_section ~=            set_abstract_object.contents_heading(              "(skip) there is no Glossary section",   // nugget/object -            "",               // attrib -            0,                // obj_cite_number +            node_str_, +            node_int_,              [""],             // anchor tag -            "B",              // lev -            1,                // lev_int_markup -            1,                // lev_int_collapsed -            node_,            );        } else {          writeln("gloss"); @@ -764,54 +768,54 @@ template SiSUdocAbstraction() {        auto biblio_ordered =          biblio._bibliography_(biblio_unsorted_incomplete, bib_arr_json);        if (biblio_ordered.length > 0) { -        node_["object"]["is"]                       = "heading"; -        node_["object"]["obj_cite_number"]          = "0"; -        node_["object"]["segment_anchor_tag"]       = "bibliography"; -        node_["object"]["parent_obj_cite_number"]   = "1"; -        node_["object"]["parent_lev_markup_number"] = "0"; +        node_str_["is"]                       = "heading"; +        node_str_["ocn"]                      = "0"; +        node_str_["segment_anchor_tag"]       = ""; +        node_str_["attrib"]                   = ""; +        node_str_["marked_up_lev"]            = "B"; +        node_int_["heading_lev_markup"]       = 1; +        node_int_["heading_lev_collapsed"]    = 1; +        node_int_["parent_ocn"]               = 1; +        node_int_["parent_lev_markup"]        = 0;          the_bibliography_section ~=            set_abstract_object.contents_heading(              "Bibliography",   // nugget/object -            "",               // attrib -            0,                // obj_cite_number +            node_str_, +            node_int_,              [""],             // anchor tag -            "B",              // lev -            1,                // lev_int_markup -            1,                // lev_int_collapsed -            node_,            ); -        node_["object"]["is"]                       = "heading"; -        node_["object"]["obj_cite_number"]          = "0"; -        node_["object"]["segment_anchor_tag"]       = "bibliography"; -        node_["object"]["parent_obj_cite_number"]   = "1"; -        node_["object"]["parent_lev_markup_number"] = "0"; +        node_str_["is"]                       = "heading"; +        node_str_["ocn"]                      = "0"; +        node_str_["segment_anchor_tag"]       = "bibliography"; +        node_str_["attrib"]                   = ""; +        node_str_["marked_up_lev"]            = "1"; +        node_int_["heading_lev_markup"]       = 4; +        node_int_["heading_lev_collapsed"]    = 2; +        node_int_["parent_ocn"]               = 1; +        node_int_["parent_lev_markup"]        = 0;          the_bibliography_section ~=            set_abstract_object.contents_heading( -            "Bibliography",   // nugget/object -            "",               // attrib -            0,                // obj_cite_number +            "Bibliography", +            node_str_, +            node_int_,              ["bibliography"], // anchor tag -            "1",              // lev -            4,                // lev_int_markup -            2,                // lev_int_collapsed -            node_,            );        } else { -        node_["object"]["is"]                       = "heading"; -        node_["object"]["obj_cite_number"]          = "0"; -        node_["object"]["segment_anchor_tag"]       = "bibliography"; -        node_["object"]["parent_obj_cite_number"]   = "1"; -        node_["object"]["parent_lev_markup_number"] = "0"; +        node_str_["is"]                       = "heading"; +        node_str_["ocn"]                      = "0"; +        node_str_["segment_anchor_tag"]       = ""; +        node_str_["attrib"]                   = ""; +        node_str_["marked_up_lev"]            = "B"; +        node_int_["heading_lev_markup"]       = 1; +        node_int_["heading_lev_collapsed"]    = 1; +        node_int_["parent_ocn"]               = 1; +        node_int_["parent_lev_markup"]        = 0;          the_bibliography_section ~=            set_abstract_object.contents_heading(              "(skip) there is no Bibliography",   // nugget/object -            "",               // attrib -            0,                // obj_cite_number +            node_str_, +            node_int_,              [""],             // anchor tag -            "B",              // lev -            1,                // lev_int_markup -            1,                // lev_int_collapsed -            node_,            );        }        string out_; @@ -863,21 +867,21 @@ template SiSUdocAbstraction() {        }        if (an_object["blurb_nugget"].length == 0) {          writeln("no blurb"); -        node_["object"]["is"]                       = "heading"; -        node_["object"]["obj_cite_number"]          = "0"; -        node_["object"]["segment_anchor_tag"]       = "blurb"; -        node_["object"]["parent_obj_cite_number"]   = "1"; -        node_["object"]["parent_lev_markup_number"] = "0"; +        node_str_["is"]                       = "heading"; +        node_str_["ocn"]                      = "0"; +        node_str_["segment_anchor_tag"]       = ""; +        node_str_["attrib"]                   = ""; +        node_str_["marked_up_lev"]            = "B"; +        node_int_["heading_lev_markup"]       = 1; +        node_int_["heading_lev_collapsed"]    = 1; +        node_int_["parent_ocn"]               = 1; +        node_int_["parent_lev_markup"]        = 0;          the_blurb_section ~=            set_abstract_object.contents_heading(              "(skip) there is no Blurb section",   // nugget/object -            "",               // attrib -            0,                // obj_cite_number +            node_str_, +            node_int_,              [""],             // anchor tag -            "B",              // lev -            1,                // lev_int_markup -            1,                // lev_int_collapsed -            node_,            );        } else {          writeln("blurb"); @@ -1472,7 +1476,7 @@ template SiSUdocAbstraction() {        char[] line,        ref string[string] an_object,        ref int[string] type, -      ref long cntr, +      ref int cntr,        string[string] obj_cite_number_poem,        string[string][string] dochead_make_aa,      ) { @@ -1509,7 +1513,7 @@ template SiSUdocAbstraction() {              an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0];              anchor_tags = substantive_object_and_anchor_tags_tuple[1];              an_object["attrib"] = -              obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node); +              obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node_str, _node_int);              the_document_body_section ~=                set_abstract_object.contents_block(                  an_object["is"], @@ -1548,7 +1552,7 @@ template SiSUdocAbstraction() {              }              processing.remove("verse");              an_object["is"] = "verse"; -            _node = node_construct.node_emitter( +            auto _node_t = node_construct.node_emitter(                content_non_header,                segment_anchor_tag_that_object_belongs_to,                obj_cite_number, @@ -1556,12 +1560,14 @@ template SiSUdocAbstraction() {                heading_ptr-1,                an_object["is"]              ); +            _node_str = _node_t[0]; +            _node_int = _node_t[1];              auto substantive_object_and_anchor_tags_tuple =                obj_im.obj_inline_markup_and_anchor_tags(an_object, an_object_key, dochead_make_aa);              an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0];              anchor_tags = substantive_object_and_anchor_tags_tuple[1];              an_object["attrib"] = -              obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node); +              obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node_str, _node_int);              the_document_body_section ~=                set_abstract_object.contents_block(                  an_object["is"], @@ -1598,7 +1604,7 @@ template SiSUdocAbstraction() {              an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0];              anchor_tags = substantive_object_and_anchor_tags_tuple[1];              an_object["attrib"] = -              obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node); +              obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node_str, _node_int);              the_document_body_section ~=                set_abstract_object.contents_block(                  an_object["is"], @@ -1636,7 +1642,7 @@ template SiSUdocAbstraction() {              }              processing.remove("verse");              an_object["is"] = "verse"; -            _node = +            auto _node_t =                node_construct.node_emitter(                  content_non_header,                  segment_anchor_tag_that_object_belongs_to, @@ -1645,12 +1651,14 @@ template SiSUdocAbstraction() {                  heading_ptr-1,                  an_object["is"]                ); +            _node_str = _node_t[0]; +            _node_int = _node_t[1];              auto substantive_object_and_anchor_tags_tuple =                obj_im.obj_inline_markup_and_anchor_tags(an_object, an_object_key, dochead_make_aa);              an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0];              anchor_tags = substantive_object_and_anchor_tags_tuple[1];              an_object["attrib"] = -              obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node); +              obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node_str, _node_int);              the_document_body_section ~=                set_abstract_object.contents_block(                  an_object["is"], @@ -1811,8 +1819,9 @@ template SiSUdocAbstraction() {        ref ObjComposite[] the_document_body_section,        ref string[][string][string] bookindex_unordered_hashes,        ref int obj_cite_number, -      ref string[string][string] _node, -      ref long cntr, +      ref string[string] _node_str, +      ref int[string] _node_int, +      ref int cntr,        ref int[string] type,        string[string] obj_cite_number_poem,        string[string][string] dochead_make_aa, @@ -1835,7 +1844,7 @@ template SiSUdocAbstraction() {          bookindex_unordered_hashes =            bkidx_hash(an_object["bookindex_nugget"], obj_cite_number);          an_object["is"] = "code"; -        _node = +        auto _node_t =            node_construct.node_emitter(              content_non_header,              segment_anchor_tag_that_object_belongs_to, @@ -1844,12 +1853,14 @@ template SiSUdocAbstraction() {              heading_ptr-1,              an_object["is"]            ); +        _node_str = _node_t[0]; +        _node_int = _node_t[1];          auto substantive_object_and_anchor_tags_tuple =            obj_im.obj_inline_markup_and_anchor_tags(an_object, an_object_key, dochead_make_aa);          an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0];          anchor_tags = substantive_object_and_anchor_tags_tuple[1];          an_object["attrib"] = -          obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node); +          obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node_str, _node_int);          the_document_body_section ~=            set_abstract_object.contents_block_code(              an_object["is"], @@ -1868,8 +1879,8 @@ template SiSUdocAbstraction() {          bookindex_unordered_hashes =            bkidx_hash(an_object["bookindex_nugget"], obj_cite_number);          an_object["is"] = "verse"; // check also -        _node = -          node_construct.node_emitter( +        auto _node_t = +          node_construct.node_emitter( //              content_non_header,              segment_anchor_tag_that_object_belongs_to,              obj_cite_number, @@ -1877,12 +1888,15 @@ template SiSUdocAbstraction() {              heading_ptr-1,              an_object["is"]            ); +        _node_str = _node_t[0]; +        _node_int = _node_t[1];          the_document_body_section ~=            set_abstract_object.contents_block_obj_cite_number_string(              "poem",              "",              (obj_cite_number_poem["start"], obj_cite_number_poem["end"]), -            _node +            _node_str, +            _node_int,            ); // bookindex          object_reset(an_object);          processing.remove("verse"); @@ -1896,7 +1910,7 @@ template SiSUdocAbstraction() {          bookindex_unordered_hashes =            bkidx_hash(an_object["bookindex_nugget"], obj_cite_number);          an_object["is"] = "table"; -        _node = +        auto _node_t =            node_construct.node_emitter(              content_non_header,              segment_anchor_tag_that_object_belongs_to, @@ -1905,12 +1919,14 @@ template SiSUdocAbstraction() {              heading_ptr-1,              an_object["is"]            ); +        _node_str = _node_t[0]; +        _node_int = _node_t[1];          auto substantive_object_and_anchor_tags_tuple =            obj_im.obj_inline_markup_and_anchor_tags(an_object, an_object_key, dochead_make_aa);          an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0];          anchor_tags = substantive_object_and_anchor_tags_tuple[1];          an_object["attrib"] = -          obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node); +          obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node_str, _node_int);          the_document_body_section ~=            set_abstract_object.contents_block(              an_object["is"], @@ -1931,7 +1947,7 @@ template SiSUdocAbstraction() {          bookindex_unordered_hashes =            bkidx_hash(an_object["bookindex_nugget"], obj_cite_number);          an_object["is"] = "group"; -        _node = +        auto _node_t =            node_construct.node_emitter(              content_non_header,              segment_anchor_tag_that_object_belongs_to, @@ -1940,12 +1956,14 @@ template SiSUdocAbstraction() {              heading_ptr-1,              an_object["is"]            ); +        _node_str = _node_t[0]; +        _node_int = _node_t[1];          auto substantive_object_and_anchor_tags_tuple =            obj_im.obj_inline_markup_and_anchor_tags(an_object, an_object_key, dochead_make_aa);          an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0];          anchor_tags = substantive_object_and_anchor_tags_tuple[1];          an_object["attrib"] = -          obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node); +          obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node_str, _node_int);          the_document_body_section ~=            set_abstract_object.contents_block(              an_object["is"], @@ -1965,7 +1983,7 @@ template SiSUdocAbstraction() {          bookindex_unordered_hashes =            bkidx_hash(an_object["bookindex_nugget"], obj_cite_number);          an_object["is"] = "block"; -        _node = +        auto _node_t =            node_construct.node_emitter(              content_non_header,              segment_anchor_tag_that_object_belongs_to, @@ -1974,12 +1992,14 @@ template SiSUdocAbstraction() {              heading_ptr-1,              an_object["is"]             ); +        _node_str = _node_t[0]; +        _node_int = _node_t[1];          auto substantive_object_and_anchor_tags_tuple =            obj_im.obj_inline_markup_and_anchor_tags(an_object, an_object_key, dochead_make_aa);          an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0];          anchor_tags = substantive_object_and_anchor_tags_tuple[1];          an_object["attrib"] = -          obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node); +          obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node_str, _node_int);          the_document_body_section ~=            set_abstract_object.contents_block(              an_object["is"], @@ -2000,8 +2020,8 @@ template SiSUdocAbstraction() {          bookindex_unordered_hashes =            bkidx_hash(an_object["bookindex_nugget"], obj_cite_number);          an_object["is"] = "quote"; -        _node = -          node_construct.node_emitter( +        auto _node_t = +          node_construct.node_emitter( //              content_non_header,              segment_anchor_tag_that_object_belongs_to,              obj_cite_number, @@ -2009,12 +2029,14 @@ template SiSUdocAbstraction() {              heading_ptr-1,              an_object["is"]            ); +        _node_str = _node_t[0]; +        _node_int = _node_t[1];          auto substantive_object_and_anchor_tags_tuple =            obj_im.obj_inline_markup_and_anchor_tags(an_object, an_object_key, dochead_make_aa);          an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0];          anchor_tags = substantive_object_and_anchor_tags_tuple[1];          an_object["attrib"] = -          obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node); +          obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node_str, _node_int);          the_document_body_section ~=            set_abstract_object.contents_block(              an_object["is"], @@ -2889,12 +2911,12 @@ template SiSUdocAbstraction() {        ) {          if (dochead_make_aa["make"]["num_top"].length > 0) {            if (!(match(munge_, rgx.heading_anchor_tag))) { -            static __gshared uint heading_num_top_level=9; -            static __gshared uint heading_num_depth=2; -            static __gshared uint heading_num_0 = 0; -            static __gshared uint heading_num_1 = 0; -            static __gshared uint heading_num_2 = 0; -            static __gshared uint heading_num_3 = 0; +            static __gshared int heading_num_top_level=9; +            static __gshared int heading_num_depth=2; +            static __gshared int heading_num_0 = 0; +            static __gshared int heading_num_1 = 0; +            static __gshared int heading_num_2 = 0; +            static __gshared int heading_num_3 = 0;              static __gshared string heading_number_auto_composite = "";              if (heading_num_top_level==9) {                if (dochead_make_aa["make"]["num_depth"].length > 0) { @@ -3010,7 +3032,7 @@ template SiSUdocAbstraction() {                  "$1~" ~ "s" ~ m.captures[1] ~ " ");              }            } else if (lev_ == "1") { // (if not successful) manufacture a unique anchor tag for lev=="1" -            static __gshared uint heading_num_lev1 = 0; +            static __gshared int heading_num_lev1 = 0;              heading_num_lev1 ++;              munge_=replaceFirst(munge_, rgx.heading_marker_missing_tag,                "$1~" ~ "x" ~ to!string(heading_num_lev1) ~ " "); @@ -3068,14 +3090,16 @@ template SiSUdocAbstraction() {        string obj_attributes(          string obj_is_,          string obj_raw, -        string[string][string] _node +        string[string] _node_str, +        int[string] _node_int        )        in { }        body {          scope(exit) {            destroy(obj_is_);            destroy(obj_raw); -          destroy(_node); +          destroy(_node_str); +          destroy(_node_int);          }          _obj_attrib.remove("json");          _obj_attrib["json"] ="{"; @@ -3115,7 +3139,7 @@ template SiSUdocAbstraction() {            break;          }          _obj_attrib["json"] ~=" }"; -        _obj_attrib["json"]=_set_additional_values_parse_as_json(_obj_attrib["json"], obj_is_, _node); +        _obj_attrib["json"]=_set_additional_values_parse_as_json(_obj_attrib["json"], obj_is_, _node_str, _node_int); // check          debug(structattrib) {            if (oa_j["is"].str() == "heading") {              writeln(_obj_attrib["json"]); @@ -3251,23 +3275,24 @@ template SiSUdocAbstraction() {        string _set_additional_values_parse_as_json(          string _obj_attrib,          string obj_is_, -        string[string][string] _node +        string[string] _node_str, +        int[string] _node_int        ) {                                                  //          JSONValue oa_j = parseJSON(_obj_attrib);          assert(            (oa_j.type == JSON_TYPE.OBJECT)          );          if (obj_is_ == "heading") { -          oa_j.object["obj_cite_number"] = _node["object"]["obj_cite_number"]; -          oa_j.object["lev_markup_number"] = _node["heading"]["lev_markup_number"]; -          oa_j.object["lev_collapsed_number"] = _node["heading"]["lev_collapsed_number"]; +          oa_j.object["obj_cite_number"] = _node_str["ocn"]; +          oa_j.object["lev_markup_number"] = _node_int["heading_lev_markup"]; +          oa_j.object["lev_collapsed_number"] = _node_int["heading_lev_collapsed"];            oa_j.object["heading_ptr"] = -            _node["object"]["heading_ptr"]; // check +            _node_int["ptr_heading"];            oa_j.object["doc_object_ptr"] = -            _node["object"]["doc_object_ptr"]; // check +            _node_int["ptr_doc_object"];          } -        oa_j.object["parent_obj_cite_number"] = _node["object"]["parent_obj_cite_number"]; -        oa_j.object["parent_lev_markup_number"] = _node["object"]["parent_lev_markup_number"]; +        oa_j.object["parent_obj_cite_number"] = _node_int["parent_ocn"]; +        oa_j.object["parent_lev_markup_number"] = _node_int["parent_lev_markup"];          _obj_attrib = oa_j.toString();          return _obj_attrib;        } @@ -3417,74 +3442,59 @@ template SiSUdocAbstraction() {          auto mainkeys =            bookindex_unordered_hashes.byKey.array.sort().release;          ObjComposite[][string] bookindex_section; -        auto node_ = node_metadata; +        auto node_int_ = node_metadata_int; +        auto node_str_ = node_metadata_str;          if ((mainkeys.length > 0)          && (opt_action_bool["backmatter"] && opt_action_bool["section_bookindex"])) {            string bi_tmp_seg, bi_tmp_scroll; -          attrib=""; -          lev="B"; -          lev_int_markup=1; -          lev_int_collapsed=1; -          node_["object"]["is"]                       = "heading"; -          node_["object"]["obj_cite_number"]          = "0"; -          node_["object"]["segment_anchor_tag"]       = "bookindex"; -          node_["object"]["parent_obj_cite_number"]   = "1"; -          node_["object"]["parent_lev_markup_number"] = "0"; +          node_str_["is"]                       = "heading"; +          node_str_["ocn"]                      = "0"; +          node_str_["segment_anchor_tag"]       = ""; +          node_str_["attrib"]                   = ""; +          node_str_["marked_up_lev"]            = "B"; +          node_int_["heading_lev_markup"]       = 1; +          node_int_["heading_lev_collapsed"]    = 1; +          node_int_["parent_ocn"]               = 1; +          node_int_["parent_lev_markup"]        = 0;            bookindex_section["scroll"] ~=              set_abstract_object.contents_heading(                "Book Index", -              attrib, -              obj_cite_number, +              node_str_, +              node_int_,                [], -              to!string(lev), -              lev_int_markup, -              lev_int_collapsed, -              node_,              );            bookindex_section["seg"] ~=              set_abstract_object.contents_heading(                "Book Index", -              attrib, -              obj_cite_number, +              node_str_, +              node_int_,                [], -              to!string(lev), -              lev_int_markup, -              lev_int_collapsed, -              node_,              );            ++obj_cite_number;            ++mkn;            // 1~ Index -          attrib=""; -          lev="1"; -          lev_int_markup=4; -          lev_int_collapsed=2; -          node_["object"]["is"]                       = "heading"; -          node_["object"]["obj_cite_number"]          = "0"; -          node_["object"]["segment_anchor_tag"]       = "bookindex"; -          node_["object"]["parent_obj_cite_number"]   = "1"; -          node_["object"]["parent_lev_markup_number"] = "0"; +          node_str_["is"]                       = "heading"; +          node_str_["ocn"]                      = "0"; +          node_str_["segment_anchor_tag"]       = "bookindex"; +          node_str_["attrib"]                   = ""; +          node_str_["marked_up_lev"]            = "1"; +          node_int_["heading_lev_markup"]       = 4; +          node_int_["heading_lev_collapsed"]    = 2; +          node_int_["parent_ocn"]               = 1; +          node_int_["parent_lev_markup"]        = 0;            bookindex_section["scroll"] ~=              set_abstract_object.contents_heading(                "Index", -              attrib, -              obj_cite_number, +              node_str_, +              node_int_,                ["book_index"], -              to!string(lev), -              lev_int_markup, -              lev_int_collapsed, -              node_,              );            bookindex_section["seg"] ~=              set_abstract_object.contents_heading(                "Index", -              attrib, -              obj_cite_number, +              node_str_, +              node_int_,                ["book_index"], -              to!string(lev), -              lev_int_markup, -              lev_int_collapsed, -              node_,              );            ++obj_cite_number;            ++mkn; @@ -3547,32 +3557,28 @@ template SiSUdocAbstraction() {              ++mkn;            }          } else {                              // no book index, (figure out what to do here) -          node_["object"]["is"]                       = "heading"; -          node_["object"]["obj_cite_number"]          = "0"; -          node_["object"]["segment_anchor_tag"]       = "bookindex"; -          node_["object"]["parent_obj_cite_number"]   = "1"; -          node_["object"]["parent_lev_markup_number"] = "0"; +          node_str_["is"]                       = "heading"; +          node_str_["ocn"]                      = "0"; +          node_str_["segment_anchor_tag"]       = ""; +          node_str_["attrib"]                   = ""; +          node_str_["marked_up_lev"]            = "B"; +          node_int_["heading_lev_markup"]       = 1; +          node_int_["heading_lev_collapsed"]    = 1; +          node_int_["parent_ocn"]               = 1; +          node_int_["parent_lev_markup"]        = 0;            bookindex_section["scroll"] ~=              set_abstract_object.contents_heading(                "(skip) there is no Book Index", -              "",                             // attrib, -              0, +              node_str_, +              node_int_,                [""], -              "B", -              1, -              1, -              node_,              );            bookindex_section["seg"] ~=              set_abstract_object.contents_heading(                "(skip) there is no Book Index", -              "",                             // attrib, -              0, +              node_str_, +              node_int_,                [""], -              "B", -              1, -              1, -              node_,              );          }          auto t = tuple(bookindex_section, obj_cite_number); @@ -3581,13 +3587,13 @@ template SiSUdocAbstraction() {      }      struct NotesSection {        string[string] object_notes; -      long previous_count; +      int previous_count;        int mkn;        auto rgx = Rgx();        private auto gather_notes_for_endnote_section(          ObjComposite[] contents_am,          string         segment_anchor_tag_that_object_belongs_to, -        ulong          cntr, +        int            cntr,        )        in {          // endnotes/ footnotes for @@ -3667,102 +3673,83 @@ template SiSUdocAbstraction() {          string lev, lev_markup_number, lev_collapsed_number;          string attrib;          int[string] indent; -        auto node_ = node_metadata; +        auto node_int_ = node_metadata_int; +        auto node_str_ = node_metadata_str;          if ((endnotes_["seg"].length > 0)          && (opt_action_bool["backmatter"] && opt_action_bool["section_endnotes"])) { -          attrib=""; -          lev="B"; -          lev_markup_number="1"; -          lev_collapsed_number="1"; -          node_["object"]["is"]                       = "heading"; -          node_["object"]["obj_cite_number"]          = "0"; -          node_["object"]["segment_anchor_tag"]       = "endnotes"; -          node_["object"]["parent_obj_cite_number"]   = "1"; -          node_["object"]["parent_lev_markup_number"] = "0"; +          node_str_["is"]                       = "heading"; +          node_str_["ocn"]                      = "0"; +          node_str_["segment_anchor_tag"]       = ""; +          node_str_["attrib"]                   = ""; +          node_str_["marked_up_lev"]            = "B"; +          node_int_["heading_lev_markup"]       = 1; +          node_int_["heading_lev_collapsed"]    = 1; +          node_int_["parent_ocn"]               = 1; +          node_int_["parent_lev_markup"]        = 0;            the_endnotes_section["seg"] ~=              set_abstract_object.contents_heading(                "Endnotes", -              attrib, -              obj_cite_number, +              node_str_, +              node_int_,                [], -              to!string(lev), -              to!int(lev_markup_number), -              to!int(lev_collapsed_number), -              node_,              );            the_endnotes_section["scroll"] ~=              set_abstract_object.contents_heading(                "Endnotes", -              attrib, -              obj_cite_number, +              node_str_, +              node_int_,                [], -              to!string(lev), -              to!int(lev_markup_number), -              to!int(lev_collapsed_number), -              node_,              );            ++obj_cite_number;            ++mkn; -          attrib=""; -          lev="1"; -          lev_markup_number="4"; -          lev_collapsed_number="2"; -          node_["object"]["is"]                       = "heading"; -          node_["object"]["obj_cite_number"]          = "0"; -          node_["object"]["segment_anchor_tag"]       = "endnotes"; -          node_["object"]["parent_obj_cite_number"]   = "1"; -          node_["object"]["parent_lev_markup_number"] = "0"; +          node_str_["is"]                       = "heading"; +          node_str_["ocn"]                      = "0"; +          node_str_["segment_anchor_tag"]       = "endnotes"; +          node_str_["attrib"]                   = ""; +          node_str_["marked_up_lev"]            = "1"; +          node_int_["heading_lev_markup"]       = 4; +          node_int_["heading_lev_collapsed"]    = 2; +          node_int_["parent_ocn"]               = 1; +          node_int_["parent_lev_markup"]        = 0;            the_endnotes_section["seg"] ~=              set_abstract_object.contents_heading(                "Endnotes", -              attrib, -              obj_cite_number, +              node_str_, +              node_int_,                ["endnotes"], -              to!string(lev), -              to!int(lev_markup_number), -              to!int(lev_collapsed_number), -              node_,              );            the_endnotes_section["scroll"] ~=              set_abstract_object.contents_heading(                "Endnotes", -              attrib, -              obj_cite_number, +              node_str_, +              node_int_,                ["endnotes"], -              to!string(lev), -              to!int(lev_markup_number), -              to!int(lev_collapsed_number), -              node_,              );            ++obj_cite_number;            ++mkn;          } else { -          node_["object"]["is"]                       = "heading"; -          node_["object"]["obj_cite_number"]          = "0"; -          node_["object"]["segment_anchor_tag"]       = "endnotes"; -          node_["object"]["parent_obj_cite_number"]   = "1"; -          node_["object"]["parent_lev_markup_number"] = "0"; +          node_str_["is"]                       = "heading"; +          node_str_["ocn"]                      = "0"; +          node_str_["segment_anchor_tag"]       = ""; +          node_str_["attrib"]                   = ""; +          node_str_["marked_up_lev"]            = "B"; +          node_int_["heading_lev_markup"]       = 1; +          node_int_["heading_lev_collapsed"]    = 1; +          node_int_["parent_ocn"]               = 1; +          node_int_["parent_lev_markup"]        = 0;            the_endnotes_section["seg"] ~=              set_abstract_object.contents_heading(                "(skip) there are no Endnotes", -              "",                             // attrib, -              0, +              node_str_, +              node_int_,                [""], -              "B", -              1, -              1, -              node_,              );            the_endnotes_section["scroll"] ~=              set_abstract_object.contents_heading(                "(skip) there are no Endnotes", -              "",                             // attrib, -              0, +              node_str_, +              node_int_,                [""], -              "B", -              1, -              1, -              node_,              );          }          if (opt_action_bool["backmatter"] && opt_action_bool["section_endnotes"]) { @@ -3865,12 +3852,11 @@ template SiSUdocAbstraction() {        int lv, lv0, lv1, lv2, lv3, lv4, lv5, lv6, lv7;        int obj_cite_number;        int[string] p_; // p_ parent_ -      string[string][string] _node; -      string[string][string] node_emitter( +      auto node_emitter(          string lev_markup_number,          string segment_anchor_tag,          int    obj_cite_number_, -        long   cntr_, +        int   cntr_,          int    ptr_,          string is_        ) @@ -3896,23 +3882,22 @@ template SiSUdocAbstraction() {            p_["lev_markup_number"] = DocStructMarkupHeading.h_text_1;            p_["obj_cite_number"] = lv4;          } -        auto _node = [ -          "object" : [ -            "is"                         : is_, -            "heading_ptr"                : to!string(ptr_), -            "doc_object_ptr"             : to!string(cntr_), -            "obj_cite_number"            : to!string(obj_cite_number_), -            "segment_anchor_tag"         : to!string(segment_anchor_tag), -            "parent_obj_cite_number"     : to!string(p_["obj_cite_number"]), -            "parent_lev_markup_number"   : to!string(p_["lev_markup_number"]), -          ], -          "heading" : [ -            "html_segnames_ptr"          : "", -            "lev_markup_number"          : "", -            "lev_collapsed_number"       : "", -            // "ancestors"                  : "", -            // "open_headings_to_close"     : "", -          ] +        string[string] _node_str = [ +          "is"                            : is_, +          "ocn"                           : to!string(obj_cite_number_), +          "marked_up_lev"                 : "", +          "segment_anchor_tag"            : to!string(segment_anchor_tag), +          "attrib"                        : "", +        ]; +        int[string] _node_int = [ +          "ocn"                           : obj_cite_number_, +          "ptr_doc_object"                : 0, +          "ptr_html_segnames"             : 0, +          "ptr_heading"                   : 0, +          "heading_lev_markup"            : 0, +          "heading_lev_collapsed"         : 0, +          "parent_ocn"                    : p_["obj_cite_number"], +          "parent_lev_markup"             : p_["lev_markup_number"],          ];          debug(node) {            if (match(lev_markup_number, rgx.levels_numbered_headings)) { @@ -3921,22 +3906,27 @@ template SiSUdocAbstraction() {              writeln("- ", to!string(_node));            }          } -        assert(to!int(_node["object"]["parent_lev_markup_number"]) >= 4); -        assert(to!int(_node["object"]["parent_lev_markup_number"]) <= 7); -        assert(to!int(_node["object"]["parent_obj_cite_number"]) >= 0);      // hmm, perhaps -        return _node; +        assert(_node_int["parent_lev_markup"] >= 4);         // +        assert(_node_int["parent_lev_markup"] <= 7);         // +        assert(_node_int["parent_ocn"] >= 0);      // hmm, perhaps         // +        auto t = tuple( +          _node_str, +          _node_int, +        ); +        return t;        }        invariant() {        } -      string[string][string] node_emitter_heading( +      auto node_emitter_heading( +        string lev,          string lev_markup_number,          string lev_collapsed_number,          string segment_anchor_tag,          int    obj_cite_number_, -        long   cntr_, +        int    cntr_,          int    ptr_,          string is_, -        uint html_segnames_ptr, +        int html_segnames_ptr,        )        in {          auto rgx = Rgx(); @@ -4035,23 +4025,22 @@ template SiSUdocAbstraction() {          default:            break;          } -        auto _node = [ -          "object" : [ -            "is"                         : is_, -            "heading_ptr"                : to!string(ptr_), -            "doc_object_ptr"             : to!string(cntr_), -            "obj_cite_number"            : to!string(obj_cite_number_), -            "segment_anchor_tag"         : to!string(segment_anchor_tag), -            "parent_obj_cite_number"     : to!string(p_["obj_cite_number"]), -            "parent_lev_markup_number"   : to!string(p_["lev_markup_number"]), -          ], -          "heading" : [ -            "html_segnames_ptr"          : ((lev_markup_number == "4") ? (to!string(html_segnames_ptr)) : ""), -            "lev_markup_number"          : to!string(lev_markup_number), -            "lev_collapsed_number"       : to!string(lev_collapsed_number), -            // "ancestors"                  : to!string(ancestors), -            // "open_headings_to_close"     : to!string(open_headings_to_close), -          ] +        string[string] _node_str = [ +          "is"                            : is_, +          "ocn"                           : to!string(obj_cite_number_), +          "marked_up_lev"                 : lev, +          "segment_anchor_tag"            : to!string(segment_anchor_tag), +          "attrib"                        : "", +        ]; +        int[string] _node_int = [ +          "ocn"                           : obj_cite_number_, +          "ptr_doc_object"                : cntr_, +          "ptr_html_segnames"             : ((lev_markup_number == "4") ? html_segnames_ptr : 0), +          "ptr_heading"                   : ptr_, +          "heading_lev_markup"            : (!(lev_markup_number.empty) ? to!int(lev_markup_number) : 0),       // switch to use int if possible +          "heading_lev_collapsed"         : (!(lev_collapsed_number.empty) ? to!int(lev_collapsed_number) : 0), // switch to use int if possible +          "parent_ocn"                    : p_["obj_cite_number"], +          "parent_lev_markup"             : p_["lev_markup_number"],          ];          debug(node) {            if (match(lev_markup_number, rgx.levels_numbered_headings)) { @@ -4063,37 +4052,44 @@ template SiSUdocAbstraction() {              writeln("* ", to!string(_node));            }          } -        assert(to!int(_node["object"]["parent_lev_markup_number"]) <= 7); -        assert(to!int(_node["object"]["parent_obj_cite_number"]) >= 0); +        assert(_node_int["parent_lev_markup"] <= 7); +        assert(_node_int["parent_ocn"] >= 0);          if (match(lev_markup_number, rgx.levels_numbered_headings)) { -          assert(to!int(_node["heading"]["lev_markup_number"]) <= 7); -          assert(to!int(_node["object"]["obj_cite_number"]) >= 0); -          if (to!int(_node["object"]["parent_lev_markup_number"]) > 0) { -            assert(to!int(_node["object"]["parent_lev_markup_number"]) < to!int(_node["heading"]["lev_markup_number"])); -            if (to!int(_node["object"]["obj_cite_number"]) != 0) { -              assert(to!int(_node["object"]["parent_obj_cite_number"]) < to!int(_node["object"]["obj_cite_number"])); +          assert(_node_int["heading_lev_markup"] <= 7);         // issues +          assert(to!int(_node_str["ocn"]) >= 0); +          if (_node_int["parent_lev_markup"] > 0) { +            assert(_node_int["parent_lev_markup"] < _node_int["heading_lev_markup"]); +            if (to!int(_node_str["ocn"]) != 0) { +              assert(_node_int["parent_ocn"] < to!int(_node_str["ocn"]));              }            } -          if (to!int(_node["heading"]["lev_markup_number"]) == 0) { -            assert(to!int(_node["object"]["parent_lev_markup_number"]) == DocStructMarkupHeading.h_sect_A); -          } else if  (to!int(_node["heading"]["lev_markup_number"]) == DocStructMarkupHeading.h_sect_B) { -            assert(to!int(_node["object"]["parent_lev_markup_number"]) == DocStructMarkupHeading.h_sect_A); -          } else if  (to!int(_node["heading"]["lev_markup_number"]) == DocStructMarkupHeading.h_sect_C) { -            assert(to!int(_node["object"]["parent_lev_markup_number"]) == DocStructMarkupHeading.h_sect_B); -          } else if  (to!int(_node["heading"]["lev_markup_number"]) == DocStructMarkupHeading.h_sect_D) { -            assert(to!int(_node["object"]["parent_lev_markup_number"]) == DocStructMarkupHeading.h_sect_C); -          } else if  (to!int(_node["heading"]["lev_markup_number"]) == DocStructMarkupHeading.h_text_1) { -            assert(to!int(_node["object"]["parent_lev_markup_number"]) <= DocStructMarkupHeading.h_sect_D); -          } else if  (to!int(_node["heading"]["lev_markup_number"]) == DocStructMarkupHeading.h_text_2) { -            assert(to!int(_node["object"]["parent_lev_markup_number"]) == DocStructMarkupHeading.h_text_1); -          } else if  (to!int(_node["heading"]["lev_markup_number"]) == DocStructMarkupHeading.h_text_3) { -            assert(to!int(_node["object"]["parent_lev_markup_number"]) == DocStructMarkupHeading.h_text_2); -          } else if  (to!int(_node["heading"]["lev_markup_number"]) == DocStructMarkupHeading.h_text_4) { -            assert(to!int(_node["object"]["parent_lev_markup_number"]) == DocStructMarkupHeading.h_text_3); -          } else if  (to!int(_node["heading"]["lev_markup_number"]) == DocStructMarkupHeading.h_text_5) { +          if (_node_int["heading_lev_markup"] == 0) { +            assert(_node_int["parent_lev_markup"] == DocStructMarkupHeading.h_sect_A); +          } else if  (_node_int["heading_lev_markup"] == DocStructMarkupHeading.h_sect_B) { +            assert(_node_int["parent_lev_markup"] == DocStructMarkupHeading.h_sect_A); +          } else if  (_node_int["heading_lev_markup"] == DocStructMarkupHeading.h_sect_C) { +            assert(_node_int["parent_lev_markup"] == DocStructMarkupHeading.h_sect_B); +          } else if  (_node_int["heading_lev_markup"] == DocStructMarkupHeading.h_sect_D) { +            assert(_node_int["parent_lev_markup"] == DocStructMarkupHeading.h_sect_C); +          } else if  (_node_int["heading_lev_markup"] == DocStructMarkupHeading.h_text_1) { +            assert(_node_int["parent_lev_markup"] <= DocStructMarkupHeading.h_sect_D); +          } else if  (_node_int["heading_lev_markup"] == DocStructMarkupHeading.h_text_2) { +            assert(_node_int["parent_lev_markup"] == DocStructMarkupHeading.h_text_1); +          } else if  (_node_int["heading_lev_markup"] == DocStructMarkupHeading.h_text_3) { +            assert(_node_int["parent_lev_markup"] == DocStructMarkupHeading.h_text_2); +          } else if  (_node_int["heading_lev_markup"] == DocStructMarkupHeading.h_text_4) { +            assert(_node_int["parent_lev_markup"] == DocStructMarkupHeading.h_text_3); +          } else if  (_node_int["heading_lev_markup"] == DocStructMarkupHeading.h_text_5) { +            // // writeln(to!int(_node_int["parent_lev_markup"])); +            // // assert(to!int(_node_int["parent_lev_markup"]) >= 4); +            // // assert(to!int(_node_int["parent_lev_markup"]) <= 7);            }          } -        return _node; +        auto t = tuple( +          _node_str, +          _node_int, +        ); +        return t;        }        invariant() {        } diff --git a/src/sdp/ao_defaults.d b/src/sdp/ao_defaults.d index 4408cc8..4883540 100644 --- a/src/sdp/ao_defaults.d +++ b/src/sdp/ao_defaults.d @@ -351,26 +351,28 @@ template SiSUrgxInitFlags() {    }  }  template SiSUnode() { -  string[string][string] node_metadata() { -    auto node_ = [ -      "object" : [ -        "is"                         : "", -        "heading_ptr"                : "", -        "doc_object_ptr"             : "", -        "obj_cite_number"            : "", -        "segment_anchor_tag"         : "", -        "parent_obj_cite_number"     : "", -        "parent_lev_markup_number"   : "", -      ], -      "heading" : [ -        "html_segnames_ptr"          : "", -        "lev_markup_number"          : "", -        "lev_collapsed_number"       : "", -      //   "ancestors"                  : "", -      //   "open_headings_to_close"     : "", -      ], +  string[string] node_metadata_str() { +    auto _node = [ +        "is"                            : "", +        "ocn"                           : "", +        "marked_up_lev"                 : "", +        "segment_anchor_tag"            : "", +        "attrib"                        : "", +    ]; +    return _node; +  } +  int[string] node_metadata_int() { +    auto _node = [ +        "ocn"                           : 0, // decide whether to use or keep? +        "ptr_doc_object"                : 0, +        "ptr_html_segnames"             : 0, +        "ptr_heading"                   : 0, +        "heading_lev_markup"            : 9, +        "heading_lev_collapsed"         : 9, +        "parent_ocn"                    : 0, +        "parent_lev_markup"             : 9,      ]; -    return node_; +    return _node;    }  }  template SiSUbiblio() { diff --git a/src/sdp/ao_object_setter.d b/src/sdp/ao_object_setter.d index c293eb0..8ec51fd 100644 --- a/src/sdp/ao_object_setter.d +++ b/src/sdp/ao_object_setter.d @@ -71,25 +71,21 @@ template ObjectSetter() {        return object_set;      }      auto contents_heading( -      in string object, -      in string attrib, -      in int obj_cite_number, -      in string[] tags, -      in string lev, -      in int lev_int_markup, -      in int lev_int_collapsed, -      in string[string][string] _node, +      in string         object, +      in string[string] _node_str, +      in int[string]    _node_int, +      in string[]       tags,      ) {        ObjComposite object_set;        object_set.use                                 = "content";        object_set.of                                  = "para";        object_set.is_a                                = "heading";        object_set.object                              = object; -      object_set.obj_cite_number                     = (obj_cite_number==0) ? "" : to!string(obj_cite_number); +      object_set.obj_cite_number                     = _node_str["ocn"];        object_set.anchor_tags                         ~= tags; -      object_set.heading_attrib.lev                  = lev; -      object_set.heading_attrib.lev_int_markup       = lev_int_markup; -      object_set.heading_attrib.lev_int_collapsed    = lev_int_collapsed; +      object_set.heading_attrib.lev                  = _node_str["marked_up_lev"]; +      object_set.heading_attrib.lev_int_markup       = _node_int["heading_lev_markup"]; +      object_set.heading_attrib.lev_int_collapsed    = _node_int["heading_lev_collapsed"];        return object_set;      }      auto contents_para( @@ -109,7 +105,6 @@ template ObjectSetter() {        object_set.para_attrib.indent_start = to!int(indent["hang_position"]);        object_set.para_attrib.indent_rest  = to!int(indent["base_position"]);        object_set.para_attrib.bullet       = false; // bullet; -      // object_set.node_structure.node   = _node;        return object_set;      }      auto contents_toc( @@ -162,7 +157,6 @@ template ObjectSetter() {        object_set.is_a                = type;        object_set.object              = object;        object_set.obj_cite_number     = (obj_cite_number==0) ? "" : to!string(obj_cite_number); -      // object_set.node_structure.node               = _node;        return object_set;      }      auto contents_block_code( @@ -178,14 +172,14 @@ template ObjectSetter() {        object_set.block_attrib.syntax = attrib_language_syntax;        object_set.object              = object;        object_set.obj_cite_number     = (obj_cite_number==0) ? "" : to!string(obj_cite_number); -      // object_set.node_structure.node               = _node;        return object_set;      }      auto contents_block_obj_cite_number_string( -      in string type, -      in string object, -      in string obj_cite_number, -      in string[string][string] _node +      in string         type, +      in string         object, +      in string         obj_cite_number, +      in string[string] _node_str, +      in int[string]    _node_int,      ) {        ObjComposite object_set;        object_set.use                               = "content"; @@ -193,7 +187,6 @@ template ObjectSetter() {        object_set.is_a                              = type;        object_set.object                            = object;        object_set.obj_cite_number                   = obj_cite_number; -      object_set.node_structure.node               = _node;        return object_set;      }    } diff --git a/views/version.txt b/views/version.txt index 22af559..4f49ef6 100644 --- a/views/version.txt +++ b/views/version.txt @@ -4,4 +4,4 @@ struct Version {    int minor;    int patch;  } -enum ver = Version(0, 9, 3); +enum ver = Version(0, 9, 4); | 
