diff options
| author | Ralph Amissah <ralph@amissah.com> | 2016-12-11 11:17:06 -0500 | 
|---|---|---|
| committer | Ralph Amissah <ralph@amissah.com> | 2019-04-10 15:14:13 -0400 | 
| commit | 762439ade3de42d2043fafc0005b255c6c58ba49 (patch) | |
| tree | 9d1c66d345bffd1b15002265e73c97c1fc92c70d | |
| parent | 0.9.6 node info, and output continued (diff) | |
0.10.0 generic object (ObjGenericComposite), removed "object_set"
| -rw-r--r-- | org/ao_abstract_doc_source.org | 1851 | ||||
| -rw-r--r-- | org/ao_conf_make_meta.org | 2 | ||||
| -rw-r--r-- | org/ao_defaults.org | 2 | ||||
| -rw-r--r-- | org/ao_output_debugs.org | 77 | ||||
| -rw-r--r-- | org/ao_read_source_files.org | 54 | ||||
| -rw-r--r-- | org/compile_time_info.org | 2 | ||||
| -rw-r--r-- | org/output.org | 34 | ||||
| -rw-r--r-- | org/sdp.org | 26 | ||||
| -rwxr-xr-x | src/sdp.d | 22 | ||||
| -rw-r--r-- | src/sdp/ao_abstract_doc_source.d | 1554 | ||||
| -rw-r--r-- | src/sdp/ao_object_setter.d | 219 | ||||
| -rw-r--r-- | src/sdp/ao_output_debugs.d | 75 | ||||
| -rw-r--r-- | src/sdp/output_html.d | 32 | ||||
| -rw-r--r-- | views/version.txt | 2 | 
14 files changed, 1514 insertions, 2438 deletions
| diff --git a/org/ao_abstract_doc_source.org b/org/ao_abstract_doc_source.org index 4292328..c11193c 100644 --- a/org/ao_abstract_doc_source.org +++ b/org/ao_abstract_doc_source.org @@ -13,7 +13,7 @@  #+TAGS: assert(a) class(c) debug(d) mixin(m) sdp(s) tangle(T) template(t) WEB(W) noexport(n)  [[./sdp.org][sdp]]  [[./][org/]] -* 0. Code Outline / Structure (tangles)                      :tangle:io:file: +* 0. Code Skeleton / Outline / Structure (tangles)           :tangle:io:file:  ** 1. ao abstract doc source:                         :ao_abstract_doc_source.d:  #+BEGIN_SRC d :tangle ../src/sdp/ao_abstract_doc_source.d @@ -139,17 +139,6 @@ template SiSUdocAbstraction() {  template ObjectSetter() {    /+ structs +/    <<ao_structs_init>> -  /+ structs setter +/ -  struct ObjectAbstractSet { -    import std.conv : to; -    <<ao_object_setter_comment>> -    <<ao_object_setter_heading>> -    <<ao_object_setter_para>> -    <<ao_object_setter_endnote>> -    <<ao_object_setter_block>> -    <<ao_object_setter_block_code>> -    <<ao_object_setter_block_obj_cite_number_string>> -  }  }  #+END_SRC @@ -183,13 +172,12 @@ mixin InternalMarkup;  #+BEGIN_SRC d  /+ initialize +/  auto rgx = Rgx(); -ObjComposite[][string] the_table_of_contents_section; -ObjComposite[] the_document_head_section, the_document_body_section, the_bibliography_section, the_glossary_section, the_blurb_section; +ObjGenericComposite[][string] the_table_of_contents_section; +ObjGenericComposite[] the_document_head_section, the_document_body_section, the_bibliography_section, the_glossary_section, the_blurb_section;  string[string] an_object, processing;  string an_object_key;  string[] anchor_tags;  string segment_anchor_tag_that_object_belongs_to; -auto set_abstract_object = ObjectAbstractSet();  auto note_section = NotesSection();  /+ enum +/  enum State { off, on } @@ -238,13 +226,12 @@ string[][string][string] bookindex_unordered_hashes;  auto bookindex_extract_hash = BookIndexNuggetHash();  string[][string][string] bkidx_hash(    string bookindex_section, -  int obj_cite_number +  int    obj_cite_number  ) {    return bookindex_extract_hash.bookindex_nugget_hash(bookindex_section, obj_cite_number);  }  /+ node +/ -string[string] _node_heading_str; -int[string]    _node_heading_int; +ObjGenericComposite comp_obj_heading, comp_obj_location, comp_obj_block, comp_obj_code, comp_obj_poem_ocn, comp_obj_comment;  auto node_construct = NodeStructureMetadata();  #+END_SRC @@ -271,10 +258,9 @@ scope(exit) {  #+name: abs_init_rest  #+BEGIN_SRC d -auto node_heading_int_ = node_metadata_heading_int; -auto node_heading_str_ = node_metadata_heading_str;  auto node_para_int_    = node_metadata_para_int;  auto node_para_str_    = node_metadata_para_str; +ObjGenericComposite comp_obj_heading_, comp_obj_para, comp_obj_toc;  line_occur = [    "heading"  : 0,    "para"     : 0, @@ -332,22 +318,20 @@ string _anchor_tag;  string toc_txt_;  an_object["glossary_nugget"] = "";  an_object["blurb_nugget"] = ""; -node_heading_str_["is"]                           = "heading"; -node_heading_str_["ocn"]                          = "0"; -node_heading_str_["segment_anchor_tag"]           = "toc"; -node_heading_str_["attrib"]                       = ""; -node_heading_str_["marked_up_lev"]                = "1"; -node_heading_int_["heading_lev_markup"]           = 4; -node_heading_int_["heading_lev_collapsed"]        = 2; -node_heading_int_["parent_ocn"]                   = 1; -node_heading_int_["parent_lev_markup"]            = 0; -auto toc_head = -  set_abstract_object.contents_heading( -    "Table of Contents", // nugget/object -    node_heading_str_, -    node_heading_int_, -    ["toc"],             // anchor tag -  ); +comp_obj_heading_                       = comp_obj_heading_.init; +comp_obj_heading_.use                   = "content"; +comp_obj_heading_.of                    = "para"; +comp_obj_heading_.is_a                  = "heading"; +comp_obj_heading_.text                  = "Table of Contents"; +comp_obj_heading_.ocn                   = 0; +comp_obj_heading_.segment_anchor_tag    = "toc"; +comp_obj_heading_.marked_up_level       = "1"; +comp_obj_heading_.heading_lev_markup    = 4; +comp_obj_heading_.heading_lev_collapsed = 2; +comp_obj_heading_.parent_ocn            = 1; +comp_obj_heading_.parent_lev_markup     = 0; +comp_obj_heading_.anchor_tags           = ["toc"]; +auto toc_head                       = comp_obj_heading_;  the_table_of_contents_section = [    "seg": [toc_head],    "scroll": [toc_head], @@ -468,54 +452,47 @@ 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_heading_str_["is"]                       = "heading"; -      node_heading_str_["ocn"]                      = "0"; -      node_heading_str_["segment_anchor_tag"]       = ""; -      node_heading_str_["attrib"]                   = ""; -      node_heading_str_["marked_up_lev"]            = "B"; -      node_heading_int_["heading_lev_markup"]       = 1; -      node_heading_int_["heading_lev_collapsed"]    = 1; -      node_heading_int_["parent_ocn"]               = 1; -      node_heading_int_["parent_lev_markup"]        = 0; -      the_glossary_section ~= -        set_abstract_object.contents_heading( -          "Glossary",       // nugget/object -          node_heading_str_, -          node_heading_int_, -          [""],             // anchor tag -        ); -      node_heading_str_["is"]                       = "heading"; -      node_heading_str_["ocn"]                      = "0"; -      node_heading_str_["segment_anchor_tag"]       = "glossary"; -      node_heading_str_["attrib"]                   = ""; -      node_heading_str_["marked_up_lev"]            = "1"; -      node_heading_int_["heading_lev_markup"]       = 4; -      node_heading_int_["heading_lev_collapsed"]    = 2; -      node_heading_int_["parent_ocn"]               = 1; -      node_heading_int_["parent_lev_markup"]        = 0; -      the_glossary_section ~= -        set_abstract_object.contents_heading( -          "Glossary",       // nugget/object -          node_heading_str_, -          node_heading_int_, -          ["glossary"],     // anchor tag -        ); +      comp_obj_heading_                       = comp_obj_heading_.init; +      comp_obj_heading_.use                   = "content"; +      comp_obj_heading_.of                    = "para"; +      comp_obj_heading_.is_a                  = "heading"; +      comp_obj_heading_.text                  = "Glossary"; +      comp_obj_heading_.ocn                   = 0; +      comp_obj_heading_.marked_up_level       = "B"; +      comp_obj_heading_.heading_lev_markup    = 1; +      comp_obj_heading_.heading_lev_collapsed = 1; +      comp_obj_heading_.parent_ocn            = 1; +      comp_obj_heading_.parent_lev_markup     = 0; +      the_glossary_section                    ~= comp_obj_heading_; +      comp_obj_heading_                       = comp_obj_heading_.init; +      comp_obj_heading_.use                   = "content"; +      comp_obj_heading_.of                    = "para"; +      comp_obj_heading_.is_a                  = "heading"; +      comp_obj_heading_.text                  = "Glossary"; +      comp_obj_heading_.ocn                   = 0; +      comp_obj_heading_.segment_anchor_tag    = "glossary"; +      comp_obj_heading_.marked_up_level       = "1"; +      comp_obj_heading_.heading_lev_markup    = 4; +      comp_obj_heading_.heading_lev_collapsed = 2; +      comp_obj_heading_.parent_ocn            = 1; +      comp_obj_heading_.parent_lev_markup     = 0; +      comp_obj_heading_.anchor_tags           = ["glossary"]; +      the_glossary_section                ~= comp_obj_heading_;      // } else if (matchFirst(line, rgx.heading)) {      //   _heading_matched_(line, line_occur, an_object, an_object_key, lv, collapsed_lev, type, dochead_meta_aa); // levels?      } else {        _para_match_(line, an_object, an_object_key, indent, bullet, type, line_occur); -      node_para_str_["is"]                           = "para"; -      node_para_str_["attrib"]                       = ""; -      node_para_int_["ocn"]                          = 0; -      node_para_int_["indent_hang"]                  = indent["hang_position"]; -      node_para_int_["indent_base"]                  = indent["base_position"]; -      node_para_int_["bullet"]                       = (bullet) ? 1 : 0; -      the_glossary_section ~= -        set_abstract_object.contents_para( -          to!string(line),           // an_object["substantive"], -          node_para_str_, -          node_para_int_, -        ); +      comp_obj_para                       = comp_obj_para.init; +      comp_obj_para.use                   = "content"; +      comp_obj_para.of                    = "para"; +      comp_obj_para.is_a                  = "para"; +      comp_obj_para.text                  = to!string(line).strip; +      comp_obj_para.ocn                   = 0; +      comp_obj_para.obj_cite_number       = "0"; +      comp_obj_para.indent_hang           = indent["hang_position"]; +      comp_obj_para.indent_base           = indent["base_position"]; +      comp_obj_para.bullet                = bullet; +      the_glossary_section                ~= comp_obj_para;      }      type["ocn_status"] = TriState.off;    } @@ -557,71 +534,60 @@ 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_heading_str_["is"]                       = "heading"; -      node_heading_str_["ocn"]                      = "0"; -      node_heading_str_["segment_anchor_tag"]       = ""; -      node_heading_str_["attrib"]                   = ""; -      node_heading_str_["marked_up_lev"]            = "B"; -      node_heading_int_["heading_lev_markup"]       = 1; -      node_heading_int_["heading_lev_collapsed"]    = 1; -      node_heading_int_["parent_ocn"]               = 1; -      node_heading_int_["parent_lev_markup"]        = 0; -      the_blurb_section ~= -        set_abstract_object.contents_heading( -          "Blurb",          // nugget/object -          node_heading_str_, -          node_heading_int_, -          [""],             // anchor tag -        ); -      node_heading_str_["is"]                       = "heading"; -      node_heading_str_["ocn"]                      = "0"; -      node_heading_str_["segment_anchor_tag"]       = "blurb"; -      node_heading_str_["attrib"]                   = ""; -      node_heading_str_["marked_up_lev"]            = "1"; -      node_heading_int_["heading_lev_markup"]       = 4; -      node_heading_int_["heading_lev_collapsed"]    = 2; -      node_heading_int_["parent_ocn"]               = 1; -      node_heading_int_["parent_lev_markup"]        = 0; -      the_blurb_section ~= -        set_abstract_object.contents_heading( -          "Blurb",          // nugget/object -          node_heading_str_, -          node_heading_int_, -          ["blurb"],        // anchor tag -        ); +      comp_obj_heading_                       = comp_obj_heading_.init; +      comp_obj_heading_.use                   = "content"; +      comp_obj_heading_.of                    = "para"; +      comp_obj_heading_.is_a                  = "heading"; +      comp_obj_heading_.text                  = "Blurb"; +      comp_obj_heading_.ocn                   = 0; +      comp_obj_heading_.marked_up_level       = "B"; +      comp_obj_heading_.heading_lev_markup    = 1; +      comp_obj_heading_.heading_lev_collapsed = 1; +      comp_obj_heading_.parent_ocn            = 1; +      comp_obj_heading_.parent_lev_markup     = 0; +      the_blurb_section                       ~= comp_obj_heading_; +      comp_obj_heading_                       = comp_obj_heading_.init; +      comp_obj_heading_.use                   = "content"; +      comp_obj_heading_.of                    = "para"; +      comp_obj_heading_.is_a                  = "heading"; +      comp_obj_heading_.text                  = "Blurb"; +      comp_obj_heading_.ocn                   = 0; +      comp_obj_heading_.segment_anchor_tag    = "blurb"; +      comp_obj_heading_.marked_up_level       = "1"; +      comp_obj_heading_.heading_lev_markup    = 4; +      comp_obj_heading_.heading_lev_collapsed = 2; +      comp_obj_heading_.parent_ocn            = 1; +      comp_obj_heading_.parent_lev_markup     = 0; +      comp_obj_heading_.anchor_tags           = ["blurb"]; +      the_blurb_section                       ~= comp_obj_heading_;      } 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_heading_str_["is"]                       = "heading"; -      node_heading_str_["ocn"]                      = "0"; -      node_heading_str_["segment_anchor_tag"]       = "blurb"; -      node_heading_str_["attrib"]                   = ""; -      node_heading_str_["marked_up_lev"]            = to!string(an_object["lev"]); -      node_heading_int_["heading_lev_markup"]       = to!int(an_object["lev_markup_number"]);    // make int, remove need to conv -      node_heading_int_["heading_lev_collapsed"]    = to!int(an_object["lev_collapsed_number"]); // make int, remove need to conv -      node_heading_int_["parent_ocn"]               = 1; -      node_heading_int_["parent_lev_markup"]        = 0; -      the_blurb_section ~= -        set_abstract_object.contents_heading( -          to!string(line),           //  an_object["substantive"], -          node_heading_str_, -          node_heading_int_, -          [""],                      // anchor tag -        ); +      comp_obj_heading_                       = comp_obj_heading_.init; +      comp_obj_heading_.use                   = "content"; +      comp_obj_heading_.of                    = "para"; +      comp_obj_heading_.is_a                  = "heading"; +      comp_obj_heading_.text                  = to!string(line); +      comp_obj_heading_.ocn                   = 0; +      comp_obj_heading_.segment_anchor_tag    = "blurb"; +      comp_obj_heading_.marked_up_level       = to!string(an_object["lev"]); +      comp_obj_heading_.heading_lev_markup    = to!int(an_object["lev_markup_number"]);    // make int, remove need to conv +      comp_obj_heading_.heading_lev_collapsed = to!int(an_object["lev_collapsed_number"]); // make int, remove need to conv +      comp_obj_heading_.parent_ocn            = 1; +      comp_obj_heading_.parent_lev_markup     = 0; +      the_blurb_section                   ~= comp_obj_heading_;      } else {        _para_match_(line, an_object, an_object_key, indent, bullet, type, line_occur); -      node_para_str_["is"]                           = "para"; -      node_para_str_["attrib"]                       = ""; -      node_para_int_["ocn"]                          = obj_cite_number; -      node_para_int_["indent_hang"]                  = indent["hang_position"]; -      node_para_int_["indent_base"]                  = indent["base_position"]; -      node_para_int_["bullet"]                       = (bullet) ? 1 : 0; -      the_blurb_section ~= -        set_abstract_object.contents_para( -          to!string(line),           //  an_object["substantive"], -          node_para_str_, -          node_para_int_, -        ); +      comp_obj_para                       = comp_obj_para.init; +      comp_obj_para.use                   = "content"; +      comp_obj_para.of                    = "para"; +      comp_obj_para.is_a                  = "para"; +      comp_obj_para.text                  = to!string(line).strip; +      comp_obj_para.ocn                   = obj_cite_number; +      comp_obj_para.obj_cite_number       = to!string(obj_cite_number); +      comp_obj_para.indent_hang           = indent["hang_position"]; +      comp_obj_para.indent_base           = indent["base_position"]; +      comp_obj_para.bullet                = bullet; +      the_blurb_section                   ~= comp_obj_para;      }      type["ocn_status"] = TriState.off;    } @@ -766,8 +732,12 @@ if ((matchFirst(line, rgx.book_index))        writeln(line);      }      an_object[an_object_key] ~= line ~= "\n"; -    the_document_body_section ~= -      set_abstract_object.contents_comment(strip(an_object[an_object_key])); +    comp_obj_comment                   = comp_obj_comment.init; +    comp_obj_comment.use               = "comment"; +    comp_obj_comment.of                = "comment"; +    comp_obj_comment.is_a              = "comment"; +    comp_obj_comment.text              = an_object[an_object_key].strip; +    the_document_body_section          ~= comp_obj_comment;      _common_reset_(line_occur, an_object, type);      processing.remove("verse");      ++cntr; @@ -850,13 +820,12 @@ _block_flag_line_empty_(    the_document_body_section,    bookindex_unordered_hashes,    obj_cite_number, -  _node_heading_str, -  _node_heading_int, +  comp_obj_heading,    cntr,    type,    obj_cite_number_poem,    dochead_make_aa -); // watch +);  #+END_SRC  ****** line empty [+1] @@ -911,8 +880,9 @@ if ((type["heading"] == State.on)      html_segnames_ptr = html_segnames_ptr_cntr;      html_segnames_ptr_cntr++;    } -  auto _node_t = +  auto comp_obj_heading =      node_construct.node_emitter_heading( +      an_object["substantive"],                     // string        an_object["lev"],                             // string        an_object["lev_markup_number"],               // string        an_object["lev_collapsed_number"],            // string @@ -923,22 +893,12 @@ if ((type["heading"] == State.on)        an_object["is"],                              // string        html_segnames_ptr,                            // int      ); -   _node_heading_str = _node_t[0]; -   _node_heading_int = _node_t[1]; -  an_object["attrib"] = -    obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node_heading_str, _node_heading_int);    ++heading_ptr;    debug(segments) {      writeln(an_object["lev_markup_number"]);      writeln(segment_anchor_tag_that_object_belongs_to);    } -  the_document_body_section ~= -    set_abstract_object.contents_heading( -      an_object["substantive"], -      _node_heading_str, -      _node_heading_int, -      anchor_tags, -    ); +  the_document_body_section ~= comp_obj_heading;    // track previous heading and make assertions    debug(objectrelated1) { // check      writeln(line); @@ -962,8 +922,8 @@ if ((type["heading"] == State.on)    bookindex_unordered_hashes =      bkidx_hash(an_object["bookindex_nugget"], obj_cite_number);    an_object["is"] = "para"; -  auto _node_t = -    node_construct.node_emitter( +  auto comp_obj_heading = +    node_construct.node_location_emitter(        content_non_header,        segment_anchor_tag_that_object_belongs_to,        obj_cite_number, @@ -971,26 +931,22 @@ if ((type["heading"] == State.on)        heading_ptr-1,        an_object["is"],      ); -  _node_heading_str = _node_t[0]; -  _node_heading_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_heading_str, _node_heading_int); -  node_para_str_["is"]                           = an_object["is"]; -  node_para_str_["attrib"]                       = an_object["attrib"]; -  node_para_int_["ocn"]                          = obj_cite_number; -  node_para_int_["indent_hang"]                  = indent["hang_position"]; -  node_para_int_["indent_base"]                  = indent["base_position"]; -  node_para_int_["bullet"]                       = (bullet) ? 1 : 0; -  the_document_body_section ~= -    set_abstract_object.contents_para( -      an_object["substantive"], -      node_para_str_, -      node_para_int_, -    ); +  comp_obj_para                       = comp_obj_para.init; +  comp_obj_para.use                   = "content"; +  comp_obj_para.of                    = "para"; +  comp_obj_para.is_a                  = "para"; +  comp_obj_para.text                  = to!string(an_object["substantive"]).strip; +  comp_obj_para.ocn                   = obj_cite_number; +  comp_obj_para.obj_cite_number       = to!string(obj_cite_number); +  comp_obj_para.indent_hang           = indent["hang_position"]; +  comp_obj_para.indent_base           = indent["base_position"]; +  comp_obj_para.bullet                = bullet; +  comp_obj_para.anchor_tags           = anchor_tags; +  the_document_body_section           ~= comp_obj_para;    _common_reset_(line_occur, an_object, type);    indent=[      "hang_position" : 0, @@ -1022,14 +978,14 @@ if (the_document_body_section.length > 0) {    && (the_document_body_section.length > previous_length)  ) {      if ((the_document_body_section[$-1].is_a == "heading") -    && (the_document_body_section[$-1].heading_attrib.lev_int_markup < 5)) { +    && (the_document_body_section[$-1].heading_lev_markup < 5)) {        type["biblio_section"] = State.off;        type["glossary_section"] = State.off;        type["blurb_section"] = State.off;      }      previous_length = to!int(the_document_body_section.length);      if ( -      match(the_document_body_section[$-1].object, +      match(the_document_body_section[$-1].text,        rgx.inline_notes_delimiter_al_regular_number_note)      ) {        previous_count=to!int(the_document_body_section.length -1); @@ -1091,28 +1047,24 @@ debug(endnotes) {  #+BEGIN_SRC d  if (an_object["glossary_nugget"].length == 0) {    writeln("no gloss"); -  node_heading_str_["is"]                       = "heading"; -  node_heading_str_["ocn"]                      = "0"; -  node_heading_str_["segment_anchor_tag"]       = ""; -  node_heading_str_["attrib"]                   = ""; -  node_heading_str_["marked_up_lev"]            = "B"; -  node_heading_int_["heading_lev_markup"]       = 1; -  node_heading_int_["heading_lev_collapsed"]    = 1; -  node_heading_int_["parent_ocn"]               = 1; -  node_heading_int_["parent_lev_markup"]        = 0; -  the_glossary_section ~= -    set_abstract_object.contents_heading( -      "(skip) there is no Glossary section",   // nugget/object -      node_heading_str_, -      node_heading_int_, -      [""],             // anchor tag -    ); +  comp_obj_heading_                       = comp_obj_heading_.init; +  comp_obj_heading_.use                   = "content"; +  comp_obj_heading_.of                    = "para"; +  comp_obj_heading_.is_a                  = "heading"; +  comp_obj_heading_.text                  = "(skip) there is no Glossary section"; +  comp_obj_heading_.ocn                   = 0; +  comp_obj_heading_.marked_up_level       = "B"; +  comp_obj_heading_.heading_lev_markup    = 1; +  comp_obj_heading_.heading_lev_collapsed = 1; +  comp_obj_heading_.parent_ocn            = 1; +  comp_obj_heading_.parent_lev_markup     = 0; +  the_glossary_section                ~= comp_obj_heading_;  } else {    writeln("gloss");  }  debug(glossary) {    foreach (gloss; the_glossary_section) { -    writeln(gloss.object); +    writeln(gloss.text);    }  }  #+END_SRC @@ -1131,55 +1083,46 @@ auto biblio_ordered =  #+name: abs_post  #+BEGIN_SRC d  if (biblio_ordered.length > 0) { -  node_heading_str_["is"]                       = "heading"; -  node_heading_str_["ocn"]                      = "0"; -  node_heading_str_["segment_anchor_tag"]       = ""; -  node_heading_str_["attrib"]                   = ""; -  node_heading_str_["marked_up_lev"]            = "B"; -  node_heading_int_["heading_lev_markup"]       = 1; -  node_heading_int_["heading_lev_collapsed"]    = 1; -  node_heading_int_["parent_ocn"]               = 1; -  node_heading_int_["parent_lev_markup"]        = 0; -  the_bibliography_section ~= -    set_abstract_object.contents_heading( -      "Bibliography",   // nugget/object -      node_heading_str_, -      node_heading_int_, -      [""],             // anchor tag -    ); -  node_heading_str_["is"]                       = "heading"; -  node_heading_str_["ocn"]                      = "0"; -  node_heading_str_["segment_anchor_tag"]       = "bibliography"; -  node_heading_str_["attrib"]                   = ""; -  node_heading_str_["marked_up_lev"]            = "1"; -  node_heading_int_["heading_lev_markup"]       = 4; -  node_heading_int_["heading_lev_collapsed"]    = 2; -  node_heading_int_["parent_ocn"]               = 1; -  node_heading_int_["parent_lev_markup"]        = 0; -  the_bibliography_section ~= -    set_abstract_object.contents_heading( -      "Bibliography", -      node_heading_str_, -      node_heading_int_, -      ["bibliography"], // anchor tag -    ); +  comp_obj_heading_                       = comp_obj_heading_.init; +  comp_obj_heading_.use                   = "content"; +  comp_obj_heading_.of                    = "para"; +  comp_obj_heading_.is_a                  = "heading"; +  comp_obj_heading_.text                  = "Bibliography"; +  comp_obj_heading_.ocn                   = 0; +  comp_obj_heading_.marked_up_level       = "B"; +  comp_obj_heading_.heading_lev_markup    = 1; +  comp_obj_heading_.heading_lev_collapsed = 1; +  comp_obj_heading_.parent_ocn            = 1; +  comp_obj_heading_.parent_lev_markup     = 0; +  the_bibliography_section                ~= comp_obj_heading_; +  // --- +  comp_obj_heading_                       = comp_obj_heading_.init; +  comp_obj_heading_.use                   = "content"; +  comp_obj_heading_.of                    = "para"; +  comp_obj_heading_.is_a                  = "heading"; +  comp_obj_heading_.text                  = "Bibliography"; +  comp_obj_heading_.ocn                   = 0; +  comp_obj_heading_.segment_anchor_tag    = "bibliography"; +  comp_obj_heading_.marked_up_level       = "1"; +  comp_obj_heading_.heading_lev_markup    = 4; +  comp_obj_heading_.heading_lev_collapsed = 2; +  comp_obj_heading_.parent_ocn            = 1; +  comp_obj_heading_.parent_lev_markup     = 0; +  comp_obj_heading_.anchor_tags           = ["bibliography"]; +  the_bibliography_section                ~= comp_obj_heading_;  } else { -  node_heading_str_["is"]                       = "heading"; -  node_heading_str_["ocn"]                      = "0"; -  node_heading_str_["segment_anchor_tag"]       = ""; -  node_heading_str_["attrib"]                   = ""; -  node_heading_str_["marked_up_lev"]            = "B"; -  node_heading_int_["heading_lev_markup"]       = 1; -  node_heading_int_["heading_lev_collapsed"]    = 1; -  node_heading_int_["parent_ocn"]               = 1; -  node_heading_int_["parent_lev_markup"]        = 0; -  the_bibliography_section ~= -    set_abstract_object.contents_heading( -      "(skip) there is no Bibliography",   // nugget/object -      node_heading_str_, -      node_heading_int_, -      [""],             // anchor tag -    ); +  comp_obj_heading_                       = comp_obj_heading_.init; +  comp_obj_heading_.use                   = "content"; +  comp_obj_heading_.of                    = "para"; +  comp_obj_heading_.is_a                  = "heading"; +  comp_obj_heading_.text                  = "(skip) there is no Bibliography"; +  comp_obj_heading_.ocn                   = 0; +  comp_obj_heading_.marked_up_level       = "B"; +  comp_obj_heading_.heading_lev_markup    = 1; +  comp_obj_heading_.heading_lev_collapsed = 1; +  comp_obj_heading_.parent_ocn            = 1; +  comp_obj_heading_.parent_lev_markup     = 0; +  the_bibliography_section                ~= comp_obj_heading_;  }  #+END_SRC @@ -1203,18 +1146,18 @@ foreach (entry; biblio_ordered) {      ((entry["place"].str.empty) ? "" : ", " ~ entry["place"].str),      ((entry["url"].str.empty) ? "" : ", [" ~ entry["url"].str ~ "]"),    ); -  node_para_str_["is"]                           = "bibliography"; -  node_para_str_["attrib"]                       = ""; -  node_para_int_["ocn"]                          = 0; -  node_para_int_["indent_hang"]                  = 0; -  node_para_int_["indent_base"]                  = 1; -  node_para_int_["bullet"]                       = 0; -  the_bibliography_section ~= -    set_abstract_object.contents_para( -      out_,                                                // nugget/object -      node_para_str_, -      node_para_int_, -    ); +  comp_obj_para                       = comp_obj_para.init; +  comp_obj_para.use                   = "content"; +  comp_obj_para.of                    = "para"; +  comp_obj_para.is_a                  = "bibliography"; +  comp_obj_para.text                  = to!string(out_).strip; +  comp_obj_para.ocn                   = 0; +  comp_obj_para.obj_cite_number       = "0"; +  comp_obj_para.indent_hang           = 0; +  comp_obj_para.indent_base           = 1; +  comp_obj_para.bullet                = bullet; +  comp_obj_para.anchor_tags           = anchor_tags; +  the_bibliography_section            ~= comp_obj_para;  }  #+END_SRC @@ -1222,7 +1165,7 @@ foreach (entry; biblio_ordered) {  #+BEGIN_SRC d  debug(bibliosection) {    foreach (o; the_bibliography_section) { -    writeln(o.object); +    writeln(o.text);    }  }  #+END_SRC @@ -1287,28 +1230,25 @@ debug(bookindex) {                         // bookindex  #+BEGIN_SRC d  if (an_object["blurb_nugget"].length == 0) {    writeln("no blurb"); -  node_heading_str_["is"]                       = "heading"; -  node_heading_str_["ocn"]                      = "0"; -  node_heading_str_["segment_anchor_tag"]       = ""; -  node_heading_str_["attrib"]                   = ""; -  node_heading_str_["marked_up_lev"]            = "B"; -  node_heading_int_["heading_lev_markup"]       = 1; -  node_heading_int_["heading_lev_collapsed"]    = 1; -  node_heading_int_["parent_ocn"]               = 1; -  node_heading_int_["parent_lev_markup"]        = 0; -  the_blurb_section ~= -    set_abstract_object.contents_heading( -      "(skip) there is no Blurb section",   // nugget/object -      node_heading_str_, -      node_heading_int_, -      [""],             // anchor tag -    ); +  comp_obj_heading_                       = comp_obj_heading_.init; +  comp_obj_heading_.use                   = "content"; +  comp_obj_heading_.of                    = "para"; +  comp_obj_heading_.is_a                  = "heading"; +  comp_obj_heading_.text                  = "(skip) there is no Blurb section"; +  comp_obj_heading_.ocn                   = 0; +  comp_obj_heading_.segment_anchor_tag    = "bibliography"; +  comp_obj_heading_.marked_up_level       = "1"; +  comp_obj_heading_.heading_lev_markup    = 4; +  comp_obj_heading_.heading_lev_collapsed = 2; +  comp_obj_heading_.parent_ocn            = 1; +  comp_obj_heading_.parent_lev_markup     = 0; +  the_blurb_section                   ~= comp_obj_heading_;  } else {    writeln("blurb");  }  debug(blurb) {    foreach (blurb; the_blurb_section) { -    writeln(blurb.object); +    writeln(blurb.text);    }  }  #+END_SRC @@ -1322,6 +1262,15 @@ indent=[    "hang_position" : 1,    "base_position" : 1,  ]; +comp_obj_toc                       = comp_obj_toc.init; +comp_obj_toc.use                   = "content"; +comp_obj_toc.of                    = "para"; +comp_obj_toc.is_a                  = "toc"; +comp_obj_toc.ocn                   = 0; +comp_obj_toc.obj_cite_number       = "0"; +comp_obj_toc.indent_hang           = indent["hang_position"]; +comp_obj_toc.indent_base           = indent["base_position"]; +comp_obj_toc.bullet                = false;  if (the_endnotes_section["seg"].length > 1) {    toc_txt_ = format(      "{ %s }../%s.fn_suffix", @@ -1329,15 +1278,8 @@ if (the_endnotes_section["seg"].length > 1) {      "endnotes",            // segment_anchor_tag_that_object_belongs_to    );    toc_txt_= munge.url_links(toc_txt_); -  the_table_of_contents_section["seg"] ~= -    set_abstract_object.contents_toc( -      "toc", -      toc_txt_, -      "",                   // attrib -      0, -      indent, -      false -    ); +  comp_obj_toc.text                       = to!string(toc_txt_).strip; +  the_table_of_contents_section["seg"]    ~= comp_obj_toc;  }  if (the_endnotes_section["scroll"].length > 1) {    toc_txt_ = format( @@ -1346,15 +1288,8 @@ if (the_endnotes_section["scroll"].length > 1) {      "endnotes",            // _anchor_tag    );    toc_txt_= munge.url_links(toc_txt_); -  the_table_of_contents_section["scroll"] ~= -    set_abstract_object.contents_toc( -      "toc", -      toc_txt_, -      "",                  // attrib -      0, -      indent, -      false -    ); +  comp_obj_toc.text                       = to!string(toc_txt_).strip; +  the_table_of_contents_section["scroll"] ~= comp_obj_toc;  }  if (the_glossary_section.length > 1) {    toc_txt_ = format( @@ -1363,30 +1298,16 @@ if (the_glossary_section.length > 1) {      "glossary",  // segment_anchor_tag_that_object_belongs_to    );    toc_txt_= munge.url_links(toc_txt_); -  the_table_of_contents_section["seg"] ~= -    set_abstract_object.contents_toc( -      "toc", -      toc_txt_, -      "",                   // attrib -      0, -      indent, -      false -    ); +  comp_obj_toc.text                       = to!string(toc_txt_).strip; +  the_table_of_contents_section["seg"]    ~= comp_obj_toc;    toc_txt_ = format(      "{ %s }#%s",      "Glossary",      "glossary",            // _anchor_tag    );    toc_txt_= munge.url_links(toc_txt_); -  the_table_of_contents_section["scroll"] ~= -    set_abstract_object.contents_toc( -      "toc", -      toc_txt_, -      "",                   // attrib -      0, -      indent, -      false -    ); +  comp_obj_toc.text                       = to!string(toc_txt_).strip; +  the_table_of_contents_section["scroll"] ~= comp_obj_toc;  }  if (the_bibliography_section.length > 1){    toc_txt_ = format( @@ -1395,30 +1316,17 @@ if (the_bibliography_section.length > 1){      "bibliography",        // segment_anchor_tag_that_object_belongs_to    );    toc_txt_= munge.url_links(toc_txt_); -  the_table_of_contents_section["seg"] ~= -    set_abstract_object.contents_toc( -      "toc", -      toc_txt_, -      "",                   // attrib -      0, -      indent, -      false -    ); +  comp_obj_toc.text                       = to!string(toc_txt_).strip; +  the_table_of_contents_section["seg"]    ~= comp_obj_toc; +    toc_txt_ = format(      "{ %s }#%s",      "Bibliography",      "bibliography",          // _anchor_tag    );    toc_txt_= munge.url_links(toc_txt_); -  the_table_of_contents_section["scroll"] ~= -    set_abstract_object.contents_toc( -      "toc", -      toc_txt_, -      "",                   // attrib -      0, -      indent, -      false -    ); +  comp_obj_toc.text                       = to!string(toc_txt_).strip; +  the_table_of_contents_section["scroll"] ~= comp_obj_toc;  }  if (the_bookindex_section["seg"].length > 1) {    toc_txt_ = format( @@ -1427,15 +1335,8 @@ if (the_bookindex_section["seg"].length > 1) {      "bookindex",          // segment_anchor_tag_that_object_belongs_to    );    toc_txt_= munge.url_links(toc_txt_); -  the_table_of_contents_section["seg"] ~= -    set_abstract_object.contents_toc( -      "toc", -      toc_txt_, -      "",                   // attrib -      0, -      indent, -      false -    ); +  comp_obj_toc.text                       = to!string(toc_txt_).strip; +  the_table_of_contents_section["seg"]    ~= comp_obj_toc;  }  if (the_bookindex_section["scroll"].length > 1) {    toc_txt_ = format( @@ -1444,15 +1345,8 @@ if (the_bookindex_section["scroll"].length > 1) {      "bookindex",            // _anchor_tag    );    toc_txt_= munge.url_links(toc_txt_); -  the_table_of_contents_section["scroll"] ~= -    set_abstract_object.contents_toc( -      "toc", -      toc_txt_, -      "",                   // attrib -      0, -      indent, -      false -    ); +  comp_obj_toc.text                       = to!string(toc_txt_).strip; +  the_table_of_contents_section["scroll"] ~= comp_obj_toc;  }  if (the_blurb_section.length > 1) {    toc_txt_ = format( @@ -1461,30 +1355,16 @@ if (the_blurb_section.length > 1) {      "blurb",                // segment_anchor_tag_that_object_belongs_to    );    toc_txt_= munge.url_links(toc_txt_); -  the_table_of_contents_section["seg"] ~= -    set_abstract_object.contents_toc( -      "toc", -      toc_txt_, -      "",                   // attrib -      0, -      indent, -      false -    ); +  comp_obj_toc.text                       = to!string(toc_txt_).strip; +  the_table_of_contents_section["seg"]    ~= comp_obj_toc;    toc_txt_ = format(      "{ %s }#%s",      "Blurb",      "blurb",                // _anchor_tag    );    toc_txt_= munge.url_links(toc_txt_); -  the_table_of_contents_section["scroll"] ~= -    set_abstract_object.contents_toc( -      "toc", -      toc_txt_, -      "",                   // attrib -      0, -      indent, -      false -    ); +  comp_obj_toc.text                       = to!string(toc_txt_).strip; +  the_table_of_contents_section["scroll"] ~= comp_obj_toc;  }  debug(toc) {    writefln( @@ -1493,7 +1373,7 @@ debug(toc) {      the_table_of_contents_section["seg"].length    );    foreach (toc_linked_heading; the_table_of_contents_section["seg"]) { -    writeln(mkup.indent_by_spaces_provided(toc_linked_heading.para_attrib.indent_start), toc_linked_heading.object); +    writeln(mkup.indent_by_spaces_provided(toc_linked_heading.indent_hang), toc_linked_heading.text);    }  }  #+END_SRC @@ -1508,7 +1388,9 @@ auto document_the = [    "head":             the_document_head_section,    "toc_seg":          the_table_of_contents_section["seg"],    "toc_scroll":       the_table_of_contents_section["scroll"], +  /+ substantive/body: +/    "body":             the_document_body_section, +  /+ backmatter: +/    "endnotes_seg":     the_endnotes_section["seg"],    "endnotes_scroll":  the_endnotes_section["scroll"],    "glossary":         the_glossary_section, @@ -1561,14 +1443,14 @@ auto object_reset(ref string[string] an_object) {  #+name: abs_functions_header_set_common  #+BEGIN_SRC d  auto _common_reset_( -  ref int[string] line_occur, +  ref int[string]    line_occur,    ref string[string] an_object, -  ref int[string] type +  ref int[string]    type  ) {    line_occur["heading"] = State.off; -  line_occur["para"]= State.off; -  type["heading"] = State.off; -  type["para"] = State.off; +  line_occur["para"]    = State.off; +  type["heading"]       = State.off; +  type["para"]          = State.off;    object_reset(an_object);  }  #+END_SRC @@ -1578,7 +1460,7 @@ auto _common_reset_(  #+name: abs_functions_ocn_status  #+BEGIN_SRC d  void _check_ocn_status_( -  char[] line, +  char[]          line,    ref int[string] type  ) {    if ((!line.empty) && (type["ocn_status_multi_obj"] == TriState.off)) { @@ -1630,9 +1512,9 @@ void _check_ocn_status_(  #+name: abs_functions_block  #+BEGIN_SRC d  void _start_block_( -  char[] line, +  char[]          line,    ref int[string] type, -  string[string] obj_cite_number_poem +  string[string]  obj_cite_number_poem  ) {  #+END_SRC @@ -1799,9 +1681,9 @@ void _start_block_(  #+name: abs_functions_block_code  #+BEGIN_SRC d  void _code_block_( -  char[] line, +  char[]             line,    ref string[string] an_object, -  ref int[string] type +  ref int[string]    type  ) {    if (type["curly_code"] == TriState.on) {      if (matchFirst(line, rgx.block_curly_code_close)) { @@ -2051,11 +1933,11 @@ why extra object stuff only in poem/verse?  #+name: abs_functions_block_poem  #+BEGIN_SRC d  void _poem_block_( -  char[] line, -  ref string[string] an_object, -  ref int[string] type, -  ref int cntr, -  string[string] obj_cite_number_poem, +  char[]                 line, +  ref string[string]     an_object, +  ref int[string]        type, +  ref int                cntr, +  string[string]         obj_cite_number_poem,    string[string][string] dochead_make_aa,  ) {    if (type["curly_poem"] == TriState.on) { @@ -2090,15 +1972,14 @@ void _poem_block_(            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_heading_str, _node_heading_int); -        the_document_body_section ~= -          set_abstract_object.contents_block( -            an_object["is"], -            an_object["substantive"], -            an_object["attrib"], -            obj_cite_number -          ); +        comp_obj_block                            = comp_obj_block.init; +        comp_obj_block.use                        = "content"; +        comp_obj_block.of                         = "block"; +        comp_obj_block.is_a                       = an_object["is"]; +        comp_obj_block.ocn                        = obj_cite_number; +        comp_obj_block.obj_cite_number            = (obj_cite_number==0) ? "" : to!string(obj_cite_number); +        comp_obj_block.text                       = an_object["substantive"]; +        the_document_body_section                 ~= comp_obj_block;          object_reset(an_object);          processing.remove("verse");          ++cntr; @@ -2130,7 +2011,7 @@ void _poem_block_(          }          processing.remove("verse");          an_object["is"] = "verse"; -        auto _node_t = node_construct.node_emitter( +        auto comp_obj_location = node_construct.node_location_emitter(            content_non_header,            segment_anchor_tag_that_object_belongs_to,            obj_cite_number, @@ -2138,21 +2019,18 @@ void _poem_block_(            heading_ptr-1,            an_object["is"]          ); -        _node_heading_str = _node_t[0]; -        _node_heading_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_heading_str, _node_heading_int); -        the_document_body_section ~= -          set_abstract_object.contents_block( -            an_object["is"], -            an_object["substantive"], -            an_object["attrib"], -            obj_cite_number -          ); +        comp_obj_block                            = comp_obj_block.init; +        comp_obj_block.use                        = "content"; +        comp_obj_block.of                         = "block"; +        comp_obj_block.is_a                       = an_object["is"]; +        comp_obj_block.ocn                        = obj_cite_number; +        comp_obj_block.obj_cite_number            = (obj_cite_number==0) ? "" : to!string(obj_cite_number); +        comp_obj_block.text                       = an_object["substantive"]; +        the_document_body_section                 ~= comp_obj_block;          object_reset(an_object);          processing.remove("verse");          ++cntr; @@ -2181,15 +2059,14 @@ void _poem_block_(            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_heading_str, _node_heading_int); -        the_document_body_section ~= -          set_abstract_object.contents_block( -            an_object["is"], -            an_object["substantive"], -            an_object["attrib"], -            obj_cite_number -          ); +        comp_obj_block                            = comp_obj_block.init; +        comp_obj_block.use                        = "content"; +        comp_obj_block.of                         = "block"; +        comp_obj_block.is_a                       = an_object["is"]; +        comp_obj_block.ocn                        = obj_cite_number; +        comp_obj_block.obj_cite_number            = (obj_cite_number==0) ? "" : to!string(obj_cite_number); +        comp_obj_block.text                       = an_object["substantive"]; +        the_document_body_section                 ~= comp_obj_block;          obj_cite_number_poem["end"] = to!string(obj_cite_number);          object_reset(an_object);          processing.remove("verse"); @@ -2220,8 +2097,8 @@ void _poem_block_(          }          processing.remove("verse");          an_object["is"] = "verse"; -        auto _node_t = -          node_construct.node_emitter( +        auto comp_obj_location = +          node_construct.node_location_emitter(              content_non_header,              segment_anchor_tag_that_object_belongs_to,              obj_cite_number, @@ -2229,21 +2106,18 @@ void _poem_block_(              heading_ptr-1,              an_object["is"]            ); -        _node_heading_str = _node_t[0]; -        _node_heading_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_heading_str, _node_heading_int); -        the_document_body_section ~= -          set_abstract_object.contents_block( -            an_object["is"], -            an_object["substantive"], -            an_object["attrib"], -            obj_cite_number -          ); +        comp_obj_block                            = comp_obj_block.init; +        comp_obj_block.use                        = "content"; +        comp_obj_block.of                         = "block"; +        comp_obj_block.is_a                       = an_object["is"]; +        comp_obj_block.ocn                        = obj_cite_number; +        comp_obj_block.obj_cite_number            = (obj_cite_number==0) ? "" : to!string(obj_cite_number); +        comp_obj_block.text                       = an_object["substantive"]; +        the_document_body_section                 ~= comp_obj_block;          object_reset(an_object);          processing.remove("verse");          ++cntr; @@ -2258,9 +2132,9 @@ void _poem_block_(  #+name: abs_functions_block_group  #+BEGIN_SRC d  void _group_block_( -  char[] line, +  char[]             line,    ref string[string] an_object, -  ref int[string] type +  ref int[string]    type  ) {    if (type["curly_group"] == State.on) {      if (matchFirst(line, rgx.block_curly_group_close)) { @@ -2299,9 +2173,9 @@ void _group_block_(  #+name: abs_functions_block_block  #+BEGIN_SRC d  void _block_block_( -  char[] line, +  char[]             line,    ref string[string] an_object, -  ref int[string] type +  ref int[string]    type  ) {    if (type["curly_block"] == TriState.on) {      if (matchFirst(line, rgx.block_curly_block_close)) { @@ -2340,9 +2214,9 @@ void _block_block_(  #+name: abs_functions_block_quote  #+BEGIN_SRC d  void _quote_block_( -  char[] line, +  char[]             line,    ref string[string] an_object, -  ref int[string] type +  ref int[string]    type  ) {    if (type["curly_quote"] == TriState.on) {      if (matchFirst(line, rgx.block_curly_quote_close)) { @@ -2381,9 +2255,9 @@ void _quote_block_(  #+name: abs_functions_block_table  #+BEGIN_SRC d  void _table_block_( -  char[] line, +  char[]             line,    ref string[string] an_object, -  ref int[string] type +  ref int[string]    type  ) {    if (type["curly_table"] == TriState.on) {      if (matchFirst(line, rgx.block_curly_table_close)) { @@ -2422,17 +2296,16 @@ void _table_block_(  #+name: abs_functions_block_line_status_empty  #+BEGIN_SRC d  void _block_flag_line_empty_( -  char[] line, -  ref string[string] an_object, -  ref ObjComposite[] the_document_body_section, +  char[]                       line, +  ref string[string]           an_object, +  ref ObjGenericComposite[]    the_document_body_section,    ref string[][string][string] bookindex_unordered_hashes, -  ref int obj_cite_number, -  ref string[string] _node_heading_str, -  ref int[string] _node_heading_int, -  ref int cntr, -  ref int[string] type, -  string[string] obj_cite_number_poem, -  string[string][string] dochead_make_aa, +  ref int                      obj_cite_number, +  ref ObjGenericComposite      _comp_obj_heading, +  ref int                      cntr, +  ref int[string]              type, +  string[string]               obj_cite_number_poem, +  string[string][string]       dochead_make_aa,  ) {    // line.empty, post contents, empty variables ---------------    assert( @@ -2452,8 +2325,8 @@ void _block_flag_line_empty_(      bookindex_unordered_hashes =        bkidx_hash(an_object["bookindex_nugget"], obj_cite_number);      an_object["is"] = "code"; -    auto _node_t = -      node_construct.node_emitter( +    auto comp_obj_location = +      node_construct.node_location_emitter(          content_non_header,          segment_anchor_tag_that_object_belongs_to,          obj_cite_number, @@ -2461,21 +2334,18 @@ void _block_flag_line_empty_(          heading_ptr-1,          an_object["is"]        ); -    _node_heading_str = _node_t[0]; -    _node_heading_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_heading_str, _node_heading_int); -    the_document_body_section ~= -      set_abstract_object.contents_block_code( -        an_object["is"], -        an_object["substantive"], -        an_object["attrib"], -        obj_cite_number -      ); +    comp_obj_code                             = comp_obj_code.init; +    comp_obj_code.use                         = "content"; +    comp_obj_code.of                          = "block"; +    comp_obj_code.is_a                        = an_object["is"]; +    comp_obj_code.ocn                         = obj_cite_number; +    comp_obj_code.obj_cite_number             = (obj_cite_number==0) ? "" : to!string(obj_cite_number); +    comp_obj_code.text                        = an_object["substantive"]; +    the_document_body_section                 ~= comp_obj_code;      object_reset(an_object);      processing.remove("verse");      ++cntr; @@ -2487,8 +2357,8 @@ void _block_flag_line_empty_(      bookindex_unordered_hashes =        bkidx_hash(an_object["bookindex_nugget"], obj_cite_number);      an_object["is"] = "verse"; // check also -    auto _node_t = -      node_construct.node_emitter( // +    auto comp_obj_location = +      node_construct.node_location_emitter(          content_non_header,          segment_anchor_tag_that_object_belongs_to,          obj_cite_number, @@ -2496,16 +2366,14 @@ void _block_flag_line_empty_(          heading_ptr-1,          an_object["is"]        ); -    _node_heading_str = _node_t[0]; -    _node_heading_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_heading_str, -        _node_heading_int, -      ); // bookindex +    comp_obj_poem_ocn                         = comp_obj_poem_ocn.init; +    comp_obj_poem_ocn.use                     = "content"; +    comp_obj_poem_ocn.of                      = "block"; +    comp_obj_poem_ocn.is_a                    = "poem"; +    comp_obj_poem_ocn.ocn                     = obj_cite_number; +    comp_obj_poem_ocn.obj_cite_number         = (obj_cite_number_poem["start"], obj_cite_number_poem["end"]); // not sure about this +    comp_obj_poem_ocn.text                    = ""; // an_object["substantive"]; +    the_document_body_section                 ~= comp_obj_poem_ocn;      object_reset(an_object);      processing.remove("verse");      type["blocks"] = TriState.off; @@ -2518,8 +2386,8 @@ void _block_flag_line_empty_(      bookindex_unordered_hashes =        bkidx_hash(an_object["bookindex_nugget"], obj_cite_number);      an_object["is"] = "table"; -    auto _node_t = -      node_construct.node_emitter( +    auto comp_obj_location = +      node_construct.node_location_emitter(          content_non_header,          segment_anchor_tag_that_object_belongs_to,          obj_cite_number, @@ -2527,21 +2395,18 @@ void _block_flag_line_empty_(          heading_ptr-1,          an_object["is"]        ); -    _node_heading_str = _node_t[0]; -    _node_heading_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_heading_str, _node_heading_int); -    the_document_body_section ~= -      set_abstract_object.contents_block( -        an_object["is"], -        an_object["substantive"], -        an_object["attrib"], -        obj_cite_number -      ); +    comp_obj_block                            = comp_obj_block.init; +    comp_obj_block.use                        = "content"; +    comp_obj_block.of                         = "block"; +    comp_obj_block.is_a                       = an_object["is"]; +    comp_obj_block.ocn                        = obj_cite_number; +    comp_obj_block.obj_cite_number            = (obj_cite_number==0) ? "" : to!string(obj_cite_number); +    comp_obj_block.text                       = an_object["substantive"]; +    the_document_body_section                 ~= comp_obj_block;      object_reset(an_object);      processing.remove("verse");      ++cntr; @@ -2555,8 +2420,8 @@ void _block_flag_line_empty_(      bookindex_unordered_hashes =        bkidx_hash(an_object["bookindex_nugget"], obj_cite_number);      an_object["is"] = "group"; -    auto _node_t = -      node_construct.node_emitter( +    auto comp_obj_location = +      node_construct.node_location_emitter(          content_non_header,          segment_anchor_tag_that_object_belongs_to,          obj_cite_number, @@ -2564,21 +2429,18 @@ void _block_flag_line_empty_(          heading_ptr-1,          an_object["is"]        ); -    _node_heading_str = _node_t[0]; -    _node_heading_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_heading_str, _node_heading_int); -    the_document_body_section ~= -      set_abstract_object.contents_block( -        an_object["is"], -        an_object["substantive"], -        an_object["attrib"], -        obj_cite_number -      ); +    comp_obj_block                            = comp_obj_block.init; +    comp_obj_block.use                        = "content"; +    comp_obj_block.of                         = "block"; +    comp_obj_block.is_a                       = an_object["is"]; +    comp_obj_block.ocn                        = obj_cite_number; +    comp_obj_block.obj_cite_number            = (obj_cite_number==0) ? "" : to!string(obj_cite_number); +    comp_obj_block.text                       = an_object["substantive"]; +    the_document_body_section                 ~= comp_obj_block;      object_reset(an_object);      processing.remove("verse");      ++cntr; @@ -2591,8 +2453,8 @@ void _block_flag_line_empty_(      bookindex_unordered_hashes =        bkidx_hash(an_object["bookindex_nugget"], obj_cite_number);      an_object["is"] = "block"; -    auto _node_t = -      node_construct.node_emitter( +    auto comp_obj_location = +      node_construct.node_location_emitter(          content_non_header,          segment_anchor_tag_that_object_belongs_to,          obj_cite_number, @@ -2600,21 +2462,18 @@ void _block_flag_line_empty_(          heading_ptr-1,          an_object["is"]         ); -    _node_heading_str = _node_t[0]; -    _node_heading_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_heading_str, _node_heading_int); -    the_document_body_section ~= -      set_abstract_object.contents_block( -        an_object["is"], -        an_object["substantive"], -        an_object["attrib"], -        obj_cite_number -      ); +    comp_obj_block                            = comp_obj_block.init; +    comp_obj_block.use                        = "content"; +    comp_obj_block.of                         = "block"; +    comp_obj_block.is_a                       = an_object["is"]; +    comp_obj_block.ocn                        = obj_cite_number; +    comp_obj_block.obj_cite_number            = (obj_cite_number==0) ? "" : to!string(obj_cite_number); +    comp_obj_block.text                       = an_object["substantive"]; +    the_document_body_section                 ~= comp_obj_block;      object_reset(an_object);      processing.remove("verse");      ++cntr; @@ -2628,8 +2487,8 @@ void _block_flag_line_empty_(      bookindex_unordered_hashes =        bkidx_hash(an_object["bookindex_nugget"], obj_cite_number);      an_object["is"] = "quote"; -    auto _node_t = -      node_construct.node_emitter( // +    auto comp_obj_location = +      node_construct.node_location_emitter(          content_non_header,          segment_anchor_tag_that_object_belongs_to,          obj_cite_number, @@ -2637,21 +2496,18 @@ void _block_flag_line_empty_(          heading_ptr-1,          an_object["is"]        ); -    _node_heading_str = _node_t[0]; -    _node_heading_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_heading_str, _node_heading_int); -    the_document_body_section ~= -      set_abstract_object.contents_block( -        an_object["is"], -        an_object["substantive"], -        an_object["attrib"], -        obj_cite_number -      ); +    comp_obj_block                            = comp_obj_block.init; +    comp_obj_block.use                        = "content"; +    comp_obj_block.of                         = "block"; +    comp_obj_block.is_a                       = an_object["is"]; +    comp_obj_block.ocn                        = obj_cite_number; +    comp_obj_block.obj_cite_number            = (obj_cite_number==0) ? "" : to!string(obj_cite_number); +    comp_obj_block.text                       = an_object["substantive"]; +    the_document_body_section                 ~= comp_obj_block;      object_reset(an_object);      processing.remove("verse");      ++cntr; @@ -2722,11 +2578,11 @@ auto _book_index_(  #+name: abs_functions_heading  #+BEGIN_SRC d  auto _heading_found_( -  char[] line, -  string dochead_make_identify_unmarked_headings, -  ref string[string] heading_match_str, +  char[]                   line, +  string                   dochead_make_identify_unmarked_headings, +  ref string[string]       heading_match_str,    ref Regex!(char)[string] heading_match_rgx, -  ref int[string] type +  ref int[string]          type  ) {    if ((dochead_make_identify_unmarked_headings.length > 2)    && (type["make_headings"] == State.off)) { @@ -2812,10 +2668,10 @@ auto _heading_found_(  #+name: abs_functions_heading  #+BEGIN_SRC d  auto _heading_make_set_( -  ref char[] line, -  ref int[string] line_occur, +  ref char[]               line, +  ref int[string]          line_occur,    ref Regex!(char)[string] heading_match_rgx, -  ref int[string] type +  ref int[string]          type  ) {    if ((type["make_headings"] == State.on)    && ((line_occur["para"] == State.off) @@ -2874,13 +2730,13 @@ auto _heading_make_set_(  #+name: abs_functions_heading  #+BEGIN_SRC d  auto _heading_matched_( -  char[] line, -  ref int[string] line_occur, -  ref string[string] an_object, -  ref string an_object_key, -  ref int[string] lv, -  ref int[string] collapsed_lev, -  ref int[string] type, +  char[]                     line, +  ref int[string]            line_occur, +  ref string[string]         an_object, +  ref string                 an_object_key, +  ref int[string]            lv, +  ref int[string]            collapsed_lev, +  ref int[string]            type,    ref string[string][string] dochead_meta_aa  ) {    if (auto m = match(line, rgx.heading)) { @@ -3023,13 +2879,13 @@ auto _heading_matched_(  #+name: abs_functions_para  #+BEGIN_SRC d  auto _para_match_( -  char[] line, +  char[]             line,    ref string[string] an_object, -  ref string an_object_key, -  ref int[string] indent, -  ref bool bullet, -  ref int[string] type, -  ref int[string] line_occur, +  ref string         an_object_key, +  ref int[string]    indent, +  ref bool           bullet, +  ref int[string]    type, +  ref int[string]    line_occur,  ) {    if (line_occur["para"] == State.off) {      /+ para matches +/ @@ -3346,8 +3202,8 @@ struct ObjInlineMarkup {  #+name: ao_emitters_obj_inline_markup_and_anchor_tags  #+BEGIN_SRC d    auto obj_inline_markup_and_anchor_tags( -    string[string] obj_, -    string obj_key_, +    string[string]         obj_, +    string                 obj_key_,      string[string][string] dochead_make_aa    )    in { } @@ -3429,27 +3285,21 @@ struct ObjInlineMarkup {     return heading_toc_;    };    auto table_of_contents_gather_headings( -    string[string] obj_, -    string[string][string] dochead_make_aa, -    string segment_anchor_tag_that_object_belongs_to, -    string _anchor_tag, -    ObjComposite[][string] the_table_of_contents_section, +    string[string]                obj_, +    string[string][string]        dochead_make_aa, +    string                        segment_anchor_tag_that_object_belongs_to, +    string                        _anchor_tag, +    ObjGenericComposite[][string] the_table_of_contents_section,    )    in { }    body { +    ObjGenericComposite comp_obj_toc;      char[] heading_toc_ = to!(char[])(obj_["body_nugget"].dup.strip);      heading_toc_ = _clean_heading_toc_(heading_toc_);      auto attrib="";      string toc_txt_;      int[string] indent; -    auto set_abstract_object = ObjectAbstractSet();      if (to!int(obj_["lev_markup_number"]) > 0) { -      toc_txt_ = format( -        "{ %s }#%s", -        heading_toc_, -        _anchor_tag, -      ); -      toc_txt_= munge.url_links(toc_txt_);        indent=[          "hang_position" : to!int(obj_["lev_markup_number"]),          "base_position" : to!int(obj_["lev_markup_number"]), @@ -3460,30 +3310,41 @@ struct ObjInlineMarkup {          _anchor_tag,        );        toc_txt_= munge.url_links(toc_txt_); -      the_table_of_contents_section["scroll"] ~= -        set_abstract_object.contents_toc( -          "toc", -          toc_txt_, -          "",                   // attrib -          0, -          indent, -          false -        ); +      comp_obj_toc                       = comp_obj_toc.init; +      comp_obj_toc.use                   = "content"; +      comp_obj_toc.of                    = "para"; +      comp_obj_toc.is_a                  = "toc"; +      comp_obj_toc.ocn                   = 0; +      comp_obj_toc.obj_cite_number       = "0"; +      comp_obj_toc.indent_hang           = indent["hang_position"]; +      comp_obj_toc.indent_base           = indent["base_position"]; +      comp_obj_toc.bullet                = false; +      comp_obj_toc.text                  = to!string(toc_txt_).strip; +      the_table_of_contents_section["scroll"] ~= comp_obj_toc;      } else {        indent=[          "hang_position" : 0,          "base_position" : 0,        ]; -      the_table_of_contents_section["scroll"] ~= -        set_abstract_object.contents_toc( -          "toc", -          "Table of Contents", -          "",                   // attrib -          0, -          indent, -          false -        ); +      comp_obj_toc                       = comp_obj_toc.init; +      comp_obj_toc.use                   = "content"; +      comp_obj_toc.of                    = "para"; +      comp_obj_toc.is_a                  = "toc"; +      comp_obj_toc.ocn                   = 0; +      comp_obj_toc.obj_cite_number       = "0"; +      comp_obj_toc.indent_hang           = indent["hang_position"]; +      comp_obj_toc.indent_base           = indent["base_position"]; +      comp_obj_toc.bullet                = false; +      comp_obj_toc.text                  = "Table of Contents"; +      the_table_of_contents_section["scroll"] ~= comp_obj_toc;      } +    comp_obj_toc                       = comp_obj_toc.init; +    comp_obj_toc.use                   = "content"; +    comp_obj_toc.of                    = "para"; +    comp_obj_toc.is_a                  = "toc"; +    comp_obj_toc.ocn                   = 0; +    comp_obj_toc.obj_cite_number       = "0"; +    comp_obj_toc.bullet                = false;      switch (to!int(obj_["lev_markup_number"])) {      case 0:        indent=[ @@ -3492,15 +3353,10 @@ struct ObjInlineMarkup {        ];        toc_txt_ = "{ Table of Contents }../toc.fn_suffix";        toc_txt_= munge.url_links(toc_txt_); -      the_table_of_contents_section["seg"] ~= -        set_abstract_object.contents_toc( -          "toc", -          toc_txt_, -          "",                   // attrib -          0, -          indent, -          false -        ); +      comp_obj_toc.indent_hang             = indent["hang_position"]; +      comp_obj_toc.indent_base             = indent["base_position"]; +      comp_obj_toc.text                    = to!string(toc_txt_).strip; +      the_table_of_contents_section["seg"] ~= comp_obj_toc;        break;      case 1: .. case 3:        indent=[ @@ -3512,15 +3368,10 @@ struct ObjInlineMarkup {          heading_toc_,        );        toc_txt_= munge.url_links(toc_txt_); -      the_table_of_contents_section["seg"] ~= -        set_abstract_object.contents_toc( -          "toc", -          toc_txt_, -          "",                   // attrib -          0, -          indent, -          false -        ); +      comp_obj_toc.indent_hang             = indent["hang_position"]; +      comp_obj_toc.indent_base             = indent["base_position"]; +      comp_obj_toc.text                    = to!string(toc_txt_).strip; +      the_table_of_contents_section["seg"] ~= comp_obj_toc;        break;      case 4:        toc_txt_ = format( @@ -3533,15 +3384,10 @@ struct ObjInlineMarkup {          "hang_position" : to!int(obj_["lev_markup_number"]),          "base_position" : to!int(obj_["lev_markup_number"]),        ]; -      the_table_of_contents_section["seg"] ~= -        set_abstract_object.contents_toc( -          "toc", -          toc_txt_, -          "",                   // attrib -          0, -          indent, -          false -        ); +      comp_obj_toc.indent_hang             = indent["hang_position"]; +      comp_obj_toc.indent_base             = indent["base_position"]; +      comp_obj_toc.text                    = to!string(toc_txt_).strip; +      the_table_of_contents_section["seg"] ~= comp_obj_toc;        break;      case 5: .. case 7:        toc_txt_ = format( @@ -3555,15 +3401,10 @@ struct ObjInlineMarkup {          "hang_position" : to!int(obj_["lev_markup_number"]),          "base_position" : to!int(obj_["lev_markup_number"]),        ]; -      the_table_of_contents_section["seg"] ~= -        set_abstract_object.contents_toc( -          "toc", -          toc_txt_, -          "",                   // attrib -          0, -          indent, -          false -        ); +      comp_obj_toc.indent_hang             = indent["hang_position"]; +      comp_obj_toc.indent_base             = indent["base_position"]; +      comp_obj_toc.text                    = to!string(toc_txt_).strip; +      the_table_of_contents_section["seg"] ~= comp_obj_toc;        break;      default:        break; @@ -3586,10 +3427,9 @@ private:  #+name: ao_emitters_obj_inline_markup_heading_numbering_segment_anchor_tags  #+BEGIN_SRC d    static string _configured_auto_heading_numbering_and_segment_anchor_tags( -    string munge_, -    string[string] obj_, -    string[string][string] -    dochead_make_aa +    string                 munge_, +    string[string]         obj_, +    string[string][string] dochead_make_aa    ) {      if (dochead_make_aa["make"]["num_top"].length > 0) {        if (!(match(munge_, rgx.heading_anchor_tag))) { @@ -3806,20 +3646,17 @@ struct ObjAttributes {  #+name: ao_emitters_obj_attributes_public  #+BEGIN_SRC d    string obj_attributes( -    string obj_is_, -    string obj_raw, -    string[string] _node_heading_str, -    int[string] _node_heading_int +    string              obj_is_, +    string              obj_raw, +    ObjGenericComposite _comp_obj_heading,    )    in { }    body {      scope(exit) {        destroy(obj_is_);        destroy(obj_raw); -      destroy(_node_heading_str); -      destroy(_node_heading_int); +      destroy(_comp_obj_heading);      } -    _obj_attrib.remove("json");      _obj_attrib["json"] ="{";      switch (obj_is_) {      case "heading": @@ -3857,7 +3694,7 @@ struct ObjAttributes {        break;      }      _obj_attrib["json"] ~=" }"; -    _obj_attrib["json"]=_set_additional_values_parse_as_json(_obj_attrib["json"], obj_is_, _node_heading_str, _node_heading_int); // check +    _obj_attrib["json"]=_set_additional_values_parse_as_json(_obj_attrib["json"], obj_is_, _comp_obj_heading); // check      debug(structattrib) {        if (oa_j["is"].str() == "heading") {          writeln(_obj_attrib["json"]); @@ -3892,24 +3729,24 @@ struct ObjAttributes {      auto rgx = Rgx();      if (matchFirst(obj_txt_in, rgx.para_bullet)) {        _obj_attributes =" \"bullet\": \"true\"," -      ~ " \"indent_start\": 0," -      ~ " \"indent_rest\": 0,"; +      ~ " \"indent_hang\": 0," +      ~ " \"indent_base\": 0,";      } else if (auto m = matchFirst(obj_txt_in, rgx.para_bullet_indent)) {        _obj_attributes =" \"bullet\": \"true\"," -      ~ " \"indent_start\": " ~ to!string(m.captures[1]) ~ "," -      ~ " \"indent_rest\": " ~ to!string(m.captures[1]) ~ ","; +      ~ " \"indent_hang\": " ~ to!string(m.captures[1]) ~ "," +      ~ " \"indent_base\": " ~ to!string(m.captures[1]) ~ ",";      } else if (auto m = matchFirst(obj_txt_in, rgx.para_indent_hang)) {        _obj_attributes =" \"bullet\": \"false\"," -      ~ " \"indent_start\": " ~ to!string(m.captures[1]) ~ "," -      ~ " \"indent_rest\": " ~  to!string(m.captures[2]) ~ ","; +      ~ " \"indent_hang\": " ~ to!string(m.captures[1]) ~ "," +      ~ " \"indent_base\": " ~  to!string(m.captures[2]) ~ ",";      } else if (auto m = matchFirst(obj_txt_in, rgx.para_indent)) {        _obj_attributes =" \"bullet\": \"false\"," -      ~ " \"indent_start\": " ~ to!string(m.captures[1]) ~ "," -      ~ " \"indent_rest\": " ~ to!string(m.captures[1]) ~ ","; +      ~ " \"indent_hang\": " ~ to!string(m.captures[1]) ~ "," +      ~ " \"indent_base\": " ~ to!string(m.captures[1]) ~ ",";      } else {        _obj_attributes =" \"bullet\": \"false\"," -      ~ " \"indent_start\": 0," -      ~ " \"indent_rest\": 0,"; +      ~ " \"indent_hang\": 0," +      ~ " \"indent_base\": 0,";      }      return _obj_attributes;    } @@ -4064,26 +3901,25 @@ struct ObjAttributes {  #+name: ao_emitters_obj_attributes_private_json  #+BEGIN_SRC d    string _set_additional_values_parse_as_json( -    string _obj_attrib, -    string obj_is_, -    string[string] _node_heading_str, -    int[string] _node_heading_int +    string              _obj_attrib, +    string              obj_is_, +    ObjGenericComposite _comp_obj_heading,    ) {                                                  //      JSONValue oa_j = parseJSON(_obj_attrib);      assert(        (oa_j.type == JSON_TYPE.OBJECT)      );      if (obj_is_ == "heading") { -      oa_j.object["obj_cite_number"] = _node_heading_str["ocn"]; -      oa_j.object["lev_markup_number"] = _node_heading_int["heading_lev_markup"]; -      oa_j.object["lev_collapsed_number"] = _node_heading_int["heading_lev_collapsed"]; +      oa_j.object["obj_cite_number"] = _comp_obj_heading.ocn; +      oa_j.object["lev_markup_number"] = _comp_obj_heading.heading_lev_markup; +      oa_j.object["lev_collapsed_number"] = _comp_obj_heading.heading_lev_collapsed;        oa_j.object["heading_ptr"] = -        _node_heading_int["ptr_heading"]; +        _comp_obj_heading.ptr_heading;        oa_j.object["doc_object_ptr"] = -        _node_heading_int["ptr_doc_object"]; +        _comp_obj_heading.ptr_doc_object;      } -    oa_j.object["parent_obj_cite_number"] = _node_heading_int["parent_ocn"];         // -    oa_j.object["parent_lev_markup_number"] = _node_heading_int["parent_lev_markup"];         // +    oa_j.object["parent_obj_cite_number"] = _comp_obj_heading.parent_ocn; +    oa_j.object["parent_lev_markup_number"] = _comp_obj_heading.parent_lev_markup;      _obj_attrib = oa_j.toString();      return _obj_attrib;    } @@ -4110,7 +3946,7 @@ struct BookIndexNuggetHash {    string[] bi_main_terms_split_arr;    string[][string][string] bookindex_nugget_hash(      string bookindex_section, -    int obj_cite_number +    int    obj_cite_number    )    in {      debug(bookindexraw) { @@ -4264,68 +4100,48 @@ struct BookIndexReportSection {      mixin SiSUnode;      string type_is;      string lev; -    int lev_int_markup, lev_int_collapsed; +    int heading_lev_markup, heading_lev_collapsed;      string attrib;      int[string] indent; -    auto set_abstract_object = ObjectAbstractSet();      auto mainkeys =        bookindex_unordered_hashes.byKey.array.sort().release; -    ObjComposite[][string] bookindex_section; -    auto node_heading_int_ = node_metadata_heading_int; -    auto node_heading_str_ = node_metadata_heading_str; +    ObjGenericComposite[][string] bookindex_section; +    ObjGenericComposite comp_obj_heading_, comp_obj_para;      auto node_para_int_ = node_metadata_para_int;      auto node_para_str_ = node_metadata_para_str;      if ((mainkeys.length > 0)      && (opt_action_bool["backmatter"] && opt_action_bool["section_bookindex"])) {        string bi_tmp_seg, bi_tmp_scroll; -      node_heading_str_["is"]                       = "heading"; -      node_heading_str_["ocn"]                      = "0"; -      node_heading_str_["segment_anchor_tag"]       = ""; -      node_heading_str_["attrib"]                   = ""; -      node_heading_str_["marked_up_lev"]            = "B"; -      node_heading_int_["heading_lev_markup"]       = 1; -      node_heading_int_["heading_lev_collapsed"]    = 1; -      node_heading_int_["parent_ocn"]               = 1; -      node_heading_int_["parent_lev_markup"]        = 0; -      bookindex_section["scroll"] ~= -        set_abstract_object.contents_heading( -          "Book Index", -          node_heading_str_, -          node_heading_int_, -          [], -        ); -      bookindex_section["seg"] ~= -        set_abstract_object.contents_heading( -          "Book Index", -          node_heading_str_, -          node_heading_int_, -          [], -        ); +      comp_obj_heading_                       = comp_obj_heading_.init; +      comp_obj_heading_.use                   = "content"; +      comp_obj_heading_.of                    = "para"; +      comp_obj_heading_.is_a                  = "heading"; +      comp_obj_heading_.text                  = "Book Index"; +      comp_obj_heading_.ocn                   = 0; +      comp_obj_heading_.marked_up_level       = "B"; +      comp_obj_heading_.heading_lev_markup    = 1; +      comp_obj_heading_.heading_lev_collapsed = 1; +      comp_obj_heading_.parent_ocn            = 1; +      comp_obj_heading_.parent_lev_markup     = 0; +      bookindex_section["scroll"]             ~= comp_obj_heading_; +      bookindex_section["seg"]                ~= comp_obj_heading_;        ++obj_cite_number;        ++mkn; -      node_heading_str_["is"]                       = "heading"; -      node_heading_str_["ocn"]                      = "0"; -      node_heading_str_["segment_anchor_tag"]       = "bookindex"; -      node_heading_str_["attrib"]                   = ""; -      node_heading_str_["marked_up_lev"]            = "1"; -      node_heading_int_["heading_lev_markup"]       = 4; -      node_heading_int_["heading_lev_collapsed"]    = 2; -      node_heading_int_["parent_ocn"]               = 1; -      node_heading_int_["parent_lev_markup"]        = 0; -      bookindex_section["scroll"] ~= -        set_abstract_object.contents_heading( -          "Index", -          node_heading_str_, -          node_heading_int_, -          ["bookindex"], -        ); -      bookindex_section["seg"] ~= -        set_abstract_object.contents_heading( -          "Index", -          node_heading_str_, -          node_heading_int_, -          ["bookindex"], -        ); +      comp_obj_heading_                       = comp_obj_heading_.init; +      comp_obj_heading_.use                   = "content"; +      comp_obj_heading_.of                    = "para"; +      comp_obj_heading_.is_a                  = "heading"; +      comp_obj_heading_.text                  = "Index"; +      comp_obj_heading_.ocn                   = 0; +      comp_obj_heading_.segment_anchor_tag    = "bookindex"; +      comp_obj_heading_.marked_up_level       = "1"; +      comp_obj_heading_.heading_lev_markup    = 4; +      comp_obj_heading_.heading_lev_collapsed = 2; +      comp_obj_heading_.parent_ocn            = 1; +      comp_obj_heading_.parent_lev_markup     = 0; +      comp_obj_heading_.anchor_tags           = ["bookindex"]; +      bookindex_section["scroll"]             ~= comp_obj_heading_; +      bookindex_section["seg"]                ~= comp_obj_heading_;        ++obj_cite_number;        ++mkn;        foreach (mainkey; mainkeys) { @@ -4359,52 +4175,33 @@ struct BookIndexReportSection {          }          bi_tmp_scroll = replaceFirst(bi_tmp_scroll, rgx.trailing_linebreak, "");          bi_tmp_seg = replaceFirst(bi_tmp_seg, rgx.trailing_linebreak, ""); -        indent=[ "hang_position" : 0, "base_position" : 1, ]; -        node_para_str_["is"]                           = "para"; -        node_para_str_["attrib"]                       = ""; -        node_para_int_["ocn"]                          = obj_cite_number; -        node_para_int_["indent_hang"]                  = 0; -        node_para_int_["indent_base"]                  = 1; -        node_para_int_["bullet"]                       = 0; -        bookindex_section["scroll"] ~= -          set_abstract_object.contents_para( -            bi_tmp_scroll, -            node_para_str_, -            node_para_int_, -          ); -        bookindex_section["seg"] ~= -          set_abstract_object.contents_para( -            bi_tmp_seg, -            node_para_str_, -            node_para_int_, -          ); +        comp_obj_para                       = comp_obj_para.init; +        comp_obj_para.use                   = "content"; +        comp_obj_para.of                    = "para"; +        comp_obj_para.is_a                  = "para"; +        comp_obj_para.text                  = to!string(bi_tmp_scroll).strip; +        comp_obj_para.ocn                   = obj_cite_number; +        comp_obj_para.obj_cite_number       = to!string(obj_cite_number); +        comp_obj_para.indent_hang           = 0; +        comp_obj_para.indent_base           = 1; +        comp_obj_para.bullet                = false; +        bookindex_section["scroll"]         ~= comp_obj_para; +        comp_obj_para.text                  = to!string(bi_tmp_seg).strip; +        bookindex_section["seg"]            ~= comp_obj_para;          ++obj_cite_number;          ++mkn;        }      } else {                              // no book index, (figure out what to do here) -      node_heading_str_["is"]                       = "heading"; -      node_heading_str_["ocn"]                      = "0"; -      node_heading_str_["segment_anchor_tag"]       = ""; -      node_heading_str_["attrib"]                   = ""; -      node_heading_str_["marked_up_lev"]            = "B"; -      node_heading_int_["heading_lev_markup"]       = 1; -      node_heading_int_["heading_lev_collapsed"]    = 1; -      node_heading_int_["parent_ocn"]               = 1; -      node_heading_int_["parent_lev_markup"]        = 0; -      bookindex_section["scroll"] ~= -        set_abstract_object.contents_heading( -          "(skip) there is no Book Index", -          node_heading_str_, -          node_heading_int_, -          [""], -        ); -      bookindex_section["seg"] ~= -        set_abstract_object.contents_heading( -          "(skip) there is no Book Index", -          node_heading_str_, -          node_heading_int_, -          [""], -        ); +      comp_obj_heading_                       = comp_obj_heading_.init; +      comp_obj_heading_.text                  = "(skip) there is no Book Index"; +      comp_obj_heading_.ocn                   = 0; +      comp_obj_heading_.marked_up_level       = "B"; +      comp_obj_heading_.heading_lev_markup    = 1; +      comp_obj_heading_.heading_lev_collapsed = 1; +      comp_obj_heading_.parent_ocn            = 1; +      comp_obj_heading_.parent_lev_markup     = 0; +      bookindex_section["scroll"]             ~= comp_obj_heading_; +      bookindex_section["seg"]                ~= comp_obj_heading_;      }      auto t = tuple(bookindex_section, obj_cite_number);      return t; @@ -4434,9 +4231,9 @@ struct NotesSection {  #+name: ao_emitters_endnotes  #+BEGIN_SRC d    private auto gather_notes_for_endnote_section( -    ObjComposite[] contents_am, -    string         segment_anchor_tag_that_object_belongs_to, -    int            cntr, +    ObjGenericComposite[] contents_am, +    string                segment_anchor_tag_that_object_belongs_to, +    int                   cntr,    )    in {      // endnotes/ footnotes for @@ -4448,7 +4245,7 @@ struct NotesSection {      assert(cntr >= previous_count);      previous_count=cntr;      assert( -      match(contents_am[cntr].object, +      match(contents_am[cntr].text,        rgx.inline_notes_delimiter_al_regular_number_note)      );    } @@ -4457,7 +4254,7 @@ struct NotesSection {      foreach(        m;        matchAll( -        contents_am[cntr].object, +        contents_am[cntr].text,          rgx.inline_notes_delimiter_al_regular_number_note        )      ) { @@ -4521,102 +4318,88 @@ struct NotesSection {    }    body {      mixin SiSUnode; -    auto set_abstract_object = ObjectAbstractSet(); -    ObjComposite[][string] the_endnotes_section; +    ObjGenericComposite[][string] the_endnotes_section;      auto endnotes_ = gathered_notes();      string type_is;      string lev, lev_markup_number, lev_collapsed_number;      string attrib;      int[string] indent; -    auto node_heading_int_ = node_metadata_heading_int; -    auto node_heading_str_ = node_metadata_heading_str; +    ObjGenericComposite comp_obj_heading_;      if ((endnotes_["seg"].length > 0)      && (opt_action_bool["backmatter"] && opt_action_bool["section_endnotes"])) { -      node_heading_str_["is"]                       = "heading"; -      node_heading_str_["ocn"]                      = "0"; -      node_heading_str_["segment_anchor_tag"]       = ""; -      node_heading_str_["attrib"]                   = ""; -      node_heading_str_["marked_up_lev"]            = "B"; -      node_heading_int_["heading_lev_markup"]       = 1; -      node_heading_int_["heading_lev_collapsed"]    = 1; -      node_heading_int_["parent_ocn"]               = 1; -      node_heading_int_["parent_lev_markup"]        = 0; -      the_endnotes_section["seg"] ~= -        set_abstract_object.contents_heading( -          "Endnotes", -          node_heading_str_, -          node_heading_int_, -          [], -        ); -      the_endnotes_section["scroll"] ~= -        set_abstract_object.contents_heading( -          "Endnotes", -          node_heading_str_, -          node_heading_int_, -          [], -        ); +      comp_obj_heading_                       = comp_obj_heading_.init; +      comp_obj_heading_.use                   = "content"; +      comp_obj_heading_.of                    = "para"; +      comp_obj_heading_.is_a                  = "heading"; +      comp_obj_heading_.text                  = "Endnotes"; +      comp_obj_heading_.ocn                   = 0; +      comp_obj_heading_.marked_up_level       = "B"; +      comp_obj_heading_.heading_lev_markup    = 1; +      comp_obj_heading_.heading_lev_collapsed = 1; +      comp_obj_heading_.parent_ocn            = 1; +      comp_obj_heading_.parent_lev_markup     = 0; +      the_endnotes_section["seg"]             ~= comp_obj_heading_; +      the_endnotes_section["scroll"]          ~= comp_obj_heading_;        ++obj_cite_number;        ++mkn; -      node_heading_str_["is"]                       = "heading"; -      node_heading_str_["ocn"]                      = "0"; -      node_heading_str_["segment_anchor_tag"]       = "endnotes"; -      node_heading_str_["attrib"]                   = ""; -      node_heading_str_["marked_up_lev"]            = "1"; -      node_heading_int_["heading_lev_markup"]       = 4; -      node_heading_int_["heading_lev_collapsed"]    = 2; -      node_heading_int_["parent_ocn"]               = 1; -      node_heading_int_["parent_lev_markup"]        = 0; -      the_endnotes_section["seg"] ~= -        set_abstract_object.contents_heading( -          "Endnotes", -          node_heading_str_, -          node_heading_int_, -          ["endnotes"], -        ); -      the_endnotes_section["scroll"] ~= -        set_abstract_object.contents_heading( -          "Endnotes", -          node_heading_str_, -          node_heading_int_, -          ["endnotes"], -        ); +      comp_obj_heading_                       = comp_obj_heading_.init; +      comp_obj_heading_.use                   = "content"; +      comp_obj_heading_.of                    = "para"; +      comp_obj_heading_.is_a                  = "heading"; +      comp_obj_heading_.text                  = "Endnotes"; +      comp_obj_heading_.ocn                   = 0; +      comp_obj_heading_.segment_anchor_tag    = "endnotes"; +      comp_obj_heading_.marked_up_level       = "1"; +      comp_obj_heading_.heading_lev_markup    = 4; +      comp_obj_heading_.heading_lev_collapsed = 2; +      comp_obj_heading_.parent_ocn            = 1; +      comp_obj_heading_.parent_lev_markup     = 0; +      comp_obj_heading_.anchor_tags           = ["endnotes"]; +      the_endnotes_section["seg"]             ~= comp_obj_heading_; +      the_endnotes_section["scroll"]          ~= comp_obj_heading_;        ++obj_cite_number;        ++mkn;      } else { -      node_heading_str_["is"]                       = "heading"; -      node_heading_str_["ocn"]                      = "0"; -      node_heading_str_["segment_anchor_tag"]       = ""; -      node_heading_str_["attrib"]                   = ""; -      node_heading_str_["marked_up_lev"]            = "B"; -      node_heading_int_["heading_lev_markup"]       = 1; -      node_heading_int_["heading_lev_collapsed"]    = 1; -      node_heading_int_["parent_ocn"]               = 1; -      node_heading_int_["parent_lev_markup"]        = 0; -      the_endnotes_section["seg"] ~= -        set_abstract_object.contents_heading( -          "(skip) there are no Endnotes", -          node_heading_str_, -          node_heading_int_, -          [""], -        ); -      the_endnotes_section["scroll"] ~= -        set_abstract_object.contents_heading( -          "(skip) there are no Endnotes", -          node_heading_str_, -          node_heading_int_, -          [""], -        ); +      comp_obj_heading_                       = comp_obj_heading_.init; +      comp_obj_heading_.use                   = "content"; +      comp_obj_heading_.of                    = "para"; +      comp_obj_heading_.is_a                  = "heading"; +      comp_obj_heading_.text                  = "(skip) there are no Endnotes"; +      comp_obj_heading_.ocn                   = 0; +      comp_obj_heading_.marked_up_level       = "B"; +      comp_obj_heading_.heading_lev_markup    = 1; +      comp_obj_heading_.heading_lev_collapsed = 1; +      comp_obj_heading_.parent_ocn            = 1; +      comp_obj_heading_.parent_lev_markup     = 0; +      the_endnotes_section["seg"]             ~= comp_obj_heading_; +      the_endnotes_section["scroll"]          ~= comp_obj_heading_;      }      if (opt_action_bool["backmatter"] && opt_action_bool["section_endnotes"]) { +      ObjGenericComposite comp_obj_endnote_; +      comp_obj_endnote_                       = comp_obj_endnote_.init; +      comp_obj_endnote_.use                   = "content"; +      comp_obj_endnote_.of                    = "para"; +      comp_obj_endnote_.is_a                  = "endnote"; +      comp_obj_endnote_.ocn                   = 0; +      comp_obj_endnote_.obj_cite_number       = "0"; +      comp_obj_endnote_.indent_hang           = 0; +      comp_obj_endnote_.indent_base           = 0; +      comp_obj_endnote_.bullet                = false;        foreach (i, endnote; endnotes_["seg"]) { -        attrib=""; -        the_endnotes_section["seg"] ~= -          set_abstract_object.contents_endnote(endnote, endnotes_["anchor"][i]); +        auto     m                            = (matchFirst(endnote, rgx.note_ref)); +        string   notenumber                   = to!string(m.captures[1]); +        string   anchor_tag                   = "note_" ~ notenumber; +        comp_obj_endnote_.anchor_tags         ~= [ endnotes_["anchor"][i] ]; // fix +        comp_obj_endnote_.text                = endnote.strip; +        the_endnotes_section["seg"]           ~= comp_obj_endnote_;        }        foreach (i, endnote; endnotes_["scroll"]) { -        attrib=""; -        the_endnotes_section["scroll"] ~= -          set_abstract_object.contents_endnote(endnote, endnotes_["anchor"][i]); +        auto     m                            = (matchFirst(endnote, rgx.note_ref)); +        string   notenumber                   = to!string(m.captures[1]); +        string   anchor_tag                   = "note_" ~ notenumber; +        comp_obj_endnote_.anchor_tags         ~= [ endnotes_["anchor"][i] ]; // fix +        comp_obj_endnote_.text                = endnote.strip; +        the_endnotes_section["scroll"]        ~= comp_obj_endnote_;        }      }      auto t = tuple(the_endnotes_section, obj_cite_number); @@ -4644,8 +4427,8 @@ struct Bibliography {  #+name: ao_emitters_bibliography  #+BEGIN_SRC d    public JSONValue[] _bibliography_( -    ref string[] biblio_unsorted_incomplete, -    ref JSONValue[] bib_arr_json +    ref string[]     biblio_unsorted_incomplete, +    ref JSONValue[]  bib_arr_json    )    in { }    body { @@ -4675,7 +4458,7 @@ struct Bibliography {  #+name: ao_emitters_bibliography  #+BEGIN_SRC d    final private JSONValue[] _biblio_unsorted_complete_( -    string[] biblio_unordered, +    string[]        biblio_unordered,      ref JSONValue[] bib_arr_json    ) {      foreach (bibent; biblio_unordered) { @@ -4763,11 +4546,11 @@ struct NodeStructureMetadata {  #+name: ao_emitters_metadata  #+BEGIN_SRC d -  auto node_emitter( +  ObjGenericComposite node_location_emitter(      string lev_markup_number,      string segment_anchor_tag,      int    obj_cite_number_, -    int   cntr_, +    int    cntr_,      int    ptr_,      string is_    ) @@ -4793,23 +4576,13 @@ struct NodeStructureMetadata {        p_["lev_markup_number"] = DocStructMarkupHeading.h_text_1;        p_["obj_cite_number"] = lv4;      } -    string[string] _node_heading_str = [ -      "is"                            : is_, -      "ocn"                           : to!string(obj_cite_number_), -      "marked_up_lev"                 : "", -      "segment_anchor_tag"            : to!string(segment_anchor_tag), -      "attrib"                        : "", -    ]; -    int[string] _node_heading_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"], -    ]; +    ObjGenericComposite comp_obj_location; +    comp_obj_location                       = comp_obj_location.init; +    comp_obj_location.is_a                  = is_; +    comp_obj_location.ocn                   = obj_cite_number_; +    comp_obj_location.segment_anchor_tag    = to!string(segment_anchor_tag); +    comp_obj_location.parent_ocn            = p_["obj_cite_number"]; +    comp_obj_location.parent_lev_markup     = p_["lev_markup_number"];      debug(node) {        if (match(lev_markup_number, rgx.levels_numbered_headings)) {          writeln("x ", to!string(_node)); @@ -4817,14 +4590,10 @@ struct NodeStructureMetadata {          writeln("- ", to!string(_node));        }      } -    assert(_node_heading_int["parent_lev_markup"] >= 4);         // -    assert(_node_heading_int["parent_lev_markup"] <= 7);         // -    assert(_node_heading_int["parent_ocn"] >= 0);      // hmm, perhaps         // -    auto t = tuple( -      _node_heading_str, -      _node_heading_int, -    ); -    return t; +    assert(comp_obj_location.parent_lev_markup >= 4); +    assert(comp_obj_location.parent_lev_markup <= 7); +    assert(comp_obj_location.parent_ocn >= 0); +    return comp_obj_location;    }    invariant() {    } @@ -4834,7 +4603,8 @@ struct NodeStructureMetadata {  #+name: ao_emitters_metadata  #+BEGIN_SRC d -  auto node_emitter_heading( +  ObjGenericComposite node_emitter_heading( +    string _text,      string lev,      string lev_markup_number,      string lev_collapsed_number, @@ -4843,7 +4613,7 @@ struct NodeStructureMetadata {      int    cntr_,      int    ptr_,      string is_, -    int html_segnames_ptr, +    int    html_segnames_ptr,    )    in {      auto rgx = Rgx(); @@ -4942,23 +4712,23 @@ struct NodeStructureMetadata {      default:        break;      } -    string[string] _node_heading_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_heading_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"], -    ]; +    ObjGenericComposite _comp_obj_heading_; +    _comp_obj_heading_                       = _comp_obj_heading_.init; +    _comp_obj_heading_.use                   = "content"; +    _comp_obj_heading_.of                    = "para"; +    _comp_obj_heading_.is_a                  = "heading"; +    _comp_obj_heading_.text                  = to!string(_text).strip; +    _comp_obj_heading_.ocn                   = obj_cite_number_; +    _comp_obj_heading_.obj_cite_number       = (obj_cite_number==0) ? "" : to!string(obj_cite_number); +    _comp_obj_heading_.segment_anchor_tag    = to!string(segment_anchor_tag); +    _comp_obj_heading_.marked_up_level       = lev; +    _comp_obj_heading_.heading_lev_markup    = (!(lev_markup_number.empty) ? to!int(lev_markup_number) : 0); +    _comp_obj_heading_.heading_lev_collapsed = (!(lev_collapsed_number.empty) ? to!int(lev_collapsed_number) : 0); +    _comp_obj_heading_.parent_ocn            = p_["obj_cite_number"]; +    _comp_obj_heading_.parent_lev_markup     = p_["lev_markup_number"]; +    _comp_obj_heading_.ptr_doc_object        = cntr_; +    _comp_obj_heading_.ptr_html_segnames     = ((lev_markup_number == "4") ? html_segnames_ptr : 0); +    _comp_obj_heading_.ptr_heading           = ptr_;      debug(node) {        if (match(lev_markup_number, rgx.levels_numbered_headings)) {          writeln("* ", to!string(_node)); @@ -4969,44 +4739,37 @@ struct NodeStructureMetadata {          writeln("* ", to!string(_node));        }      } -    assert(_node_heading_int["parent_lev_markup"] <= 7); -    assert(_node_heading_int["parent_ocn"] >= 0); +    assert(_comp_obj_heading_.parent_lev_markup <= 7); +    assert(_comp_obj_heading_.parent_ocn >= 0);      if (match(lev_markup_number, rgx.levels_numbered_headings)) { -      assert(_node_heading_int["heading_lev_markup"] <= 7);         // issues -      assert(to!int(_node_heading_str["ocn"]) >= 0); -      if (_node_heading_int["parent_lev_markup"] > 0) { -        assert(_node_heading_int["parent_lev_markup"] < _node_heading_int["heading_lev_markup"]); -        if (to!int(_node_heading_str["ocn"]) != 0) { -          assert(_node_heading_int["parent_ocn"] < to!int(_node_heading_str["ocn"])); +      assert(_comp_obj_heading_.heading_lev_markup <= 7); +      assert(_comp_obj_heading_.ocn >= 0); +      if (_comp_obj_heading_.parent_lev_markup > 0) { +        assert(_comp_obj_heading_.parent_lev_markup < _comp_obj_heading_.heading_lev_markup); +        if (_comp_obj_heading_.ocn != 0) { +          assert(_comp_obj_heading_.parent_ocn < _comp_obj_heading_.ocn);          }        } -      if (_node_heading_int["heading_lev_markup"] == 0) { -        assert(_node_heading_int["parent_lev_markup"] == DocStructMarkupHeading.h_sect_A); -      } else if  (_node_heading_int["heading_lev_markup"] == DocStructMarkupHeading.h_sect_B) { -        assert(_node_heading_int["parent_lev_markup"] == DocStructMarkupHeading.h_sect_A); -      } else if  (_node_heading_int["heading_lev_markup"] == DocStructMarkupHeading.h_sect_C) { -        assert(_node_heading_int["parent_lev_markup"] == DocStructMarkupHeading.h_sect_B); -      } else if  (_node_heading_int["heading_lev_markup"] == DocStructMarkupHeading.h_sect_D) { -        assert(_node_heading_int["parent_lev_markup"] == DocStructMarkupHeading.h_sect_C); -      } else if  (_node_heading_int["heading_lev_markup"] == DocStructMarkupHeading.h_text_1) { -        assert(_node_heading_int["parent_lev_markup"] <= DocStructMarkupHeading.h_sect_D); -      } else if  (_node_heading_int["heading_lev_markup"] == DocStructMarkupHeading.h_text_2) { -        assert(_node_heading_int["parent_lev_markup"] == DocStructMarkupHeading.h_text_1); -      } else if  (_node_heading_int["heading_lev_markup"] == DocStructMarkupHeading.h_text_3) { -        assert(_node_heading_int["parent_lev_markup"] == DocStructMarkupHeading.h_text_2); -      } else if  (_node_heading_int["heading_lev_markup"] == DocStructMarkupHeading.h_text_4) { -        assert(_node_heading_int["parent_lev_markup"] == DocStructMarkupHeading.h_text_3); -      } else if  (_node_heading_int["heading_lev_markup"] == DocStructMarkupHeading.h_text_5) { -        // // writeln(to!int(_node_heading_int["parent_lev_markup"])); -        // // assert(to!int(_node_heading_int["parent_lev_markup"]) >= 4); -        // // assert(to!int(_node_heading_int["parent_lev_markup"]) <= 7); +      if (_comp_obj_heading_.heading_lev_markup == 0) { +        assert(_comp_obj_heading_.parent_lev_markup == DocStructMarkupHeading.h_sect_A); +      } else if  (_comp_obj_heading_.heading_lev_markup == DocStructMarkupHeading.h_sect_B) { +        assert(_comp_obj_heading_.parent_lev_markup == DocStructMarkupHeading.h_sect_A); +      } else if  (_comp_obj_heading_.heading_lev_markup == DocStructMarkupHeading.h_sect_C) { +        assert(_comp_obj_heading_.parent_lev_markup == DocStructMarkupHeading.h_sect_B); +      } else if  (_comp_obj_heading_.heading_lev_markup == DocStructMarkupHeading.h_sect_D) { +        assert(_comp_obj_heading_.parent_lev_markup == DocStructMarkupHeading.h_sect_C); +      } else if  (_comp_obj_heading_.heading_lev_markup == DocStructMarkupHeading.h_text_1) { +        assert(_comp_obj_heading_.parent_lev_markup <= DocStructMarkupHeading.h_sect_D); +      } else if  (_comp_obj_heading_.heading_lev_markup == DocStructMarkupHeading.h_text_2) { +        assert(_comp_obj_heading_.parent_lev_markup == DocStructMarkupHeading.h_text_1); +      } else if  (_comp_obj_heading_.heading_lev_markup == DocStructMarkupHeading.h_text_3) { +        assert(_comp_obj_heading_.parent_lev_markup == DocStructMarkupHeading.h_text_2); +      } else if  (_comp_obj_heading_.heading_lev_markup == DocStructMarkupHeading.h_text_4) { +        assert(_comp_obj_heading_.parent_lev_markup == DocStructMarkupHeading.h_text_3); +      } else if  (_comp_obj_heading_.heading_lev_markup == DocStructMarkupHeading.h_text_5) {        }      } -    auto t = tuple( -      _node_heading_str, -      _node_heading_int, -    ); -    return t; +    return _comp_obj_heading_;    }    invariant() {    } @@ -5026,7 +4789,7 @@ struct NodeStructureMetadata {  #+BEGIN_SRC d  auto assertions_doc_structure(    string[string] an_object, -  int[string] lv +  int[string]    lv  ) {    if (lv["h3"] > State.off) {      assert(lv["h0"] > State.off); @@ -5240,66 +5003,12 @@ set abstracted objects for downstream processing  #+BEGIN_SRC d  struct HeadingAttrib {    string lev                            = "9"; -  int    lev_int_markup                 = 9; -  int    lev_int_collapsed              = 9; -  int[]  closes_lev_collapsed           = []; // TODO track -  int[]  closes_lev_markup              = []; // TODO track -  int    array_ptr                  = 0; -// heading segments, 1~ lev4: -  int    heading_array_ptr_segments = 0; // TODO -} -#+END_SRC - -*** paragraph attribute - -#+name: ao_structs_init -#+BEGIN_SRC d -struct ParaAttrib { -  int indent_start            = 0; -  int indent_rest             = 0; -  bool bullet                 = false; -} -#+END_SRC - -*** block attribute - -#+name: ao_structs_init -#+BEGIN_SRC d -struct BlockAttrib { -  string syntax               = ""; -} -#+END_SRC - -*** comment attribute - -#+name: ao_structs_init -#+BEGIN_SRC d -struct Comment { -  // no .attrib and no .obj_cite_number -} -#+END_SRC - -*** TODO node - -#+name: ao_structs_init -#+BEGIN_SRC d -struct Node { -  int ocn                            = 0; -  string seg_anchor_tag              = ""; -// parent -  int parent_lev_int_markup          = 0; -  int parent_ocn                     = 0; -  int[] ancestors                    = []; // TODO track -// heading: -  int heading_lev_int_markup         = 0; -  int heading_lev_int_collapsed      = 0; -  int[] heading_closes_lev_collapsed = []; // TODO track -  int[] heading_closes_lev_markup    = []; // TODO track -  int heading_array_ptr          = 0; -// heading segments, 1~ lev4: -  int heading_array_ptr_segments = 0; // TODO -// node info json string: -  string[string][string] node; +  int    heading_lev_markup             = 9; +  int    heading_lev_collapsed          = 9; +  int[]  closes_lev_collapsed           = []; +  int[]  closes_lev_markup              = []; +  int    array_ptr                      = 0; +  int    heading_array_ptr_segments     = 0;  }  #+END_SRC @@ -5307,202 +5016,46 @@ struct Node {  #+name: ao_structs_init  #+BEGIN_SRC d -struct ObjComposite { -  string use                  = ""; -  string of                   = ""; -  string is_a                 = ""; -  string object               = ""; -  string obj_cite_number      = "";  // not used for calculations? output only? else int -  string[] anchor_tags        = []; -  HeadingAttrib heading_attrib; -  ParaAttrib para_attrib; -  BlockAttrib block_attrib; -  Node node_structure; +struct ObjGenericComposite { +  // size_t id; +  string                 use                          = ""; +  string                 of                           = ""; +  string                 is_a                         = ""; +  string                 text                         = ""; +  string                 obj_cite_number              = ""; +  string[]               anchor_tags                  = []; +  string                 marked_up_level              = "9"; +  int[]                  closes_lev_collapsed         = []; +  int[]                  closes_lev_markup            = []; +  int                    indent_base                  = 0; +  int                    indent_hang                  = 0; +  bool                   bullet                       = false; +  string                 syntax                       = ""; +  int                    ocn                          = 0; +  string                 segment_anchor_tag           = ""; +  int                    parent_lev_markup            = 0; +  int                    parent_ocn                   = 0; +  int[]                  ancestors                    = []; +  int                    heading_lev_markup           = 9; +  int                    heading_lev_collapsed        = 9; +  int[]                  heading_closes_lev_collapsed = []; +  int[]                  heading_closes_lev_markup    = []; +  int                    heading_array_ptr            = 0; +  int                    ptr_doc_object               = 0; +  int                    ptr_html_segnames            = 0; +  int                    ptr_heading                  = 0; +  int                    array_ptr                    = 0; +  int                    heading_array_ptr_segments   = 0; +  string[string][string] node;  }  #+END_SRC -*** object composite array +*** The Objects: generic composite object array  #+name: ao_structs_init  #+BEGIN_SRC d -struct ObjCompositeArr { -  ObjComposite[] oca; -} -#+END_SRC - -** object setter                                                        :set: -*** comment                                                         :comment: - -#+name: ao_object_setter_comment -#+BEGIN_SRC d -auto contents_comment(in string object) { -  ObjComposite object_set; -  object_set.use                  = "comment"; -  object_set.of                   = "comment"; -  object_set.is_a                 = "comment"; -  object_set.object               = object; -  return object_set; -} -#+END_SRC - -*** heading                                                         :heading: - -#+name: ao_object_setter_heading -#+BEGIN_SRC d -auto contents_heading( -  in string         object, -  in string[string] _node_heading_str, -  in int[string]    _node_heading_int, -  in string[]       tags, -) { -  ObjComposite object_set; -  object_set.use                                 = "content"; -  object_set.of                                  = "para"; -  object_set.is_a                                = "heading"; -  object_set.object                              = object.strip; -  object_set.obj_cite_number                     = _node_heading_str["ocn"]; -  object_set.anchor_tags                         ~= tags; -  object_set.heading_attrib.lev                  = _node_heading_str["marked_up_lev"]; -  object_set.heading_attrib.lev_int_markup       = _node_heading_int["heading_lev_markup"]; -  object_set.heading_attrib.lev_int_collapsed    = _node_heading_int["heading_lev_collapsed"]; -  return object_set; -} -#+END_SRC - -*** para                                                               :para: - -#+name: ao_object_setter_para -#+BEGIN_SRC d -auto contents_para( -  in string         object, -  in string[string] _node_para_str, -  in int[string]    _node_para_int, -) { -  ObjComposite object_set; -  object_set.use                      = "content"; -  object_set.of                       = "para"; -  object_set.is_a                     = "para"; -  object_set.object                   = object.strip; -  object_set.obj_cite_number          = (_node_para_int["ocn"]==0) ? "" : to!string(_node_para_int["ocn"]); -  object_set.anchor_tags              = []; -  object_set.para_attrib.indent_start = _node_para_int["indent_hang"]; -  object_set.para_attrib.indent_rest  = _node_para_int["indent_base"]; -  object_set.para_attrib.bullet       = (_node_para_int["bullet"] == 1) ? true : false; -  return object_set; -} -#+END_SRC - -*** toc                                                               :para: - -#+name: ao_object_setter_para -#+BEGIN_SRC d -auto contents_toc( -  in string is_a, -  in string object, -  in string attrib, -  in int obj_cite_number, -  in int[string] indent, -  in bool bullet, -) { -  ObjComposite object_set; -  object_set.use                      = "content"; -  object_set.of                       = "para"; -  object_set.is_a                     = "toc"; -  object_set.object                   = object.strip; -  object_set.obj_cite_number          = (obj_cite_number==0) ? "" : to!string(obj_cite_number); -  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; -  return object_set; -} -#+END_SRC - -*** para_endnote                                                       :para: - -#+name: ao_object_setter_endnote -#+BEGIN_SRC d -auto contents_endnote( -  in string object, -  in string tag, -) { -  auto m = (matchFirst(object, rgx.note_ref)); -  string notenumber = to!string(m.captures[1]); -  string anchor_tag = "note_" ~ notenumber; -  ObjComposite object_set; -  object_set.use                      = "content"; -  object_set.of                       = "para"; -  object_set.is_a                     = "endnote"; -  object_set.object                   = object.strip; -  object_set.obj_cite_number          = ""; -  object_set.anchor_tags              ~= [ tag ]; -  object_set.para_attrib.indent_start = 0; -  object_set.para_attrib.indent_rest  = 0; -  object_set.para_attrib.bullet       = false; -  return object_set; -} -#+END_SRC - -*** block                                                             :block: - -#+name: ao_object_setter_block -#+BEGIN_SRC d -auto contents_block( -  in string type_is, -  in string object, -  in string attrib, -  in int obj_cite_number, -) { -  ObjComposite object_set; -  object_set.use                 = "content"; -  object_set.of                  = "block"; -  object_set.is_a                = type_is; -  object_set.object              = object; -  object_set.obj_cite_number     = (obj_cite_number==0) ? "" : to!string(obj_cite_number); -  object_set.anchor_tags         = []; -  return object_set; -} -#+END_SRC - -*** block code                                                   :block:code: - -#+name: ao_object_setter_block_code -#+BEGIN_SRC d -auto contents_block_code( -  in string type_is, -  in string object, -  in string attrib_language_syntax, -  in int obj_cite_number, -) { -  ObjComposite object_set; -  object_set.use                 = "content"; -  object_set.of                  = "block"; -  object_set.is_a                = type_is; -  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.anchor_tags         = []; -  return object_set; -} -#+END_SRC - -*** block obj_cite_number string                                      :block: - -#+name: ao_object_setter_block_obj_cite_number_string -#+BEGIN_SRC d -auto contents_block_obj_cite_number_string( -  in string         type_is, -  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"; -  object_set.of                                = "block"; -  object_set.is_a                              = type_is; -  object_set.object                            = object; -  object_set.obj_cite_number                   = obj_cite_number; -  return object_set; +struct TheObjects { +  ObjGenericComposite[] oca;  }  #+END_SRC diff --git a/org/ao_conf_make_meta.org b/org/ao_conf_make_meta.org index bf39340..94236e7 100644 --- a/org/ao_conf_make_meta.org +++ b/org/ao_conf_make_meta.org @@ -13,7 +13,7 @@  #+TAGS: assert(a) class(c) debug(d) mixin(m) sdp(s) tangle(T) template(t) WEB(W) noexport(n)  [[./sdp.org][sdp]]  [[./][org/]] -* 0. Code Outline / Structure (tangles)                              :tangle: +* 0. Code Skeleton / Outline / Structure (tangles)                   :tangle:  ** 1. Header Hub                                 :ao_markup_header_extract:  #+BEGIN_SRC d :tangle ../src/sdp/ao_conf_make_meta.d diff --git a/org/ao_defaults.org b/org/ao_defaults.org index 26f8ae8..2aad14e 100644 --- a/org/ao_defaults.org +++ b/org/ao_defaults.org @@ -13,7 +13,7 @@  #+TAGS: assert(a) class(c) debug(d) mixin(m) sdp(s) tangle(T) template(t) WEB(W) noexport(n)  [[./sdp.org][sdp]]  [[./][org/]] -* 0. Code Outline / Structure (tangles)                              :tangle: +* 0. Code Skeleton / Outline / Structure (tangles)                   :tangle:  ** 1. defaults:                                              :ao_defaults.d:  #+name: tangle_ao_defaults diff --git a/org/ao_output_debugs.org b/org/ao_output_debugs.org index bea972e..28fcef2 100644 --- a/org/ao_output_debugs.org +++ b/org/ao_output_debugs.org @@ -13,7 +13,7 @@  #+TAGS: assert(a) class(c) debug(d) mixin(m) sdp(s) tangle(T) template(t) WEB(W) noexport(n)  [[./sdp.org][sdp]]  [[./][org/]] -* 0. Code Outline / Structure (tangles)                              :tangle: +* 0. Code Skeleton / Outline / Structure (tangles)                   :tangle:  ** code structure:                                          :ao_output_debugs.d:  #+name: tangle_ao_output_debugs @@ -74,8 +74,8 @@ debug(parent) {              "%s node: %s heading: %s %s",              obj.obj_cite_number,              obj.node, -            obj.lev_int_markup, -            obj.object, +            obj.heading_lev_markup, +            obj.text,            );          }        } @@ -101,7 +101,7 @@ debug(dumpdoc) {          "[%s][%s]\n%s",          obj.obj_cite_number,          obj.is_a, -        obj.object +        obj.text        );      }    } @@ -120,11 +120,11 @@ void out_toc(S)(    if (contents[key].length > 1) {      string indent_spaces;      foreach (obj; contents[key]) { -      indent_spaces=markup.indent_by_spaces_provided(obj.para_attrib.indent_start); +      indent_spaces=markup.indent_by_spaces_provided(obj.indent_hang);        writefln(          "%s%s",          indent_spaces, -        obj.object +        obj.text        );      }    } @@ -144,7 +144,7 @@ void out_endnotes(S)(        writefln(          "[%s]\n%s",          obj.is_a, -        obj.object +        obj.text        );      }    } @@ -165,7 +165,7 @@ void out_bookindex(S)(          "[%s][%s]\n%s",          obj.obj_cite_number,          obj.is_a, -        obj.object +        obj.text        );      }    } @@ -185,7 +185,7 @@ debug(section_head) {          "[%s][%s]\n%s",          obj.obj_cite_number,          obj.is_a, -        obj.object +        obj.text        );      }    } @@ -235,7 +235,7 @@ debug(section_body) {          "[%s][%s]\n%s",          obj.obj_cite_number,          obj.is_a, -        obj.object +        obj.text        );      }    } @@ -286,7 +286,7 @@ debug(section_glossary) {          "[%s][%s]\n%s",          obj.obj_cite_number,          obj.is_a, -        obj.object +        obj.text        );      }    } @@ -305,7 +305,7 @@ debug(section_bibliography) {          "[%s][%s]\n%s",          obj.obj_cite_number,          obj.is_a, -        obj.object +        obj.text        );      }    } @@ -356,7 +356,7 @@ debug(blurb_section) {          "[%s][%s]\n%s",          obj.obj_cite_number,          obj.is_a, -        obj.object +        obj.text        );      }    } @@ -381,7 +381,7 @@ debug(objects) {          "* [%s][%s] %s",          obj.obj_cite_number,          obj.is_a, -        obj.object +        obj.text        );      }    } @@ -564,11 +564,11 @@ debug(anchor) {        if (obj.is_a == "heading") {          writefln(            "%s~ [%s] %s %s", -          obj.heading_attrib.lev, +          obj.marked_up_level,            obj.obj_cite_number,            obj.anchor_tags,            // "[", obj["is"], "] ", -          obj.object +          obj.text          );        }      } @@ -581,48 +581,15 @@ debug(anchor) {  #+name: ao_output_debugs  #+BEGIN_SRC d  debug(heading) {                         // heading -  string spc;    foreach (k; document_section_keys_sequenced["seg"]) {      foreach (o; contents[k]) {        if (o.is_a == "heading") { -        switch (o.heading_attrib.lev_int_markup) { -        case 0: -          spc=""; -          break; -        case 1: -          spc="  "; -          break; -        case 2: -          spc="    "; -          break; -        case 3: -          spc="      "; -          break; -        case 4: -          spc="        "; -          break; -        case 5: -          spc="          "; -          break; -        case 6: -          spc="            "; -          break; -        case 7: -          spc="              "; -          break; -        case 8: -          spc="                "; -          break; -        default: -          spc=""; -          break; -        }          writefln(            "%s* %s\n                (markup level: %s; collapsed level: %s)", -          spc, -          strip(o.object), -          o.heading_attrib.lev_int_markup, -          o.heading_attrib.lev_int_collapsed +          replicate("  ", o.heading_lev_markup), +          strip(o.text), +          o.heading_lev_markup, +          o.heading_lev_collapsed,          );        }      } @@ -646,10 +613,10 @@ debug(headings) {        if (obj.is_a == "heading") {          writefln(            "%s~ [%s] %s", -          obj.heading_attrib.lev, +          obj.marked_up_level,            obj.obj_cite_number,            // "[", obj["is"], "] ", -          obj.object +          obj.text          );        }      } diff --git a/org/ao_read_source_files.org b/org/ao_read_source_files.org index 3a72106..05e15eb 100644 --- a/org/ao_read_source_files.org +++ b/org/ao_read_source_files.org @@ -13,7 +13,7 @@  #+TAGS: assert(a) class(c) debug(d) mixin(m) sdp(s) tangle(T) template(t) WEB(W) noexport(n)  [[./sdp.org][sdp]]  [[./][org/]] -* 0. Code Outline / Structure (tangles)                              :tangle: +* 0. Code Skeleton / Outline / Structure (tangles)                   :tangle:  ** 1. config files (conf.sdl & sisu_document_make)          :ao_config_files:  *** config files, read in @@ -525,58 +525,6 @@ debug(insert) {                              // insert file  return contents;  #+END_SRC -** config files (conf.sdl & sisu_document_make)             :ao_config_files: - -*** config files, read in - -#+BEGIN_SRC d :tangle ../src/sdp/ao_read_config_files.d -/++ -  read configuration files<BR> -  - read config files<BR> -  ao_config_files.d -+/ -template SiSUconfigIn() { -  private import -    std.exception, -    std.stdio, -    std.utf, -    std.conv : to; -  private -  struct ConfigIn { -    private import std.file; -    <<ao_config_file_in>> -  } -} -#+END_SRC - -*** config files get sdlang root tag - -#+BEGIN_SRC d :tangle ../src/sdp/ao_read_config_files.d -/+ - -+/ -template SiSUconfigSDLang() { -  struct ConfigSDLangRootTag { -    <<ao_config_file_sdlang>> -  } -} -#+END_SRC - -*** config files hub - -#+BEGIN_SRC d :tangle ../src/sdp/ao_read_config_files.d -/+ - -+/ -template SiSUconfigSDLangHub() { -  mixin SiSUconfigIn; -  mixin SiSUconfigSDLang; -  struct ConfigHub { -    <<ao_config_file_sdlang_hub>> -  } -} -#+END_SRC -  * figure out  ** break up file here to sisu markup content and header diff --git a/org/compile_time_info.org b/org/compile_time_info.org index ee143eb..4e7e3da 100644 --- a/org/compile_time_info.org +++ b/org/compile_time_info.org @@ -13,7 +13,7 @@  #+TAGS: assert(a) class(c) debug(d) mixin(m) sdp(s) tangle(T) template(t) WEB(W) noexport(n)  [[./sdp.org][sdp]]  [[./][org/]] -* Code Outline / Structure (tangles)                                 :tangle: +* Code Skeleton / Outline / Structure (tangles)                      :tangle:  ** compile_time_info:                                                      :compile_time_info.d:  #+begin_src d  :tangle ../src/sdp/compile_time_info.d diff --git a/org/output.org b/org/output.org index 0bad148..976fcdd 100644 --- a/org/output.org +++ b/org/output.org @@ -13,7 +13,7 @@  #+TAGS: assert(a) class(c) debug(d) mixin(m) sdp(s) tangle(T) template(t) WEB(W) noexport(n)  [[./sdp.org][sdp]]  [[./][org/]] -* Code Outline / Structure (tangles)                                 :tangle: +* Code Skeleton / Outline / Structure (tangles)                      :tangle:  ** output hub template file [#A]  #+BEGIN_SRC d :tangle ../src/sdp/output_hub.d @@ -126,13 +126,13 @@ auto html_heading(O)(    </div>¶",    obj.obj_cite_number,    obj.obj_cite_number, -  obj.heading_attrib.lev_int_markup, +  obj.heading_lev_markup,    obj.is_a,    obj.obj_cite_number,    obj.obj_cite_number,    tags, -  obj.object, -  obj.heading_attrib.lev_int_markup +  obj.text, +  obj.heading_lev_markup,    );    return o;  } @@ -157,10 +157,10 @@ auto html_para(O)(        obj.obj_cite_number,        obj.obj_cite_number,        obj.is_a, -      obj.para_attrib.indent_start, -      obj.para_attrib.indent_rest, +      obj.indent_hang, +      obj.indent_base,        tags, -      obj.object +      obj.text      );    } else {      o = format(q"¶  <div class="substance"> @@ -172,11 +172,11 @@ auto html_para(O)(        obj.obj_cite_number,        obj.obj_cite_number,        obj.is_a, -      obj.para_attrib.indent_start, -      obj.para_attrib.indent_rest, +      obj.indent_hang, +      obj.indent_base,        obj.obj_cite_number,        tags, -      obj.object +      obj.text      );    }    return o; @@ -201,7 +201,7 @@ auto html_nugget(O)(    obj.obj_cite_number,    obj.is_a,    obj.obj_cite_number, -  obj.object +  obj.text    );    return o;  } @@ -258,9 +258,9 @@ auto html_toc(O)(    </p>  </div>¶",    obj.is_a, -  obj.para_attrib.indent_start, -  obj.para_attrib.indent_rest, -  obj.object +  obj.indent_hang, +  obj.indent_base, +  obj.text    );    return o;  } @@ -278,9 +278,9 @@ auto html_endnote(O)(    %s  </p>¶",      obj.is_a, -    obj.para_attrib.indent_start, -    obj.para_attrib.indent_rest, -    obj.object +    obj.indent_hang, +    obj.indent_base, +    obj.text    );    return o;  } diff --git a/org/sdp.org b/org/sdp.org index e359c65..274c285 100644 --- a/org/sdp.org +++ b/org/sdp.org @@ -13,7 +13,7 @@  #+TAGS: assert(a) class(c) debug(d) mixin(m) sdp(s) tangle(T) template(t) WEB(W) noexport(n)  [[../maker.org][maker.org makefile]]  [[./][org/]] -* 0. Code Outline / Structure (tangles)                      :tangle: +* 0. Code Skeleton / Outline / Structure (tangles)                   :tangle:  ** TODO version.txt: set version (sisu document parser)             :version:  #+NAME: version_txt @@ -24,7 +24,7 @@ struct Version {    int minor;    int patch;  } -enum ver = Version(0, 9, 6); +enum ver = Version(0, 10, 0);  #+END_SRC  ** TODO sdp src/sdp.d                                               :sdp.d: @@ -286,6 +286,7 @@ bool[string] opt_action_bool = [    "section_bookindex"  : true,    "section_blurb"      : true,    "backmatter"         : true, +  "skip_output"        : false,  ];  auto helpInfo = getopt(args,    std.getopt.config.passThrough, @@ -320,6 +321,7 @@ auto helpInfo = getopt(args,    "section-bookindex",  "--section-bookindex process document bookindex (default)",   &opt_action_bool["section_bookindex"],    "section-blurb",      "--section-blurb process document blurb (default)",           &opt_action_bool["section_blurb"],    "backmatter",         "--section-backmatter process document backmatter (default)", &opt_action_bool["backmatter"], +  "skip_output",        "--skip-output",                                              &opt_action_bool["skip_output"],  );  if (helpInfo.helpWanted) {    defaultGetoptPrinter("Some information about the program.", helpInfo.options); @@ -498,15 +500,17 @@ debug(checkdoc) {  #+NAME: sdp_each_file_do_selected_output  #+BEGIN_SRC d  /+ ↓ output hub +/ -output.hub( -  doc_ao_contents, -  document_section_keys_sequenced, -  doc_html_segnames, -  dochead_make, -  dochead_meta, -  fn_src, -  opt_action_bool -); +if (!(opt_action_bool["skip_output"])) { +  output.hub( +    doc_ao_contents, +    document_section_keys_sequenced, +    doc_html_segnames, +    dochead_make, +    dochead_meta, +    fn_src, +    opt_action_bool +  ); +}  #+END_SRC  **** scope (on loop exit)                                        :scope:exit: @@ -117,6 +117,7 @@ void main(string[] args) {      "section_bookindex"  : true,      "section_blurb"      : true,      "backmatter"         : true, +    "skip_output"        : false,    ];    auto helpInfo = getopt(args,      std.getopt.config.passThrough, @@ -151,6 +152,7 @@ void main(string[] args) {      "section-bookindex",  "--section-bookindex process document bookindex (default)",   &opt_action_bool["section_bookindex"],      "section-blurb",      "--section-blurb process document blurb (default)",           &opt_action_bool["section_blurb"],      "backmatter",         "--section-backmatter process document backmatter (default)", &opt_action_bool["backmatter"], +    "skip_output",        "--skip-output",                                              &opt_action_bool["skip_output"],    );    if (helpInfo.helpWanted) {      defaultGetoptPrinter("Some information about the program.", helpInfo.options); @@ -274,15 +276,17 @@ void main(string[] args) {          );        }        /+ ↓ output hub +/ -      output.hub( -        doc_ao_contents, -        document_section_keys_sequenced, -        doc_html_segnames, -        dochead_make, -        dochead_meta, -        fn_src, -        opt_action_bool -      ); +      if (!(opt_action_bool["skip_output"])) { +        output.hub( +          doc_ao_contents, +          document_section_keys_sequenced, +          doc_html_segnames, +          dochead_make, +          dochead_meta, +          fn_src, +          opt_action_bool +        ); +      }        scope(exit) {          debug(checkdoc) {            writefln( diff --git a/src/sdp/ao_abstract_doc_source.d b/src/sdp/ao_abstract_doc_source.d index b89c1e1..1580238 100644 --- a/src/sdp/ao_abstract_doc_source.d +++ b/src/sdp/ao_abstract_doc_source.d @@ -17,13 +17,12 @@ template SiSUdocAbstraction() {      /+ ↓ abstraction struct init +/      /+ initialize +/      auto rgx = Rgx(); -    ObjComposite[][string] the_table_of_contents_section; -    ObjComposite[] the_document_head_section, the_document_body_section, the_bibliography_section, the_glossary_section, the_blurb_section; +    ObjGenericComposite[][string] the_table_of_contents_section; +    ObjGenericComposite[] the_document_head_section, the_document_body_section, the_bibliography_section, the_glossary_section, the_blurb_section;      string[string] an_object, processing;      string an_object_key;      string[] anchor_tags;      string segment_anchor_tag_that_object_belongs_to; -    auto set_abstract_object = ObjectAbstractSet();      auto note_section = NotesSection();      /+ enum +/      enum State { off, on } @@ -72,13 +71,12 @@ template SiSUdocAbstraction() {      auto bookindex_extract_hash = BookIndexNuggetHash();      string[][string][string] bkidx_hash(        string bookindex_section, -      int obj_cite_number +      int    obj_cite_number      ) {        return bookindex_extract_hash.bookindex_nugget_hash(bookindex_section, obj_cite_number);      }      /+ node +/ -    string[string] _node_heading_str; -    int[string]    _node_heading_int; +    ObjGenericComposite comp_obj_heading, comp_obj_location, comp_obj_block, comp_obj_code, comp_obj_poem_ocn, comp_obj_comment;      auto node_construct = NodeStructureMetadata();      /+ ↓ abstract marked up document +/      auto abstract_doc_source( @@ -101,10 +99,9 @@ template SiSUdocAbstraction() {          destroy(processing);          destroy(biblio_arr_json);        } -      auto node_heading_int_ = node_metadata_heading_int; -      auto node_heading_str_ = node_metadata_heading_str;        auto node_para_int_    = node_metadata_para_int;        auto node_para_str_    = node_metadata_para_str; +      ObjGenericComposite comp_obj_heading_, comp_obj_para, comp_obj_toc;        line_occur = [          "heading"  : 0,          "para"     : 0, @@ -162,22 +159,20 @@ template SiSUdocAbstraction() {        string toc_txt_;        an_object["glossary_nugget"] = "";        an_object["blurb_nugget"] = ""; -      node_heading_str_["is"]                           = "heading"; -      node_heading_str_["ocn"]                          = "0"; -      node_heading_str_["segment_anchor_tag"]           = "toc"; -      node_heading_str_["attrib"]                       = ""; -      node_heading_str_["marked_up_lev"]                = "1"; -      node_heading_int_["heading_lev_markup"]           = 4; -      node_heading_int_["heading_lev_collapsed"]        = 2; -      node_heading_int_["parent_ocn"]                   = 1; -      node_heading_int_["parent_lev_markup"]            = 0; -      auto toc_head = -        set_abstract_object.contents_heading( -          "Table of Contents", // nugget/object -          node_heading_str_, -          node_heading_int_, -          ["toc"],             // anchor tag -        ); +      comp_obj_heading_                       = comp_obj_heading_.init; +      comp_obj_heading_.use                   = "content"; +      comp_obj_heading_.of                    = "para"; +      comp_obj_heading_.is_a                  = "heading"; +      comp_obj_heading_.text                  = "Table of Contents"; +      comp_obj_heading_.ocn                   = 0; +      comp_obj_heading_.segment_anchor_tag    = "toc"; +      comp_obj_heading_.marked_up_level       = "1"; +      comp_obj_heading_.heading_lev_markup    = 4; +      comp_obj_heading_.heading_lev_collapsed = 2; +      comp_obj_heading_.parent_ocn            = 1; +      comp_obj_heading_.parent_lev_markup     = 0; +      comp_obj_heading_.anchor_tags           = ["toc"]; +      auto toc_head                       = comp_obj_heading_;        the_table_of_contents_section = [          "seg": [toc_head],          "scroll": [toc_head], @@ -265,54 +260,47 @@ template SiSUdocAbstraction() {                line_occur["para"] = State.off;                an_object_key="glossary_nugget"; //                if (matchFirst(line, rgx.heading_glossary)) { -                node_heading_str_["is"]                       = "heading"; -                node_heading_str_["ocn"]                      = "0"; -                node_heading_str_["segment_anchor_tag"]       = ""; -                node_heading_str_["attrib"]                   = ""; -                node_heading_str_["marked_up_lev"]            = "B"; -                node_heading_int_["heading_lev_markup"]       = 1; -                node_heading_int_["heading_lev_collapsed"]    = 1; -                node_heading_int_["parent_ocn"]               = 1; -                node_heading_int_["parent_lev_markup"]        = 0; -                the_glossary_section ~= -                  set_abstract_object.contents_heading( -                    "Glossary",       // nugget/object -                    node_heading_str_, -                    node_heading_int_, -                    [""],             // anchor tag -                  ); -                node_heading_str_["is"]                       = "heading"; -                node_heading_str_["ocn"]                      = "0"; -                node_heading_str_["segment_anchor_tag"]       = "glossary"; -                node_heading_str_["attrib"]                   = ""; -                node_heading_str_["marked_up_lev"]            = "1"; -                node_heading_int_["heading_lev_markup"]       = 4; -                node_heading_int_["heading_lev_collapsed"]    = 2; -                node_heading_int_["parent_ocn"]               = 1; -                node_heading_int_["parent_lev_markup"]        = 0; -                the_glossary_section ~= -                  set_abstract_object.contents_heading( -                    "Glossary",       // nugget/object -                    node_heading_str_, -                    node_heading_int_, -                    ["glossary"],     // anchor tag -                  ); +                comp_obj_heading_                       = comp_obj_heading_.init; +                comp_obj_heading_.use                   = "content"; +                comp_obj_heading_.of                    = "para"; +                comp_obj_heading_.is_a                  = "heading"; +                comp_obj_heading_.text                  = "Glossary"; +                comp_obj_heading_.ocn                   = 0; +                comp_obj_heading_.marked_up_level       = "B"; +                comp_obj_heading_.heading_lev_markup    = 1; +                comp_obj_heading_.heading_lev_collapsed = 1; +                comp_obj_heading_.parent_ocn            = 1; +                comp_obj_heading_.parent_lev_markup     = 0; +                the_glossary_section                    ~= comp_obj_heading_; +                comp_obj_heading_                       = comp_obj_heading_.init; +                comp_obj_heading_.use                   = "content"; +                comp_obj_heading_.of                    = "para"; +                comp_obj_heading_.is_a                  = "heading"; +                comp_obj_heading_.text                  = "Glossary"; +                comp_obj_heading_.ocn                   = 0; +                comp_obj_heading_.segment_anchor_tag    = "glossary"; +                comp_obj_heading_.marked_up_level       = "1"; +                comp_obj_heading_.heading_lev_markup    = 4; +                comp_obj_heading_.heading_lev_collapsed = 2; +                comp_obj_heading_.parent_ocn            = 1; +                comp_obj_heading_.parent_lev_markup     = 0; +                comp_obj_heading_.anchor_tags           = ["glossary"]; +                the_glossary_section                ~= comp_obj_heading_;                // } else if (matchFirst(line, rgx.heading)) {                //   _heading_matched_(line, line_occur, an_object, an_object_key, lv, collapsed_lev, type, dochead_meta_aa); // levels?                } else {                  _para_match_(line, an_object, an_object_key, indent, bullet, type, line_occur); -                node_para_str_["is"]                           = "para"; -                node_para_str_["attrib"]                       = ""; -                node_para_int_["ocn"]                          = 0; -                node_para_int_["indent_hang"]                  = indent["hang_position"]; -                node_para_int_["indent_base"]                  = indent["base_position"]; -                node_para_int_["bullet"]                       = (bullet) ? 1 : 0; -                the_glossary_section ~= -                  set_abstract_object.contents_para( -                    to!string(line),           // an_object["substantive"], -                    node_para_str_, -                    node_para_int_, -                  ); +                comp_obj_para                       = comp_obj_para.init; +                comp_obj_para.use                   = "content"; +                comp_obj_para.of                    = "para"; +                comp_obj_para.is_a                  = "para"; +                comp_obj_para.text                  = to!string(line).strip; +                comp_obj_para.ocn                   = 0; +                comp_obj_para.obj_cite_number       = "0"; +                comp_obj_para.indent_hang           = indent["hang_position"]; +                comp_obj_para.indent_base           = indent["base_position"]; +                comp_obj_para.bullet                = bullet; +                the_glossary_section                ~= comp_obj_para;                }                type["ocn_status"] = TriState.off;              } @@ -341,71 +329,60 @@ template SiSUdocAbstraction() {                line_occur["para"] = State.off;                an_object_key="blurb_nugget";                if (matchFirst(line, rgx.heading_blurb)) { -                node_heading_str_["is"]                       = "heading"; -                node_heading_str_["ocn"]                      = "0"; -                node_heading_str_["segment_anchor_tag"]       = ""; -                node_heading_str_["attrib"]                   = ""; -                node_heading_str_["marked_up_lev"]            = "B"; -                node_heading_int_["heading_lev_markup"]       = 1; -                node_heading_int_["heading_lev_collapsed"]    = 1; -                node_heading_int_["parent_ocn"]               = 1; -                node_heading_int_["parent_lev_markup"]        = 0; -                the_blurb_section ~= -                  set_abstract_object.contents_heading( -                    "Blurb",          // nugget/object -                    node_heading_str_, -                    node_heading_int_, -                    [""],             // anchor tag -                  ); -                node_heading_str_["is"]                       = "heading"; -                node_heading_str_["ocn"]                      = "0"; -                node_heading_str_["segment_anchor_tag"]       = "blurb"; -                node_heading_str_["attrib"]                   = ""; -                node_heading_str_["marked_up_lev"]            = "1"; -                node_heading_int_["heading_lev_markup"]       = 4; -                node_heading_int_["heading_lev_collapsed"]    = 2; -                node_heading_int_["parent_ocn"]               = 1; -                node_heading_int_["parent_lev_markup"]        = 0; -                the_blurb_section ~= -                  set_abstract_object.contents_heading( -                    "Blurb",          // nugget/object -                    node_heading_str_, -                    node_heading_int_, -                    ["blurb"],        // anchor tag -                  ); +                comp_obj_heading_                       = comp_obj_heading_.init; +                comp_obj_heading_.use                   = "content"; +                comp_obj_heading_.of                    = "para"; +                comp_obj_heading_.is_a                  = "heading"; +                comp_obj_heading_.text                  = "Blurb"; +                comp_obj_heading_.ocn                   = 0; +                comp_obj_heading_.marked_up_level       = "B"; +                comp_obj_heading_.heading_lev_markup    = 1; +                comp_obj_heading_.heading_lev_collapsed = 1; +                comp_obj_heading_.parent_ocn            = 1; +                comp_obj_heading_.parent_lev_markup     = 0; +                the_blurb_section                       ~= comp_obj_heading_; +                comp_obj_heading_                       = comp_obj_heading_.init; +                comp_obj_heading_.use                   = "content"; +                comp_obj_heading_.of                    = "para"; +                comp_obj_heading_.is_a                  = "heading"; +                comp_obj_heading_.text                  = "Blurb"; +                comp_obj_heading_.ocn                   = 0; +                comp_obj_heading_.segment_anchor_tag    = "blurb"; +                comp_obj_heading_.marked_up_level       = "1"; +                comp_obj_heading_.heading_lev_markup    = 4; +                comp_obj_heading_.heading_lev_collapsed = 2; +                comp_obj_heading_.parent_ocn            = 1; +                comp_obj_heading_.parent_lev_markup     = 0; +                comp_obj_heading_.anchor_tags           = ["blurb"]; +                the_blurb_section                       ~= comp_obj_heading_;                } 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_heading_str_["is"]                       = "heading"; -                node_heading_str_["ocn"]                      = "0"; -                node_heading_str_["segment_anchor_tag"]       = "blurb"; -                node_heading_str_["attrib"]                   = ""; -                node_heading_str_["marked_up_lev"]            = to!string(an_object["lev"]); -                node_heading_int_["heading_lev_markup"]       = to!int(an_object["lev_markup_number"]);    // make int, remove need to conv -                node_heading_int_["heading_lev_collapsed"]    = to!int(an_object["lev_collapsed_number"]); // make int, remove need to conv -                node_heading_int_["parent_ocn"]               = 1; -                node_heading_int_["parent_lev_markup"]        = 0; -                the_blurb_section ~= -                  set_abstract_object.contents_heading( -                    to!string(line),           //  an_object["substantive"], -                    node_heading_str_, -                    node_heading_int_, -                    [""],                      // anchor tag -                  ); +                comp_obj_heading_                       = comp_obj_heading_.init; +                comp_obj_heading_.use                   = "content"; +                comp_obj_heading_.of                    = "para"; +                comp_obj_heading_.is_a                  = "heading"; +                comp_obj_heading_.text                  = to!string(line); +                comp_obj_heading_.ocn                   = 0; +                comp_obj_heading_.segment_anchor_tag    = "blurb"; +                comp_obj_heading_.marked_up_level       = to!string(an_object["lev"]); +                comp_obj_heading_.heading_lev_markup    = to!int(an_object["lev_markup_number"]);    // make int, remove need to conv +                comp_obj_heading_.heading_lev_collapsed = to!int(an_object["lev_collapsed_number"]); // make int, remove need to conv +                comp_obj_heading_.parent_ocn            = 1; +                comp_obj_heading_.parent_lev_markup     = 0; +                the_blurb_section                   ~= comp_obj_heading_;                } else {                  _para_match_(line, an_object, an_object_key, indent, bullet, type, line_occur); -                node_para_str_["is"]                           = "para"; -                node_para_str_["attrib"]                       = ""; -                node_para_int_["ocn"]                          = obj_cite_number; -                node_para_int_["indent_hang"]                  = indent["hang_position"]; -                node_para_int_["indent_base"]                  = indent["base_position"]; -                node_para_int_["bullet"]                       = (bullet) ? 1 : 0; -                the_blurb_section ~= -                  set_abstract_object.contents_para( -                    to!string(line),           //  an_object["substantive"], -                    node_para_str_, -                    node_para_int_, -                  ); +                comp_obj_para                       = comp_obj_para.init; +                comp_obj_para.use                   = "content"; +                comp_obj_para.of                    = "para"; +                comp_obj_para.is_a                  = "para"; +                comp_obj_para.text                  = to!string(line).strip; +                comp_obj_para.ocn                   = obj_cite_number; +                comp_obj_para.obj_cite_number       = to!string(obj_cite_number); +                comp_obj_para.indent_hang           = indent["hang_position"]; +                comp_obj_para.indent_base           = indent["base_position"]; +                comp_obj_para.bullet                = bullet; +                the_blurb_section                   ~= comp_obj_para;                }                type["ocn_status"] = TriState.off;              } @@ -486,8 +463,12 @@ template SiSUdocAbstraction() {                      writeln(line);                    }                    an_object[an_object_key] ~= line ~= "\n"; -                  the_document_body_section ~= -                    set_abstract_object.contents_comment(strip(an_object[an_object_key])); +                  comp_obj_comment                   = comp_obj_comment.init; +                  comp_obj_comment.use               = "comment"; +                  comp_obj_comment.of                = "comment"; +                  comp_obj_comment.is_a              = "comment"; +                  comp_obj_comment.text              = an_object[an_object_key].strip; +                  the_document_body_section          ~= comp_obj_comment;                    _common_reset_(line_occur, an_object, type);                    processing.remove("verse");                    ++cntr; @@ -548,13 +529,12 @@ template SiSUdocAbstraction() {                  the_document_body_section,                  bookindex_unordered_hashes,                  obj_cite_number, -                _node_heading_str, -                _node_heading_int, +                comp_obj_heading,                  cntr,                  type,                  obj_cite_number_poem,                  dochead_make_aa -              ); // watch +              );              } else {                /+ line.empty, post contents, empty variables: +/                assert( @@ -597,8 +577,9 @@ template SiSUdocAbstraction() {                    html_segnames_ptr = html_segnames_ptr_cntr;                    html_segnames_ptr_cntr++;                  } -                auto _node_t = +                auto comp_obj_heading =                    node_construct.node_emitter_heading( +                    an_object["substantive"],                     // string                      an_object["lev"],                             // string                      an_object["lev_markup_number"],               // string                      an_object["lev_collapsed_number"],            // string @@ -609,22 +590,12 @@ template SiSUdocAbstraction() {                      an_object["is"],                              // string                      html_segnames_ptr,                            // int                    ); -                 _node_heading_str = _node_t[0]; -                 _node_heading_int = _node_t[1]; -                an_object["attrib"] = -                  obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node_heading_str, _node_heading_int);                  ++heading_ptr;                  debug(segments) {                    writeln(an_object["lev_markup_number"]);                    writeln(segment_anchor_tag_that_object_belongs_to);                  } -                the_document_body_section ~= -                  set_abstract_object.contents_heading( -                    an_object["substantive"], -                    _node_heading_str, -                    _node_heading_int, -                    anchor_tags, -                  ); +                the_document_body_section ~= comp_obj_heading;                  // track previous heading and make assertions                  debug(objectrelated1) { // check                    writeln(line); @@ -642,8 +613,8 @@ template SiSUdocAbstraction() {                  bookindex_unordered_hashes =                    bkidx_hash(an_object["bookindex_nugget"], obj_cite_number);                  an_object["is"] = "para"; -                auto _node_t = -                  node_construct.node_emitter( +                auto comp_obj_heading = +                  node_construct.node_location_emitter(                      content_non_header,                      segment_anchor_tag_that_object_belongs_to,                      obj_cite_number, @@ -651,26 +622,22 @@ template SiSUdocAbstraction() {                      heading_ptr-1,                      an_object["is"],                    ); -                _node_heading_str = _node_t[0]; -                _node_heading_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_heading_str, _node_heading_int); -                node_para_str_["is"]                           = an_object["is"]; -                node_para_str_["attrib"]                       = an_object["attrib"]; -                node_para_int_["ocn"]                          = obj_cite_number; -                node_para_int_["indent_hang"]                  = indent["hang_position"]; -                node_para_int_["indent_base"]                  = indent["base_position"]; -                node_para_int_["bullet"]                       = (bullet) ? 1 : 0; -                the_document_body_section ~= -                  set_abstract_object.contents_para( -                    an_object["substantive"], -                    node_para_str_, -                    node_para_int_, -                  ); +                comp_obj_para                       = comp_obj_para.init; +                comp_obj_para.use                   = "content"; +                comp_obj_para.of                    = "para"; +                comp_obj_para.is_a                  = "para"; +                comp_obj_para.text                  = to!string(an_object["substantive"]).strip; +                comp_obj_para.ocn                   = obj_cite_number; +                comp_obj_para.obj_cite_number       = to!string(obj_cite_number); +                comp_obj_para.indent_hang           = indent["hang_position"]; +                comp_obj_para.indent_base           = indent["base_position"]; +                comp_obj_para.bullet                = bullet; +                comp_obj_para.anchor_tags           = anchor_tags; +                the_document_body_section           ~= comp_obj_para;                  _common_reset_(line_occur, an_object, type);                  indent=[                    "hang_position" : 0, @@ -697,14 +664,14 @@ template SiSUdocAbstraction() {            && (the_document_body_section.length > previous_length)          ) {              if ((the_document_body_section[$-1].is_a == "heading") -            && (the_document_body_section[$-1].heading_attrib.lev_int_markup < 5)) { +            && (the_document_body_section[$-1].heading_lev_markup < 5)) {                type["biblio_section"] = State.off;                type["glossary_section"] = State.off;                type["blurb_section"] = State.off;              }              previous_length = to!int(the_document_body_section.length);              if ( -              match(the_document_body_section[$-1].object, +              match(the_document_body_section[$-1].text,                rgx.inline_notes_delimiter_al_regular_number_note)              ) {                previous_count=to!int(the_document_body_section.length -1); @@ -748,28 +715,24 @@ template SiSUdocAbstraction() {        }        if (an_object["glossary_nugget"].length == 0) {          writeln("no gloss"); -        node_heading_str_["is"]                       = "heading"; -        node_heading_str_["ocn"]                      = "0"; -        node_heading_str_["segment_anchor_tag"]       = ""; -        node_heading_str_["attrib"]                   = ""; -        node_heading_str_["marked_up_lev"]            = "B"; -        node_heading_int_["heading_lev_markup"]       = 1; -        node_heading_int_["heading_lev_collapsed"]    = 1; -        node_heading_int_["parent_ocn"]               = 1; -        node_heading_int_["parent_lev_markup"]        = 0; -        the_glossary_section ~= -          set_abstract_object.contents_heading( -            "(skip) there is no Glossary section",   // nugget/object -            node_heading_str_, -            node_heading_int_, -            [""],             // anchor tag -          ); +        comp_obj_heading_                       = comp_obj_heading_.init; +        comp_obj_heading_.use                   = "content"; +        comp_obj_heading_.of                    = "para"; +        comp_obj_heading_.is_a                  = "heading"; +        comp_obj_heading_.text                  = "(skip) there is no Glossary section"; +        comp_obj_heading_.ocn                   = 0; +        comp_obj_heading_.marked_up_level       = "B"; +        comp_obj_heading_.heading_lev_markup    = 1; +        comp_obj_heading_.heading_lev_collapsed = 1; +        comp_obj_heading_.parent_ocn            = 1; +        comp_obj_heading_.parent_lev_markup     = 0; +        the_glossary_section                ~= comp_obj_heading_;        } else {          writeln("gloss");        }        debug(glossary) {          foreach (gloss; the_glossary_section) { -          writeln(gloss.object); +          writeln(gloss.text);          }        }        auto biblio_unsorted_incomplete = biblio_arr_json.dup; @@ -778,55 +741,46 @@ template SiSUdocAbstraction() {        auto biblio_ordered =          biblio._bibliography_(biblio_unsorted_incomplete, bib_arr_json);        if (biblio_ordered.length > 0) { -        node_heading_str_["is"]                       = "heading"; -        node_heading_str_["ocn"]                      = "0"; -        node_heading_str_["segment_anchor_tag"]       = ""; -        node_heading_str_["attrib"]                   = ""; -        node_heading_str_["marked_up_lev"]            = "B"; -        node_heading_int_["heading_lev_markup"]       = 1; -        node_heading_int_["heading_lev_collapsed"]    = 1; -        node_heading_int_["parent_ocn"]               = 1; -        node_heading_int_["parent_lev_markup"]        = 0; -        the_bibliography_section ~= -          set_abstract_object.contents_heading( -            "Bibliography",   // nugget/object -            node_heading_str_, -            node_heading_int_, -            [""],             // anchor tag -          ); -        node_heading_str_["is"]                       = "heading"; -        node_heading_str_["ocn"]                      = "0"; -        node_heading_str_["segment_anchor_tag"]       = "bibliography"; -        node_heading_str_["attrib"]                   = ""; -        node_heading_str_["marked_up_lev"]            = "1"; -        node_heading_int_["heading_lev_markup"]       = 4; -        node_heading_int_["heading_lev_collapsed"]    = 2; -        node_heading_int_["parent_ocn"]               = 1; -        node_heading_int_["parent_lev_markup"]        = 0; -        the_bibliography_section ~= -          set_abstract_object.contents_heading( -            "Bibliography", -            node_heading_str_, -            node_heading_int_, -            ["bibliography"], // anchor tag -          ); +        comp_obj_heading_                       = comp_obj_heading_.init; +        comp_obj_heading_.use                   = "content"; +        comp_obj_heading_.of                    = "para"; +        comp_obj_heading_.is_a                  = "heading"; +        comp_obj_heading_.text                  = "Bibliography"; +        comp_obj_heading_.ocn                   = 0; +        comp_obj_heading_.marked_up_level       = "B"; +        comp_obj_heading_.heading_lev_markup    = 1; +        comp_obj_heading_.heading_lev_collapsed = 1; +        comp_obj_heading_.parent_ocn            = 1; +        comp_obj_heading_.parent_lev_markup     = 0; +        the_bibliography_section                ~= comp_obj_heading_; +        // --- +        comp_obj_heading_                       = comp_obj_heading_.init; +        comp_obj_heading_.use                   = "content"; +        comp_obj_heading_.of                    = "para"; +        comp_obj_heading_.is_a                  = "heading"; +        comp_obj_heading_.text                  = "Bibliography"; +        comp_obj_heading_.ocn                   = 0; +        comp_obj_heading_.segment_anchor_tag    = "bibliography"; +        comp_obj_heading_.marked_up_level       = "1"; +        comp_obj_heading_.heading_lev_markup    = 4; +        comp_obj_heading_.heading_lev_collapsed = 2; +        comp_obj_heading_.parent_ocn            = 1; +        comp_obj_heading_.parent_lev_markup     = 0; +        comp_obj_heading_.anchor_tags           = ["bibliography"]; +        the_bibliography_section                ~= comp_obj_heading_;        } else { -        node_heading_str_["is"]                       = "heading"; -        node_heading_str_["ocn"]                      = "0"; -        node_heading_str_["segment_anchor_tag"]       = ""; -        node_heading_str_["attrib"]                   = ""; -        node_heading_str_["marked_up_lev"]            = "B"; -        node_heading_int_["heading_lev_markup"]       = 1; -        node_heading_int_["heading_lev_collapsed"]    = 1; -        node_heading_int_["parent_ocn"]               = 1; -        node_heading_int_["parent_lev_markup"]        = 0; -        the_bibliography_section ~= -          set_abstract_object.contents_heading( -            "(skip) there is no Bibliography",   // nugget/object -            node_heading_str_, -            node_heading_int_, -            [""],             // anchor tag -          ); +        comp_obj_heading_                       = comp_obj_heading_.init; +        comp_obj_heading_.use                   = "content"; +        comp_obj_heading_.of                    = "para"; +        comp_obj_heading_.is_a                  = "heading"; +        comp_obj_heading_.text                  = "(skip) there is no Bibliography"; +        comp_obj_heading_.ocn                   = 0; +        comp_obj_heading_.marked_up_level       = "B"; +        comp_obj_heading_.heading_lev_markup    = 1; +        comp_obj_heading_.heading_lev_collapsed = 1; +        comp_obj_heading_.parent_ocn            = 1; +        comp_obj_heading_.parent_lev_markup     = 0; +        the_bibliography_section                ~= comp_obj_heading_;        }        string out_;        foreach (entry; biblio_ordered) { @@ -844,22 +798,22 @@ template SiSUdocAbstraction() {            ((entry["place"].str.empty) ? "" : ", " ~ entry["place"].str),            ((entry["url"].str.empty) ? "" : ", [" ~ entry["url"].str ~ "]"),          ); -        node_para_str_["is"]                           = "bibliography"; -        node_para_str_["attrib"]                       = ""; -        node_para_int_["ocn"]                          = 0; -        node_para_int_["indent_hang"]                  = 0; -        node_para_int_["indent_base"]                  = 1; -        node_para_int_["bullet"]                       = 0; -        the_bibliography_section ~= -          set_abstract_object.contents_para( -            out_,                                                // nugget/object -            node_para_str_, -            node_para_int_, -          ); +        comp_obj_para                       = comp_obj_para.init; +        comp_obj_para.use                   = "content"; +        comp_obj_para.of                    = "para"; +        comp_obj_para.is_a                  = "bibliography"; +        comp_obj_para.text                  = to!string(out_).strip; +        comp_obj_para.ocn                   = 0; +        comp_obj_para.obj_cite_number       = "0"; +        comp_obj_para.indent_hang           = 0; +        comp_obj_para.indent_base           = 1; +        comp_obj_para.bullet                = bullet; +        comp_obj_para.anchor_tags           = anchor_tags; +        the_bibliography_section            ~= comp_obj_para;        }        debug(bibliosection) {          foreach (o; the_bibliography_section) { -          writeln(o.object); +          writeln(o.text);          }        }        auto bi = BookIndexReportSection(); @@ -880,28 +834,25 @@ template SiSUdocAbstraction() {        }        if (an_object["blurb_nugget"].length == 0) {          writeln("no blurb"); -        node_heading_str_["is"]                       = "heading"; -        node_heading_str_["ocn"]                      = "0"; -        node_heading_str_["segment_anchor_tag"]       = ""; -        node_heading_str_["attrib"]                   = ""; -        node_heading_str_["marked_up_lev"]            = "B"; -        node_heading_int_["heading_lev_markup"]       = 1; -        node_heading_int_["heading_lev_collapsed"]    = 1; -        node_heading_int_["parent_ocn"]               = 1; -        node_heading_int_["parent_lev_markup"]        = 0; -        the_blurb_section ~= -          set_abstract_object.contents_heading( -            "(skip) there is no Blurb section",   // nugget/object -            node_heading_str_, -            node_heading_int_, -            [""],             // anchor tag -          ); +        comp_obj_heading_                       = comp_obj_heading_.init; +        comp_obj_heading_.use                   = "content"; +        comp_obj_heading_.of                    = "para"; +        comp_obj_heading_.is_a                  = "heading"; +        comp_obj_heading_.text                  = "(skip) there is no Blurb section"; +        comp_obj_heading_.ocn                   = 0; +        comp_obj_heading_.segment_anchor_tag    = "bibliography"; +        comp_obj_heading_.marked_up_level       = "1"; +        comp_obj_heading_.heading_lev_markup    = 4; +        comp_obj_heading_.heading_lev_collapsed = 2; +        comp_obj_heading_.parent_ocn            = 1; +        comp_obj_heading_.parent_lev_markup     = 0; +        the_blurb_section                   ~= comp_obj_heading_;        } else {          writeln("blurb");        }        debug(blurb) {          foreach (blurb; the_blurb_section) { -          writeln(blurb.object); +          writeln(blurb.text);          }        } @@ -909,6 +860,15 @@ template SiSUdocAbstraction() {          "hang_position" : 1,          "base_position" : 1,        ]; +      comp_obj_toc                       = comp_obj_toc.init; +      comp_obj_toc.use                   = "content"; +      comp_obj_toc.of                    = "para"; +      comp_obj_toc.is_a                  = "toc"; +      comp_obj_toc.ocn                   = 0; +      comp_obj_toc.obj_cite_number       = "0"; +      comp_obj_toc.indent_hang           = indent["hang_position"]; +      comp_obj_toc.indent_base           = indent["base_position"]; +      comp_obj_toc.bullet                = false;        if (the_endnotes_section["seg"].length > 1) {          toc_txt_ = format(            "{ %s }../%s.fn_suffix", @@ -916,15 +876,8 @@ template SiSUdocAbstraction() {            "endnotes",            // segment_anchor_tag_that_object_belongs_to          );          toc_txt_= munge.url_links(toc_txt_); -        the_table_of_contents_section["seg"] ~= -          set_abstract_object.contents_toc( -            "toc", -            toc_txt_, -            "",                   // attrib -            0, -            indent, -            false -          ); +        comp_obj_toc.text                       = to!string(toc_txt_).strip; +        the_table_of_contents_section["seg"]    ~= comp_obj_toc;        }        if (the_endnotes_section["scroll"].length > 1) {          toc_txt_ = format( @@ -933,15 +886,8 @@ template SiSUdocAbstraction() {            "endnotes",            // _anchor_tag          );          toc_txt_= munge.url_links(toc_txt_); -        the_table_of_contents_section["scroll"] ~= -          set_abstract_object.contents_toc( -            "toc", -            toc_txt_, -            "",                  // attrib -            0, -            indent, -            false -          ); +        comp_obj_toc.text                       = to!string(toc_txt_).strip; +        the_table_of_contents_section["scroll"] ~= comp_obj_toc;        }        if (the_glossary_section.length > 1) {          toc_txt_ = format( @@ -950,30 +896,16 @@ template SiSUdocAbstraction() {            "glossary",  // segment_anchor_tag_that_object_belongs_to          );          toc_txt_= munge.url_links(toc_txt_); -        the_table_of_contents_section["seg"] ~= -          set_abstract_object.contents_toc( -            "toc", -            toc_txt_, -            "",                   // attrib -            0, -            indent, -            false -          ); +        comp_obj_toc.text                       = to!string(toc_txt_).strip; +        the_table_of_contents_section["seg"]    ~= comp_obj_toc;          toc_txt_ = format(            "{ %s }#%s",            "Glossary",            "glossary",            // _anchor_tag          );          toc_txt_= munge.url_links(toc_txt_); -        the_table_of_contents_section["scroll"] ~= -          set_abstract_object.contents_toc( -            "toc", -            toc_txt_, -            "",                   // attrib -            0, -            indent, -            false -          ); +        comp_obj_toc.text                       = to!string(toc_txt_).strip; +        the_table_of_contents_section["scroll"] ~= comp_obj_toc;        }        if (the_bibliography_section.length > 1){          toc_txt_ = format( @@ -982,30 +914,17 @@ template SiSUdocAbstraction() {            "bibliography",        // segment_anchor_tag_that_object_belongs_to          );          toc_txt_= munge.url_links(toc_txt_); -        the_table_of_contents_section["seg"] ~= -          set_abstract_object.contents_toc( -            "toc", -            toc_txt_, -            "",                   // attrib -            0, -            indent, -            false -          ); +        comp_obj_toc.text                       = to!string(toc_txt_).strip; +        the_table_of_contents_section["seg"]    ~= comp_obj_toc; +                toc_txt_ = format(            "{ %s }#%s",            "Bibliography",            "bibliography",          // _anchor_tag          );          toc_txt_= munge.url_links(toc_txt_); -        the_table_of_contents_section["scroll"] ~= -          set_abstract_object.contents_toc( -            "toc", -            toc_txt_, -            "",                   // attrib -            0, -            indent, -            false -          ); +        comp_obj_toc.text                       = to!string(toc_txt_).strip; +        the_table_of_contents_section["scroll"] ~= comp_obj_toc;        }        if (the_bookindex_section["seg"].length > 1) {          toc_txt_ = format( @@ -1014,15 +933,8 @@ template SiSUdocAbstraction() {            "bookindex",          // segment_anchor_tag_that_object_belongs_to          );          toc_txt_= munge.url_links(toc_txt_); -        the_table_of_contents_section["seg"] ~= -          set_abstract_object.contents_toc( -            "toc", -            toc_txt_, -            "",                   // attrib -            0, -            indent, -            false -          ); +        comp_obj_toc.text                       = to!string(toc_txt_).strip; +        the_table_of_contents_section["seg"]    ~= comp_obj_toc;        }        if (the_bookindex_section["scroll"].length > 1) {          toc_txt_ = format( @@ -1031,15 +943,8 @@ template SiSUdocAbstraction() {            "bookindex",            // _anchor_tag          );          toc_txt_= munge.url_links(toc_txt_); -        the_table_of_contents_section["scroll"] ~= -          set_abstract_object.contents_toc( -            "toc", -            toc_txt_, -            "",                   // attrib -            0, -            indent, -            false -          ); +        comp_obj_toc.text                       = to!string(toc_txt_).strip; +        the_table_of_contents_section["scroll"] ~= comp_obj_toc;        }        if (the_blurb_section.length > 1) {          toc_txt_ = format( @@ -1048,30 +953,16 @@ template SiSUdocAbstraction() {            "blurb",                // segment_anchor_tag_that_object_belongs_to          );          toc_txt_= munge.url_links(toc_txt_); -        the_table_of_contents_section["seg"] ~= -          set_abstract_object.contents_toc( -            "toc", -            toc_txt_, -            "",                   // attrib -            0, -            indent, -            false -          ); +        comp_obj_toc.text                       = to!string(toc_txt_).strip; +        the_table_of_contents_section["seg"]    ~= comp_obj_toc;          toc_txt_ = format(            "{ %s }#%s",            "Blurb",            "blurb",                // _anchor_tag          );          toc_txt_= munge.url_links(toc_txt_); -        the_table_of_contents_section["scroll"] ~= -          set_abstract_object.contents_toc( -            "toc", -            toc_txt_, -            "",                   // attrib -            0, -            indent, -            false -          ); +        comp_obj_toc.text                       = to!string(toc_txt_).strip; +        the_table_of_contents_section["scroll"] ~= comp_obj_toc;        }        debug(toc) {          writefln( @@ -1080,7 +971,7 @@ template SiSUdocAbstraction() {            the_table_of_contents_section["seg"].length          );          foreach (toc_linked_heading; the_table_of_contents_section["seg"]) { -          writeln(mkup.indent_by_spaces_provided(toc_linked_heading.para_attrib.indent_start), toc_linked_heading.object); +          writeln(mkup.indent_by_spaces_provided(toc_linked_heading.indent_hang), toc_linked_heading.text);          }        }        the_document_head_section ~= the_document_body_section[0]; @@ -1089,7 +980,9 @@ template SiSUdocAbstraction() {          "head":             the_document_head_section,          "toc_seg":          the_table_of_contents_section["seg"],          "toc_scroll":       the_table_of_contents_section["scroll"], +        /+ substantive/body: +/          "body":             the_document_body_section, +        /+ backmatter: +/          "endnotes_seg":     the_endnotes_section["seg"],          "endnotes_scroll":  the_endnotes_section["scroll"],          "glossary":         the_glossary_section, @@ -1114,18 +1007,18 @@ template SiSUdocAbstraction() {        an_object.remove("bookindex_nugget");      }      auto _common_reset_( -      ref int[string] line_occur, +      ref int[string]    line_occur,        ref string[string] an_object, -      ref int[string] type +      ref int[string]    type      ) {        line_occur["heading"] = State.off; -      line_occur["para"]= State.off; -      type["heading"] = State.off; -      type["para"] = State.off; +      line_occur["para"]    = State.off; +      type["heading"]       = State.off; +      type["para"]          = State.off;        object_reset(an_object);      }      void _check_ocn_status_( -      char[] line, +      char[]          line,        ref int[string] type      ) {        if ((!line.empty) && (type["ocn_status_multi_obj"] == TriState.off)) { @@ -1169,9 +1062,9 @@ template SiSUdocAbstraction() {        }      }      void _start_block_( -      char[] line, +      char[]          line,        ref int[string] type, -      string[string] obj_cite_number_poem +      string[string]  obj_cite_number_poem      ) {        if (matchFirst(line, rgx.block_curly_code_open)) {          /+ curly code open +/ @@ -1313,9 +1206,9 @@ template SiSUdocAbstraction() {        }      }      void _code_block_( -      char[] line, +      char[]             line,        ref string[string] an_object, -      ref int[string] type +      ref int[string]    type      ) {        if (type["curly_code"] == TriState.on) {          if (matchFirst(line, rgx.block_curly_code_close)) { @@ -1486,11 +1379,11 @@ template SiSUdocAbstraction() {        }      }      void _poem_block_( -      char[] line, -      ref string[string] an_object, -      ref int[string] type, -      ref int cntr, -      string[string] obj_cite_number_poem, +      char[]                 line, +      ref string[string]     an_object, +      ref int[string]        type, +      ref int                cntr, +      string[string]         obj_cite_number_poem,        string[string][string] dochead_make_aa,      ) {        if (type["curly_poem"] == TriState.on) { @@ -1525,15 +1418,14 @@ template SiSUdocAbstraction() {                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_heading_str, _node_heading_int); -            the_document_body_section ~= -              set_abstract_object.contents_block( -                an_object["is"], -                an_object["substantive"], -                an_object["attrib"], -                obj_cite_number -              ); +            comp_obj_block                            = comp_obj_block.init; +            comp_obj_block.use                        = "content"; +            comp_obj_block.of                         = "block"; +            comp_obj_block.is_a                       = an_object["is"]; +            comp_obj_block.ocn                        = obj_cite_number; +            comp_obj_block.obj_cite_number            = (obj_cite_number==0) ? "" : to!string(obj_cite_number); +            comp_obj_block.text                       = an_object["substantive"]; +            the_document_body_section                 ~= comp_obj_block;              object_reset(an_object);              processing.remove("verse");              ++cntr; @@ -1565,7 +1457,7 @@ template SiSUdocAbstraction() {              }              processing.remove("verse");              an_object["is"] = "verse"; -            auto _node_t = node_construct.node_emitter( +            auto comp_obj_location = node_construct.node_location_emitter(                content_non_header,                segment_anchor_tag_that_object_belongs_to,                obj_cite_number, @@ -1573,21 +1465,18 @@ template SiSUdocAbstraction() {                heading_ptr-1,                an_object["is"]              ); -            _node_heading_str = _node_t[0]; -            _node_heading_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_heading_str, _node_heading_int); -            the_document_body_section ~= -              set_abstract_object.contents_block( -                an_object["is"], -                an_object["substantive"], -                an_object["attrib"], -                obj_cite_number -              ); +            comp_obj_block                            = comp_obj_block.init; +            comp_obj_block.use                        = "content"; +            comp_obj_block.of                         = "block"; +            comp_obj_block.is_a                       = an_object["is"]; +            comp_obj_block.ocn                        = obj_cite_number; +            comp_obj_block.obj_cite_number            = (obj_cite_number==0) ? "" : to!string(obj_cite_number); +            comp_obj_block.text                       = an_object["substantive"]; +            the_document_body_section                 ~= comp_obj_block;              object_reset(an_object);              processing.remove("verse");              ++cntr; @@ -1616,15 +1505,14 @@ template SiSUdocAbstraction() {                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_heading_str, _node_heading_int); -            the_document_body_section ~= -              set_abstract_object.contents_block( -                an_object["is"], -                an_object["substantive"], -                an_object["attrib"], -                obj_cite_number -              ); +            comp_obj_block                            = comp_obj_block.init; +            comp_obj_block.use                        = "content"; +            comp_obj_block.of                         = "block"; +            comp_obj_block.is_a                       = an_object["is"]; +            comp_obj_block.ocn                        = obj_cite_number; +            comp_obj_block.obj_cite_number            = (obj_cite_number==0) ? "" : to!string(obj_cite_number); +            comp_obj_block.text                       = an_object["substantive"]; +            the_document_body_section                 ~= comp_obj_block;              obj_cite_number_poem["end"] = to!string(obj_cite_number);              object_reset(an_object);              processing.remove("verse"); @@ -1655,8 +1543,8 @@ template SiSUdocAbstraction() {              }              processing.remove("verse");              an_object["is"] = "verse"; -            auto _node_t = -              node_construct.node_emitter( +            auto comp_obj_location = +              node_construct.node_location_emitter(                  content_non_header,                  segment_anchor_tag_that_object_belongs_to,                  obj_cite_number, @@ -1664,21 +1552,18 @@ template SiSUdocAbstraction() {                  heading_ptr-1,                  an_object["is"]                ); -            _node_heading_str = _node_t[0]; -            _node_heading_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_heading_str, _node_heading_int); -            the_document_body_section ~= -              set_abstract_object.contents_block( -                an_object["is"], -                an_object["substantive"], -                an_object["attrib"], -                obj_cite_number -              ); +            comp_obj_block                            = comp_obj_block.init; +            comp_obj_block.use                        = "content"; +            comp_obj_block.of                         = "block"; +            comp_obj_block.is_a                       = an_object["is"]; +            comp_obj_block.ocn                        = obj_cite_number; +            comp_obj_block.obj_cite_number            = (obj_cite_number==0) ? "" : to!string(obj_cite_number); +            comp_obj_block.text                       = an_object["substantive"]; +            the_document_body_section                 ~= comp_obj_block;              object_reset(an_object);              processing.remove("verse");              ++cntr; @@ -1687,9 +1572,9 @@ template SiSUdocAbstraction() {        }      }      void _group_block_( -      char[] line, +      char[]             line,        ref string[string] an_object, -      ref int[string] type +      ref int[string]    type      ) {        if (type["curly_group"] == State.on) {          if (matchFirst(line, rgx.block_curly_group_close)) { @@ -1722,9 +1607,9 @@ template SiSUdocAbstraction() {        }      }      void _block_block_( -      char[] line, +      char[]             line,        ref string[string] an_object, -      ref int[string] type +      ref int[string]    type      ) {        if (type["curly_block"] == TriState.on) {          if (matchFirst(line, rgx.block_curly_block_close)) { @@ -1757,9 +1642,9 @@ template SiSUdocAbstraction() {        }      }      void _quote_block_( -      char[] line, +      char[]             line,        ref string[string] an_object, -      ref int[string] type +      ref int[string]    type      ) {        if (type["curly_quote"] == TriState.on) {          if (matchFirst(line, rgx.block_curly_quote_close)) { @@ -1792,9 +1677,9 @@ template SiSUdocAbstraction() {        }      }      void _table_block_( -      char[] line, +      char[]             line,        ref string[string] an_object, -      ref int[string] type +      ref int[string]    type      ) {        if (type["curly_table"] == TriState.on) {          if (matchFirst(line, rgx.block_curly_table_close)) { @@ -1827,17 +1712,16 @@ template SiSUdocAbstraction() {        }      }      void _block_flag_line_empty_( -      char[] line, -      ref string[string] an_object, -      ref ObjComposite[] the_document_body_section, +      char[]                       line, +      ref string[string]           an_object, +      ref ObjGenericComposite[]    the_document_body_section,        ref string[][string][string] bookindex_unordered_hashes, -      ref int obj_cite_number, -      ref string[string] _node_heading_str, -      ref int[string] _node_heading_int, -      ref int cntr, -      ref int[string] type, -      string[string] obj_cite_number_poem, -      string[string][string] dochead_make_aa, +      ref int                      obj_cite_number, +      ref ObjGenericComposite      _comp_obj_heading, +      ref int                      cntr, +      ref int[string]              type, +      string[string]               obj_cite_number_poem, +      string[string][string]       dochead_make_aa,      ) {        // line.empty, post contents, empty variables ---------------        assert( @@ -1857,8 +1741,8 @@ template SiSUdocAbstraction() {          bookindex_unordered_hashes =            bkidx_hash(an_object["bookindex_nugget"], obj_cite_number);          an_object["is"] = "code"; -        auto _node_t = -          node_construct.node_emitter( +        auto comp_obj_location = +          node_construct.node_location_emitter(              content_non_header,              segment_anchor_tag_that_object_belongs_to,              obj_cite_number, @@ -1866,21 +1750,18 @@ template SiSUdocAbstraction() {              heading_ptr-1,              an_object["is"]            ); -        _node_heading_str = _node_t[0]; -        _node_heading_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_heading_str, _node_heading_int); -        the_document_body_section ~= -          set_abstract_object.contents_block_code( -            an_object["is"], -            an_object["substantive"], -            an_object["attrib"], -            obj_cite_number -          ); +        comp_obj_code                             = comp_obj_code.init; +        comp_obj_code.use                         = "content"; +        comp_obj_code.of                          = "block"; +        comp_obj_code.is_a                        = an_object["is"]; +        comp_obj_code.ocn                         = obj_cite_number; +        comp_obj_code.obj_cite_number             = (obj_cite_number==0) ? "" : to!string(obj_cite_number); +        comp_obj_code.text                        = an_object["substantive"]; +        the_document_body_section                 ~= comp_obj_code;          object_reset(an_object);          processing.remove("verse");          ++cntr; @@ -1892,8 +1773,8 @@ template SiSUdocAbstraction() {          bookindex_unordered_hashes =            bkidx_hash(an_object["bookindex_nugget"], obj_cite_number);          an_object["is"] = "verse"; // check also -        auto _node_t = -          node_construct.node_emitter( // +        auto comp_obj_location = +          node_construct.node_location_emitter(              content_non_header,              segment_anchor_tag_that_object_belongs_to,              obj_cite_number, @@ -1901,16 +1782,14 @@ template SiSUdocAbstraction() {              heading_ptr-1,              an_object["is"]            ); -        _node_heading_str = _node_t[0]; -        _node_heading_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_heading_str, -            _node_heading_int, -          ); // bookindex +        comp_obj_poem_ocn                         = comp_obj_poem_ocn.init; +        comp_obj_poem_ocn.use                     = "content"; +        comp_obj_poem_ocn.of                      = "block"; +        comp_obj_poem_ocn.is_a                    = "poem"; +        comp_obj_poem_ocn.ocn                     = obj_cite_number; +        comp_obj_poem_ocn.obj_cite_number         = (obj_cite_number_poem["start"], obj_cite_number_poem["end"]); // not sure about this +        comp_obj_poem_ocn.text                    = ""; // an_object["substantive"]; +        the_document_body_section                 ~= comp_obj_poem_ocn;          object_reset(an_object);          processing.remove("verse");          type["blocks"] = TriState.off; @@ -1923,8 +1802,8 @@ template SiSUdocAbstraction() {          bookindex_unordered_hashes =            bkidx_hash(an_object["bookindex_nugget"], obj_cite_number);          an_object["is"] = "table"; -        auto _node_t = -          node_construct.node_emitter( +        auto comp_obj_location = +          node_construct.node_location_emitter(              content_non_header,              segment_anchor_tag_that_object_belongs_to,              obj_cite_number, @@ -1932,21 +1811,18 @@ template SiSUdocAbstraction() {              heading_ptr-1,              an_object["is"]            ); -        _node_heading_str = _node_t[0]; -        _node_heading_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_heading_str, _node_heading_int); -        the_document_body_section ~= -          set_abstract_object.contents_block( -            an_object["is"], -            an_object["substantive"], -            an_object["attrib"], -            obj_cite_number -          ); +        comp_obj_block                            = comp_obj_block.init; +        comp_obj_block.use                        = "content"; +        comp_obj_block.of                         = "block"; +        comp_obj_block.is_a                       = an_object["is"]; +        comp_obj_block.ocn                        = obj_cite_number; +        comp_obj_block.obj_cite_number            = (obj_cite_number==0) ? "" : to!string(obj_cite_number); +        comp_obj_block.text                       = an_object["substantive"]; +        the_document_body_section                 ~= comp_obj_block;          object_reset(an_object);          processing.remove("verse");          ++cntr; @@ -1960,8 +1836,8 @@ template SiSUdocAbstraction() {          bookindex_unordered_hashes =            bkidx_hash(an_object["bookindex_nugget"], obj_cite_number);          an_object["is"] = "group"; -        auto _node_t = -          node_construct.node_emitter( +        auto comp_obj_location = +          node_construct.node_location_emitter(              content_non_header,              segment_anchor_tag_that_object_belongs_to,              obj_cite_number, @@ -1969,21 +1845,18 @@ template SiSUdocAbstraction() {              heading_ptr-1,              an_object["is"]            ); -        _node_heading_str = _node_t[0]; -        _node_heading_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_heading_str, _node_heading_int); -        the_document_body_section ~= -          set_abstract_object.contents_block( -            an_object["is"], -            an_object["substantive"], -            an_object["attrib"], -            obj_cite_number -          ); +        comp_obj_block                            = comp_obj_block.init; +        comp_obj_block.use                        = "content"; +        comp_obj_block.of                         = "block"; +        comp_obj_block.is_a                       = an_object["is"]; +        comp_obj_block.ocn                        = obj_cite_number; +        comp_obj_block.obj_cite_number            = (obj_cite_number==0) ? "" : to!string(obj_cite_number); +        comp_obj_block.text                       = an_object["substantive"]; +        the_document_body_section                 ~= comp_obj_block;          object_reset(an_object);          processing.remove("verse");          ++cntr; @@ -1996,8 +1869,8 @@ template SiSUdocAbstraction() {          bookindex_unordered_hashes =            bkidx_hash(an_object["bookindex_nugget"], obj_cite_number);          an_object["is"] = "block"; -        auto _node_t = -          node_construct.node_emitter( +        auto comp_obj_location = +          node_construct.node_location_emitter(              content_non_header,              segment_anchor_tag_that_object_belongs_to,              obj_cite_number, @@ -2005,21 +1878,18 @@ template SiSUdocAbstraction() {              heading_ptr-1,              an_object["is"]             ); -        _node_heading_str = _node_t[0]; -        _node_heading_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_heading_str, _node_heading_int); -        the_document_body_section ~= -          set_abstract_object.contents_block( -            an_object["is"], -            an_object["substantive"], -            an_object["attrib"], -            obj_cite_number -          ); +        comp_obj_block                            = comp_obj_block.init; +        comp_obj_block.use                        = "content"; +        comp_obj_block.of                         = "block"; +        comp_obj_block.is_a                       = an_object["is"]; +        comp_obj_block.ocn                        = obj_cite_number; +        comp_obj_block.obj_cite_number            = (obj_cite_number==0) ? "" : to!string(obj_cite_number); +        comp_obj_block.text                       = an_object["substantive"]; +        the_document_body_section                 ~= comp_obj_block;          object_reset(an_object);          processing.remove("verse");          ++cntr; @@ -2033,8 +1903,8 @@ template SiSUdocAbstraction() {          bookindex_unordered_hashes =            bkidx_hash(an_object["bookindex_nugget"], obj_cite_number);          an_object["is"] = "quote"; -        auto _node_t = -          node_construct.node_emitter( // +        auto comp_obj_location = +          node_construct.node_location_emitter(              content_non_header,              segment_anchor_tag_that_object_belongs_to,              obj_cite_number, @@ -2042,21 +1912,18 @@ template SiSUdocAbstraction() {              heading_ptr-1,              an_object["is"]            ); -        _node_heading_str = _node_t[0]; -        _node_heading_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_heading_str, _node_heading_int); -        the_document_body_section ~= -          set_abstract_object.contents_block( -            an_object["is"], -            an_object["substantive"], -            an_object["attrib"], -            obj_cite_number -          ); +        comp_obj_block                            = comp_obj_block.init; +        comp_obj_block.use                        = "content"; +        comp_obj_block.of                         = "block"; +        comp_obj_block.is_a                       = an_object["is"]; +        comp_obj_block.ocn                        = obj_cite_number; +        comp_obj_block.obj_cite_number            = (obj_cite_number==0) ? "" : to!string(obj_cite_number); +        comp_obj_block.text                       = an_object["substantive"]; +        the_document_body_section                 ~= comp_obj_block;          object_reset(an_object);          processing.remove("verse");          ++cntr; @@ -2114,11 +1981,11 @@ template SiSUdocAbstraction() {        }      }      auto _heading_found_( -      char[] line, -      string dochead_make_identify_unmarked_headings, -      ref string[string] heading_match_str, +      char[]                   line, +      string                   dochead_make_identify_unmarked_headings, +      ref string[string]       heading_match_str,        ref Regex!(char)[string] heading_match_rgx, -      ref int[string] type +      ref int[string]          type      ) {        if ((dochead_make_identify_unmarked_headings.length > 2)        && (type["make_headings"] == State.off)) { @@ -2198,10 +2065,10 @@ template SiSUdocAbstraction() {        }      }      auto _heading_make_set_( -      ref char[] line, -      ref int[string] line_occur, +      ref char[]               line, +      ref int[string]          line_occur,        ref Regex!(char)[string] heading_match_rgx, -      ref int[string] type +      ref int[string]          type      ) {        if ((type["make_headings"] == State.on)        && ((line_occur["para"] == State.off) @@ -2254,13 +2121,13 @@ template SiSUdocAbstraction() {        }      }      auto _heading_matched_( -      char[] line, -      ref int[string] line_occur, -      ref string[string] an_object, -      ref string an_object_key, -      ref int[string] lv, -      ref int[string] collapsed_lev, -      ref int[string] type, +      char[]                     line, +      ref int[string]            line_occur, +      ref string[string]         an_object, +      ref string                 an_object_key, +      ref int[string]            lv, +      ref int[string]            collapsed_lev, +      ref int[string]            type,        ref string[string][string] dochead_meta_aa      ) {        if (auto m = match(line, rgx.heading)) { @@ -2397,13 +2264,13 @@ template SiSUdocAbstraction() {        }      }      auto _para_match_( -      char[] line, +      char[]             line,        ref string[string] an_object, -      ref string an_object_key, -      ref int[string] indent, -      ref bool bullet, -      ref int[string] type, -      ref int[string] line_occur, +      ref string         an_object_key, +      ref int[string]    indent, +      ref bool           bullet, +      ref int[string]    type, +      ref int[string]    line_occur,      ) {        if (line_occur["para"] == State.off) {          /+ para matches +/ @@ -2696,8 +2563,8 @@ template SiSUdocAbstraction() {        auto munge = ObjInlineMarkupMunge();        string[string] obj_txt;        auto obj_inline_markup_and_anchor_tags( -        string[string] obj_, -        string obj_key_, +        string[string]         obj_, +        string                 obj_key_,          string[string][string] dochead_make_aa        )        in { } @@ -2773,27 +2640,21 @@ template SiSUdocAbstraction() {         return heading_toc_;        };        auto table_of_contents_gather_headings( -        string[string] obj_, -        string[string][string] dochead_make_aa, -        string segment_anchor_tag_that_object_belongs_to, -        string _anchor_tag, -        ObjComposite[][string] the_table_of_contents_section, +        string[string]                obj_, +        string[string][string]        dochead_make_aa, +        string                        segment_anchor_tag_that_object_belongs_to, +        string                        _anchor_tag, +        ObjGenericComposite[][string] the_table_of_contents_section,        )        in { }        body { +        ObjGenericComposite comp_obj_toc;          char[] heading_toc_ = to!(char[])(obj_["body_nugget"].dup.strip);          heading_toc_ = _clean_heading_toc_(heading_toc_);          auto attrib="";          string toc_txt_;          int[string] indent; -        auto set_abstract_object = ObjectAbstractSet();          if (to!int(obj_["lev_markup_number"]) > 0) { -          toc_txt_ = format( -            "{ %s }#%s", -            heading_toc_, -            _anchor_tag, -          ); -          toc_txt_= munge.url_links(toc_txt_);            indent=[              "hang_position" : to!int(obj_["lev_markup_number"]),              "base_position" : to!int(obj_["lev_markup_number"]), @@ -2804,30 +2665,41 @@ template SiSUdocAbstraction() {              _anchor_tag,            );            toc_txt_= munge.url_links(toc_txt_); -          the_table_of_contents_section["scroll"] ~= -            set_abstract_object.contents_toc( -              "toc", -              toc_txt_, -              "",                   // attrib -              0, -              indent, -              false -            ); +          comp_obj_toc                       = comp_obj_toc.init; +          comp_obj_toc.use                   = "content"; +          comp_obj_toc.of                    = "para"; +          comp_obj_toc.is_a                  = "toc"; +          comp_obj_toc.ocn                   = 0; +          comp_obj_toc.obj_cite_number       = "0"; +          comp_obj_toc.indent_hang           = indent["hang_position"]; +          comp_obj_toc.indent_base           = indent["base_position"]; +          comp_obj_toc.bullet                = false; +          comp_obj_toc.text                  = to!string(toc_txt_).strip; +          the_table_of_contents_section["scroll"] ~= comp_obj_toc;          } else {            indent=[              "hang_position" : 0,              "base_position" : 0,            ]; -          the_table_of_contents_section["scroll"] ~= -            set_abstract_object.contents_toc( -              "toc", -              "Table of Contents", -              "",                   // attrib -              0, -              indent, -              false -            ); -        } +          comp_obj_toc                       = comp_obj_toc.init; +          comp_obj_toc.use                   = "content"; +          comp_obj_toc.of                    = "para"; +          comp_obj_toc.is_a                  = "toc"; +          comp_obj_toc.ocn                   = 0; +          comp_obj_toc.obj_cite_number       = "0"; +          comp_obj_toc.indent_hang           = indent["hang_position"]; +          comp_obj_toc.indent_base           = indent["base_position"]; +          comp_obj_toc.bullet                = false; +          comp_obj_toc.text                  = "Table of Contents"; +          the_table_of_contents_section["scroll"] ~= comp_obj_toc; +        } +        comp_obj_toc                       = comp_obj_toc.init; +        comp_obj_toc.use                   = "content"; +        comp_obj_toc.of                    = "para"; +        comp_obj_toc.is_a                  = "toc"; +        comp_obj_toc.ocn                   = 0; +        comp_obj_toc.obj_cite_number       = "0"; +        comp_obj_toc.bullet                = false;          switch (to!int(obj_["lev_markup_number"])) {          case 0:            indent=[ @@ -2836,15 +2708,10 @@ template SiSUdocAbstraction() {            ];            toc_txt_ = "{ Table of Contents }../toc.fn_suffix";            toc_txt_= munge.url_links(toc_txt_); -          the_table_of_contents_section["seg"] ~= -            set_abstract_object.contents_toc( -              "toc", -              toc_txt_, -              "",                   // attrib -              0, -              indent, -              false -            ); +          comp_obj_toc.indent_hang             = indent["hang_position"]; +          comp_obj_toc.indent_base             = indent["base_position"]; +          comp_obj_toc.text                    = to!string(toc_txt_).strip; +          the_table_of_contents_section["seg"] ~= comp_obj_toc;            break;          case 1: .. case 3:            indent=[ @@ -2856,15 +2723,10 @@ template SiSUdocAbstraction() {              heading_toc_,            );            toc_txt_= munge.url_links(toc_txt_); -          the_table_of_contents_section["seg"] ~= -            set_abstract_object.contents_toc( -              "toc", -              toc_txt_, -              "",                   // attrib -              0, -              indent, -              false -            ); +          comp_obj_toc.indent_hang             = indent["hang_position"]; +          comp_obj_toc.indent_base             = indent["base_position"]; +          comp_obj_toc.text                    = to!string(toc_txt_).strip; +          the_table_of_contents_section["seg"] ~= comp_obj_toc;            break;          case 4:            toc_txt_ = format( @@ -2877,15 +2739,10 @@ template SiSUdocAbstraction() {              "hang_position" : to!int(obj_["lev_markup_number"]),              "base_position" : to!int(obj_["lev_markup_number"]),            ]; -          the_table_of_contents_section["seg"] ~= -            set_abstract_object.contents_toc( -              "toc", -              toc_txt_, -              "",                   // attrib -              0, -              indent, -              false -            ); +          comp_obj_toc.indent_hang             = indent["hang_position"]; +          comp_obj_toc.indent_base             = indent["base_position"]; +          comp_obj_toc.text                    = to!string(toc_txt_).strip; +          the_table_of_contents_section["seg"] ~= comp_obj_toc;            break;          case 5: .. case 7:            toc_txt_ = format( @@ -2899,15 +2756,10 @@ template SiSUdocAbstraction() {              "hang_position" : to!int(obj_["lev_markup_number"]),              "base_position" : to!int(obj_["lev_markup_number"]),            ]; -          the_table_of_contents_section["seg"] ~= -            set_abstract_object.contents_toc( -              "toc", -              toc_txt_, -              "",                   // attrib -              0, -              indent, -              false -            ); +          comp_obj_toc.indent_hang             = indent["hang_position"]; +          comp_obj_toc.indent_base             = indent["base_position"]; +          comp_obj_toc.text                    = to!string(toc_txt_).strip; +          the_table_of_contents_section["seg"] ~= comp_obj_toc;            break;          default:            break; @@ -2918,10 +2770,9 @@ template SiSUdocAbstraction() {        }      private:        static string _configured_auto_heading_numbering_and_segment_anchor_tags( -        string munge_, -        string[string] obj_, -        string[string][string] -        dochead_make_aa +        string                 munge_, +        string[string]         obj_, +        string[string][string] dochead_make_aa        ) {          if (dochead_make_aa["make"]["num_top"].length > 0) {            if (!(match(munge_, rgx.heading_anchor_tag))) { @@ -3103,20 +2954,17 @@ template SiSUdocAbstraction() {      struct ObjAttributes {        string[string] _obj_attrib;        string obj_attributes( -        string obj_is_, -        string obj_raw, -        string[string] _node_heading_str, -        int[string] _node_heading_int +        string              obj_is_, +        string              obj_raw, +        ObjGenericComposite _comp_obj_heading,        )        in { }        body {          scope(exit) {            destroy(obj_is_);            destroy(obj_raw); -          destroy(_node_heading_str); -          destroy(_node_heading_int); +          destroy(_comp_obj_heading);          } -        _obj_attrib.remove("json");          _obj_attrib["json"] ="{";          switch (obj_is_) {          case "heading": @@ -3154,7 +3002,7 @@ template SiSUdocAbstraction() {            break;          }          _obj_attrib["json"] ~=" }"; -        _obj_attrib["json"]=_set_additional_values_parse_as_json(_obj_attrib["json"], obj_is_, _node_heading_str, _node_heading_int); // check +        _obj_attrib["json"]=_set_additional_values_parse_as_json(_obj_attrib["json"], obj_is_, _comp_obj_heading); // check          debug(structattrib) {            if (oa_j["is"].str() == "heading") {              writeln(_obj_attrib["json"]); @@ -3176,24 +3024,24 @@ template SiSUdocAbstraction() {          auto rgx = Rgx();          if (matchFirst(obj_txt_in, rgx.para_bullet)) {            _obj_attributes =" \"bullet\": \"true\"," -          ~ " \"indent_start\": 0," -          ~ " \"indent_rest\": 0,"; +          ~ " \"indent_hang\": 0," +          ~ " \"indent_base\": 0,";          } else if (auto m = matchFirst(obj_txt_in, rgx.para_bullet_indent)) {            _obj_attributes =" \"bullet\": \"true\"," -          ~ " \"indent_start\": " ~ to!string(m.captures[1]) ~ "," -          ~ " \"indent_rest\": " ~ to!string(m.captures[1]) ~ ","; +          ~ " \"indent_hang\": " ~ to!string(m.captures[1]) ~ "," +          ~ " \"indent_base\": " ~ to!string(m.captures[1]) ~ ",";          } else if (auto m = matchFirst(obj_txt_in, rgx.para_indent_hang)) {            _obj_attributes =" \"bullet\": \"false\"," -          ~ " \"indent_start\": " ~ to!string(m.captures[1]) ~ "," -          ~ " \"indent_rest\": " ~  to!string(m.captures[2]) ~ ","; +          ~ " \"indent_hang\": " ~ to!string(m.captures[1]) ~ "," +          ~ " \"indent_base\": " ~  to!string(m.captures[2]) ~ ",";          } else if (auto m = matchFirst(obj_txt_in, rgx.para_indent)) {            _obj_attributes =" \"bullet\": \"false\"," -          ~ " \"indent_start\": " ~ to!string(m.captures[1]) ~ "," -          ~ " \"indent_rest\": " ~ to!string(m.captures[1]) ~ ","; +          ~ " \"indent_hang\": " ~ to!string(m.captures[1]) ~ "," +          ~ " \"indent_base\": " ~ to!string(m.captures[1]) ~ ",";          } else {            _obj_attributes =" \"bullet\": \"false\"," -          ~ " \"indent_start\": 0," -          ~ " \"indent_rest\": 0,"; +          ~ " \"indent_hang\": 0," +          ~ " \"indent_base\": 0,";          }          return _obj_attributes;        } @@ -3288,26 +3136,25 @@ template SiSUdocAbstraction() {        invariant() {        }        string _set_additional_values_parse_as_json( -        string _obj_attrib, -        string obj_is_, -        string[string] _node_heading_str, -        int[string] _node_heading_int +        string              _obj_attrib, +        string              obj_is_, +        ObjGenericComposite _comp_obj_heading,        ) {                                                  //          JSONValue oa_j = parseJSON(_obj_attrib);          assert(            (oa_j.type == JSON_TYPE.OBJECT)          );          if (obj_is_ == "heading") { -          oa_j.object["obj_cite_number"] = _node_heading_str["ocn"]; -          oa_j.object["lev_markup_number"] = _node_heading_int["heading_lev_markup"]; -          oa_j.object["lev_collapsed_number"] = _node_heading_int["heading_lev_collapsed"]; +          oa_j.object["obj_cite_number"] = _comp_obj_heading.ocn; +          oa_j.object["lev_markup_number"] = _comp_obj_heading.heading_lev_markup; +          oa_j.object["lev_collapsed_number"] = _comp_obj_heading.heading_lev_collapsed;            oa_j.object["heading_ptr"] = -            _node_heading_int["ptr_heading"]; +            _comp_obj_heading.ptr_heading;            oa_j.object["doc_object_ptr"] = -            _node_heading_int["ptr_doc_object"]; +            _comp_obj_heading.ptr_doc_object;          } -        oa_j.object["parent_obj_cite_number"] = _node_heading_int["parent_ocn"];         // -        oa_j.object["parent_lev_markup_number"] = _node_heading_int["parent_lev_markup"];         // +        oa_j.object["parent_obj_cite_number"] = _comp_obj_heading.parent_ocn; +        oa_j.object["parent_lev_markup_number"] = _comp_obj_heading.parent_lev_markup;          _obj_attrib = oa_j.toString();          return _obj_attrib;        } @@ -3322,7 +3169,7 @@ template SiSUdocAbstraction() {        string[] bi_main_terms_split_arr;        string[][string][string] bookindex_nugget_hash(          string bookindex_section, -        int obj_cite_number +        int    obj_cite_number        )        in {          debug(bookindexraw) { @@ -3451,68 +3298,48 @@ template SiSUdocAbstraction() {          mixin SiSUnode;          string type_is;          string lev; -        int lev_int_markup, lev_int_collapsed; +        int heading_lev_markup, heading_lev_collapsed;          string attrib;          int[string] indent; -        auto set_abstract_object = ObjectAbstractSet();          auto mainkeys =            bookindex_unordered_hashes.byKey.array.sort().release; -        ObjComposite[][string] bookindex_section; -        auto node_heading_int_ = node_metadata_heading_int; -        auto node_heading_str_ = node_metadata_heading_str; +        ObjGenericComposite[][string] bookindex_section; +        ObjGenericComposite comp_obj_heading_, comp_obj_para;          auto node_para_int_ = node_metadata_para_int;          auto node_para_str_ = node_metadata_para_str;          if ((mainkeys.length > 0)          && (opt_action_bool["backmatter"] && opt_action_bool["section_bookindex"])) {            string bi_tmp_seg, bi_tmp_scroll; -          node_heading_str_["is"]                       = "heading"; -          node_heading_str_["ocn"]                      = "0"; -          node_heading_str_["segment_anchor_tag"]       = ""; -          node_heading_str_["attrib"]                   = ""; -          node_heading_str_["marked_up_lev"]            = "B"; -          node_heading_int_["heading_lev_markup"]       = 1; -          node_heading_int_["heading_lev_collapsed"]    = 1; -          node_heading_int_["parent_ocn"]               = 1; -          node_heading_int_["parent_lev_markup"]        = 0; -          bookindex_section["scroll"] ~= -            set_abstract_object.contents_heading( -              "Book Index", -              node_heading_str_, -              node_heading_int_, -              [], -            ); -          bookindex_section["seg"] ~= -            set_abstract_object.contents_heading( -              "Book Index", -              node_heading_str_, -              node_heading_int_, -              [], -            ); +          comp_obj_heading_                       = comp_obj_heading_.init; +          comp_obj_heading_.use                   = "content"; +          comp_obj_heading_.of                    = "para"; +          comp_obj_heading_.is_a                  = "heading"; +          comp_obj_heading_.text                  = "Book Index"; +          comp_obj_heading_.ocn                   = 0; +          comp_obj_heading_.marked_up_level       = "B"; +          comp_obj_heading_.heading_lev_markup    = 1; +          comp_obj_heading_.heading_lev_collapsed = 1; +          comp_obj_heading_.parent_ocn            = 1; +          comp_obj_heading_.parent_lev_markup     = 0; +          bookindex_section["scroll"]             ~= comp_obj_heading_; +          bookindex_section["seg"]                ~= comp_obj_heading_;            ++obj_cite_number;            ++mkn; -          node_heading_str_["is"]                       = "heading"; -          node_heading_str_["ocn"]                      = "0"; -          node_heading_str_["segment_anchor_tag"]       = "bookindex"; -          node_heading_str_["attrib"]                   = ""; -          node_heading_str_["marked_up_lev"]            = "1"; -          node_heading_int_["heading_lev_markup"]       = 4; -          node_heading_int_["heading_lev_collapsed"]    = 2; -          node_heading_int_["parent_ocn"]               = 1; -          node_heading_int_["parent_lev_markup"]        = 0; -          bookindex_section["scroll"] ~= -            set_abstract_object.contents_heading( -              "Index", -              node_heading_str_, -              node_heading_int_, -              ["bookindex"], -            ); -          bookindex_section["seg"] ~= -            set_abstract_object.contents_heading( -              "Index", -              node_heading_str_, -              node_heading_int_, -              ["bookindex"], -            ); +          comp_obj_heading_                       = comp_obj_heading_.init; +          comp_obj_heading_.use                   = "content"; +          comp_obj_heading_.of                    = "para"; +          comp_obj_heading_.is_a                  = "heading"; +          comp_obj_heading_.text                  = "Index"; +          comp_obj_heading_.ocn                   = 0; +          comp_obj_heading_.segment_anchor_tag    = "bookindex"; +          comp_obj_heading_.marked_up_level       = "1"; +          comp_obj_heading_.heading_lev_markup    = 4; +          comp_obj_heading_.heading_lev_collapsed = 2; +          comp_obj_heading_.parent_ocn            = 1; +          comp_obj_heading_.parent_lev_markup     = 0; +          comp_obj_heading_.anchor_tags           = ["bookindex"]; +          bookindex_section["scroll"]             ~= comp_obj_heading_; +          bookindex_section["seg"]                ~= comp_obj_heading_;            ++obj_cite_number;            ++mkn;            foreach (mainkey; mainkeys) { @@ -3546,52 +3373,33 @@ template SiSUdocAbstraction() {              }              bi_tmp_scroll = replaceFirst(bi_tmp_scroll, rgx.trailing_linebreak, "");              bi_tmp_seg = replaceFirst(bi_tmp_seg, rgx.trailing_linebreak, ""); -            indent=[ "hang_position" : 0, "base_position" : 1, ]; -            node_para_str_["is"]                           = "para"; -            node_para_str_["attrib"]                       = ""; -            node_para_int_["ocn"]                          = obj_cite_number; -            node_para_int_["indent_hang"]                  = 0; -            node_para_int_["indent_base"]                  = 1; -            node_para_int_["bullet"]                       = 0; -            bookindex_section["scroll"] ~= -              set_abstract_object.contents_para( -                bi_tmp_scroll, -                node_para_str_, -                node_para_int_, -              ); -            bookindex_section["seg"] ~= -              set_abstract_object.contents_para( -                bi_tmp_seg, -                node_para_str_, -                node_para_int_, -              ); +            comp_obj_para                       = comp_obj_para.init; +            comp_obj_para.use                   = "content"; +            comp_obj_para.of                    = "para"; +            comp_obj_para.is_a                  = "para"; +            comp_obj_para.text                  = to!string(bi_tmp_scroll).strip; +            comp_obj_para.ocn                   = obj_cite_number; +            comp_obj_para.obj_cite_number       = to!string(obj_cite_number); +            comp_obj_para.indent_hang           = 0; +            comp_obj_para.indent_base           = 1; +            comp_obj_para.bullet                = false; +            bookindex_section["scroll"]         ~= comp_obj_para; +            comp_obj_para.text                  = to!string(bi_tmp_seg).strip; +            bookindex_section["seg"]            ~= comp_obj_para;              ++obj_cite_number;              ++mkn;            }          } else {                              // no book index, (figure out what to do here) -          node_heading_str_["is"]                       = "heading"; -          node_heading_str_["ocn"]                      = "0"; -          node_heading_str_["segment_anchor_tag"]       = ""; -          node_heading_str_["attrib"]                   = ""; -          node_heading_str_["marked_up_lev"]            = "B"; -          node_heading_int_["heading_lev_markup"]       = 1; -          node_heading_int_["heading_lev_collapsed"]    = 1; -          node_heading_int_["parent_ocn"]               = 1; -          node_heading_int_["parent_lev_markup"]        = 0; -          bookindex_section["scroll"] ~= -            set_abstract_object.contents_heading( -              "(skip) there is no Book Index", -              node_heading_str_, -              node_heading_int_, -              [""], -            ); -          bookindex_section["seg"] ~= -            set_abstract_object.contents_heading( -              "(skip) there is no Book Index", -              node_heading_str_, -              node_heading_int_, -              [""], -            ); +          comp_obj_heading_                       = comp_obj_heading_.init; +          comp_obj_heading_.text                  = "(skip) there is no Book Index"; +          comp_obj_heading_.ocn                   = 0; +          comp_obj_heading_.marked_up_level       = "B"; +          comp_obj_heading_.heading_lev_markup    = 1; +          comp_obj_heading_.heading_lev_collapsed = 1; +          comp_obj_heading_.parent_ocn            = 1; +          comp_obj_heading_.parent_lev_markup     = 0; +          bookindex_section["scroll"]             ~= comp_obj_heading_; +          bookindex_section["seg"]                ~= comp_obj_heading_;          }          auto t = tuple(bookindex_section, obj_cite_number);          return t; @@ -3604,9 +3412,9 @@ template SiSUdocAbstraction() {        int mkn;        auto rgx = Rgx();        private auto gather_notes_for_endnote_section( -        ObjComposite[] contents_am, -        string         segment_anchor_tag_that_object_belongs_to, -        int            cntr, +        ObjGenericComposite[] contents_am, +        string                segment_anchor_tag_that_object_belongs_to, +        int                   cntr,        )        in {          // endnotes/ footnotes for @@ -3618,7 +3426,7 @@ template SiSUdocAbstraction() {          assert(cntr >= previous_count);          previous_count=cntr;          assert( -          match(contents_am[cntr].object, +          match(contents_am[cntr].text,            rgx.inline_notes_delimiter_al_regular_number_note)          );        } @@ -3627,7 +3435,7 @@ template SiSUdocAbstraction() {          foreach(            m;            matchAll( -            contents_am[cntr].object, +            contents_am[cntr].text,              rgx.inline_notes_delimiter_al_regular_number_note            )          ) { @@ -3679,102 +3487,88 @@ template SiSUdocAbstraction() {        }        body {          mixin SiSUnode; -        auto set_abstract_object = ObjectAbstractSet(); -        ObjComposite[][string] the_endnotes_section; +        ObjGenericComposite[][string] the_endnotes_section;          auto endnotes_ = gathered_notes();          string type_is;          string lev, lev_markup_number, lev_collapsed_number;          string attrib;          int[string] indent; -        auto node_heading_int_ = node_metadata_heading_int; -        auto node_heading_str_ = node_metadata_heading_str; +        ObjGenericComposite comp_obj_heading_;          if ((endnotes_["seg"].length > 0)          && (opt_action_bool["backmatter"] && opt_action_bool["section_endnotes"])) { -          node_heading_str_["is"]                       = "heading"; -          node_heading_str_["ocn"]                      = "0"; -          node_heading_str_["segment_anchor_tag"]       = ""; -          node_heading_str_["attrib"]                   = ""; -          node_heading_str_["marked_up_lev"]            = "B"; -          node_heading_int_["heading_lev_markup"]       = 1; -          node_heading_int_["heading_lev_collapsed"]    = 1; -          node_heading_int_["parent_ocn"]               = 1; -          node_heading_int_["parent_lev_markup"]        = 0; -          the_endnotes_section["seg"] ~= -            set_abstract_object.contents_heading( -              "Endnotes", -              node_heading_str_, -              node_heading_int_, -              [], -            ); -          the_endnotes_section["scroll"] ~= -            set_abstract_object.contents_heading( -              "Endnotes", -              node_heading_str_, -              node_heading_int_, -              [], -            ); +          comp_obj_heading_                       = comp_obj_heading_.init; +          comp_obj_heading_.use                   = "content"; +          comp_obj_heading_.of                    = "para"; +          comp_obj_heading_.is_a                  = "heading"; +          comp_obj_heading_.text                  = "Endnotes"; +          comp_obj_heading_.ocn                   = 0; +          comp_obj_heading_.marked_up_level       = "B"; +          comp_obj_heading_.heading_lev_markup    = 1; +          comp_obj_heading_.heading_lev_collapsed = 1; +          comp_obj_heading_.parent_ocn            = 1; +          comp_obj_heading_.parent_lev_markup     = 0; +          the_endnotes_section["seg"]             ~= comp_obj_heading_; +          the_endnotes_section["scroll"]          ~= comp_obj_heading_;            ++obj_cite_number;            ++mkn; -          node_heading_str_["is"]                       = "heading"; -          node_heading_str_["ocn"]                      = "0"; -          node_heading_str_["segment_anchor_tag"]       = "endnotes"; -          node_heading_str_["attrib"]                   = ""; -          node_heading_str_["marked_up_lev"]            = "1"; -          node_heading_int_["heading_lev_markup"]       = 4; -          node_heading_int_["heading_lev_collapsed"]    = 2; -          node_heading_int_["parent_ocn"]               = 1; -          node_heading_int_["parent_lev_markup"]        = 0; -          the_endnotes_section["seg"] ~= -            set_abstract_object.contents_heading( -              "Endnotes", -              node_heading_str_, -              node_heading_int_, -              ["endnotes"], -            ); -          the_endnotes_section["scroll"] ~= -            set_abstract_object.contents_heading( -              "Endnotes", -              node_heading_str_, -              node_heading_int_, -              ["endnotes"], -            ); +          comp_obj_heading_                       = comp_obj_heading_.init; +          comp_obj_heading_.use                   = "content"; +          comp_obj_heading_.of                    = "para"; +          comp_obj_heading_.is_a                  = "heading"; +          comp_obj_heading_.text                  = "Endnotes"; +          comp_obj_heading_.ocn                   = 0; +          comp_obj_heading_.segment_anchor_tag    = "endnotes"; +          comp_obj_heading_.marked_up_level       = "1"; +          comp_obj_heading_.heading_lev_markup    = 4; +          comp_obj_heading_.heading_lev_collapsed = 2; +          comp_obj_heading_.parent_ocn            = 1; +          comp_obj_heading_.parent_lev_markup     = 0; +          comp_obj_heading_.anchor_tags           = ["endnotes"]; +          the_endnotes_section["seg"]             ~= comp_obj_heading_; +          the_endnotes_section["scroll"]          ~= comp_obj_heading_;            ++obj_cite_number;            ++mkn;          } else { -          node_heading_str_["is"]                       = "heading"; -          node_heading_str_["ocn"]                      = "0"; -          node_heading_str_["segment_anchor_tag"]       = ""; -          node_heading_str_["attrib"]                   = ""; -          node_heading_str_["marked_up_lev"]            = "B"; -          node_heading_int_["heading_lev_markup"]       = 1; -          node_heading_int_["heading_lev_collapsed"]    = 1; -          node_heading_int_["parent_ocn"]               = 1; -          node_heading_int_["parent_lev_markup"]        = 0; -          the_endnotes_section["seg"] ~= -            set_abstract_object.contents_heading( -              "(skip) there are no Endnotes", -              node_heading_str_, -              node_heading_int_, -              [""], -            ); -          the_endnotes_section["scroll"] ~= -            set_abstract_object.contents_heading( -              "(skip) there are no Endnotes", -              node_heading_str_, -              node_heading_int_, -              [""], -            ); +          comp_obj_heading_                       = comp_obj_heading_.init; +          comp_obj_heading_.use                   = "content"; +          comp_obj_heading_.of                    = "para"; +          comp_obj_heading_.is_a                  = "heading"; +          comp_obj_heading_.text                  = "(skip) there are no Endnotes"; +          comp_obj_heading_.ocn                   = 0; +          comp_obj_heading_.marked_up_level       = "B"; +          comp_obj_heading_.heading_lev_markup    = 1; +          comp_obj_heading_.heading_lev_collapsed = 1; +          comp_obj_heading_.parent_ocn            = 1; +          comp_obj_heading_.parent_lev_markup     = 0; +          the_endnotes_section["seg"]             ~= comp_obj_heading_; +          the_endnotes_section["scroll"]          ~= comp_obj_heading_;          }          if (opt_action_bool["backmatter"] && opt_action_bool["section_endnotes"]) { +          ObjGenericComposite comp_obj_endnote_; +          comp_obj_endnote_                       = comp_obj_endnote_.init; +          comp_obj_endnote_.use                   = "content"; +          comp_obj_endnote_.of                    = "para"; +          comp_obj_endnote_.is_a                  = "endnote"; +          comp_obj_endnote_.ocn                   = 0; +          comp_obj_endnote_.obj_cite_number       = "0"; +          comp_obj_endnote_.indent_hang           = 0; +          comp_obj_endnote_.indent_base           = 0; +          comp_obj_endnote_.bullet                = false;            foreach (i, endnote; endnotes_["seg"]) { -            attrib=""; -            the_endnotes_section["seg"] ~= -              set_abstract_object.contents_endnote(endnote, endnotes_["anchor"][i]); +            auto     m                            = (matchFirst(endnote, rgx.note_ref)); +            string   notenumber                   = to!string(m.captures[1]); +            string   anchor_tag                   = "note_" ~ notenumber; +            comp_obj_endnote_.anchor_tags         ~= [ endnotes_["anchor"][i] ]; // fix +            comp_obj_endnote_.text                = endnote.strip; +            the_endnotes_section["seg"]           ~= comp_obj_endnote_;            }            foreach (i, endnote; endnotes_["scroll"]) { -            attrib=""; -            the_endnotes_section["scroll"] ~= -              set_abstract_object.contents_endnote(endnote, endnotes_["anchor"][i]); +            auto     m                            = (matchFirst(endnote, rgx.note_ref)); +            string   notenumber                   = to!string(m.captures[1]); +            string   anchor_tag                   = "note_" ~ notenumber; +            comp_obj_endnote_.anchor_tags         ~= [ endnotes_["anchor"][i] ]; // fix +            comp_obj_endnote_.text                = endnote.strip; +            the_endnotes_section["scroll"]        ~= comp_obj_endnote_;            }          }          auto t = tuple(the_endnotes_section, obj_cite_number); @@ -3784,8 +3578,8 @@ template SiSUdocAbstraction() {      /+ +/      struct Bibliography {        public JSONValue[] _bibliography_( -        ref string[] biblio_unsorted_incomplete, -        ref JSONValue[] bib_arr_json +        ref string[]     biblio_unsorted_incomplete, +        ref JSONValue[]  bib_arr_json        )        in { }        body { @@ -3809,7 +3603,7 @@ template SiSUdocAbstraction() {          return biblio_sorted__;        }        final private JSONValue[] _biblio_unsorted_complete_( -        string[] biblio_unordered, +        string[]        biblio_unordered,          ref JSONValue[] bib_arr_json        ) {          foreach (bibent; biblio_unordered) { @@ -3867,11 +3661,11 @@ template SiSUdocAbstraction() {        int lv, lv0, lv1, lv2, lv3, lv4, lv5, lv6, lv7;        int obj_cite_number;        int[string] p_; // p_ parent_ -      auto node_emitter( +      ObjGenericComposite node_location_emitter(          string lev_markup_number,          string segment_anchor_tag,          int    obj_cite_number_, -        int   cntr_, +        int    cntr_,          int    ptr_,          string is_        ) @@ -3897,23 +3691,13 @@ template SiSUdocAbstraction() {            p_["lev_markup_number"] = DocStructMarkupHeading.h_text_1;            p_["obj_cite_number"] = lv4;          } -        string[string] _node_heading_str = [ -          "is"                            : is_, -          "ocn"                           : to!string(obj_cite_number_), -          "marked_up_lev"                 : "", -          "segment_anchor_tag"            : to!string(segment_anchor_tag), -          "attrib"                        : "", -        ]; -        int[string] _node_heading_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"], -        ]; +        ObjGenericComposite comp_obj_location; +        comp_obj_location                       = comp_obj_location.init; +        comp_obj_location.is_a                  = is_; +        comp_obj_location.ocn                   = obj_cite_number_; +        comp_obj_location.segment_anchor_tag    = to!string(segment_anchor_tag); +        comp_obj_location.parent_ocn            = p_["obj_cite_number"]; +        comp_obj_location.parent_lev_markup     = p_["lev_markup_number"];          debug(node) {            if (match(lev_markup_number, rgx.levels_numbered_headings)) {              writeln("x ", to!string(_node)); @@ -3921,18 +3705,15 @@ template SiSUdocAbstraction() {              writeln("- ", to!string(_node));            }          } -        assert(_node_heading_int["parent_lev_markup"] >= 4);         // -        assert(_node_heading_int["parent_lev_markup"] <= 7);         // -        assert(_node_heading_int["parent_ocn"] >= 0);      // hmm, perhaps         // -        auto t = tuple( -          _node_heading_str, -          _node_heading_int, -        ); -        return t; +        assert(comp_obj_location.parent_lev_markup >= 4); +        assert(comp_obj_location.parent_lev_markup <= 7); +        assert(comp_obj_location.parent_ocn >= 0); +        return comp_obj_location;        }        invariant() {        } -      auto node_emitter_heading( +      ObjGenericComposite node_emitter_heading( +        string _text,          string lev,          string lev_markup_number,          string lev_collapsed_number, @@ -3941,7 +3722,7 @@ template SiSUdocAbstraction() {          int    cntr_,          int    ptr_,          string is_, -        int html_segnames_ptr, +        int    html_segnames_ptr,        )        in {          auto rgx = Rgx(); @@ -4040,23 +3821,23 @@ template SiSUdocAbstraction() {          default:            break;          } -        string[string] _node_heading_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_heading_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"], -        ]; +        ObjGenericComposite _comp_obj_heading_; +        _comp_obj_heading_                       = _comp_obj_heading_.init; +        _comp_obj_heading_.use                   = "content"; +        _comp_obj_heading_.of                    = "para"; +        _comp_obj_heading_.is_a                  = "heading"; +        _comp_obj_heading_.text                  = to!string(_text).strip; +        _comp_obj_heading_.ocn                   = obj_cite_number_; +        _comp_obj_heading_.obj_cite_number       = (obj_cite_number==0) ? "" : to!string(obj_cite_number); +        _comp_obj_heading_.segment_anchor_tag    = to!string(segment_anchor_tag); +        _comp_obj_heading_.marked_up_level       = lev; +        _comp_obj_heading_.heading_lev_markup    = (!(lev_markup_number.empty) ? to!int(lev_markup_number) : 0); +        _comp_obj_heading_.heading_lev_collapsed = (!(lev_collapsed_number.empty) ? to!int(lev_collapsed_number) : 0); +        _comp_obj_heading_.parent_ocn            = p_["obj_cite_number"]; +        _comp_obj_heading_.parent_lev_markup     = p_["lev_markup_number"]; +        _comp_obj_heading_.ptr_doc_object        = cntr_; +        _comp_obj_heading_.ptr_html_segnames     = ((lev_markup_number == "4") ? html_segnames_ptr : 0); +        _comp_obj_heading_.ptr_heading           = ptr_;          debug(node) {            if (match(lev_markup_number, rgx.levels_numbered_headings)) {              writeln("* ", to!string(_node)); @@ -4067,44 +3848,37 @@ template SiSUdocAbstraction() {              writeln("* ", to!string(_node));            }          } -        assert(_node_heading_int["parent_lev_markup"] <= 7); -        assert(_node_heading_int["parent_ocn"] >= 0); +        assert(_comp_obj_heading_.parent_lev_markup <= 7); +        assert(_comp_obj_heading_.parent_ocn >= 0);          if (match(lev_markup_number, rgx.levels_numbered_headings)) { -          assert(_node_heading_int["heading_lev_markup"] <= 7);         // issues -          assert(to!int(_node_heading_str["ocn"]) >= 0); -          if (_node_heading_int["parent_lev_markup"] > 0) { -            assert(_node_heading_int["parent_lev_markup"] < _node_heading_int["heading_lev_markup"]); -            if (to!int(_node_heading_str["ocn"]) != 0) { -              assert(_node_heading_int["parent_ocn"] < to!int(_node_heading_str["ocn"])); +          assert(_comp_obj_heading_.heading_lev_markup <= 7); +          assert(_comp_obj_heading_.ocn >= 0); +          if (_comp_obj_heading_.parent_lev_markup > 0) { +            assert(_comp_obj_heading_.parent_lev_markup < _comp_obj_heading_.heading_lev_markup); +            if (_comp_obj_heading_.ocn != 0) { +              assert(_comp_obj_heading_.parent_ocn < _comp_obj_heading_.ocn);              }            } -          if (_node_heading_int["heading_lev_markup"] == 0) { -            assert(_node_heading_int["parent_lev_markup"] == DocStructMarkupHeading.h_sect_A); -          } else if  (_node_heading_int["heading_lev_markup"] == DocStructMarkupHeading.h_sect_B) { -            assert(_node_heading_int["parent_lev_markup"] == DocStructMarkupHeading.h_sect_A); -          } else if  (_node_heading_int["heading_lev_markup"] == DocStructMarkupHeading.h_sect_C) { -            assert(_node_heading_int["parent_lev_markup"] == DocStructMarkupHeading.h_sect_B); -          } else if  (_node_heading_int["heading_lev_markup"] == DocStructMarkupHeading.h_sect_D) { -            assert(_node_heading_int["parent_lev_markup"] == DocStructMarkupHeading.h_sect_C); -          } else if  (_node_heading_int["heading_lev_markup"] == DocStructMarkupHeading.h_text_1) { -            assert(_node_heading_int["parent_lev_markup"] <= DocStructMarkupHeading.h_sect_D); -          } else if  (_node_heading_int["heading_lev_markup"] == DocStructMarkupHeading.h_text_2) { -            assert(_node_heading_int["parent_lev_markup"] == DocStructMarkupHeading.h_text_1); -          } else if  (_node_heading_int["heading_lev_markup"] == DocStructMarkupHeading.h_text_3) { -            assert(_node_heading_int["parent_lev_markup"] == DocStructMarkupHeading.h_text_2); -          } else if  (_node_heading_int["heading_lev_markup"] == DocStructMarkupHeading.h_text_4) { -            assert(_node_heading_int["parent_lev_markup"] == DocStructMarkupHeading.h_text_3); -          } else if  (_node_heading_int["heading_lev_markup"] == DocStructMarkupHeading.h_text_5) { -            // // writeln(to!int(_node_heading_int["parent_lev_markup"])); -            // // assert(to!int(_node_heading_int["parent_lev_markup"]) >= 4); -            // // assert(to!int(_node_heading_int["parent_lev_markup"]) <= 7); -          } -        } -        auto t = tuple( -          _node_heading_str, -          _node_heading_int, -        ); -        return t; +          if (_comp_obj_heading_.heading_lev_markup == 0) { +            assert(_comp_obj_heading_.parent_lev_markup == DocStructMarkupHeading.h_sect_A); +          } else if  (_comp_obj_heading_.heading_lev_markup == DocStructMarkupHeading.h_sect_B) { +            assert(_comp_obj_heading_.parent_lev_markup == DocStructMarkupHeading.h_sect_A); +          } else if  (_comp_obj_heading_.heading_lev_markup == DocStructMarkupHeading.h_sect_C) { +            assert(_comp_obj_heading_.parent_lev_markup == DocStructMarkupHeading.h_sect_B); +          } else if  (_comp_obj_heading_.heading_lev_markup == DocStructMarkupHeading.h_sect_D) { +            assert(_comp_obj_heading_.parent_lev_markup == DocStructMarkupHeading.h_sect_C); +          } else if  (_comp_obj_heading_.heading_lev_markup == DocStructMarkupHeading.h_text_1) { +            assert(_comp_obj_heading_.parent_lev_markup <= DocStructMarkupHeading.h_sect_D); +          } else if  (_comp_obj_heading_.heading_lev_markup == DocStructMarkupHeading.h_text_2) { +            assert(_comp_obj_heading_.parent_lev_markup == DocStructMarkupHeading.h_text_1); +          } else if  (_comp_obj_heading_.heading_lev_markup == DocStructMarkupHeading.h_text_3) { +            assert(_comp_obj_heading_.parent_lev_markup == DocStructMarkupHeading.h_text_2); +          } else if  (_comp_obj_heading_.heading_lev_markup == DocStructMarkupHeading.h_text_4) { +            assert(_comp_obj_heading_.parent_lev_markup == DocStructMarkupHeading.h_text_3); +          } else if  (_comp_obj_heading_.heading_lev_markup == DocStructMarkupHeading.h_text_5) { +          } +        } +        return _comp_obj_heading_;        }        invariant() {        } @@ -4113,7 +3887,7 @@ template SiSUdocAbstraction() {      /+ ↓ abstraction functions assertions +/      auto assertions_doc_structure(        string[string] an_object, -      int[string] lv +      int[string]    lv      ) {        if (lv["h3"] > State.off) {          assert(lv["h0"] > State.off); diff --git a/src/sdp/ao_object_setter.d b/src/sdp/ao_object_setter.d index 9806285..f6f7641 100644 --- a/src/sdp/ao_object_setter.d +++ b/src/sdp/ao_object_setter.d @@ -7,187 +7,46 @@ template ObjectSetter() {    /+ structs +/    struct HeadingAttrib {      string lev                            = "9"; -    int    lev_int_markup                 = 9; -    int    lev_int_collapsed              = 9; -    int[]  closes_lev_collapsed           = []; // TODO track -    int[]  closes_lev_markup              = []; // TODO track -    int    array_ptr                  = 0; -  // heading segments, 1~ lev4: -    int    heading_array_ptr_segments = 0; // TODO -  } -  struct ParaAttrib { -    int indent_start            = 0; -    int indent_rest             = 0; -    bool bullet                 = false; -  } -  struct BlockAttrib { -    string syntax               = ""; -  } -  struct Comment { -    // no .attrib and no .obj_cite_number -  } -  struct Node { -    int ocn                            = 0; -    string seg_anchor_tag              = ""; -  // parent -    int parent_lev_int_markup          = 0; -    int parent_ocn                     = 0; -    int[] ancestors                    = []; // TODO track -  // heading: -    int heading_lev_int_markup         = 0; -    int heading_lev_int_collapsed      = 0; -    int[] heading_closes_lev_collapsed = []; // TODO track -    int[] heading_closes_lev_markup    = []; // TODO track -    int heading_array_ptr          = 0; -  // heading segments, 1~ lev4: -    int heading_array_ptr_segments = 0; // TODO -  // node info json string: +    int    heading_lev_markup             = 9; +    int    heading_lev_collapsed          = 9; +    int[]  closes_lev_collapsed           = []; +    int[]  closes_lev_markup              = []; +    int    array_ptr                      = 0; +    int    heading_array_ptr_segments     = 0; +  } +  struct ObjGenericComposite { +    // size_t id; +    string                 use                          = ""; +    string                 of                           = ""; +    string                 is_a                         = ""; +    string                 text                         = ""; +    string                 obj_cite_number              = ""; +    string[]               anchor_tags                  = []; +    string                 marked_up_level              = "9"; +    int[]                  closes_lev_collapsed         = []; +    int[]                  closes_lev_markup            = []; +    int                    indent_base                  = 0; +    int                    indent_hang                  = 0; +    bool                   bullet                       = false; +    string                 syntax                       = ""; +    int                    ocn                          = 0; +    string                 segment_anchor_tag           = ""; +    int                    parent_lev_markup            = 0; +    int                    parent_ocn                   = 0; +    int[]                  ancestors                    = []; +    int                    heading_lev_markup           = 9; +    int                    heading_lev_collapsed        = 9; +    int[]                  heading_closes_lev_collapsed = []; +    int[]                  heading_closes_lev_markup    = []; +    int                    heading_array_ptr            = 0; +    int                    ptr_doc_object               = 0; +    int                    ptr_html_segnames            = 0; +    int                    ptr_heading                  = 0; +    int                    array_ptr                    = 0; +    int                    heading_array_ptr_segments   = 0;      string[string][string] node;    } -  struct ObjComposite { -    string use                  = ""; -    string of                   = ""; -    string is_a                 = ""; -    string object               = ""; -    string obj_cite_number      = "";  // not used for calculations? output only? else int -    string[] anchor_tags        = []; -    HeadingAttrib heading_attrib; -    ParaAttrib para_attrib; -    BlockAttrib block_attrib; -    Node node_structure; -  } -  struct ObjCompositeArr { -    ObjComposite[] oca; -  } -  /+ structs setter +/ -  struct ObjectAbstractSet { -    import std.conv : to; -    auto contents_comment(in string object) { -      ObjComposite object_set; -      object_set.use                  = "comment"; -      object_set.of                   = "comment"; -      object_set.is_a                 = "comment"; -      object_set.object               = object; -      return object_set; -    } -    auto contents_heading( -      in string         object, -      in string[string] _node_heading_str, -      in int[string]    _node_heading_int, -      in string[]       tags, -    ) { -      ObjComposite object_set; -      object_set.use                                 = "content"; -      object_set.of                                  = "para"; -      object_set.is_a                                = "heading"; -      object_set.object                              = object.strip; -      object_set.obj_cite_number                     = _node_heading_str["ocn"]; -      object_set.anchor_tags                         ~= tags; -      object_set.heading_attrib.lev                  = _node_heading_str["marked_up_lev"]; -      object_set.heading_attrib.lev_int_markup       = _node_heading_int["heading_lev_markup"]; -      object_set.heading_attrib.lev_int_collapsed    = _node_heading_int["heading_lev_collapsed"]; -      return object_set; -    } -    auto contents_para( -      in string         object, -      in string[string] _node_para_str, -      in int[string]    _node_para_int, -    ) { -      ObjComposite object_set; -      object_set.use                      = "content"; -      object_set.of                       = "para"; -      object_set.is_a                     = "para"; -      object_set.object                   = object.strip; -      object_set.obj_cite_number          = (_node_para_int["ocn"]==0) ? "" : to!string(_node_para_int["ocn"]); -      object_set.anchor_tags              = []; -      object_set.para_attrib.indent_start = _node_para_int["indent_hang"]; -      object_set.para_attrib.indent_rest  = _node_para_int["indent_base"]; -      object_set.para_attrib.bullet       = (_node_para_int["bullet"] == 1) ? true : false; -      return object_set; -    } -    auto contents_toc( -      in string is_a, -      in string object, -      in string attrib, -      in int obj_cite_number, -      in int[string] indent, -      in bool bullet, -    ) { -      ObjComposite object_set; -      object_set.use                      = "content"; -      object_set.of                       = "para"; -      object_set.is_a                     = "toc"; -      object_set.object                   = object.strip; -      object_set.obj_cite_number          = (obj_cite_number==0) ? "" : to!string(obj_cite_number); -      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; -      return object_set; -    } -    auto contents_endnote( -      in string object, -      in string tag, -    ) { -      auto m = (matchFirst(object, rgx.note_ref)); -      string notenumber = to!string(m.captures[1]); -      string anchor_tag = "note_" ~ notenumber; -      ObjComposite object_set; -      object_set.use                      = "content"; -      object_set.of                       = "para"; -      object_set.is_a                     = "endnote"; -      object_set.object                   = object.strip; -      object_set.obj_cite_number          = ""; -      object_set.anchor_tags              ~= [ tag ]; -      object_set.para_attrib.indent_start = 0; -      object_set.para_attrib.indent_rest  = 0; -      object_set.para_attrib.bullet       = false; -      return object_set; -    } -    auto contents_block( -      in string type_is, -      in string object, -      in string attrib, -      in int obj_cite_number, -    ) { -      ObjComposite object_set; -      object_set.use                 = "content"; -      object_set.of                  = "block"; -      object_set.is_a                = type_is; -      object_set.object              = object; -      object_set.obj_cite_number     = (obj_cite_number==0) ? "" : to!string(obj_cite_number); -      object_set.anchor_tags         = []; -      return object_set; -    } -    auto contents_block_code( -      in string type_is, -      in string object, -      in string attrib_language_syntax, -      in int obj_cite_number, -    ) { -      ObjComposite object_set; -      object_set.use                 = "content"; -      object_set.of                  = "block"; -      object_set.is_a                = type_is; -      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.anchor_tags         = []; -      return object_set; -    } -    auto contents_block_obj_cite_number_string( -      in string         type_is, -      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"; -      object_set.of                                = "block"; -      object_set.is_a                              = type_is; -      object_set.object                            = object; -      object_set.obj_cite_number                   = obj_cite_number; -      return object_set; -    } +  struct TheObjects { +    ObjGenericComposite[] oca;    }  } diff --git a/src/sdp/ao_output_debugs.d b/src/sdp/ao_output_debugs.d index c6e8ac7..e4eaccb 100644 --- a/src/sdp/ao_output_debugs.d +++ b/src/sdp/ao_output_debugs.d @@ -32,8 +32,8 @@ template SiSUoutputDebugs() {                    "%s node: %s heading: %s %s",                    obj.obj_cite_number,                    obj.node, -                  obj.lev_int_markup, -                  obj.object, +                  obj.heading_lev_markup, +                  obj.text,                  );                }              } @@ -53,7 +53,7 @@ template SiSUoutputDebugs() {                "[%s][%s]\n%s",                obj.obj_cite_number,                obj.is_a, -              obj.object +              obj.text              );            }          } @@ -65,11 +65,11 @@ template SiSUoutputDebugs() {          if (contents[key].length > 1) {            string indent_spaces;            foreach (obj; contents[key]) { -            indent_spaces=markup.indent_by_spaces_provided(obj.para_attrib.indent_start); +            indent_spaces=markup.indent_by_spaces_provided(obj.indent_hang);              writefln(                "%s%s",                indent_spaces, -              obj.object +              obj.text              );            }          } @@ -83,7 +83,7 @@ template SiSUoutputDebugs() {              writefln(                "[%s]\n%s",                obj.is_a, -              obj.object +              obj.text              );            }          } @@ -98,7 +98,7 @@ template SiSUoutputDebugs() {                "[%s][%s]\n%s",                obj.obj_cite_number,                obj.is_a, -              obj.object +              obj.text              );            }          } @@ -111,7 +111,7 @@ template SiSUoutputDebugs() {                "[%s][%s]\n%s",                obj.obj_cite_number,                obj.is_a, -              obj.object +              obj.text              );            }          } @@ -136,7 +136,7 @@ template SiSUoutputDebugs() {                "[%s][%s]\n%s",                obj.obj_cite_number,                obj.is_a, -              obj.object +              obj.text              );            }          } @@ -161,7 +161,7 @@ template SiSUoutputDebugs() {                "[%s][%s]\n%s",                obj.obj_cite_number,                obj.is_a, -              obj.object +              obj.text              );            }          } @@ -174,7 +174,7 @@ template SiSUoutputDebugs() {                "[%s][%s]\n%s",                obj.obj_cite_number,                obj.is_a, -              obj.object +              obj.text              );            }          } @@ -199,7 +199,7 @@ template SiSUoutputDebugs() {                "[%s][%s]\n%s",                obj.obj_cite_number,                obj.is_a, -              obj.object +              obj.text              );            }          } @@ -217,7 +217,7 @@ template SiSUoutputDebugs() {                "* [%s][%s] %s",                obj.obj_cite_number,                obj.is_a, -              obj.object +              obj.text              );            }          } @@ -382,59 +382,26 @@ template SiSUoutputDebugs() {              if (obj.is_a == "heading") {                writefln(                  "%s~ [%s] %s %s", -                obj.heading_attrib.lev, +                obj.marked_up_level,                  obj.obj_cite_number,                  obj.anchor_tags,                  // "[", obj["is"], "] ", -                obj.object +                obj.text                );              }            }          }        }        debug(heading) {                         // heading -        string spc;          foreach (k; document_section_keys_sequenced["seg"]) {            foreach (o; contents[k]) {              if (o.is_a == "heading") { -              switch (o.heading_attrib.lev_int_markup) { -              case 0: -                spc=""; -                break; -              case 1: -                spc="  "; -                break; -              case 2: -                spc="    "; -                break; -              case 3: -                spc="      "; -                break; -              case 4: -                spc="        "; -                break; -              case 5: -                spc="          "; -                break; -              case 6: -                spc="            "; -                break; -              case 7: -                spc="              "; -                break; -              case 8: -                spc="                "; -                break; -              default: -                spc=""; -                break; -              }                writefln(                  "%s* %s\n                (markup level: %s; collapsed level: %s)", -                spc, -                strip(o.object), -                o.heading_attrib.lev_int_markup, -                o.heading_attrib.lev_int_collapsed +                replicate("  ", o.heading_lev_markup), +                strip(o.text), +                o.heading_lev_markup, +                o.heading_lev_collapsed,                );              }            } @@ -456,10 +423,10 @@ template SiSUoutputDebugs() {                if (obj.is_a == "heading") {                  writefln(                    "%s~ [%s] %s", -                  obj.heading_attrib.lev, +                  obj.marked_up_level,                    obj.obj_cite_number,                    // "[", obj["is"], "] ", -                  obj.object +                  obj.text                  );                }              } diff --git a/src/sdp/output_html.d b/src/sdp/output_html.d index 4c92d58..42ecf0a 100644 --- a/src/sdp/output_html.d +++ b/src/sdp/output_html.d @@ -25,13 +25,13 @@ template SiSUoutputHTML() {        </div>¶",        obj.obj_cite_number,        obj.obj_cite_number, -      obj.heading_attrib.lev_int_markup, +      obj.heading_lev_markup,        obj.is_a,        obj.obj_cite_number,        obj.obj_cite_number,        tags, -      obj.object, -      obj.heading_attrib.lev_int_markup +      obj.text, +      obj.heading_lev_markup,        );        return o;      } @@ -50,10 +50,10 @@ template SiSUoutputHTML() {            obj.obj_cite_number,            obj.obj_cite_number,            obj.is_a, -          obj.para_attrib.indent_start, -          obj.para_attrib.indent_rest, +          obj.indent_hang, +          obj.indent_base,            tags, -          obj.object +          obj.text          );        } else {          o = format(q"¶  <div class="substance"> @@ -65,11 +65,11 @@ template SiSUoutputHTML() {            obj.obj_cite_number,            obj.obj_cite_number,            obj.is_a, -          obj.para_attrib.indent_start, -          obj.para_attrib.indent_rest, +          obj.indent_hang, +          obj.indent_base,            obj.obj_cite_number,            tags, -          obj.object +          obj.text          );        }        return o; @@ -88,7 +88,7 @@ template SiSUoutputHTML() {        obj.obj_cite_number,        obj.is_a,        obj.obj_cite_number, -      obj.object +      obj.text        );        return o;      } @@ -133,9 +133,9 @@ template SiSUoutputHTML() {        </p>      </div>¶",        obj.is_a, -      obj.para_attrib.indent_start, -      obj.para_attrib.indent_rest, -      obj.object +      obj.indent_hang, +      obj.indent_base, +      obj.text        );        return o;      } @@ -147,9 +147,9 @@ template SiSUoutputHTML() {        %s      </p>¶",          obj.is_a, -        obj.para_attrib.indent_start, -        obj.para_attrib.indent_rest, -        obj.object +        obj.indent_hang, +        obj.indent_base, +        obj.text        );        return o;      } diff --git a/views/version.txt b/views/version.txt index 99bc1a2..7ba3377 100644 --- a/views/version.txt +++ b/views/version.txt @@ -4,4 +4,4 @@ struct Version {    int minor;    int patch;  } -enum ver = Version(0, 9, 6); +enum ver = Version(0, 10, 0); | 
