From db683b9403998ea66cb982d28a3c365eb99ec2e1 Mon Sep 17 00:00:00 2001
From: Ralph Amissah <ralph@amissah.com>
Date: Mon, 5 Dec 2016 12:09:04 -0500
Subject: 0.9.4 node info, changes to variables & types

---
 org/ao_abstract_doc_source.org   | 799 +++++++++++++++++++--------------------
 org/ao_defaults.org              |  40 +-
 org/sdp.org                      |   2 +-
 src/sdp/ao_abstract_doc_source.d | 762 +++++++++++++++++++------------------
 src/sdp/ao_defaults.d            |  40 +-
 src/sdp/ao_object_setter.d       |  33 +-
 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);
-- 
cgit v1.2.3