diff options
Diffstat (limited to 'org')
| -rw-r--r-- | org/meta_abstraction.org | 1487 | ||||
| -rw-r--r-- | org/meta_debugs.org | 36 | ||||
| -rw-r--r-- | org/output_sqlite.org | 84 | ||||
| -rw-r--r-- | org/output_xmls.org | 284 | ||||
| -rw-r--r-- | org/sdp.org | 14 | 
5 files changed, 956 insertions, 949 deletions
diff --git a/org/meta_abstraction.org b/org/meta_abstraction.org index 7e99504..0153020 100644 --- a/org/meta_abstraction.org +++ b/org/meta_abstraction.org @@ -247,7 +247,7 @@ pure auto obj_heading_ancestors(O)(    O          obj,    string[]   lv_ancestors_txt,  ) { -  switch (obj.node.heading_lev_markup) { +  switch (obj.metainfo.heading_lev_markup) {    case 0:      lv_ancestors_txt[0] = obj.text.to!string;      foreach(k; 1..8) { @@ -343,7 +343,7 @@ pure auto obj_dom_structure_set_markup_tags(O)(    debug(dom_magic_numbers) {      writeln("marked up: ", lev, ": ", dom);    } -  obj.node.dom_markedup = dom.dup; +  obj.metainfo.dom_markedup = dom.dup;    return obj;  }  #+END_SRC @@ -393,7 +393,7 @@ pure auto obj_dom_set_collapsed_tags(O)(    debug(dom_magic_numbers) {      writeln("collapsed: ", lev, ": ", dom);    } -  obj.node.dom_collapsed = dom.dup; +  obj.metainfo.dom_collapsed = dom.dup;    return obj;  }  #+END_SRC @@ -500,28 +500,27 @@ auto heading_match_rgx = [  ];  string _anchor_tag;  string toc_txt_; -an_object["glossary_nugget"]                 = ""; -an_object["blurb_nugget"]                    = ""; -comp_obj_heading_                            = comp_obj_heading_.init; -comp_obj_heading_.typeinfo.is_of_part        = "frontmatter"; -comp_obj_heading_.typeinfo.is_of_section     = "toc"; -comp_obj_heading_.typeinfo.is_of_type        = "para"; -comp_obj_heading_.typeinfo.is_a              = "heading"; -comp_obj_heading_.text                       = "Table of Contents"; -comp_obj_heading_.node.ocn                   = 0; -comp_obj_heading_.misc.object_number_off     = ""; -comp_obj_heading_.misc.object_number_type    = 0; -comp_obj_heading_.tags.segment_anchor_tag    = "toc"; -comp_obj_heading_.node.marked_up_level       = "1"; -comp_obj_heading_.node.heading_lev_markup    = 4; -comp_obj_heading_.node.heading_lev_collapsed = 1; -comp_obj_heading_.node.parent_ocn            = 1; -comp_obj_heading_.node.parent_lev_markup     = 0; -comp_obj_heading_.ptr.html_segnames          = html_segnames_ptr; -comp_obj_heading_.tags.anchor_tags           = ["toc"]; -comp_obj_heading_.node.dom_markedup          = [ 1, 1, 0, 0, 1, 0, 0, 0]; -comp_obj_heading_.node.dom_collapsed         = [ 1, 1, 1, 0, 0, 0, 0, 0]; -auto toc_head                                = comp_obj_heading_; +an_object["glossary_nugget"]                     = ""; +an_object["blurb_nugget"]                        = ""; +comp_obj_heading_                                = comp_obj_heading_.init; +comp_obj_heading_.metainfo.is_of_part            = "frontmatter"; +comp_obj_heading_.metainfo.is_of_section         = "toc"; +comp_obj_heading_.metainfo.is_of_type            = "para"; +comp_obj_heading_.metainfo.is_a                  = "heading"; +comp_obj_heading_.text                           = "Table of Contents"; +comp_obj_heading_.metainfo.ocn                   = 0; +comp_obj_heading_.metainfo.object_number_off     = ""; +comp_obj_heading_.metainfo.object_number_type    = 0; +comp_obj_heading_.tags.segment_anchor_tag        = "toc"; +comp_obj_heading_.metainfo.heading_lev_markup    = 4; +comp_obj_heading_.metainfo.heading_lev_collapsed = 1; +comp_obj_heading_.metainfo.parent_ocn            = 1; +comp_obj_heading_.metainfo.parent_lev_markup     = 0; +comp_obj_heading_.ptr.html_segnames              = html_segnames_ptr; +comp_obj_heading_.tags.anchor_tags               = ["toc"]; +comp_obj_heading_.metainfo.dom_markedup          = [ 1, 1, 0, 0, 1, 0, 0, 0]; +comp_obj_heading_.metainfo.dom_collapsed         = [ 1, 1, 1, 0, 0, 0, 0, 0]; +auto toc_head                                    = comp_obj_heading_;  html_segnames_ptr_cntr++;  the_table_of_contents_section = [    "seg": [toc_head], @@ -678,58 +677,56 @@ if there is a glossary section you need to:      line_occur["para"] = State.off;      an_object_key="glossary_nugget"; //      if (line.matchFirst(rgx.heading_glossary)) { -      comp_obj_heading_                            = comp_obj_heading_.init; -      comp_obj_heading_.typeinfo.is_of_part        = "backmatter"; -      comp_obj_heading_.typeinfo.is_of_section     = "glossary"; -      comp_obj_heading_.typeinfo.is_of_type        = "para"; -      comp_obj_heading_.typeinfo.is_a              = "heading"; -      comp_obj_heading_.text                       = "Glossary"; -      comp_obj_heading_.node.ocn                   = 0; -      comp_obj_heading_.misc.object_number_off     = ""; -      comp_obj_heading_.misc.object_number_type    = 0; -      comp_obj_heading_.tags.segment_anchor_tag    = "_part_glossary"; -      comp_obj_heading_.node.marked_up_level       = "B"; -      comp_obj_heading_.node.heading_lev_markup    = 1; -      comp_obj_heading_.node.heading_lev_collapsed = 1; -      comp_obj_heading_.node.parent_ocn            = 1; -      comp_obj_heading_.node.parent_lev_markup     = 0; -      comp_obj_heading_.node.dom_markedup          = [ 1, 1, 0, 0, 0, 0, 0, 0]; -      comp_obj_heading_.node.dom_collapsed         = [ 1, 1, 0, 0, 0, 0, 0, 0]; -      the_glossary_section                         ~= comp_obj_heading_; -      comp_obj_heading_                            = comp_obj_heading_.init; -      comp_obj_heading_.typeinfo.is_of_part        = "backmatter"; -      comp_obj_heading_.typeinfo.is_of_section     = "glossary"; -      comp_obj_heading_.typeinfo.is_of_type        = "para"; -      comp_obj_heading_.typeinfo.is_a              = "heading"; -      comp_obj_heading_.text                       = "Glossary"; -      comp_obj_heading_.node.ocn                   = 0; -      comp_obj_heading_.misc.object_number_off     = ""; -      comp_obj_heading_.misc.object_number_type    = 0; -      comp_obj_heading_.tags.segment_anchor_tag    = "glossary"; -      comp_obj_heading_.node.marked_up_level       = "1"; -      comp_obj_heading_.node.heading_lev_markup    = 4; -      comp_obj_heading_.node.heading_lev_collapsed = 2; -      comp_obj_heading_.node.parent_ocn            = 1; -      comp_obj_heading_.node.parent_lev_markup     = 0; -      comp_obj_heading_.node.dom_markedup          = [ 1, 1, 0, 0, 1, 0, 0, 0]; -      comp_obj_heading_.node.dom_collapsed         = [ 1, 1, 1, 0, 0, 0, 0, 0]; -      comp_obj_heading_.tags.anchor_tags           = ["glossary"]; -      the_glossary_section                         ~= comp_obj_heading_; +      comp_obj_heading_                                = comp_obj_heading_.init; +      comp_obj_heading_.metainfo.is_of_part            = "backmatter"; +      comp_obj_heading_.metainfo.is_of_section         = "glossary"; +      comp_obj_heading_.metainfo.is_of_type            = "para"; +      comp_obj_heading_.metainfo.is_a                  = "heading"; +      comp_obj_heading_.text                           = "Glossary"; +      comp_obj_heading_.metainfo.ocn                   = 0; +      comp_obj_heading_.metainfo.object_number_off     = ""; +      comp_obj_heading_.metainfo.object_number_type    = 0; +      comp_obj_heading_.tags.segment_anchor_tag        = "_part_glossary"; +      comp_obj_heading_.metainfo.heading_lev_markup    = 1; +      comp_obj_heading_.metainfo.heading_lev_collapsed = 1; +      comp_obj_heading_.metainfo.parent_ocn            = 1; +      comp_obj_heading_.metainfo.parent_lev_markup     = 0; +      comp_obj_heading_.metainfo.dom_markedup          = [ 1, 1, 0, 0, 0, 0, 0, 0]; +      comp_obj_heading_.metainfo.dom_collapsed         = [ 1, 1, 0, 0, 0, 0, 0, 0]; +      the_glossary_section                             ~= comp_obj_heading_; +      comp_obj_heading_                                = comp_obj_heading_.init; +      comp_obj_heading_.metainfo.is_of_part            = "backmatter"; +      comp_obj_heading_.metainfo.is_of_section         = "glossary"; +      comp_obj_heading_.metainfo.is_of_type            = "para"; +      comp_obj_heading_.metainfo.is_a                  = "heading"; +      comp_obj_heading_.text                           = "Glossary"; +      comp_obj_heading_.metainfo.ocn                   = 0; +      comp_obj_heading_.metainfo.object_number_off     = ""; +      comp_obj_heading_.metainfo.object_number_type    = 0; +      comp_obj_heading_.tags.segment_anchor_tag        = "glossary"; +      comp_obj_heading_.metainfo.heading_lev_markup    = 4; +      comp_obj_heading_.metainfo.heading_lev_collapsed = 2; +      comp_obj_heading_.metainfo.parent_ocn            = 1; +      comp_obj_heading_.metainfo.parent_lev_markup     = 0; +      comp_obj_heading_.metainfo.dom_markedup          = [ 1, 1, 0, 0, 1, 0, 0, 0]; +      comp_obj_heading_.metainfo.dom_collapsed         = [ 1, 1, 1, 0, 0, 0, 0, 0]; +      comp_obj_heading_.tags.anchor_tags               = ["glossary"]; +      the_glossary_section                             ~= comp_obj_heading_;      } else {        _para_match_(line, an_object, an_object_key, indent, bullet, obj_type_status, line_occur); -      comp_obj_para                           = comp_obj_para.init; -      comp_obj_para.typeinfo.is_of_part       = "backmatter"; -      comp_obj_para.typeinfo.is_of_section    = "glossary"; -      comp_obj_para.typeinfo.is_of_type       = "para"; -      comp_obj_para.typeinfo.is_a             = "glossary"; -      comp_obj_para.text                      = line.to!string.strip; -      comp_obj_para.node.ocn                  = 0; -      comp_obj_para.misc.object_number_off    = ""; -      comp_obj_para.misc.object_number_type   = 0; -      comp_obj_para.attrib.indent_hang        = indent["hang_position"]; -      comp_obj_para.attrib.indent_base        = indent["base_position"]; -      comp_obj_para.attrib.bullet             = bullet; -      the_glossary_section                    ~= comp_obj_para; +      comp_obj_para                               = comp_obj_para.init; +      comp_obj_para.metainfo.is_of_part           = "backmatter"; +      comp_obj_para.metainfo.is_of_section        = "glossary"; +      comp_obj_para.metainfo.is_of_type           = "para"; +      comp_obj_para.metainfo.is_a                 = "glossary"; +      comp_obj_para.text                          = line.to!string.strip; +      comp_obj_para.metainfo.ocn                  = 0; +      comp_obj_para.metainfo.object_number_off    = ""; +      comp_obj_para.metainfo.object_number_type   = 0; +      comp_obj_para.attrib.indent_hang            = indent["hang_position"]; +      comp_obj_para.attrib.indent_base            = indent["base_position"]; +      comp_obj_para.attrib.bullet                 = bullet; +      the_glossary_section                        ~= comp_obj_para;      }      obj_type_status["ocn_status"] = OCNstatus.on;    } @@ -799,77 +796,74 @@ if there is a blurb section you need to:      line_occur["para"] = State.off;      an_object_key="blurb_nugget";      if (line.matchFirst(rgx.heading_blurb)) { -      comp_obj_heading_                            = comp_obj_heading_.init; -      comp_obj_heading_.typeinfo.is_of_part        = "backmatter"; -      comp_obj_heading_.typeinfo.is_of_section     = "blurb"; -      comp_obj_heading_.typeinfo.is_of_type        = "para"; -      comp_obj_heading_.typeinfo.is_a              = "heading"; -      comp_obj_heading_.text                       = "Blurb"; -      comp_obj_heading_.node.ocn                   = 0; -      comp_obj_heading_.misc.object_number_off     = ""; -      comp_obj_heading_.misc.object_number_type    = 0; -      comp_obj_heading_.tags.segment_anchor_tag    = "_part_blurb"; -      comp_obj_heading_.node.marked_up_level       = "B"; -      comp_obj_heading_.node.heading_lev_markup    = 1; -      comp_obj_heading_.node.heading_lev_collapsed = 1; -      comp_obj_heading_.node.parent_ocn            = 1; -      comp_obj_heading_.node.parent_lev_markup     = 0; -      comp_obj_heading_.node.dom_markedup          = [ 1, 1, 0, 0, 0, 0, 0, 0]; -      comp_obj_heading_.node.dom_collapsed         = [ 1, 1, 0, 0, 0, 0, 0, 0]; -      the_blurb_section                            ~= comp_obj_heading_; -      comp_obj_heading_                            = comp_obj_heading_.init; -      comp_obj_heading_.typeinfo.is_of_part        = "backmatter"; -      comp_obj_heading_.typeinfo.is_of_section     = "blurb"; -      comp_obj_heading_.typeinfo.is_of_type        = "para"; -      comp_obj_heading_.typeinfo.is_a              = "heading"; -      comp_obj_heading_.text                       = "Blurb"; -      comp_obj_heading_.node.ocn                   = 0; -      comp_obj_heading_.misc.object_number_off     = ""; -      comp_obj_heading_.misc.object_number_type    = 0; -      comp_obj_heading_.tags.segment_anchor_tag    = "blurb"; -      comp_obj_heading_.node.marked_up_level       = "1"; -      comp_obj_heading_.node.heading_lev_markup    = 4; -      comp_obj_heading_.node.heading_lev_collapsed = 2; -      comp_obj_heading_.node.parent_ocn            = 1; -      comp_obj_heading_.node.parent_lev_markup     = 0; -      comp_obj_heading_.tags.anchor_tags           = ["blurb"]; -      comp_obj_heading_.node.dom_markedup          = [ 1, 1, 0, 0, 1, 0, 0, 0]; -      comp_obj_heading_.node.dom_collapsed         = [ 1, 1, 1, 0, 0, 0, 0, 0]; -      the_blurb_section                            ~= comp_obj_heading_; +      comp_obj_heading_                                = comp_obj_heading_.init; +      comp_obj_heading_.metainfo.is_of_part            = "backmatter"; +      comp_obj_heading_.metainfo.is_of_section         = "blurb"; +      comp_obj_heading_.metainfo.is_of_type            = "para"; +      comp_obj_heading_.metainfo.is_a                  = "heading"; +      comp_obj_heading_.text                           = "Blurb"; +      comp_obj_heading_.metainfo.ocn                   = 0; +      comp_obj_heading_.metainfo.object_number_off     = ""; +      comp_obj_heading_.metainfo.object_number_type    = 0; +      comp_obj_heading_.tags.segment_anchor_tag        = "_part_blurb"; +      comp_obj_heading_.metainfo.heading_lev_markup    = 1; +      comp_obj_heading_.metainfo.heading_lev_collapsed = 1; +      comp_obj_heading_.metainfo.parent_ocn            = 1; +      comp_obj_heading_.metainfo.parent_lev_markup     = 0; +      comp_obj_heading_.metainfo.dom_markedup          = [ 1, 1, 0, 0, 0, 0, 0, 0]; +      comp_obj_heading_.metainfo.dom_collapsed         = [ 1, 1, 0, 0, 0, 0, 0, 0]; +      the_blurb_section                                ~= comp_obj_heading_; +      comp_obj_heading_                                = comp_obj_heading_.init; +      comp_obj_heading_.metainfo.is_of_part            = "backmatter"; +      comp_obj_heading_.metainfo.is_of_section         = "blurb"; +      comp_obj_heading_.metainfo.is_of_type            = "para"; +      comp_obj_heading_.metainfo.is_a                  = "heading"; +      comp_obj_heading_.text                           = "Blurb"; +      comp_obj_heading_.metainfo.ocn                   = 0; +      comp_obj_heading_.metainfo.object_number_off     = ""; +      comp_obj_heading_.metainfo.object_number_type    = 0; +      comp_obj_heading_.tags.segment_anchor_tag        = "blurb"; +      comp_obj_heading_.metainfo.heading_lev_markup    = 4; +      comp_obj_heading_.metainfo.heading_lev_collapsed = 2; +      comp_obj_heading_.metainfo.parent_ocn            = 1; +      comp_obj_heading_.metainfo.parent_lev_markup     = 0; +      comp_obj_heading_.tags.anchor_tags               = ["blurb"]; +      comp_obj_heading_.metainfo.dom_markedup          = [ 1, 1, 0, 0, 1, 0, 0, 0]; +      comp_obj_heading_.metainfo.dom_collapsed         = [ 1, 1, 1, 0, 0, 0, 0, 0]; +      the_blurb_section                                ~= comp_obj_heading_;      } else if (line.matchFirst(rgx.heading)      && (opt_action.backmatter && opt_action.section_blurb)) { -      comp_obj_heading_                            = comp_obj_heading_.init; -      comp_obj_heading_.typeinfo.is_of_part        = "backmatter"; -      comp_obj_heading_.typeinfo.is_of_section     = "blurb"; -      comp_obj_heading_.typeinfo.is_of_type        = "para"; -      comp_obj_heading_.typeinfo.is_a              = "heading"; -      comp_obj_heading_.text                       = line.to!string; -      comp_obj_heading_.node.ocn                   = 0; -      comp_obj_heading_.misc.object_number_off     = ""; -      comp_obj_heading_.misc.object_number_type    = 0; -      comp_obj_heading_.tags.segment_anchor_tag    = "blurb"; -      comp_obj_heading_.node.marked_up_level       = an_object["lev"].to!string; -      comp_obj_heading_.node.heading_lev_markup    = an_object["lev_markup_number"].to!int;    // make int, remove need to conv -      comp_obj_heading_.node.heading_lev_collapsed = an_object["lev_collapsed_number"].to!int; // make int, remove need to conv -      comp_obj_heading_.node.parent_ocn            = 1; -      comp_obj_heading_.node.parent_lev_markup     = 0; +      comp_obj_heading_                                = comp_obj_heading_.init; +      comp_obj_heading_.metainfo.is_of_part            = "backmatter"; +      comp_obj_heading_.metainfo.is_of_section         = "blurb"; +      comp_obj_heading_.metainfo.is_of_type            = "para"; +      comp_obj_heading_.metainfo.is_a                  = "heading"; +      comp_obj_heading_.text                           = line.to!string; +      comp_obj_heading_.metainfo.ocn                   = 0; +      comp_obj_heading_.metainfo.object_number_off     = ""; +      comp_obj_heading_.metainfo.object_number_type    = 0; +      comp_obj_heading_.tags.segment_anchor_tag        = "blurb"; +      comp_obj_heading_.metainfo.heading_lev_markup    = an_object["lev_markup_number"].to!int;    // make int, remove need to conv +      comp_obj_heading_.metainfo.heading_lev_collapsed = an_object["lev_collapsed_number"].to!int; // make int, remove need to conv +      comp_obj_heading_.metainfo.parent_ocn            = 1; +      comp_obj_heading_.metainfo.parent_lev_markup     = 0;        the_blurb_section                            ~= comp_obj_heading_;      } else {        _para_match_(line, an_object, an_object_key, indent, bullet, obj_type_status, line_occur); -      comp_obj_para                           = comp_obj_para.init; -      comp_obj_para.typeinfo.is_of_part       = "backmatter"; -      comp_obj_para.typeinfo.is_of_section    = "blurb"; -      comp_obj_para.typeinfo.is_of_type       = "para"; -      comp_obj_para.typeinfo.is_a             = "blurb"; -      comp_obj_para.text                      = munge.url_links(line.to!string.strip).replaceFirst(rgx.para_attribs, ""); -      comp_obj_para.node.ocn                  = 0; -      comp_obj_para.misc.object_number_off    = ""; -      comp_obj_para.misc.object_number_type   = 0; -      comp_obj_para.attrib.indent_hang        = indent["hang_position"]; -      comp_obj_para.attrib.indent_base        = indent["base_position"]; -      comp_obj_para.has.inline_links          = true; -      comp_obj_para.attrib.bullet             = bullet; -      the_blurb_section                       ~= comp_obj_para; +      comp_obj_para                               = comp_obj_para.init; +      comp_obj_para.metainfo.is_of_part           = "backmatter"; +      comp_obj_para.metainfo.is_of_section        = "blurb"; +      comp_obj_para.metainfo.is_of_type           = "para"; +      comp_obj_para.metainfo.is_a                 = "blurb"; +      comp_obj_para.text                          = munge.url_links(line.to!string.strip).replaceFirst(rgx.para_attribs, ""); +      comp_obj_para.metainfo.ocn                  = 0; +      comp_obj_para.metainfo.object_number_off    = ""; +      comp_obj_para.metainfo.object_number_type   = 0; +      comp_obj_para.attrib.indent_hang            = indent["hang_position"]; +      comp_obj_para.attrib.indent_base            = indent["base_position"]; +      comp_obj_para.has.inline_links              = true; +      comp_obj_para.attrib.bullet                 = bullet; +      the_blurb_section                           ~= comp_obj_para;      }      obj_type_status["ocn_status"] = OCNstatus.on;    } @@ -1031,10 +1025,10 @@ if (line.matchFirst(rgx.book_index)      }      an_object[an_object_key]                ~= line ~= "\n";      comp_obj_comment                        = comp_obj_comment.init; -    comp_obj_comment.typeinfo.is_of_part    = "comment"; // breaks flow -    comp_obj_comment.typeinfo.is_of_section = "comment"; // breaks flow -    comp_obj_comment.typeinfo.is_of_type    = "comment"; -    comp_obj_comment.typeinfo.is_a          = "comment"; +    comp_obj_comment.metainfo.is_of_part    = "comment"; // breaks flow +    comp_obj_comment.metainfo.is_of_section = "comment"; // breaks flow +    comp_obj_comment.metainfo.is_of_type    = "comment"; +    comp_obj_comment.metainfo.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, obj_type_status); @@ -1217,7 +1211,6 @@ if ((obj_type_status["heading"] == State.on)    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        segment_anchor_tag_that_object_belongs_to,    // string @@ -1274,15 +1267,15 @@ if ((obj_type_status["heading"] == State.on)    an_object["substantive"] = substantive_obj_misc_tuple[sObj.content];    anchor_tags = substantive_obj_misc_tuple[sObj.anchor_tags];    comp_obj_para                                             = comp_obj_para.init; -  comp_obj_para.typeinfo.is_of_part                         = "body"; -  comp_obj_para.typeinfo.is_of_section                      = "body"; -  comp_obj_para.typeinfo.is_of_type                         = "para"; -  comp_obj_para.typeinfo.is_a                               = "para"; +  comp_obj_para.metainfo.is_of_part                         = "body"; +  comp_obj_para.metainfo.is_of_section                      = "body"; +  comp_obj_para.metainfo.is_of_type                         = "para"; +  comp_obj_para.metainfo.is_a                               = "para";    comp_obj_para.text                                        = an_object["substantive"].to!string.strip; -  comp_obj_para.node.ocn                                    = obj_cite_digits.digit; -  comp_obj_para.misc.object_number_off                      = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; -  comp_obj_para.misc.o_n_book_index                         = obj_cite_digits.bkidx; -  comp_obj_para.misc.object_number_type                     = obj_cite_digits.type; +  comp_obj_para.metainfo.ocn                                = obj_cite_digits.digit; +  comp_obj_para.metainfo.object_number_off                  = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; +  comp_obj_para.metainfo.o_n_book_index                     = obj_cite_digits.bkidx; +  comp_obj_para.metainfo.object_number_type                 = obj_cite_digits.type;    comp_obj_para.attrib.indent_hang                          = indent["hang_position"];    comp_obj_para.attrib.indent_base                          = indent["base_position"];    comp_obj_para.attrib.bullet                               = bullet; @@ -1311,23 +1304,23 @@ if ((obj_type_status["heading"] == State.on)  #+BEGIN_SRC d  /+ unless (the_document_body_section.length == 0) ? +/  if (the_document_body_section.length > 0) { -  if (((the_document_body_section[$-1].typeinfo.is_a == "para") -    || (the_document_body_section[$-1].typeinfo.is_a == "heading") -    || (the_document_body_section[$-1].typeinfo.is_a == "quote") -    || (the_document_body_section[$-1].typeinfo.is_a == "group") -    || (the_document_body_section[$-1].typeinfo.is_a == "block") -    || (the_document_body_section[$-1].typeinfo.is_a == "verse")) +  if (((the_document_body_section[$-1].metainfo.is_a == "para") +    || (the_document_body_section[$-1].metainfo.is_a == "heading") +    || (the_document_body_section[$-1].metainfo.is_a == "quote") +    || (the_document_body_section[$-1].metainfo.is_a == "group") +    || (the_document_body_section[$-1].metainfo.is_a == "block") +    || (the_document_body_section[$-1].metainfo.is_a == "verse"))    && (the_document_body_section.length > previous_length)) { -    if ((the_document_body_section[$-1].typeinfo.is_a == "heading") -    && (the_document_body_section[$-1].node.heading_lev_markup < 5)) { +    if ((the_document_body_section[$-1].metainfo.is_a == "heading") +    && (the_document_body_section[$-1].metainfo.heading_lev_markup < 5)) {        obj_type_status["biblio_section"]   = State.off;        obj_type_status["glossary_section"] = State.off;        obj_type_status["blurb_section"]    = State.off;      } -    if (the_document_body_section[$-1].typeinfo.is_a == "verse") { +    if (the_document_body_section[$-1].metainfo.is_a == "verse") {        /+ scan for endnotes for whole poem (each verse in poem) +/        foreach (i; previous_length .. the_document_body_section.length) { -        if (the_document_body_section[i].typeinfo.is_a == "verse") { +        if (the_document_body_section[i].metainfo.is_a == "verse") {            if ((the_document_body_section[i].text).match(              rgx.inline_notes_delimiter_al_regular_number_note            )) { @@ -1397,21 +1390,20 @@ debug(endnotes) {  #+name: abs_post  #+BEGIN_SRC d  if (an_object["glossary_nugget"].length == 0) { -  comp_obj_heading_                            = comp_obj_heading_.init; -  comp_obj_heading_.typeinfo.is_of_part        = "empty"; -  comp_obj_heading_.typeinfo.is_of_section     = "empty"; -  comp_obj_heading_.typeinfo.is_of_type        = "para"; -  comp_obj_heading_.typeinfo.is_a              = "heading"; -  comp_obj_heading_.text                       = "(skip) there is no Glossary section"; -  comp_obj_heading_.node.ocn                   = 0; -  comp_obj_heading_.misc.object_number_off     = ""; -  comp_obj_heading_.misc.object_number_type    = 0; -  comp_obj_heading_.node.marked_up_level       = "B"; -  comp_obj_heading_.node.heading_lev_markup    = 1; -  comp_obj_heading_.node.heading_lev_collapsed = 1; -  comp_obj_heading_.node.parent_ocn            = 1; -  comp_obj_heading_.node.parent_lev_markup     = 0; -  the_glossary_section                         ~= comp_obj_heading_; +  comp_obj_heading_                                = comp_obj_heading_.init; +  comp_obj_heading_.metainfo.is_of_part            = "empty"; +  comp_obj_heading_.metainfo.is_of_section         = "empty"; +  comp_obj_heading_.metainfo.is_of_type            = "para"; +  comp_obj_heading_.metainfo.is_a                  = "heading"; +  comp_obj_heading_.text                           = "(skip) there is no Glossary section"; +  comp_obj_heading_.metainfo.ocn                   = 0; +  comp_obj_heading_.metainfo.object_number_off     = ""; +  comp_obj_heading_.metainfo.object_number_type    = 0; +  comp_obj_heading_.metainfo.heading_lev_markup    = 1; +  comp_obj_heading_.metainfo.heading_lev_collapsed = 1; +  comp_obj_heading_.metainfo.parent_ocn            = 1; +  comp_obj_heading_.metainfo.parent_lev_markup     = 0; +  the_glossary_section                             ~= comp_obj_heading_;  } else {    writeln("gloss");  } @@ -1435,55 +1427,52 @@ auto biblio_ordered  #+name: abs_post  #+BEGIN_SRC d  if (biblio_ordered.length > 0) { -  comp_obj_heading_                            = comp_obj_heading_.init; -  comp_obj_heading_.typeinfo.is_of_part        = "backmatter"; -  comp_obj_heading_.typeinfo.is_of_section     = "bibliography"; -  comp_obj_heading_.typeinfo.is_of_type        = "para"; -  comp_obj_heading_.typeinfo.is_a              = "heading"; -  comp_obj_heading_.text                       = "Bibliography"; -  comp_obj_heading_.node.ocn                   = 0; -  comp_obj_heading_.misc.object_number_off     = ""; -  comp_obj_heading_.misc.object_number_type    = 0; -  comp_obj_heading_.tags.segment_anchor_tag    = "_part_bibliography"; -  comp_obj_heading_.node.marked_up_level       = "B"; -  comp_obj_heading_.node.heading_lev_markup    = 1; -  comp_obj_heading_.node.heading_lev_collapsed = 1; -  comp_obj_heading_.node.parent_ocn            = 1; -  comp_obj_heading_.node.parent_lev_markup     = 0; -  the_bibliography_section                     ~= comp_obj_heading_; -  comp_obj_heading_                            = comp_obj_heading_.init; -  comp_obj_heading_.typeinfo.is_of_part        = "backmatter"; -  comp_obj_heading_.typeinfo.is_of_section     = "bibliography"; -  comp_obj_heading_.typeinfo.is_of_type        = "para"; -  comp_obj_heading_.typeinfo.is_a              = "heading"; -  comp_obj_heading_.text                       = "Bibliography"; -  comp_obj_heading_.node.ocn                   = 0; -  comp_obj_heading_.misc.object_number_off     = ""; -  comp_obj_heading_.misc.object_number_type    = 0; -  comp_obj_heading_.tags.segment_anchor_tag    = "bibliography"; -  comp_obj_heading_.node.marked_up_level       = "1"; -  comp_obj_heading_.node.heading_lev_markup    = 4; -  comp_obj_heading_.node.heading_lev_collapsed = 2; -  comp_obj_heading_.node.parent_ocn            = 1; -  comp_obj_heading_.node.parent_lev_markup     = 0; -  comp_obj_heading_.tags.anchor_tags           = ["bibliography"]; -  the_bibliography_section                     ~= comp_obj_heading_; +  comp_obj_heading_                                = comp_obj_heading_.init; +  comp_obj_heading_.metainfo.is_of_part            = "backmatter"; +  comp_obj_heading_.metainfo.is_of_section         = "bibliography"; +  comp_obj_heading_.metainfo.is_of_type            = "para"; +  comp_obj_heading_.metainfo.is_a                  = "heading"; +  comp_obj_heading_.text                           = "Bibliography"; +  comp_obj_heading_.metainfo.ocn                   = 0; +  comp_obj_heading_.metainfo.object_number_off     = ""; +  comp_obj_heading_.metainfo.object_number_type    = 0; +  comp_obj_heading_.tags.segment_anchor_tag        = "_part_bibliography"; +  comp_obj_heading_.metainfo.heading_lev_markup    = 1; +  comp_obj_heading_.metainfo.heading_lev_collapsed = 1; +  comp_obj_heading_.metainfo.parent_ocn            = 1; +  comp_obj_heading_.metainfo.parent_lev_markup     = 0; +  the_bibliography_section                         ~= comp_obj_heading_; +  comp_obj_heading_                                = comp_obj_heading_.init; +  comp_obj_heading_.metainfo.is_of_part            = "backmatter"; +  comp_obj_heading_.metainfo.is_of_section         = "bibliography"; +  comp_obj_heading_.metainfo.is_of_type            = "para"; +  comp_obj_heading_.metainfo.is_a                  = "heading"; +  comp_obj_heading_.text                           = "Bibliography"; +  comp_obj_heading_.metainfo.ocn                   = 0; +  comp_obj_heading_.metainfo.object_number_off     = ""; +  comp_obj_heading_.metainfo.object_number_type    = 0; +  comp_obj_heading_.tags.segment_anchor_tag        = "bibliography"; +  comp_obj_heading_.metainfo.heading_lev_markup    = 4; +  comp_obj_heading_.metainfo.heading_lev_collapsed = 2; +  comp_obj_heading_.metainfo.parent_ocn            = 1; +  comp_obj_heading_.metainfo.parent_lev_markup     = 0; +  comp_obj_heading_.tags.anchor_tags               = ["bibliography"]; +  the_bibliography_section                         ~= comp_obj_heading_;  } else { -  comp_obj_heading_                            = comp_obj_heading_.init; -  comp_obj_heading_.typeinfo.is_of_part        = "empty"; -  comp_obj_heading_.typeinfo.is_of_section     = "empty"; -  comp_obj_heading_.typeinfo.is_of_type        = "para"; -  comp_obj_heading_.typeinfo.is_a              = "heading"; -  comp_obj_heading_.text                       = "(skip) there is no Bibliography"; -  comp_obj_heading_.node.ocn                   = 0; -  comp_obj_heading_.misc.object_number_off     = ""; -  comp_obj_heading_.misc.object_number_type    = 0; -  comp_obj_heading_.node.marked_up_level       = "B"; -  comp_obj_heading_.node.heading_lev_markup    = 1; -  comp_obj_heading_.node.heading_lev_collapsed = 1; -  comp_obj_heading_.node.parent_ocn            = 1; -  comp_obj_heading_.node.parent_lev_markup     = 0; -  the_bibliography_section                     ~= comp_obj_heading_; +  comp_obj_heading_                                = comp_obj_heading_.init; +  comp_obj_heading_.metainfo.is_of_part            = "empty"; +  comp_obj_heading_.metainfo.is_of_section         = "empty"; +  comp_obj_heading_.metainfo.is_of_type            = "para"; +  comp_obj_heading_.metainfo.is_a                  = "heading"; +  comp_obj_heading_.text                           = "(skip) there is no Bibliography"; +  comp_obj_heading_.metainfo.ocn                   = 0; +  comp_obj_heading_.metainfo.object_number_off     = ""; +  comp_obj_heading_.metainfo.object_number_type    = 0; +  comp_obj_heading_.metainfo.heading_lev_markup    = 1; +  comp_obj_heading_.metainfo.heading_lev_collapsed = 1; +  comp_obj_heading_.metainfo.parent_ocn            = 1; +  comp_obj_heading_.metainfo.parent_lev_markup     = 0; +  the_bibliography_section                         ~= comp_obj_heading_;  }  #+END_SRC @@ -1507,20 +1496,20 @@ foreach (entry; biblio_ordered) {      ((entry["place"].str.empty) ? "" : ", " ~ entry["place"].str),      ((entry["url"].str.empty) ? "" : ", [" ~ entry["url"].str ~ "]"),    ); -  comp_obj_para                           = comp_obj_para.init; -  comp_obj_para.typeinfo.is_of_part       = "backmatter"; -  comp_obj_para.typeinfo.is_of_section    = "bibliography"; -  comp_obj_para.typeinfo.is_of_type       = "para"; -  comp_obj_para.typeinfo.is_a             = "bibliography"; -  comp_obj_para.text                      = out_.to!string.strip; -  comp_obj_para.node.ocn                  = 0; -  comp_obj_para.misc.object_number_off    = ""; -  comp_obj_para.misc.object_number_type   = 0; -  comp_obj_para.attrib.indent_hang        = 0; -  comp_obj_para.attrib.indent_base        = 1; -  comp_obj_para.attrib.bullet             = bullet; -  comp_obj_para.tags.anchor_tags          = anchor_tags; -  the_bibliography_section                ~= comp_obj_para; +  comp_obj_para                               = comp_obj_para.init; +  comp_obj_para.metainfo.is_of_part           = "backmatter"; +  comp_obj_para.metainfo.is_of_section        = "bibliography"; +  comp_obj_para.metainfo.is_of_type           = "para"; +  comp_obj_para.metainfo.is_a                 = "bibliography"; +  comp_obj_para.text                          = out_.to!string.strip; +  comp_obj_para.metainfo.ocn                  = 0; +  comp_obj_para.metainfo.object_number_off    = ""; +  comp_obj_para.metainfo.object_number_type   = 0; +  comp_obj_para.attrib.indent_hang            = 0; +  comp_obj_para.attrib.indent_base            = 1; +  comp_obj_para.attrib.bullet                 = bullet; +  comp_obj_para.tags.anchor_tags              = anchor_tags; +  the_bibliography_section                    ~= comp_obj_para;  }  #+END_SRC @@ -1592,22 +1581,21 @@ debug(bookindex) {  #+name: abs_post  #+BEGIN_SRC d  if (an_object["blurb_nugget"].length == 0) { -  comp_obj_heading_                            = comp_obj_heading_.init; -  comp_obj_heading_.typeinfo.is_of_part        = "empty"; -  comp_obj_heading_.typeinfo.is_of_section     = "empty"; -  comp_obj_heading_.typeinfo.is_of_type        = "para"; -  comp_obj_heading_.typeinfo.is_a              = "heading"; -  comp_obj_heading_.text                       = "(skip) there is no Blurb section"; -  comp_obj_heading_.node.ocn                   = 0; -  comp_obj_para.misc.object_number_off         = ""; -  comp_obj_para.misc.object_number_type        = 0; -  comp_obj_heading_.tags.segment_anchor_tag    = ""; -  comp_obj_heading_.node.marked_up_level       = "B"; -  comp_obj_heading_.node.heading_lev_markup    = 1; -  comp_obj_heading_.node.heading_lev_collapsed = 1; -  comp_obj_heading_.node.parent_ocn            = 1; -  comp_obj_heading_.node.parent_lev_markup     = 0; -  the_blurb_section                            ~= comp_obj_heading_; +  comp_obj_heading_                                = comp_obj_heading_.init; +  comp_obj_heading_.metainfo.is_of_part            = "empty"; +  comp_obj_heading_.metainfo.is_of_section         = "empty"; +  comp_obj_heading_.metainfo.is_of_type            = "para"; +  comp_obj_heading_.metainfo.is_a                  = "heading"; +  comp_obj_heading_.text                           = "(skip) there is no Blurb section"; +  comp_obj_heading_.metainfo.ocn                   = 0; +  comp_obj_para.metainfo.object_number_off         = ""; +  comp_obj_para.metainfo.object_number_type        = 0; +  comp_obj_heading_.tags.segment_anchor_tag        = ""; +  comp_obj_heading_.metainfo.heading_lev_markup    = 1; +  comp_obj_heading_.metainfo.heading_lev_collapsed = 1; +  comp_obj_heading_.metainfo.parent_ocn            = 1; +  comp_obj_heading_.metainfo.parent_lev_markup     = 0; +  the_blurb_section                                ~= comp_obj_heading_;  }  debug(blurb) {    foreach (blurb; the_blurb_section) { @@ -1624,17 +1612,17 @@ indent=[    "hang_position" : 1,    "base_position" : 1,  ]; -comp_obj_toc                           = comp_obj_toc.init; -comp_obj_toc.typeinfo.is_of_part       = "frontmatter"; -comp_obj_toc.typeinfo.is_of_section    = "toc"; -comp_obj_toc.typeinfo.is_of_type       = "para"; -comp_obj_toc.typeinfo.is_a             = "toc"; -comp_obj_toc.node.ocn                  = 0; -comp_obj_toc.misc.object_number_off    = ""; -comp_obj_toc.misc.object_number_type   = 0; -comp_obj_toc.attrib.indent_hang        = indent["hang_position"]; -comp_obj_toc.attrib.indent_base        = indent["base_position"]; -comp_obj_toc.attrib.bullet             = false; +comp_obj_toc                               = comp_obj_toc.init; +comp_obj_toc.metainfo.is_of_part           = "frontmatter"; +comp_obj_toc.metainfo.is_of_section        = "toc"; +comp_obj_toc.metainfo.is_of_type           = "para"; +comp_obj_toc.metainfo.is_a                 = "toc"; +comp_obj_toc.metainfo.ocn                  = 0; +comp_obj_toc.metainfo.object_number_off    = ""; +comp_obj_toc.metainfo.object_number_type   = 0; +comp_obj_toc.attrib.indent_hang            = indent["hang_position"]; +comp_obj_toc.attrib.indent_base            = indent["base_position"]; +comp_obj_toc.attrib.bullet                 = false;  if (the_endnotes_section.length > 1) {    toc_txt_ = format(      "{ %s }%s%s%s", @@ -1792,7 +1780,7 @@ if (the_endnotes_section.length > 1) {    html_segnames ~= "endnotes";    html_segnames_ptr = html_segnames_ptr_cntr;    foreach (ref section; the_endnotes_section) { -    if (section.node.heading_lev_markup == 4) { +    if (section.metainfo.heading_lev_markup == 4) {        section.ptr.html_segnames = html_segnames_ptr;        break;      } @@ -1809,7 +1797,7 @@ if (the_glossary_section.length > 1) {    html_segnames ~= "glossary";    html_segnames_ptr = html_segnames_ptr_cntr;    foreach (ref section; the_glossary_section) { -    if (section.node.heading_lev_markup == 4) { +    if (section.metainfo.heading_lev_markup == 4) {        section.ptr.html_segnames = html_segnames_ptr;        break;      } @@ -1826,7 +1814,7 @@ if (the_bibliography_section.length > 1) {    html_segnames ~= "bibliography";    html_segnames_ptr = html_segnames_ptr_cntr;    foreach (ref section; the_bibliography_section) { -    if (section.node.heading_lev_markup == 4) { +    if (section.metainfo.heading_lev_markup == 4) {        section.ptr.html_segnames = html_segnames_ptr;        break;      } @@ -1843,13 +1831,13 @@ if (the_bookindex_section["scroll"].length > 1) {    html_segnames ~= "bookindex";    html_segnames_ptr = html_segnames_ptr_cntr;    foreach (ref section; the_bookindex_section["scroll"]) { -    if (section.node.heading_lev_markup == 4) { +    if (section.metainfo.heading_lev_markup == 4) {        section.ptr.html_segnames = html_segnames_ptr;        break;      }    }    foreach (ref section; the_bookindex_section["seg"]) { -    if (section.node.heading_lev_markup == 4) { +    if (section.metainfo.heading_lev_markup == 4) {        section.ptr.html_segnames = html_segnames_ptr;        break;      } @@ -1866,7 +1854,7 @@ if (the_blurb_section.length > 1) {    html_segnames ~= "blurb";    html_segnames_ptr = html_segnames_ptr_cntr;    foreach (ref section; the_blurb_section) { -    if (section.node.heading_lev_markup == 4) { +    if (section.metainfo.heading_lev_markup == 4) {        section.ptr.html_segnames = html_segnames_ptr;        break;      } @@ -1973,20 +1961,20 @@ auto _image_dimensions(M,O)(M manifest_matter, O obj) {  #+name: abs_post  #+BEGIN_SRC d  foreach (ref obj; the_document_head_section) { -  if (obj.typeinfo.is_a == "heading") { +  if (obj.metainfo.is_a == "heading") {      debug(dom) {        writeln(obj.text);      } -    if (obj.node.heading_lev_markup <= 4) { +    if (obj.metainfo.heading_lev_markup <= 4) {        segnames_0_4 ~= obj.tags.segment_anchor_tag;      } -    if (obj.node.heading_lev_markup == 0) { +    if (obj.metainfo.heading_lev_markup == 0) {        /+ TODO second hit (of two) with same assertion failure, check, fix and reinstate -      assert( obj.node.ocn == 1, -        "Title OCN should be 1 not: " ~ obj.node.ocn.to!string); // bug introduced 0.18.1 +      assert( obj.metainfo.ocn == 1, +        "Title OCN should be 1 not: " ~ obj.metainfo.ocn.to!string); // bug introduced 0.18.1        +/ -      obj.node.ocn = 1; -      obj.misc.object_number_type = OCNtype.ocn; +      obj.metainfo.ocn = 1; +      obj.metainfo.object_number_type = OCNtype.ocn;      }      /+ dom structure (marked up & collapsed) +/      if ((opt_action.html) @@ -1996,8 +1984,8 @@ foreach (ref obj; the_document_head_section) {      || (opt_action.sqlite_discrete)      || (opt_action.sqlite_update)      || (opt_action.postgresql)) { -      obj = obj_dom_structure_set_markup_tags(obj, dom_markedup, obj.node.heading_lev_markup); -      obj = obj_dom_set_collapsed_tags(obj, dom_collapsed, obj.node.heading_lev_collapsed); +      obj = obj_dom_structure_set_markup_tags(obj, dom_markedup, obj.metainfo.heading_lev_markup); +      obj = obj_dom_set_collapsed_tags(obj, dom_collapsed, obj.metainfo.heading_lev_collapsed);      }      obj = obj_heading_ancestors(obj, lv_ancestors_txt);    } @@ -2013,10 +2001,10 @@ if (the_table_of_contents_section["scroll"].length > 1) {    dom_markedup_buffer = dom_markedup.dup;    dom_collapsed_buffer = dom_collapsed.dup;    foreach (ref obj; the_table_of_contents_section["scroll"]) { -    if (obj.typeinfo.is_a == "heading") { -      if (obj.node.heading_lev_markup <= 4) { +    if (obj.metainfo.is_a == "heading") { +      if (obj.metainfo.heading_lev_markup <= 4) {          segnames_0_4 ~= obj.tags.segment_anchor_tag; -        if (obj.node.heading_lev_markup == 4) { +        if (obj.metainfo.heading_lev_markup == 4) {            obj.tags.segname_next = html_segnames[obj.ptr.html_segnames + 1];            assert(obj.tags.segment_anchor_tag == html_segnames[obj.ptr.html_segnames],            obj.tags.segment_anchor_tag ~ "!=" ~ html_segnames[obj.ptr.html_segnames]); @@ -2030,8 +2018,8 @@ if (the_table_of_contents_section["scroll"].length > 1) {        || (opt_action.sqlite_discrete)        || (opt_action.sqlite_update)        || (opt_action.postgresql)) { -        obj = obj_dom_structure_set_markup_tags(obj, dom_markedup, obj.node.heading_lev_markup); -        obj = obj_dom_set_collapsed_tags(obj, dom_collapsed, obj.node.heading_lev_collapsed); +        obj = obj_dom_structure_set_markup_tags(obj, dom_markedup, obj.metainfo.heading_lev_markup); +        obj = obj_dom_set_collapsed_tags(obj, dom_collapsed, obj.metainfo.heading_lev_collapsed);        }        obj = obj_heading_ancestors(obj, lv_ancestors_txt);      } @@ -2040,13 +2028,13 @@ if (the_table_of_contents_section["scroll"].length > 1) {    dom_markedup = dom_markedup_buffer.dup;    dom_collapsed = dom_collapsed_buffer.dup;    foreach (ref obj; the_table_of_contents_section["seg"]) { -    if (obj.typeinfo.is_a == "heading") { +    if (obj.metainfo.is_a == "heading") {        debug(dom) {          writeln(obj.text);        } -      if (obj.node.heading_lev_markup <= 4) { +      if (obj.metainfo.heading_lev_markup <= 4) {          segnames_0_4 ~= obj.tags.segment_anchor_tag; -        if (obj.node.heading_lev_markup == 4) { +        if (obj.metainfo.heading_lev_markup == 4) {            obj.tags.segname_next = html_segnames[obj.ptr.html_segnames + 1];            assert(obj.tags.segment_anchor_tag == html_segnames[obj.ptr.html_segnames],            obj.tags.segment_anchor_tag ~ "!=" ~ html_segnames[obj.ptr.html_segnames]); @@ -2056,8 +2044,8 @@ if (the_table_of_contents_section["scroll"].length > 1) {        || (opt_action.html_scroll)        || (opt_action.html_seg)        || (opt_action.epub)) { -        obj = obj_dom_structure_set_markup_tags(obj, dom_markedup, obj.node.heading_lev_markup); -        obj = obj_dom_set_collapsed_tags(obj, dom_collapsed, obj.node.heading_lev_collapsed); +        obj = obj_dom_structure_set_markup_tags(obj, dom_markedup, obj.metainfo.heading_lev_markup); +        obj = obj_dom_set_collapsed_tags(obj, dom_collapsed, obj.metainfo.heading_lev_collapsed);        }        obj = obj_heading_ancestors(obj, lv_ancestors_txt);      } @@ -2072,13 +2060,13 @@ if (the_table_of_contents_section["scroll"].length > 1) {  /+ multiple 1~ levels, loop through document body +/  if (the_document_body_section.length > 1) {    foreach (ref obj; the_document_body_section) { -    if (obj.typeinfo.is_a == "heading") { +    if (obj.metainfo.is_a == "heading") {        debug(dom) {          writeln(obj.text);        } -      if (obj.node.heading_lev_markup <= 4) { +      if (obj.metainfo.heading_lev_markup <= 4) {          segnames_0_4 ~= obj.tags.segment_anchor_tag; -        if (obj.node.heading_lev_markup == 4) { +        if (obj.metainfo.heading_lev_markup == 4) {            obj.tags.lev4_subtoc = lev4_subtoc[obj.tags.segment_anchor_tag];            obj.tags.segname_prev = html_segnames[obj.ptr.html_segnames - 1];            if (html_segnames.length > obj.ptr.html_segnames + 1) { @@ -2096,11 +2084,11 @@ if (the_document_body_section.length > 1) {        || (opt_action.sqlite_discrete)        || (opt_action.sqlite_update)        || (opt_action.postgresql)) { -        obj = obj_dom_structure_set_markup_tags(obj, dom_markedup, obj.node.heading_lev_markup); -        obj = obj_dom_set_collapsed_tags(obj, dom_collapsed, obj.node.heading_lev_collapsed); +        obj = obj_dom_structure_set_markup_tags(obj, dom_markedup, obj.metainfo.heading_lev_markup); +        obj = obj_dom_set_collapsed_tags(obj, dom_collapsed, obj.metainfo.heading_lev_collapsed);        }        obj = obj_heading_ancestors(obj, lv_ancestors_txt); -    } else if (obj.typeinfo.is_a == "para") { +    } else if (obj.metainfo.is_a == "para") {         _images ~= extract_images(obj.text);         obj = _image_dimensions(manifest_matter, obj);      } @@ -2122,15 +2110,15 @@ if (the_endnotes_section.length > 1) {    dom_markedup = dom_markedup_buffer.dup;    dom_collapsed = dom_collapsed_buffer.dup;    foreach (ref obj; the_endnotes_section) { -    if (obj.typeinfo.is_a == "heading") { +    if (obj.metainfo.is_a == "heading") {        debug(dom) {          writeln(obj.text);        }        obj_cite_digits = ocn_emit(OCNstatus.on); -      obj.node.ocn = obj_cite_digits.digit; -      if (obj.node.heading_lev_markup <= 4) { +      obj.metainfo.ocn = obj_cite_digits.digit; +      if (obj.metainfo.heading_lev_markup <= 4) {          segnames_0_4 ~= obj.tags.segment_anchor_tag; -        if (obj.node.heading_lev_markup == 4) { +        if (obj.metainfo.heading_lev_markup == 4) {            obj.tags.segname_prev = html_segnames[obj.ptr.html_segnames - 1];            if (html_segnames.length > obj.ptr.html_segnames + 1) {              obj.tags.segname_next = html_segnames[obj.ptr.html_segnames + 1]; @@ -2147,8 +2135,8 @@ if (the_endnotes_section.length > 1) {        || (opt_action.sqlite_discrete)        || (opt_action.sqlite_update)        || (opt_action.postgresql)) { -        obj = obj_dom_structure_set_markup_tags(obj, dom_markedup, obj.node.heading_lev_markup); -        obj = obj_dom_set_collapsed_tags(obj, dom_collapsed, obj.node.heading_lev_collapsed); +        obj = obj_dom_structure_set_markup_tags(obj, dom_markedup, obj.metainfo.heading_lev_markup); +        obj = obj_dom_set_collapsed_tags(obj, dom_collapsed, obj.metainfo.heading_lev_collapsed);        }        obj = obj_heading_ancestors(obj, lv_ancestors_txt);      } @@ -2165,15 +2153,15 @@ if (the_endnotes_section.length > 1) {  /+ optional only one 1~ level +/  if (the_glossary_section.length > 1) {    foreach (ref obj; the_glossary_section) { -    if (obj.typeinfo.is_a == "heading") { +    if (obj.metainfo.is_a == "heading") {        debug(dom) {          writeln(obj.text);        }        obj_cite_digits = ocn_emit(OCNstatus.on); -      obj.node.ocn = obj_cite_digits.digit; -      if (obj.node.heading_lev_markup <= 4) { +      obj.metainfo.ocn = obj_cite_digits.digit; +      if (obj.metainfo.heading_lev_markup <= 4) {          segnames_0_4 ~= obj.tags.segment_anchor_tag; -        if (obj.node.heading_lev_markup == 4) { +        if (obj.metainfo.heading_lev_markup == 4) {            obj.tags.segname_prev = html_segnames[obj.ptr.html_segnames - 1];            if (html_segnames.length > obj.ptr.html_segnames + 1) {              obj.tags.segname_next = html_segnames[obj.ptr.html_segnames + 1]; @@ -2190,13 +2178,13 @@ if (the_glossary_section.length > 1) {        || (opt_action.sqlite_discrete)        || (opt_action.sqlite_update)        || (opt_action.postgresql)) { -        obj = obj_dom_structure_set_markup_tags(obj, dom_markedup, obj.node.heading_lev_markup); -        obj = obj_dom_set_collapsed_tags(obj, dom_collapsed, obj.node.heading_lev_collapsed); +        obj = obj_dom_structure_set_markup_tags(obj, dom_markedup, obj.metainfo.heading_lev_markup); +        obj = obj_dom_set_collapsed_tags(obj, dom_collapsed, obj.metainfo.heading_lev_collapsed);        }        obj = obj_heading_ancestors(obj, lv_ancestors_txt); -    } else if (obj.typeinfo.is_a == "glossary") { +    } else if (obj.metainfo.is_a == "glossary") {        obj_cite_digits = ocn_emit(OCNstatus.on); -      obj.node.ocn = obj_cite_digits.digit; +      obj.metainfo.ocn = obj_cite_digits.digit;      }    }  } @@ -2211,15 +2199,15 @@ if (the_glossary_section.length > 1) {  /+ optional only one 1~ level +/  if (the_bibliography_section.length > 1) {    foreach (ref obj; the_bibliography_section) { -    if (obj.typeinfo.is_a == "heading") { +    if (obj.metainfo.is_a == "heading") {        debug(dom) {          writeln(obj.text);        }        obj_cite_digits = ocn_emit(OCNstatus.on); -      obj.node.ocn = obj_cite_digits.digit; -      if (obj.node.heading_lev_markup <= 4) { +      obj.metainfo.ocn = obj_cite_digits.digit; +      if (obj.metainfo.heading_lev_markup <= 4) {          segnames_0_4 ~= obj.tags.segment_anchor_tag; -        if (obj.node.heading_lev_markup == 4) { +        if (obj.metainfo.heading_lev_markup == 4) {            obj.tags.segname_prev = html_segnames[obj.ptr.html_segnames - 1];            if (html_segnames.length > obj.ptr.html_segnames + 1) {              obj.tags.segname_next = html_segnames[obj.ptr.html_segnames + 1]; @@ -2236,13 +2224,13 @@ if (the_bibliography_section.length > 1) {        || (opt_action.sqlite_discrete)        || (opt_action.sqlite_update)        || (opt_action.postgresql)) { -        obj = obj_dom_structure_set_markup_tags(obj, dom_markedup, obj.node.heading_lev_markup); -        obj = obj_dom_set_collapsed_tags(obj, dom_collapsed, obj.node.heading_lev_collapsed); +        obj = obj_dom_structure_set_markup_tags(obj, dom_markedup, obj.metainfo.heading_lev_markup); +        obj = obj_dom_set_collapsed_tags(obj, dom_collapsed, obj.metainfo.heading_lev_collapsed);        }        obj = obj_heading_ancestors(obj, lv_ancestors_txt); -    } else if (obj.typeinfo.is_a == "bibliography") { +    } else if (obj.metainfo.is_a == "bibliography") {        obj_cite_digits = ocn_emit(OCNstatus.on); -      obj.node.ocn = obj_cite_digits.on; +      obj.metainfo.ocn = obj_cite_digits.on;      }    }  } @@ -2263,14 +2251,14 @@ if (the_bookindex_section["scroll"].length > 1) {    dom_markedup_buffer = dom_markedup.dup;    dom_collapsed_buffer = dom_collapsed.dup;    foreach (ref obj; the_bookindex_section["scroll"]) { -    if (obj.typeinfo.is_a == "heading") { +    if (obj.metainfo.is_a == "heading") {        debug(dom) {        }        obj_cite_digits = ocn_emit(OCNstatus.on); -      obj.node.ocn = obj_cite_digits.on; -      if (obj.node.heading_lev_markup <= 4) { +      obj.metainfo.ocn = obj_cite_digits.on; +      if (obj.metainfo.heading_lev_markup <= 4) {          segnames_0_4 ~= obj.tags.segment_anchor_tag; -        if (obj.node.heading_lev_markup == 4) { +        if (obj.metainfo.heading_lev_markup == 4) {            obj.tags.segname_prev = html_segnames[obj.ptr.html_segnames - 1];            if (html_segnames.length > obj.ptr.html_segnames + 1) {              obj.tags.segname_next = html_segnames[obj.ptr.html_segnames + 1]; @@ -2287,29 +2275,29 @@ if (the_bookindex_section["scroll"].length > 1) {        || (opt_action.sqlite_discrete)        || (opt_action.sqlite_update)        || (opt_action.postgresql)) { -        obj = obj_dom_structure_set_markup_tags(obj, dom_markedup, obj.node.heading_lev_markup); -        obj = obj_dom_set_collapsed_tags(obj, dom_collapsed, obj.node.heading_lev_collapsed); +        obj = obj_dom_structure_set_markup_tags(obj, dom_markedup, obj.metainfo.heading_lev_markup); +        obj = obj_dom_set_collapsed_tags(obj, dom_collapsed, obj.metainfo.heading_lev_collapsed);        }        obj = obj_heading_ancestors(obj, lv_ancestors_txt); -    } else if (obj.typeinfo.is_a == "bookindex") { +    } else if (obj.metainfo.is_a == "bookindex") {        obj_cite_digits                   = ocn_emit(OCNstatus.bkidx); -      obj.node.ocn                      = obj_cite_digits.digit; -      obj.misc.o_n_book_index           = obj_cite_digits.bkidx; -      obj.misc.object_number_type       = OCNtype.bkidx; +      obj.metainfo.ocn                      = obj_cite_digits.digit; +      obj.metainfo.o_n_book_index           = obj_cite_digits.bkidx; +      obj.metainfo.object_number_type       = OCNtype.bkidx;      }    }    /+ seg +/    dom_markedup = dom_markedup_buffer.dup;    dom_collapsed = dom_collapsed_buffer.dup;    foreach (ref obj; the_bookindex_section["seg"]) { -    if (obj.typeinfo.is_a == "heading") { +    if (obj.metainfo.is_a == "heading") {        debug(dom) {          writeln(obj.text);        } -      obj.node.ocn = ++ocn_; -      if (obj.node.heading_lev_markup <= 4) { +      obj.metainfo.ocn = ++ocn_; +      if (obj.metainfo.heading_lev_markup <= 4) {          segnames_0_4 ~= obj.tags.segment_anchor_tag; -        if (obj.node.heading_lev_markup == 4) { +        if (obj.metainfo.heading_lev_markup == 4) {            obj.tags.segname_prev = html_segnames[obj.ptr.html_segnames - 1];            if (html_segnames.length > obj.ptr.html_segnames + 1) {              obj.tags.segname_next = html_segnames[obj.ptr.html_segnames + 1]; @@ -2326,14 +2314,14 @@ if (the_bookindex_section["scroll"].length > 1) {        || (opt_action.sqlite_discrete)        || (opt_action.sqlite_update)        || (opt_action.postgresql)) { -        obj = obj_dom_structure_set_markup_tags(obj, dom_markedup, obj.node.heading_lev_markup); -        obj = obj_dom_set_collapsed_tags(obj, dom_collapsed, obj.node.heading_lev_collapsed); +        obj = obj_dom_structure_set_markup_tags(obj, dom_markedup, obj.metainfo.heading_lev_markup); +        obj = obj_dom_set_collapsed_tags(obj, dom_collapsed, obj.metainfo.heading_lev_collapsed);        }        obj = obj_heading_ancestors(obj, lv_ancestors_txt); -    } else if (obj.typeinfo.is_a == "bookindex") { +    } else if (obj.metainfo.is_a == "bookindex") {        ocn_bidx_ = ++ocn_bkidx_; -      obj.misc.o_n_book_index           = ocn_bidx_; // FIX need to distinguish from regular ocn -      obj.misc.object_number_type       = OCNtype.bkidx; +      obj.metainfo.o_n_book_index           = ocn_bidx_; // FIX need to distinguish from regular ocn +      obj.metainfo.object_number_type       = OCNtype.bkidx;      }    }    /+ TODO assert failure, reinstate @@ -2350,15 +2338,15 @@ if (the_bookindex_section["scroll"].length > 1) {  /+ optional only one 1~ level +/  if (the_blurb_section.length > 1) {    foreach (ref obj; the_blurb_section) { -    if (obj.typeinfo.is_a == "heading") { +    if (obj.metainfo.is_a == "heading") {        debug(dom) {          writeln(obj.text);        }        obj_cite_digits = ocn_emit(OCNstatus.on); -      obj.node.ocn = obj_cite_digits.on; -      if (obj.node.heading_lev_markup <= 4) { +      obj.metainfo.ocn = obj_cite_digits.on; +      if (obj.metainfo.heading_lev_markup <= 4) {          segnames_0_4 ~= obj.tags.segment_anchor_tag; -        if (obj.node.heading_lev_markup == 4) { +        if (obj.metainfo.heading_lev_markup == 4) {            obj.tags.segname_prev = html_segnames[obj.ptr.html_segnames - 1];            if (html_segnames.length > obj.ptr.html_segnames + 1) {              obj.tags.segname_next = html_segnames[obj.ptr.html_segnames + 1]; @@ -2375,14 +2363,14 @@ if (the_blurb_section.length > 1) {        || (opt_action.sqlite_discrete)        || (opt_action.sqlite_update)        || (opt_action.postgresql)) { -        obj = obj_dom_structure_set_markup_tags(obj, dom_markedup, obj.node.heading_lev_markup); -        obj = obj_dom_set_collapsed_tags(obj, dom_collapsed, obj.node.heading_lev_collapsed); +        obj = obj_dom_structure_set_markup_tags(obj, dom_markedup, obj.metainfo.heading_lev_markup); +        obj = obj_dom_set_collapsed_tags(obj, dom_collapsed, obj.metainfo.heading_lev_collapsed);        }        obj = obj_heading_ancestors(obj, lv_ancestors_txt); -    } else if (obj.typeinfo.is_a == "blurb") { +    } else if (obj.metainfo.is_a == "blurb") {        obj_cite_digits = ocn_emit(OCNstatus.off); -      obj.misc.object_number_off  = obj_cite_digits.off.to!string; -      obj.misc.object_number_type = OCNtype.non; +      obj.metainfo.object_number_off  = obj_cite_digits.off.to!string; +      obj.metainfo.object_number_type = OCNtype.non;      }    }  } @@ -2395,25 +2383,24 @@ if (the_blurb_section.length > 1) {    /+ TODO      - note create/insert heading object sole purpose eof close all open tags        sort out: -      - obj.node.dom_markedup = dom_markedup; -      - obj.node.dom_collapsed = dom_collapsed; +      - obj.metainfo.dom_markedup = dom_markedup; +      - obj.metainfo.dom_collapsed = dom_collapsed;    +/ -comp_obj_heading_                            = comp_obj_heading_.init; -comp_obj_heading_.typeinfo.is_of_part        = "empty"; -comp_obj_heading_.typeinfo.is_of_section     = "empty"; -comp_obj_heading_.typeinfo.is_of_type        = "para"; -comp_obj_heading_.typeinfo.is_a              = "heading"; -comp_obj_heading_.node.ocn                   = 0; -comp_obj_para.misc.object_number_off         = ""; -comp_obj_para.misc.object_number_type        = 0; -comp_obj_heading_.tags.segment_anchor_tag    = ""; -comp_obj_heading_.node.marked_up_level       = ""; -comp_obj_heading_.node.heading_lev_markup    = 9; -comp_obj_heading_.node.heading_lev_collapsed = 9; -comp_obj_heading_.node.parent_ocn            = 0; -comp_obj_heading_.node.parent_lev_markup     = 0; -comp_obj_heading_.node.dom_markedup          = dom_markedup.dup; -comp_obj_heading_.node.dom_collapsed         = dom_collapsed.dup; +comp_obj_heading_                                = comp_obj_heading_.init; +comp_obj_heading_.metainfo.is_of_part            = "empty"; +comp_obj_heading_.metainfo.is_of_section         = "empty"; +comp_obj_heading_.metainfo.is_of_type            = "para"; +comp_obj_heading_.metainfo.is_a                  = "heading"; +comp_obj_heading_.metainfo.ocn                   = 0; +comp_obj_para.metainfo.object_number_off         = ""; +comp_obj_para.metainfo.object_number_type        = 0; +comp_obj_heading_.tags.segment_anchor_tag        = ""; +comp_obj_heading_.metainfo.heading_lev_markup    = 9; +comp_obj_heading_.metainfo.heading_lev_collapsed = 9; +comp_obj_heading_.metainfo.parent_ocn            = 0; +comp_obj_heading_.metainfo.parent_lev_markup     = 0; +comp_obj_heading_.metainfo.dom_markedup          = dom_markedup.dup; +comp_obj_heading_.metainfo.dom_collapsed         = dom_collapsed.dup;  comp_obj_heading_ = obj_dom_structure_set_markup_tags(comp_obj_heading_, dom_markedup, 0);  comp_obj_heading_ = obj_dom_set_collapsed_tags(comp_obj_heading_, dom_collapsed, 0);  comp_obj_heading_ = obj_heading_ancestors(comp_obj_heading_, lv_ancestors_txt); @@ -3369,14 +3356,14 @@ void _poem_block_(L,O,T,C,N,CMM)(            an_object["substantive"] = substantive_obj_misc_tuple[sObj.content];            anchor_tags = substantive_obj_misc_tuple[sObj.anchor_tags];            comp_obj_block                               = comp_obj_block.init; -          comp_obj_block.typeinfo.is_of_part           = "body"; -          comp_obj_block.typeinfo.is_of_section        = "body"; -          comp_obj_block.typeinfo.is_of_type           = "block"; -          comp_obj_block.typeinfo.is_a                 = "verse"; -          comp_obj_block.node.ocn                      = obj_cite_digits.on; -          comp_obj_block.misc.object_number_off        = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; -          comp_obj_block.misc.o_n_book_index           = obj_cite_digits.bkidx; -          comp_obj_block.misc.object_number_type       = obj_cite_digits.type; +          comp_obj_block.metainfo.is_of_part           = "body"; +          comp_obj_block.metainfo.is_of_section        = "body"; +          comp_obj_block.metainfo.is_of_type           = "block"; +          comp_obj_block.metainfo.is_a                 = "verse"; +          comp_obj_block.metainfo.ocn                  = obj_cite_digits.on; +          comp_obj_block.metainfo.object_number_off    = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; +          comp_obj_block.metainfo.o_n_book_index       = obj_cite_digits.bkidx; +          comp_obj_block.metainfo.object_number_type   = obj_cite_digits.type;            comp_obj_block.text                          = an_object["substantive"];            comp_obj_block.has.inline_notes_reg          = substantive_obj_misc_tuple[sObj.notes_reg];            comp_obj_block.has.inline_notes_star         = substantive_obj_misc_tuple[sObj.notes_star]; @@ -3426,14 +3413,14 @@ void _poem_block_(L,O,T,C,N,CMM)(          an_object["substantive"] = substantive_obj_misc_tuple[sObj.content];          anchor_tags = substantive_obj_misc_tuple[sObj.anchor_tags];          comp_obj_block                               = comp_obj_block.init; -        comp_obj_block.typeinfo.is_of_part           = "body"; -        comp_obj_block.typeinfo.is_of_section        = "body"; -        comp_obj_block.typeinfo.is_of_type           = "block"; -        comp_obj_block.typeinfo.is_a                 = "verse"; -        comp_obj_block.node.ocn                      = obj_cite_digits.on; -        comp_obj_block.misc.object_number_off        = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; -        comp_obj_block.misc.o_n_book_index           = obj_cite_digits.bkidx; -        comp_obj_block.misc.object_number_type       = obj_cite_digits.type; +        comp_obj_block.metainfo.is_of_part           = "body"; +        comp_obj_block.metainfo.is_of_section        = "body"; +        comp_obj_block.metainfo.is_of_type           = "block"; +        comp_obj_block.metainfo.is_a                 = "verse"; +        comp_obj_block.metainfo.ocn                  = obj_cite_digits.on; +        comp_obj_block.metainfo.object_number_off    = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; +        comp_obj_block.metainfo.o_n_book_index       = obj_cite_digits.bkidx; +        comp_obj_block.metainfo.object_number_type   = obj_cite_digits.type;          comp_obj_block.text                          = an_object["substantive"];          comp_obj_block.has.inline_notes_reg          = substantive_obj_misc_tuple[sObj.notes_reg];          comp_obj_block.has.inline_notes_star         = substantive_obj_misc_tuple[sObj.notes_star]; @@ -3468,14 +3455,14 @@ void _poem_block_(L,O,T,C,N,CMM)(          an_object["substantive"] = substantive_obj_misc_tuple[sObj.content];          anchor_tags = substantive_obj_misc_tuple[sObj.anchor_tags];          comp_obj_block                               = comp_obj_block.init; -        comp_obj_block.typeinfo.is_of_part           = "body"; -        comp_obj_block.typeinfo.is_of_section        = "body"; -        comp_obj_block.typeinfo.is_of_type           = "block"; -        comp_obj_block.typeinfo.is_a                 = "verse"; -        comp_obj_block.node.ocn                      = obj_cite_digits.on; -        comp_obj_block.misc.object_number_off        = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; -        comp_obj_block.misc.o_n_book_index           = obj_cite_digits.bkidx; -        comp_obj_block.misc.object_number_type       = obj_cite_digits.type; +        comp_obj_block.metainfo.is_of_part           = "body"; +        comp_obj_block.metainfo.is_of_section        = "body"; +        comp_obj_block.metainfo.is_of_type           = "block"; +        comp_obj_block.metainfo.is_a                 = "verse"; +        comp_obj_block.metainfo.ocn                  = obj_cite_digits.on; +        comp_obj_block.metainfo.object_number_off    = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; +        comp_obj_block.metainfo.o_n_book_index       = obj_cite_digits.bkidx; +        comp_obj_block.metainfo.object_number_type   = obj_cite_digits.type;          comp_obj_block.text                          = an_object["substantive"];          comp_obj_block.has.inline_notes_reg          = substantive_obj_misc_tuple[sObj.notes_reg];          comp_obj_block.has.inline_notes_star         = substantive_obj_misc_tuple[sObj.notes_star]; @@ -3525,14 +3512,14 @@ void _poem_block_(L,O,T,C,N,CMM)(          an_object["substantive"] = substantive_obj_misc_tuple[sObj.content];          anchor_tags = substantive_obj_misc_tuple[sObj.anchor_tags];          comp_obj_block                               = comp_obj_block.init; -        comp_obj_block.typeinfo.is_of_part           = "body"; -        comp_obj_block.typeinfo.is_of_section        = "body"; -        comp_obj_block.typeinfo.is_of_type           = "block"; -        comp_obj_block.typeinfo.is_a                 = "verse"; -        comp_obj_block.node.ocn                      = obj_cite_digits.on; -        comp_obj_block.misc.object_number_off        = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; -        comp_obj_block.misc.o_n_book_index           = obj_cite_digits.bkidx; -        comp_obj_block.misc.object_number_type       = obj_cite_digits.type; +        comp_obj_block.metainfo.is_of_part           = "body"; +        comp_obj_block.metainfo.is_of_section        = "body"; +        comp_obj_block.metainfo.is_of_type           = "block"; +        comp_obj_block.metainfo.is_a                 = "verse"; +        comp_obj_block.metainfo.ocn                  = obj_cite_digits.on; +        comp_obj_block.metainfo.object_number_off    = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; +        comp_obj_block.metainfo.o_n_book_index       = obj_cite_digits.bkidx; +        comp_obj_block.metainfo.object_number_type   = obj_cite_digits.type;          comp_obj_block.text                          = an_object["substantive"];          comp_obj_block.has.inline_notes_reg          = substantive_obj_misc_tuple[sObj.notes_reg];          comp_obj_block.has.inline_notes_star         = substantive_obj_misc_tuple[sObj.notes_star]; @@ -3667,10 +3654,10 @@ void _table_closed_make_special_notation_table_(N,CMM)(      auto substantive_obj_misc_tuple        = obj_im.obj_inline_markup_and_anchor_tags_and_misc(an_object, "body_nugget", conf_make_meta);      an_object["substantive"]                     = substantive_obj_misc_tuple[sObj.content]; -    comp_obj_block.node.ocn                      = obj_cite_digits.on; -    comp_obj_block.misc.object_number_off        = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; -    comp_obj_block.misc.o_n_book_index           = obj_cite_digits.bkidx; -    comp_obj_block.misc.object_number_type       = obj_cite_digits.type; +    comp_obj_block.metainfo.ocn                  = obj_cite_digits.on; +    comp_obj_block.metainfo.object_number_off    = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; +    comp_obj_block.metainfo.o_n_book_index       = obj_cite_digits.bkidx; +    comp_obj_block.metainfo.object_number_type   = obj_cite_digits.type;      comp_obj_block                               = table_instructions(comp_obj_block, an_object["table_head"]);      comp_obj_block                               = table_substantive_munge_special(comp_obj_block, an_object["substantive"]);      the_document_body_section                    ~= comp_obj_block; @@ -3740,14 +3727,14 @@ void _block_flag_line_empty_(B,N,CMM)(      an_object["substantive"] = substantive_obj_misc_tuple[sObj.content];      anchor_tags = substantive_obj_misc_tuple[sObj.anchor_tags];      comp_obj_block                               = comp_obj_block.init; -    comp_obj_block.typeinfo.is_of_part           = "body"; -    comp_obj_block.typeinfo.is_of_section        = "body"; -    comp_obj_block.typeinfo.is_of_type           = "block"; -    comp_obj_block.typeinfo.is_a                 = "quote"; -    comp_obj_block.node.ocn                      = obj_cite_digits.on; -    comp_obj_block.misc.object_number_off        = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; -    comp_obj_block.misc.o_n_book_index           = obj_cite_digits.bkidx; -    comp_obj_block.misc.object_number_type       = obj_cite_digit_type; +    comp_obj_block.metainfo.is_of_part           = "body"; +    comp_obj_block.metainfo.is_of_section        = "body"; +    comp_obj_block.metainfo.is_of_type           = "block"; +    comp_obj_block.metainfo.is_a                 = "quote"; +    comp_obj_block.metainfo.ocn                  = obj_cite_digits.on; +    comp_obj_block.metainfo.object_number_off    = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; +    comp_obj_block.metainfo.o_n_book_index       = obj_cite_digits.bkidx; +    comp_obj_block.metainfo.object_number_type   = obj_cite_digit_type;      comp_obj_block.text                          = an_object["substantive"];      comp_obj_block.has.inline_notes_reg          = substantive_obj_misc_tuple[sObj.notes_reg];      comp_obj_block.has.inline_notes_star         = substantive_obj_misc_tuple[sObj.notes_star]; @@ -3789,14 +3776,14 @@ void _block_flag_line_empty_(B,N,CMM)(      an_object["substantive"] = substantive_obj_misc_tuple[sObj.content];      anchor_tags = substantive_obj_misc_tuple[sObj.anchor_tags];      comp_obj_block                               = comp_obj_block.init; -    comp_obj_block.typeinfo.is_of_part           = "body"; -    comp_obj_block.typeinfo.is_of_section        = "body"; -    comp_obj_block.typeinfo.is_of_type           = "block"; -    comp_obj_block.typeinfo.is_a                 = "group"; -    comp_obj_block.node.ocn                      = obj_cite_digits.on; -    comp_obj_block.misc.object_number_off        = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; -    comp_obj_block.misc.o_n_book_index           = obj_cite_digits.bkidx; -    comp_obj_block.misc.object_number_type       = obj_cite_digits.type; +    comp_obj_block.metainfo.is_of_part           = "body"; +    comp_obj_block.metainfo.is_of_section        = "body"; +    comp_obj_block.metainfo.is_of_type           = "block"; +    comp_obj_block.metainfo.is_a                 = "group"; +    comp_obj_block.metainfo.ocn                  = obj_cite_digits.on; +    comp_obj_block.metainfo.object_number_off    = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; +    comp_obj_block.metainfo.o_n_book_index       = obj_cite_digits.bkidx; +    comp_obj_block.metainfo.object_number_type   = obj_cite_digits.type;      comp_obj_block.text                          = an_object["substantive"];      comp_obj_block.has.inline_notes_reg          = substantive_obj_misc_tuple[sObj.notes_reg];      comp_obj_block.has.inline_notes_star         = substantive_obj_misc_tuple[sObj.notes_star]; @@ -3837,14 +3824,14 @@ void _block_flag_line_empty_(B,N,CMM)(        = obj_im.obj_inline_markup_and_anchor_tags_and_misc(an_object, an_object_key, conf_make_meta);      an_object["substantive"]                     = substantive_obj_misc_tuple[sObj.content];      comp_obj_block                               = comp_obj_block.init; -    comp_obj_block.typeinfo.is_of_part           = "body"; -    comp_obj_block.typeinfo.is_of_section        = "body"; -    comp_obj_block.typeinfo.is_of_type           = "block"; -    comp_obj_block.typeinfo.is_a                 = "block"; -    comp_obj_block.node.ocn                      = obj_cite_digits.on; -    comp_obj_block.misc.object_number_off        = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; -    comp_obj_block.misc.o_n_book_index           = obj_cite_digits.bkidx; -    comp_obj_block.misc.object_number_type       = obj_cite_digit_type; +    comp_obj_block.metainfo.is_of_part           = "body"; +    comp_obj_block.metainfo.is_of_section        = "body"; +    comp_obj_block.metainfo.is_of_type           = "block"; +    comp_obj_block.metainfo.is_a                 = "block"; +    comp_obj_block.metainfo.ocn                  = obj_cite_digits.on; +    comp_obj_block.metainfo.object_number_off    = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; +    comp_obj_block.metainfo.o_n_book_index       = obj_cite_digits.bkidx; +    comp_obj_block.metainfo.object_number_type   = obj_cite_digit_type;      comp_obj_block.text                          = an_object["substantive"];      comp_obj_block.has.inline_notes_reg          = substantive_obj_misc_tuple[sObj.notes_reg];      comp_obj_block.has.inline_notes_star         = substantive_obj_misc_tuple[sObj.notes_star]; @@ -3881,14 +3868,14 @@ void _block_flag_line_empty_(B,N,CMM)(          an_object["is"]        );      comp_obj_poem_ocn                               = comp_obj_poem_ocn.init; -    comp_obj_poem_ocn.typeinfo.is_of_part           = "body"; -    comp_obj_poem_ocn.typeinfo.is_of_section        = "body"; -    comp_obj_poem_ocn.typeinfo.is_of_type           = "block"; -    comp_obj_poem_ocn.typeinfo.is_a                 = "poem"; -    comp_obj_poem_ocn.node.ocn                      = obj_cite_digits.on; -    comp_obj_poem_ocn.misc.object_number_off        = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; // -    comp_obj_poem_ocn.misc.o_n_book_index           = obj_cite_digits.bkidx; // -    comp_obj_poem_ocn.misc.object_number_type       = obj_cite_digits.type; +    comp_obj_poem_ocn.metainfo.is_of_part           = "body"; +    comp_obj_poem_ocn.metainfo.is_of_section        = "body"; +    comp_obj_poem_ocn.metainfo.is_of_type           = "block"; +    comp_obj_poem_ocn.metainfo.is_a                 = "poem"; +    comp_obj_poem_ocn.metainfo.ocn                  = obj_cite_digits.on; +    comp_obj_poem_ocn.metainfo.object_number_off    = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; // +    comp_obj_poem_ocn.metainfo.o_n_book_index       = obj_cite_digits.bkidx; // +    comp_obj_poem_ocn.metainfo.object_number_type   = obj_cite_digits.type;      comp_obj_poem_ocn.text                          = "";      the_document_body_section                       ~= comp_obj_poem_ocn;      obj_type_status["blocks"]                       = TriState.off; @@ -3926,14 +3913,14 @@ void _block_flag_line_empty_(B,N,CMM)(      an_object["substantive"] = substantive_obj_misc_tuple[sObj.content];      anchor_tags = substantive_obj_misc_tuple[sObj.anchor_tags];      comp_obj_code                                = comp_obj_code.init; -    comp_obj_code.typeinfo.is_of_part            = "body"; -    comp_obj_code.typeinfo.is_of_section         = "body"; -    comp_obj_code.typeinfo.is_of_type            = "block"; -    comp_obj_code.typeinfo.is_a                  = "code"; -    comp_obj_code.node.ocn                       = obj_cite_digits.on; -    comp_obj_block.misc.object_number_off        = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; -    comp_obj_block.misc.o_n_book_index           = obj_cite_digits.bkidx; -    comp_obj_block.misc.object_number_type       = obj_cite_digits.type; +    comp_obj_code.metainfo.is_of_part            = "body"; +    comp_obj_code.metainfo.is_of_section         = "body"; +    comp_obj_code.metainfo.is_of_type            = "block"; +    comp_obj_code.metainfo.is_a                  = "code"; +    comp_obj_code.metainfo.ocn                   = obj_cite_digits.on; +    comp_obj_block.metainfo.object_number_off    = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; +    comp_obj_block.metainfo.o_n_book_index       = obj_cite_digits.bkidx; +    comp_obj_block.metainfo.object_number_type   = obj_cite_digits.type;      comp_obj_code.text                           = an_object["substantive"];      comp_obj_code.has.inline_notes_reg           = substantive_obj_misc_tuple[sObj.notes_reg];      comp_obj_code.has.inline_notes_star          = substantive_obj_misc_tuple[sObj.notes_star]; @@ -3975,10 +3962,10 @@ void _block_flag_line_empty_(B,N,CMM)(        = obj_im.obj_inline_markup_and_anchor_tags_and_misc(an_object, an_object_key, conf_make_meta);      an_object["substantive"]                     = substantive_obj_misc_tuple[sObj.content];      comp_obj_block                               = comp_obj_block.init; -    comp_obj_block.node.ocn                      = obj_cite_digits.on; -    comp_obj_block.misc.object_number_off        = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; -    comp_obj_block.misc.o_n_book_index           = obj_cite_digits.bkidx; -    comp_obj_block.misc.object_number_type       = obj_cite_digits.type; +    comp_obj_block.metainfo.ocn                  = obj_cite_digits.on; +    comp_obj_block.metainfo.object_number_off    = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; +    comp_obj_block.metainfo.o_n_book_index       = obj_cite_digits.bkidx; +    comp_obj_block.metainfo.object_number_type   = obj_cite_digits.type;      comp_obj_block                               = table_instructions(comp_obj_block, an_object["table_head"]);      comp_obj_block                               = table_substantive_munge(comp_obj_block, an_object["substantive"]);      the_document_body_section                    ~= comp_obj_block; @@ -4489,10 +4476,10 @@ auto table_instructions(O,H)(    return ref H  table_head,  ) {    static auto rgx = Rgx(); -  table_object.typeinfo.is_of_part      = "body"; -  table_object.typeinfo.is_of_section   = "body"; -  table_object.typeinfo.is_of_type      = "block"; -  table_object.typeinfo.is_a            = "table"; +  table_object.metainfo.is_of_part      = "body"; +  table_object.metainfo.is_of_section   = "body"; +  table_object.metainfo.is_of_type      = "block"; +  table_object.metainfo.is_a            = "table";    table_object.has.inline_notes_reg     = false;    table_object.has.inline_notes_star    = false;    table_object.has.inline_links         = false; @@ -5403,48 +5390,48 @@ static struct ObjInlineMarkup {          _anchor_tag,        );        toc_txt_= munge.url_links(toc_txt_); -      comp_obj_toc                            = comp_obj_toc.init; -      comp_obj_toc.typeinfo.is_of_part        = "frontmatter"; -      comp_obj_toc.typeinfo.is_of_section     = "toc"; -      comp_obj_toc.typeinfo.is_of_type        = "para"; -      comp_obj_toc.typeinfo.is_a              = "toc"; -      comp_obj_toc.node.ocn                   = 0; -      comp_obj_toc.misc.object_number_off     = ""; -      comp_obj_toc.misc.object_number_type    = 0; -      comp_obj_toc.attrib.indent_hang         = indent["hang_position"]; -      comp_obj_toc.attrib.indent_base         = indent["base_position"]; -      comp_obj_toc.attrib.bullet              = false; -      comp_obj_toc.text                       = toc_txt_.to!string.strip; -      comp_obj_toc.has.inline_links           = true; -      the_table_of_contents_section["scroll"] ~= comp_obj_toc; +      comp_obj_toc                             = comp_obj_toc.init; +      comp_obj_toc.metainfo.is_of_part         = "frontmatter"; +      comp_obj_toc.metainfo.is_of_section      = "toc"; +      comp_obj_toc.metainfo.is_of_type         = "para"; +      comp_obj_toc.metainfo.is_a               = "toc"; +      comp_obj_toc.metainfo.ocn                = 0; +      comp_obj_toc.metainfo.object_number_off  = ""; +      comp_obj_toc.metainfo.object_number_type = 0; +      comp_obj_toc.attrib.indent_hang          = indent["hang_position"]; +      comp_obj_toc.attrib.indent_base          = indent["base_position"]; +      comp_obj_toc.attrib.bullet               = false; +      comp_obj_toc.text                        = toc_txt_.to!string.strip; +      comp_obj_toc.has.inline_links            = true; +      the_table_of_contents_section["scroll"]  ~= comp_obj_toc;      } else {        indent=[          "hang_position" : 0,          "base_position" : 0,        ]; -      comp_obj_toc                            = comp_obj_toc.init; -      comp_obj_toc.typeinfo.is_of_part        = "frontmatter"; -      comp_obj_toc.typeinfo.is_of_section     = "toc"; -      comp_obj_toc.typeinfo.is_of_type        = "para"; -      comp_obj_toc.typeinfo.is_a              = "toc"; -      comp_obj_toc.node.ocn                   = 0; -      comp_obj_toc.misc.object_number_off     = ""; -      comp_obj_toc.misc.object_number_type    = 0; -      comp_obj_toc.attrib.indent_hang         = indent["hang_position"]; -      comp_obj_toc.attrib.indent_base         = indent["base_position"]; -      comp_obj_toc.attrib.bullet              = false; -      comp_obj_toc.text                       = "Table of Contents"; -      comp_obj_toc.has.inline_links           = true; -      the_table_of_contents_section["scroll"] ~= comp_obj_toc; +      comp_obj_toc                             = comp_obj_toc.init; +      comp_obj_toc.metainfo.is_of_part         = "frontmatter"; +      comp_obj_toc.metainfo.is_of_section      = "toc"; +      comp_obj_toc.metainfo.is_of_type         = "para"; +      comp_obj_toc.metainfo.is_a               = "toc"; +      comp_obj_toc.metainfo.ocn                = 0; +      comp_obj_toc.metainfo.object_number_off  = ""; +      comp_obj_toc.metainfo.object_number_type = 0; +      comp_obj_toc.attrib.indent_hang          = indent["hang_position"]; +      comp_obj_toc.attrib.indent_base          = indent["base_position"]; +      comp_obj_toc.attrib.bullet               = false; +      comp_obj_toc.text                        = "Table of Contents"; +      comp_obj_toc.has.inline_links            = true; +      the_table_of_contents_section["scroll"]  ~= comp_obj_toc;      }      comp_obj_toc                              = comp_obj_toc.init; -    comp_obj_toc.typeinfo.is_of_part          = "frontmatter"; -    comp_obj_toc.typeinfo.is_of_section       = "toc"; -    comp_obj_toc.typeinfo.is_of_type          = "para"; -    comp_obj_toc.typeinfo.is_a                = "toc"; -    comp_obj_toc.node.ocn                     = 0; -    comp_obj_toc.misc.object_number_off       = ""; -    comp_obj_toc.misc.object_number_type      = 0; +    comp_obj_toc.metainfo.is_of_part          = "frontmatter"; +    comp_obj_toc.metainfo.is_of_section       = "toc"; +    comp_obj_toc.metainfo.is_of_type          = "para"; +    comp_obj_toc.metainfo.is_a                = "toc"; +    comp_obj_toc.metainfo.ocn                 = 0; +    comp_obj_toc.metainfo.object_number_off   = ""; +    comp_obj_toc.metainfo.object_number_type  = 0;      comp_obj_toc.attrib.bullet                = false;      comp_obj_toc.has.inline_links             = true;      switch (obj_["lev_markup_number"].to!int) { @@ -6068,16 +6055,16 @@ struct ObjAttributes {        (oa_j.type == JSON_TYPE.OBJECT)      );      if (obj_is_ == "heading") { -      oa_j.object["object_number"] = _comp_obj_heading.node.ocn; -      oa_j.object["lev_markup_number"] = _comp_obj_heading.node.heading_lev_markup; -      oa_j.object["lev_collapsed_number"] = _comp_obj_heading.node.heading_lev_collapsed; +      oa_j.object["object_number"] = _comp_obj_heading.metainfo.ocn; +      oa_j.object["lev_markup_number"] = _comp_obj_heading.metainfo.heading_lev_markup; +      oa_j.object["lev_collapsed_number"] = _comp_obj_heading.metainfo.heading_lev_collapsed;        oa_j.object["heading_ptr"]          = _comp_obj_heading.ptr.heading;        oa_j.object["doc_object_ptr"]          = _comp_obj_heading.ptr.doc_object;      } -    oa_j.object["parent_object_number"] = _comp_obj_heading.node.parent_ocn; -    oa_j.object["parent_lev_markup_number"] = _comp_obj_heading.node.parent_lev_markup; +    oa_j.object["parent_object_number"] = _comp_obj_heading.metainfo.parent_ocn; +    oa_j.object["parent_lev_markup_number"] = _comp_obj_heading.metainfo.parent_lev_markup;      _obj_attrib = oa_j.toString();      return _obj_attrib;    } @@ -6290,44 +6277,42 @@ struct BookIndexReportSection {      && opt_action.section_bookindex)) {        string bi_tmp_seg, bi_tmp_scroll;        string[] bi_tmp_tags; -      comp_obj_heading_                            = comp_obj_heading_.init; -      comp_obj_heading_.typeinfo.is_of_part        = "backmatter"; -      comp_obj_heading_.typeinfo.is_of_section     = "bookindex"; -      comp_obj_heading_.typeinfo.is_of_type        = "para"; -      comp_obj_heading_.typeinfo.is_a              = "heading"; -      comp_obj_heading_.text                       = "Book Index"; -      comp_obj_heading_.node.ocn                   = 0; -      comp_obj_heading_.misc.object_number_off     = ""; -      comp_obj_heading_.misc.object_number_type    = 0; -      comp_obj_heading_.tags.segment_anchor_tag    = "_part_book_index"; -      comp_obj_heading_.node.marked_up_level       = "B"; -      comp_obj_heading_.node.heading_lev_markup    = 1; -      comp_obj_heading_.node.heading_lev_collapsed = 1; -      comp_obj_heading_.node.parent_ocn            = 1; -      comp_obj_heading_.node.parent_lev_markup     = 0; -      comp_obj_heading.has.inline_links            = true; -      bookindex_section["scroll"]                  ~= comp_obj_heading_; -      bookindex_section["seg"]                     ~= comp_obj_heading_; +      comp_obj_heading_                                = comp_obj_heading_.init; +      comp_obj_heading_.metainfo.is_of_part            = "backmatter"; +      comp_obj_heading_.metainfo.is_of_section         = "bookindex"; +      comp_obj_heading_.metainfo.is_of_type            = "para"; +      comp_obj_heading_.metainfo.is_a                  = "heading"; +      comp_obj_heading_.text                           = "Book Index"; +      comp_obj_heading_.metainfo.ocn                   = 0; +      comp_obj_heading_.metainfo.object_number_off     = ""; +      comp_obj_heading_.metainfo.object_number_type    = 0; +      comp_obj_heading_.tags.segment_anchor_tag        = "_part_book_index"; +      comp_obj_heading_.metainfo.heading_lev_markup    = 1; +      comp_obj_heading_.metainfo.heading_lev_collapsed = 1; +      comp_obj_heading_.metainfo.parent_ocn            = 1; +      comp_obj_heading_.metainfo.parent_lev_markup     = 0; +      comp_obj_heading.has.inline_links                = true; +      bookindex_section["scroll"]                      ~= comp_obj_heading_; +      bookindex_section["seg"]                         ~= comp_obj_heading_;        ++mkn; -      comp_obj_heading_                            = comp_obj_heading_.init; -      comp_obj_heading_.typeinfo.is_of_part        = "backmatter"; -      comp_obj_heading_.typeinfo.is_of_section     = "bookindex"; -      comp_obj_heading_.typeinfo.is_of_type        = "para"; -      comp_obj_heading_.typeinfo.is_a              = "heading"; -      comp_obj_heading_.text                       = "Index"; -      comp_obj_heading_.node.ocn                   = 0; -      comp_obj_heading_.misc.object_number_off     = ""; -      comp_obj_heading_.misc.object_number_type    = 0; -      comp_obj_heading_.tags.segment_anchor_tag    = "bookindex"; -      comp_obj_heading_.node.marked_up_level       = "1"; -      comp_obj_heading_.node.heading_lev_markup    = 4; -      comp_obj_heading_.node.heading_lev_collapsed = 2; -      comp_obj_heading_.node.parent_ocn            = 1; -      comp_obj_heading_.node.parent_lev_markup     = 0; -      comp_obj_heading.has.inline_links            = false; -      comp_obj_heading_.tags.anchor_tags           = ["bookindex"]; -      bookindex_section["scroll"]                  ~= comp_obj_heading_; -      bookindex_section["seg"]                     ~= comp_obj_heading_; +      comp_obj_heading_                                = comp_obj_heading_.init; +      comp_obj_heading_.metainfo.is_of_part            = "backmatter"; +      comp_obj_heading_.metainfo.is_of_section         = "bookindex"; +      comp_obj_heading_.metainfo.is_of_type            = "para"; +      comp_obj_heading_.metainfo.is_a                  = "heading"; +      comp_obj_heading_.text                           = "Index"; +      comp_obj_heading_.metainfo.ocn                   = 0; +      comp_obj_heading_.metainfo.object_number_off     = ""; +      comp_obj_heading_.metainfo.object_number_type    = 0; +      comp_obj_heading_.tags.segment_anchor_tag        = "bookindex"; +      comp_obj_heading_.metainfo.heading_lev_markup    = 4; +      comp_obj_heading_.metainfo.heading_lev_collapsed = 2; +      comp_obj_heading_.metainfo.parent_ocn            = 1; +      comp_obj_heading_.metainfo.parent_lev_markup     = 0; +      comp_obj_heading.has.inline_links                = false; +      comp_obj_heading_.tags.anchor_tags               = ["bookindex"]; +      bookindex_section["scroll"]                      ~= comp_obj_heading_; +      bookindex_section["seg"]                         ~= comp_obj_heading_;        ++mkn;        import std.array : appender;        auto buffer = appender!(char[])(); @@ -6384,40 +6369,39 @@ struct BookIndexReportSection {            bi_tmp_seg ~= " \\\\\n    ";            ++skn;          } -        bi_tmp_scroll                           = (bi_tmp_scroll).replaceFirst(rgx.trailing_linebreak, ""); -        bi_tmp_seg                              = (bi_tmp_seg).replaceFirst(rgx.trailing_linebreak, ""); -        comp_obj_para                           = comp_obj_para.init; -        comp_obj_para.typeinfo.is_of_part       = "backmatter"; -        comp_obj_para.typeinfo.is_of_section    = "bookindex"; -        comp_obj_para.typeinfo.is_of_type       = "para"; -        comp_obj_para.typeinfo.is_a             = "bookindex"; -        comp_obj_para.text                      = bi_tmp_scroll.to!string.strip; -        comp_obj_para.node.ocn                  = 0; -        comp_obj_para.misc.object_number_off    = ""; -        comp_obj_para.misc.object_number_type   = 0; -        comp_obj_para.tags.anchor_tags          = bi_tmp_tags; -        comp_obj_para.attrib.indent_hang        = 0; -        comp_obj_para.attrib.indent_base        = 1; -        comp_obj_para.attrib.bullet             = false; -        comp_obj_para.has.inline_links          = true; -        bookindex_section["scroll"]             ~= comp_obj_para; -        comp_obj_para.text                      = bi_tmp_seg.to!string.strip; -        bookindex_section["seg"]                ~= comp_obj_para; +        bi_tmp_scroll                             = (bi_tmp_scroll).replaceFirst(rgx.trailing_linebreak, ""); +        bi_tmp_seg                                = (bi_tmp_seg).replaceFirst(rgx.trailing_linebreak, ""); +        comp_obj_para                             = comp_obj_para.init; +        comp_obj_para.metainfo.is_of_part         = "backmatter"; +        comp_obj_para.metainfo.is_of_section      = "bookindex"; +        comp_obj_para.metainfo.is_of_type         = "para"; +        comp_obj_para.metainfo.is_a               = "bookindex"; +        comp_obj_para.text                        = bi_tmp_scroll.to!string.strip; +        comp_obj_para.metainfo.ocn                = 0; +        comp_obj_para.metainfo.object_number_off  = ""; +        comp_obj_para.metainfo.object_number_type = 0; +        comp_obj_para.tags.anchor_tags            = bi_tmp_tags; +        comp_obj_para.attrib.indent_hang          = 0; +        comp_obj_para.attrib.indent_base          = 1; +        comp_obj_para.attrib.bullet               = false; +        comp_obj_para.has.inline_links            = true; +        bookindex_section["scroll"]               ~= comp_obj_para; +        comp_obj_para.text                        = bi_tmp_seg.to!string.strip; +        bookindex_section["seg"]                  ~= comp_obj_para;          ++mkn;        }      } else {                              // no book index, (figure out what to do here) -      comp_obj_heading_                            = comp_obj_heading_.init; -      comp_obj_heading_.text                       = "(skip) there is no Book Index"; -      comp_obj_heading_.node.ocn                   = 0; -      comp_obj_heading_.misc.object_number_off     = ""; -      comp_obj_heading_.misc.object_number_type    = 0; -      comp_obj_heading_.node.marked_up_level       = "B"; -      comp_obj_heading_.node.heading_lev_markup    = 1; -      comp_obj_heading_.node.heading_lev_collapsed = 1; -      comp_obj_heading_.node.parent_ocn            = 1; -      comp_obj_heading_.node.parent_lev_markup     = 0; -      bookindex_section["scroll"]                  ~= comp_obj_heading_; -      bookindex_section["seg"]                     ~= comp_obj_heading_; +      comp_obj_heading_                                = comp_obj_heading_.init; +      comp_obj_heading_.text                           = "(skip) there is no Book Index"; +      comp_obj_heading_.metainfo.ocn                   = 0; +      comp_obj_heading_.metainfo.object_number_off     = ""; +      comp_obj_heading_.metainfo.object_number_type    = 0; +      comp_obj_heading_.metainfo.heading_lev_markup    = 1; +      comp_obj_heading_.metainfo.heading_lev_collapsed = 1; +      comp_obj_heading_.metainfo.parent_ocn            = 1; +      comp_obj_heading_.metainfo.parent_lev_markup     = 0; +      bookindex_section["scroll"]                      ~= comp_obj_heading_; +      bookindex_section["seg"]                         ~= comp_obj_heading_;      }      auto t = tuple(bookindex_section, obj_cite_digits);      return t; @@ -6452,12 +6436,12 @@ struct NotesSection {      int                   cntr,    )    in { -    assert((contents_am[cntr].typeinfo.is_a == "para") -    || (contents_am[cntr].typeinfo.is_a == "heading") -    || (contents_am[cntr].typeinfo.is_a == "quote") -    || (contents_am[cntr].typeinfo.is_a == "group") -    || (contents_am[cntr].typeinfo.is_a == "block") -    || (contents_am[cntr].typeinfo.is_a == "verse")); +    assert((contents_am[cntr].metainfo.is_a == "para") +    || (contents_am[cntr].metainfo.is_a == "heading") +    || (contents_am[cntr].metainfo.is_a == "quote") +    || (contents_am[cntr].metainfo.is_a == "group") +    || (contents_am[cntr].metainfo.is_a == "block") +    || (contents_am[cntr].metainfo.is_a == "verse"));      assert(cntr >= previous_count);      previous_count=cntr;      assert( @@ -6545,79 +6529,76 @@ struct NotesSection {      ObjGenericComposite comp_obj_heading_;      if ((endnotes_["notes"].length > 0)      && (opt_action.backmatter && opt_action.section_endnotes)) { -      comp_obj_heading_                            = comp_obj_heading_.init; -      comp_obj_heading_.typeinfo.is_of_part        = "backmatter"; -      comp_obj_heading_.typeinfo.is_of_section     = "endnotes"; -      comp_obj_heading_.typeinfo.is_of_type        = "para"; -      comp_obj_heading_.typeinfo.is_a              = "heading"; -      comp_obj_heading_.text                       = "Endnotes"; -      comp_obj_heading_.node.ocn                   = 0; -      comp_obj_heading_.misc.object_number_off     = ""; -      comp_obj_heading_.misc.object_number_type    = 0; -      comp_obj_heading_.tags.segment_anchor_tag    = "_part_endnotes"; -      comp_obj_heading_.node.marked_up_level       = "B"; -      comp_obj_heading_.node.heading_lev_markup    = 1; -      comp_obj_heading_.node.heading_lev_collapsed = 1; -      comp_obj_heading_.node.parent_ocn            = 1; -      comp_obj_heading_.node.parent_lev_markup     = 0; -      the_endnotes_section                         ~= comp_obj_heading_; +      comp_obj_heading_                                = comp_obj_heading_.init; +      comp_obj_heading_.metainfo.is_of_part            = "backmatter"; +      comp_obj_heading_.metainfo.is_of_section         = "endnotes"; +      comp_obj_heading_.metainfo.is_of_type            = "para"; +      comp_obj_heading_.metainfo.is_a                  = "heading"; +      comp_obj_heading_.text                           = "Endnotes"; +      comp_obj_heading_.metainfo.ocn                   = 0; +      comp_obj_heading_.metainfo.object_number_off     = ""; +      comp_obj_heading_.metainfo.object_number_type    = 0; +      comp_obj_heading_.tags.segment_anchor_tag        = "_part_endnotes"; +      comp_obj_heading_.metainfo.heading_lev_markup    = 1; +      comp_obj_heading_.metainfo.heading_lev_collapsed = 1; +      comp_obj_heading_.metainfo.parent_ocn            = 1; +      comp_obj_heading_.metainfo.parent_lev_markup     = 0; +      the_endnotes_section                             ~= comp_obj_heading_;        ++mkn; -      comp_obj_heading_                            = comp_obj_heading_.init; -      comp_obj_heading_.typeinfo.is_of_part        = "backmatter"; -      comp_obj_heading_.typeinfo.is_of_section     = "endnotes"; -      comp_obj_heading_.typeinfo.is_of_type        = "para"; -      comp_obj_heading_.typeinfo.is_a              = "heading"; -      comp_obj_heading_.text                       = "Endnotes"; -      comp_obj_heading_.node.ocn                   = 0; -      comp_obj_heading_.misc.object_number_off     = ""; -      comp_obj_heading_.misc.object_number_type    = 0; -      comp_obj_heading_.tags.segment_anchor_tag    = "endnotes"; -      comp_obj_heading_.node.marked_up_level       = "1"; -      comp_obj_heading_.node.heading_lev_markup    = 4; -      comp_obj_heading_.node.heading_lev_collapsed = 2; -      comp_obj_heading_.node.parent_ocn            = 1; -      comp_obj_heading_.node.parent_lev_markup     = 0; -      comp_obj_heading_.tags.anchor_tags           = ["endnotes"]; -      the_endnotes_section                         ~= comp_obj_heading_; +      comp_obj_heading_                                = comp_obj_heading_.init; +      comp_obj_heading_.metainfo.is_of_part            = "backmatter"; +      comp_obj_heading_.metainfo.is_of_section         = "endnotes"; +      comp_obj_heading_.metainfo.is_of_type            = "para"; +      comp_obj_heading_.metainfo.is_a                  = "heading"; +      comp_obj_heading_.text                           = "Endnotes"; +      comp_obj_heading_.metainfo.ocn                   = 0; +      comp_obj_heading_.metainfo.object_number_off     = ""; +      comp_obj_heading_.metainfo.object_number_type    = 0; +      comp_obj_heading_.tags.segment_anchor_tag        = "endnotes"; +      comp_obj_heading_.metainfo.heading_lev_markup    = 4; +      comp_obj_heading_.metainfo.heading_lev_collapsed = 2; +      comp_obj_heading_.metainfo.parent_ocn            = 1; +      comp_obj_heading_.metainfo.parent_lev_markup     = 0; +      comp_obj_heading_.tags.anchor_tags               = ["endnotes"]; +      the_endnotes_section                             ~= comp_obj_heading_;        ++mkn;      } else { -      comp_obj_heading_                            = comp_obj_heading_.init; -      comp_obj_heading_.typeinfo.is_of_part        = "empty"; -      comp_obj_heading_.typeinfo.is_of_section     = "empty"; -      comp_obj_heading_.typeinfo.is_of_type        = "para"; -      comp_obj_heading_.typeinfo.is_a              = "heading"; -      comp_obj_heading_.text                       = "(skip) there are no Endnotes"; -      comp_obj_heading_.node.ocn                   = 0; -      comp_obj_heading_.misc.object_number_off     = ""; -      comp_obj_heading_.misc.object_number_type    = 0; -      comp_obj_heading_.node.marked_up_level       = "B"; -      comp_obj_heading_.node.heading_lev_markup    = 1; -      comp_obj_heading_.node.heading_lev_collapsed = 1; -      comp_obj_heading_.node.parent_ocn            = 1; -      comp_obj_heading_.node.parent_lev_markup     = 0; -      the_endnotes_section                         ~= comp_obj_heading_; +      comp_obj_heading_                                = comp_obj_heading_.init; +      comp_obj_heading_.metainfo.is_of_part            = "empty"; +      comp_obj_heading_.metainfo.is_of_section         = "empty"; +      comp_obj_heading_.metainfo.is_of_type            = "para"; +      comp_obj_heading_.metainfo.is_a                  = "heading"; +      comp_obj_heading_.text                           = "(skip) there are no Endnotes"; +      comp_obj_heading_.metainfo.ocn                   = 0; +      comp_obj_heading_.metainfo.object_number_off     = ""; +      comp_obj_heading_.metainfo.object_number_type    = 0; +      comp_obj_heading_.metainfo.heading_lev_markup    = 1; +      comp_obj_heading_.metainfo.heading_lev_collapsed = 1; +      comp_obj_heading_.metainfo.parent_ocn            = 1; +      comp_obj_heading_.metainfo.parent_lev_markup     = 0; +      the_endnotes_section                             ~= comp_obj_heading_;      }      if (opt_action.backmatter && opt_action.section_endnotes) {        ObjGenericComposite comp_obj_endnote_; -      comp_obj_endnote_                            = comp_obj_endnote_.init; -      comp_obj_endnote_.typeinfo.is_of_part        = "backmatter"; -      comp_obj_endnote_.typeinfo.is_of_section     = "endnote"; -      comp_obj_endnote_.typeinfo.is_of_type        = "para"; -      comp_obj_endnote_.typeinfo.is_a              = "endnote"; -      comp_obj_endnote_.node.ocn                   = 0; -      comp_obj_heading_.misc.object_number_off     = ""; -      comp_obj_heading_.misc.object_number_type    = 0; -      comp_obj_endnote_.attrib.indent_hang         = 0; -      comp_obj_endnote_.attrib.indent_base         = 0; -      comp_obj_endnote_.attrib.bullet              = false; +      comp_obj_endnote_                                = comp_obj_endnote_.init; +      comp_obj_endnote_.metainfo.is_of_part            = "backmatter"; +      comp_obj_endnote_.metainfo.is_of_section         = "endnote"; +      comp_obj_endnote_.metainfo.is_of_type            = "para"; +      comp_obj_endnote_.metainfo.is_a                  = "endnote"; +      comp_obj_endnote_.metainfo.ocn                   = 0; +      comp_obj_heading_.metainfo.object_number_off     = ""; +      comp_obj_heading_.metainfo.object_number_type    = 0; +      comp_obj_endnote_.attrib.indent_hang             = 0; +      comp_obj_endnote_.attrib.indent_base             = 0; +      comp_obj_endnote_.attrib.bullet                  = false;        foreach (i, endnote; endnotes_["notes"]) { -        auto     m                            = endnote.matchFirst(rgx.note_ref); -        string   notenumber                   = m.captures[1].to!string; -        string   anchor_tag                   = "note_" ~ notenumber; -        comp_obj_endnote_.tags.anchor_tags    = [ endnotes_["anchor"][i] ]; -        comp_obj_endnote_.has.inline_links    = true; -        comp_obj_endnote_.text                = endnote.strip; -        the_endnotes_section                  ~= comp_obj_endnote_; +        auto     m                                     = endnote.matchFirst(rgx.note_ref); +        string   notenumber                            = m.captures[1].to!string; +        string   anchor_tag                            = "note_" ~ notenumber; +        comp_obj_endnote_.tags.anchor_tags             = [ endnotes_["anchor"][i] ]; +        comp_obj_endnote_.has.inline_links             = true; +        comp_obj_endnote_.text                         = endnote.strip; +        the_endnotes_section                           ~= comp_obj_endnote_;        }      }      auto t = tuple(the_endnotes_section, obj_cite_digits); @@ -6821,12 +6802,12 @@ struct NodeStructureMetadata {        p_["object_number"] = lv4;      }      ObjGenericComposite comp_obj_location; -    comp_obj_location                         = comp_obj_location.init; -    comp_obj_location.typeinfo.is_a           = is_; -    comp_obj_location.node.ocn                = obj_cite_digits.on; -    comp_obj_location.tags.segment_anchor_tag = segment_anchor_tag.to!string; -    comp_obj_location.node.parent_ocn         = p_["object_number"]; -    comp_obj_location.node.parent_lev_markup  = p_["lev_markup_number"]; +    comp_obj_location                             = comp_obj_location.init; +    comp_obj_location.metainfo.is_a               = is_; +    comp_obj_location.metainfo.ocn                = obj_cite_digits.on; +    comp_obj_location.tags.segment_anchor_tag     = segment_anchor_tag.to!string; +    comp_obj_location.metainfo.parent_ocn         = p_["object_number"]; +    comp_obj_location.metainfo.parent_lev_markup  = p_["lev_markup_number"];      debug(node) {        if (lev_markup_number.match(rgx.levels_numbered_headings)) {          writeln("x ", _node.to!string); @@ -6834,9 +6815,9 @@ struct NodeStructureMetadata {          writeln("- ", _node.to!string);        }      } -    assert(comp_obj_location.node.parent_lev_markup >= 4); -    assert(comp_obj_location.node.parent_lev_markup <= 7); -    assert(comp_obj_location.node.parent_ocn >= 0); +    assert(comp_obj_location.metainfo.parent_lev_markup >= 4); +    assert(comp_obj_location.metainfo.parent_lev_markup <= 7); +    assert(comp_obj_location.metainfo.parent_ocn >= 0);      return comp_obj_location;    }    invariant() { @@ -6847,9 +6828,8 @@ struct NodeStructureMetadata {  #+name: meta_emitters_metadata  #+BEGIN_SRC d -  ObjGenericComposite node_emitter_heading(T,L,Lm,Lc,Ta,N,C,P,LA,I,PSn,fNr,fNs,fL)( +  ObjGenericComposite node_emitter_heading(T,Lm,Lc,Ta,N,C,P,LA,I,PSn,fNr,fNs,fL)(      T   _text, -    L   lev,      Lm  lev_markup_number,      Lc  lev_collapsed_number,      Ta  segment_anchor_tag, @@ -6979,20 +6959,19 @@ struct NodeStructureMetadata {      }      ObjGenericComposite _comp_obj_heading_;      _comp_obj_heading_                                  = _comp_obj_heading_.init; -    _comp_obj_heading_.typeinfo.is_of_part              = "body"; -    _comp_obj_heading_.typeinfo.is_of_section           = "body"; -    _comp_obj_heading_.typeinfo.is_of_type              = "para"; -    _comp_obj_heading_.typeinfo.is_a                    = "heading"; +    _comp_obj_heading_.metainfo.is_of_part              = "body"; +    _comp_obj_heading_.metainfo.is_of_section           = "body"; +    _comp_obj_heading_.metainfo.is_of_type              = "para"; +    _comp_obj_heading_.metainfo.is_a                    = "heading";      _comp_obj_heading_.text                             = _text.to!string.strip; -    _comp_obj_heading_.node.ocn                         = obj_cite_digits.on; -    _comp_obj_heading_.misc.object_number_off           = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; -    _comp_obj_heading_.misc.object_number_type          = obj_cite_digits.type; +    _comp_obj_heading_.metainfo.ocn                     = obj_cite_digits.on; +    _comp_obj_heading_.metainfo.object_number_off       = (obj_cite_digits.off==0)   ? "" : obj_cite_digits.off.to!string; +    _comp_obj_heading_.metainfo.object_number_type      = obj_cite_digits.type;      _comp_obj_heading_.tags.segment_anchor_tag          = segment_anchor_tag.to!string; -    _comp_obj_heading_.node.marked_up_level             = lev; -    _comp_obj_heading_.node.heading_lev_markup          = (!(lev_markup_number.empty) ? lev_markup_number.to!int : 0); -    _comp_obj_heading_.node.heading_lev_collapsed       = (!(lev_collapsed_number.empty) ? lev_collapsed_number.to!int : 0); -    _comp_obj_heading_.node.parent_ocn                  = p_["object_number"]; -    _comp_obj_heading_.node.parent_lev_markup           = p_["lev_markup_number"]; +    _comp_obj_heading_.metainfo.heading_lev_markup      = (!(lev_markup_number.empty) ? lev_markup_number.to!int : 0); +    _comp_obj_heading_.metainfo.heading_lev_collapsed   = (!(lev_collapsed_number.empty) ? lev_collapsed_number.to!int : 0); +    _comp_obj_heading_.metainfo.parent_ocn              = p_["object_number"]; +    _comp_obj_heading_.metainfo.parent_lev_markup       = p_["lev_markup_number"];      _comp_obj_heading_.tags.heading_ancestors_text      = lv_ancestors_txt;      _comp_obj_heading_.ptr.doc_object                   = cntr_;      _comp_obj_heading_.ptr.html_segnames                = ((lev_markup_number == "4") ? html_segnames_ptr : 0); @@ -7010,34 +6989,34 @@ struct NodeStructureMetadata {          writeln("* ", _node.to!string);        }      } -    assert(_comp_obj_heading_.node.parent_lev_markup <= 7); -    assert(_comp_obj_heading_.node.parent_ocn >= 0); +    assert(_comp_obj_heading_.metainfo.parent_lev_markup <= 7); +    assert(_comp_obj_heading_.metainfo.parent_ocn >= 0);      if (lev_markup_number.match(rgx.levels_numbered_headings)) { -      assert(_comp_obj_heading_.node.heading_lev_markup <= 7); -      assert(_comp_obj_heading_.node.ocn >= 0); -      if (_comp_obj_heading_.node.parent_lev_markup > 0) { -        assert(_comp_obj_heading_.node.parent_lev_markup < _comp_obj_heading_.node.heading_lev_markup); -        if (_comp_obj_heading_.node.ocn != 0) { -          assert(_comp_obj_heading_.node.parent_ocn < _comp_obj_heading_.node.ocn); +      assert(_comp_obj_heading_.metainfo.heading_lev_markup <= 7); +      assert(_comp_obj_heading_.metainfo.ocn >= 0); +      if (_comp_obj_heading_.metainfo.parent_lev_markup > 0) { +        assert(_comp_obj_heading_.metainfo.parent_lev_markup < _comp_obj_heading_.metainfo.heading_lev_markup); +        if (_comp_obj_heading_.metainfo.ocn != 0) { +          assert(_comp_obj_heading_.metainfo.parent_ocn < _comp_obj_heading_.metainfo.ocn);          }        } -      if (_comp_obj_heading_.node.heading_lev_markup == 0) { -        assert(_comp_obj_heading_.node.parent_lev_markup == DocStructMarkupHeading.h_sect_A); -      } else if  (_comp_obj_heading_.node.heading_lev_markup == DocStructMarkupHeading.h_sect_B) { -        assert(_comp_obj_heading_.node.parent_lev_markup == DocStructMarkupHeading.h_sect_A); -      } else if  (_comp_obj_heading_.node.heading_lev_markup == DocStructMarkupHeading.h_sect_C) { -        assert(_comp_obj_heading_.node.parent_lev_markup == DocStructMarkupHeading.h_sect_B); -      } else if  (_comp_obj_heading_.node.heading_lev_markup == DocStructMarkupHeading.h_sect_D) { -        assert(_comp_obj_heading_.node.parent_lev_markup == DocStructMarkupHeading.h_sect_C); -      } else if  (_comp_obj_heading_.node.heading_lev_markup == DocStructMarkupHeading.h_text_1) { -        assert(_comp_obj_heading_.node.parent_lev_markup <= DocStructMarkupHeading.h_sect_D); -      } else if  (_comp_obj_heading_.node.heading_lev_markup == DocStructMarkupHeading.h_text_2) { -        assert(_comp_obj_heading_.node.parent_lev_markup == DocStructMarkupHeading.h_text_1); -      } else if  (_comp_obj_heading_.node.heading_lev_markup == DocStructMarkupHeading.h_text_3) { -        assert(_comp_obj_heading_.node.parent_lev_markup == DocStructMarkupHeading.h_text_2); -      } else if  (_comp_obj_heading_.node.heading_lev_markup == DocStructMarkupHeading.h_text_4) { -        assert(_comp_obj_heading_.node.parent_lev_markup == DocStructMarkupHeading.h_text_3); -      } else if  (_comp_obj_heading_.node.heading_lev_markup == DocStructMarkupHeading.h_text_5) { +      if (_comp_obj_heading_.metainfo.heading_lev_markup == 0) { +        assert(_comp_obj_heading_.metainfo.parent_lev_markup == DocStructMarkupHeading.h_sect_A); +      } else if  (_comp_obj_heading_.metainfo.heading_lev_markup == DocStructMarkupHeading.h_sect_B) { +        assert(_comp_obj_heading_.metainfo.parent_lev_markup == DocStructMarkupHeading.h_sect_A); +      } else if  (_comp_obj_heading_.metainfo.heading_lev_markup == DocStructMarkupHeading.h_sect_C) { +        assert(_comp_obj_heading_.metainfo.parent_lev_markup == DocStructMarkupHeading.h_sect_B); +      } else if  (_comp_obj_heading_.metainfo.heading_lev_markup == DocStructMarkupHeading.h_sect_D) { +        assert(_comp_obj_heading_.metainfo.parent_lev_markup == DocStructMarkupHeading.h_sect_C); +      } else if  (_comp_obj_heading_.metainfo.heading_lev_markup == DocStructMarkupHeading.h_text_1) { +        assert(_comp_obj_heading_.metainfo.parent_lev_markup <= DocStructMarkupHeading.h_sect_D); +      } else if  (_comp_obj_heading_.metainfo.heading_lev_markup == DocStructMarkupHeading.h_text_2) { +        assert(_comp_obj_heading_.metainfo.parent_lev_markup == DocStructMarkupHeading.h_text_1); +      } else if  (_comp_obj_heading_.metainfo.heading_lev_markup == DocStructMarkupHeading.h_text_3) { +        assert(_comp_obj_heading_.metainfo.parent_lev_markup == DocStructMarkupHeading.h_text_2); +      } else if  (_comp_obj_heading_.metainfo.heading_lev_markup == DocStructMarkupHeading.h_text_4) { +        assert(_comp_obj_heading_.metainfo.parent_lev_markup == DocStructMarkupHeading.h_text_3); +      } else if  (_comp_obj_heading_.metainfo.heading_lev_markup == DocStructMarkupHeading.h_text_5) {        }      }      return _comp_obj_heading_; @@ -7330,7 +7309,7 @@ struct HeadingAttrib {  #+name: meta_structs_init  #+BEGIN_SRC d -struct DocObj_TypeInfo_ {                                   // typeinfo +struct DocObj_MetaInfo_ {                                   // metainfo    string                 is_of_part                         = ""; // frontmatter, body, backmatter    string                 is_of_section                      = ""; // toc, body, glossary, biography, book index, blurb    string                 is_of_type                         = ""; // para, block ? @@ -7338,63 +7317,7 @@ struct DocObj_TypeInfo_ {                                   // typeinfo    alias                  of_part                            = is_of_part;    alias                  of_section                         = is_of_section;    alias                  is_of                              = is_of_type; -} -struct DocObj_TxtAttrib_ {                                  // attrib -  int                    indent_base                        = 0; -  int                    indent_hang                        = 0; -  bool                   bullet                             = false; -  string                 language                           = ""; // not implemented, consider -} -struct DocObj_Has_ {                                        // has -  bool                   inline_links                       = false; -  bool                   inline_notes_reg                   = false; -  bool                   inline_notes_star                  = false; -  bool                   contains_image_without_dimensions  = false; -} -struct DocObj_Node_ {                                       // node -  enum ONtype { none, substantive, non_substantive, glossary, bibliography, book_index, blurb, comment } -  string[string][string] node; -  int                    ocn                                = 0; -  string object_number() const @property { -    return (ocn==0) -      ? "" -      : ocn.to!string; -  } -  int                    o_n_type                           = 0; -  string                 marked_up_level                    = "9"; -  int                    heading_lev_markup                 = 9; -  int                    heading_lev_collapsed              = 9; -  int[]                  dom_markedup                       = [ 0, 0, 0, 0, 0, 0, 0, 0,]; -  int[]                  dom_collapsed                      = [ 0, 0, 0, 0, 0, 0, 0, 0,]; -  int[]                  heading_ancestors                  = [ 0, 0, 0, 0, 0, 0, 0, 0,]; -  int                    parent_lev_markup                  = 0; -  int                    parent_ocn                         = 0; -  int[]                  ancestors                          = []; -} -struct DocObj_Table_ {                                      // table -  int                    number_of_columns                  = 0; -  double[]               column_widths                      = []; -  string[]               column_aligns                      = []; -  bool                   heading                            = false; -  bool                   walls                              = false; // not implemented -} -struct DocObj_CodeBlock_ {                                  // code_block -  string                 syntax                             = ""; -} -struct DocObj_Pointer_ {                                    // ptr -  int                    doc_object                         = 0; -  int                    html_segnames                      = 0; -  int                    heading                            = 0; -} -struct DocObj_Tags_ {                                       // tags -  string[]               heading_ancestors_text             = [ "", "", "", "", "", "", "", "", ]; -  string                 segment_anchor_tag                 = ""; -  string                 segname_prev                       = ""; -  string                 segname_next                       = ""; -  string[]               lev4_subtoc                        = []; -  string[]               anchor_tags                        = []; -} -struct DocObj_Misc_ {                                       // misc +  /+ o_n +/    int                    o_n_substantive                    = 0;    int                    o_n_non_substantive                = 0;    int                    o_n_glossary                       = 0; @@ -7433,19 +7356,103 @@ struct DocObj_Misc_ {                                       // misc    }    string                 object_number_off                  = "";    bool                   visible_object_number              = false; +  // enum ONtype { none, substantive, non_substantive, glossary, bibliography, book_index, blurb, comment }    int                    object_number_type                 = 0; // { ocn, non, bkidx } +  /+ node +/ +  string[string][string] node; +  int                    ocn                                = 0; +  string object_number() const @property { +    return (ocn==0) +      ? "" +      : ocn.to!string; +  } +  int                    o_n_type                           = 0; +  int                    heading_lev_markup                 = 9; +  int                    heading_lev_collapsed              = 9; +  string marked_up_level() const @property { +    string _out; +    switch (heading_lev_markup) { +    case 0: +      _out = "A"; +      break; +    case 1: +      _out = "B"; +      break; +    case 2: +      _out = "C"; +      break; +    case 3: +      _out = "D"; +      break; +    case 4: +      _out = "1"; +      break; +    case 5: +      _out = "2"; +      break; +    case 6: +      _out = "3"; +      break; +    case 7: +      _out = "4"; +      break; +    default: +      _out = ""; +      break; +    } +    return _out; +  } +  int[]                  dom_markedup                       = [ 0, 0, 0, 0, 0, 0, 0, 0,]; +  int[]                  dom_collapsed                      = [ 0, 0, 0, 0, 0, 0, 0, 0,]; +  int[]                  heading_ancestors                  = [ 0, 0, 0, 0, 0, 0, 0, 0,]; +  int                    parent_lev_markup                  = 0; +  int                    parent_ocn                         = 0; +  int[]                  ancestors                          = []; +} +struct DocObj_TxtAttrib_ {                                  // attrib +  int                    indent_base                        = 0; +  int                    indent_hang                        = 0; +  bool                   bullet                             = false; +  string                 language                           = ""; // not implemented, consider +} +struct DocObj_Has_ {                                        // has +  bool                   inline_links                       = false; +  bool                   inline_notes_reg                   = false; +  bool                   inline_notes_star                  = false; +  bool                   contains_image_without_dimensions  = false; +} +struct DocObj_Table_ {                                      // table +  int                    number_of_columns                  = 0; +  double[]               column_widths                      = []; +  string[]               column_aligns                      = []; +  bool                   heading                            = false; +  bool                   walls                              = false; // not implemented +} +struct DocObj_CodeBlock_ {                                  // code_block +  string                 syntax                             = ""; +} +struct DocObj_Pointer_ {                                    // ptr +  int                    doc_object                         = 0; +  int                    html_segnames                      = 0; +  int                    heading                            = 0; +} +struct DocObj_Tags_ {                                       // tags +  string[]               heading_ancestors_text             = [ "", "", "", "", "", "", "", "", ]; +  string                 segment_anchor_tag                 = ""; +  string                 segname_prev                       = ""; +  string                 segname_next                       = ""; +  string[]               lev4_subtoc                        = []; +  string[]               anchor_tags                        = [];  }  struct ObjGenericComposite {    string                 text                               = ""; -  DocObj_TypeInfo_       typeinfo; +  DocObj_MetaInfo_       metainfo;    DocObj_TxtAttrib_      attrib;    DocObj_Tags_           tags;    DocObj_Has_            has;    DocObj_Table_          table;    DocObj_CodeBlock_      code_block; -  DocObj_Misc_           misc;    DocObj_Pointer_        ptr; -  DocObj_Node_           node;  }  #+END_SRC diff --git a/org/meta_debugs.org b/org/meta_debugs.org index 7789f06..b89b4ea 100644 --- a/org/meta_debugs.org +++ b/org/meta_debugs.org @@ -89,8 +89,8 @@ debug(parent) {    );    foreach (key; doc_matters.xml.keys_seq.seg) {      foreach (obj; contents[key]) { -      if (obj.typeinfo.is_of_part != "empty") { -        if (obj.typeinfo.is_a == "heading") { +      if (obj.metainfo.is_of_part != "empty") { +        if (obj.metainfo.is_a == "heading") {            writefln(              "%s node: %s heading: %s %s",              obj.object_number, @@ -117,11 +117,11 @@ debug(dumpdoc) {    );    if (key.length > 0) {      foreach (obj; contents[key]) { -      if (obj.typeinfo.is_of_part != "empty") { +      if (obj.metainfo.is_of_part != "empty") {          writefln(            "[%s][%s]\n%s",            obj.object_number, -          obj.typeinfo.is_a, +          obj.metainfo.is_a,            obj.text          );        } @@ -190,7 +190,7 @@ debug(checkdoc) {        foreach (obj; contents[key]) {          writefln(            "[%s]\n%s", -          obj.typeinfo.is_a, +          obj.metainfo.is_a,            obj.text          );        } @@ -213,7 +213,7 @@ debug(checkdoc) {          writefln(            "[%s][%s]\n%s",            obj.object_number, -          obj.typeinfo.is_a, +          obj.metainfo.is_a,            obj.text          );        } @@ -234,7 +234,7 @@ debug(section_head) {        writefln(          "[%s][%s]\n%s",          obj.object_number, -        obj.typeinfo.is_a, +        obj.metainfo.is_a,          obj.text        );      } @@ -292,7 +292,7 @@ debug(section_body) {        writefln(          "[%s][%s]\n%s",          obj.object_number, -        obj.typeinfo.is_a, +        obj.metainfo.is_a,          obj.text        );      } @@ -308,7 +308,7 @@ debug(toc_nav_dom) {    enum DomTags { none, open, close, close_and_open, open_still, }    foreach (sect; doc_matters.xml.keys_seq.seg) {      foreach (obj; contents[sect]) { -      if (obj.typeinfo.is_a == "heading") { +      if (obj.metainfo.is_a == "heading") {          foreach_reverse (k; 0 .. 7) {            switch (obj.dom_markedup[k]) {            case DomTags.close : @@ -335,7 +335,7 @@ debug(toc_nav_dom) {    writeln("--------------------");    foreach (sect; doc_matters.xml.keys_seq.seg) {      foreach (obj; contents[sect]) { -      if (obj.typeinfo.is_a == "heading") { +      if (obj.metainfo.is_a == "heading") {          foreach_reverse (k; 0 .. 7) {            switch (obj.dom_collapsed[k]) {            case DomTags.close : @@ -394,7 +394,7 @@ debug(section_glossary) {        writefln(          "[%s][%s]\n%s",          obj.object_number, -        obj.typeinfo.is_a, +        obj.metainfo.is_a,          obj.text        );      } @@ -413,7 +413,7 @@ debug(section_bibliography) {        writefln(          "[%s][%s]\n%s",          obj.object_number, -        obj.typeinfo.is_a, +        obj.metainfo.is_a,          obj.text        );      } @@ -463,7 +463,7 @@ debug(blurb_section) {        writefln(          "[%s][%s]\n%s",          obj.object_number, -        obj.typeinfo.is_a, +        obj.metainfo.is_a,          obj.text        );      } @@ -482,11 +482,11 @@ debug(objects) {      __LINE__,    );    foreach (obj; contents[key]) { -    if (obj.typeinfo.is_of_part != "empty") { +    if (obj.metainfo.is_of_part != "empty") {        writefln(          "* [%s][%s] %s",          obj.object_number, -        obj.typeinfo.is_a, +        obj.metainfo.is_a,          obj.text        );      } @@ -666,7 +666,7 @@ debug(anchor) {    );    foreach (k; doc_matters.xml.keys_seq.seg) {      foreach (obj; contents[k]) { -      if (obj.typeinfo.is_a == "heading") { +      if (obj.metainfo.is_a == "heading") {          writefln(            "%s~ [%s] %s %s",            obj.marked_up_level, @@ -688,7 +688,7 @@ debug(anchor) {  debug(heading) {                         // heading    foreach (k; doc_matters.xml.keys_seq.seg) {      foreach (o; contents[k]) { -      if (o.typeinfo.is_a == "heading") { +      if (o.metainfo.is_a == "heading") {          writefln(            "%s* %s\n                (markup level: %s; collapsed level: %s)",            replicate("  ", o.heading_lev_markup), @@ -714,7 +714,7 @@ debug(headings) {    );    foreach (k; doc_matters.xml.keys_seq.seg) {      foreach (obj; contents[k]) { -      if (obj.typeinfo.is_a == "heading") { +      if (obj.metainfo.is_a == "heading") {          writefln(            "%s~ [%s] %s",            obj.marked_up_level, diff --git a/org/output_sqlite.org b/org/output_sqlite.org index 376d042..45f8303 100644 --- a/org/output_sqlite.org +++ b/org/output_sqlite.org @@ -446,7 +446,7 @@ auto html_heading(O)(    string o = format(q"¶<p class="%s"><b>        %s      </b></p>¶", -      obj.typeinfo.is_a, +      obj.metainfo.is_a,        _txt,      );    return o; @@ -465,10 +465,10 @@ auto html_heading(O)(    o = format(q"¶<h%s class="%s">        %s      </h%s>¶", -      obj.node.heading_lev_markup, -      obj.typeinfo.is_a, +      obj.metainfo.heading_lev_markup, +      obj.metainfo.is_a,        _txt, -      obj.node.heading_lev_markup, +      obj.metainfo.heading_lev_markup,      );    return o;  } @@ -486,7 +486,7 @@ auto html_para(O)(    string o = format(q"¶<p class="%s" indent="h%si%s">      %s    </p>¶", -      obj.typeinfo.is_a, +      obj.metainfo.is_a,        obj.attrib.indent_hang,        obj.attrib.indent_base,        _txt @@ -506,7 +506,7 @@ auto html_quote(O)(    string o = format(q"¶<p class="%s">      %s    </p>¶", -      obj.typeinfo.is_a, +      obj.metainfo.is_a,        _txt      );    return o; @@ -524,7 +524,7 @@ auto html_group(O)(    string o = format(q"¶<p class="%s">      %s    </p>¶", -      obj.typeinfo.is_a, +      obj.metainfo.is_a,        _txt      );    return o; @@ -541,7 +541,7 @@ auto html_block(O)(    string _txt = munge_html(obj);    string o = format(q"¶    <p class="%s">%s</p>¶", -      obj.typeinfo.is_a, +      obj.metainfo.is_a,        _txt.stripRight      );    return o; @@ -557,7 +557,7 @@ auto html_verse(O)(  ) {    string _txt = munge_html(obj);    string o = format(q"¶<p class="%s">%s</p>¶", -      obj.typeinfo.is_a, +      obj.metainfo.is_a,        _txt      );    return o; @@ -573,7 +573,7 @@ auto html_code(O)(  ) {    string _txt = html_special_characters_code(obj.text);    string o = format(q"¶<p class="%s">%s</p>¶", -      obj.typeinfo.is_a, +      obj.metainfo.is_a,        _txt      );    return o; @@ -638,7 +638,7 @@ auto html_table(O)(      </table>      %s    </p>¶", -    obj.typeinfo.is_a, +    obj.metainfo.is_a,      _txt,      _note    ); @@ -935,32 +935,32 @@ string doc_text;  string[] _insert_doc_objects;  foreach (part; doc_matters.xml.keys_seq.sql) {    foreach (obj; doc_abstraction[part]) { -    switch (obj.typeinfo.is_of_part) { +    switch (obj.metainfo.is_of_part) {      case "frontmatter":              assert(part == "head", part); -      switch (obj.typeinfo.is_of_type) { +      switch (obj.metainfo.is_of_type) {        case "para": -        switch (obj.typeinfo.is_a) { +        switch (obj.metainfo.is_a) {          case "heading":            obj_txt = format_and_sqlite_load.heading(obj);            break;          default:            if ((doc_matters.opt.action.debug_do)) { -            writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a); +            writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_a);            }            break;          }          break;        default:          if ((doc_matters.opt.action.debug_do)) { -          writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_of_type); +          writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_of_type);          }          break;        }        break;      case "body": //                    assert(part == "body", part); // TODO broken -      switch (obj.typeinfo.is_of_type) { +      switch (obj.metainfo.is_of_type) {        case "para": -        switch (obj.typeinfo.is_a) { +        switch (obj.metainfo.is_a) {          case "heading":            debug (asserts) { // TODO consider and fix or remove              if (part != "body") { @@ -974,13 +974,13 @@ foreach (part; doc_matters.xml.keys_seq.sql) {            break;          default:            if ((doc_matters.opt.action.debug_do)) { -            writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a); +            writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_a);            }            break;          }          break;        case "block": -        switch (obj.typeinfo.is_a) { +        switch (obj.metainfo.is_a) {          case "quote":            obj_txt = format_and_sqlite_load.quote(obj);            break; @@ -1003,23 +1003,23 @@ foreach (part; doc_matters.xml.keys_seq.sql) {            break;          default:            if ((doc_matters.opt.action.debug_do)) { -            writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a); +            writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_a);            }            break;          }          break;        default:          if ((doc_matters.opt.action.debug_do)) { -          writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_of_type); +          writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_of_type);          }          break;        }        break;      case "backmatter":        assert(part == "glossary" || "bibliography" || "bookindex_seg" || "blurb" || "tail", part); -      switch (obj.typeinfo.is_of_type) { +      switch (obj.metainfo.is_of_type) {        case "para": -        switch (obj.typeinfo.is_a) { +        switch (obj.metainfo.is_a) {          case "heading":            obj_txt = format_and_sqlite_load.heading(obj);            break; @@ -1037,14 +1037,14 @@ foreach (part; doc_matters.xml.keys_seq.sql) {            break;          default:            if ((doc_matters.opt.action.debug_do)) { -            writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a); +            writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_a);            }            break;          }          break;        default:          if ((doc_matters.opt.action.debug_do)) { -          writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_of_type); +          writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_of_type);          }          break;        } @@ -1053,28 +1053,28 @@ foreach (part; doc_matters.xml.keys_seq.sql) {        break;      default:        if ((doc_matters.opt.action.debug_do)) { -        writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_of_part); // check where empty value could come from -        writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a); +        writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_of_part); // check where empty value could come from +        writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_a);          writeln(__FILE__, ":", __LINE__, ": ", obj.text); // check where empty value could come from        }        break;      } -    if (obj.typeinfo.is_a == "heading") { +    if (obj.metainfo.is_a == "heading") {        if ((doc_matters.opt.action.verbose)) {          writeln( -          "markup: ", obj.node.heading_lev_markup, -          "> ", obj.node.dom_markedup, -          "; collapsed: ", obj.node.heading_lev_collapsed, -          "> ", obj.node.dom_collapsed, -          "; ocn: ", obj.node.ocn, -          " node: ", obj.node.node, -          "; parent: ", obj.node.parent_lev_markup, -          "; ocn: ", obj.node.parent_ocn, +          "markup: ", obj.metainfo.heading_lev_markup, +          "> ", obj.metainfo.dom_markedup, +          "; collapsed: ", obj.metainfo.heading_lev_collapsed, +          "> ", obj.metainfo.dom_collapsed, +          "; ocn: ", obj.metainfo.ocn, +          " node: ", obj.metainfo.node, +          "; parent: ", obj.metainfo.parent_lev_markup, +          "; ocn: ", obj.metainfo.parent_ocn,            "; ",          );        }      } -    if (!(obj.typeinfo.is_a == "comment")) { +    if (!(obj.metainfo.is_a == "comment")) {        _insert_doc_objects ~= insertDocObjectsRow(obj);      }    } // loop closes @@ -1302,12 +1302,12 @@ _insert_doc_objects_row = format(q"¶  #+BEGIN_SRC d  ¶",    _metadata_tid, -  obj.node.ocn, +  obj.metainfo.ocn,    SQLinsertDelimiter!()(obj_txt["text"]),    SQLinsertDelimiter!()(obj_txt["html"]), -  obj.node.heading_lev_markup, -  obj.typeinfo.is_of_type, -  obj.typeinfo.is_a, +  obj.metainfo.heading_lev_markup, +  obj.metainfo.is_of_type, +  obj.metainfo.is_a,  );  #+END_SRC diff --git a/org/output_xmls.org b/org/output_xmls.org index 894f329..3742975 100644 --- a/org/output_xmls.org +++ b/org/output_xmls.org @@ -107,7 +107,7 @@ string special_characters(O)(      .replaceAll(rgx.xhtml_less_than,    "<")      .replaceAll(rgx.xhtml_greater_than, ">")      .replaceAll(rgx.nbsp_char,          " "); -  if (!(obj.typeinfo.is_a == "code")) { +  if (!(obj.metainfo.is_a == "code")) {      _txt = (_txt)        .replaceAll(rgx.xhtml_line_break,   "<br />");    } @@ -478,7 +478,7 @@ auto inline_links(O)(        writeln(__LINE__,          " (missed) markup link identified (",          obj.has.inline_links, -        "): ", obj.typeinfo.is_a, ": ", +        "): ", obj.metainfo.is_a, ": ",          obj.text        );      } @@ -488,7 +488,7 @@ auto inline_links(O)(        writeln(__LINE__,          " (missed) markup link identified (",          obj.has.inline_links, -        "): ", obj.typeinfo.is_a, ": ", +        "): ", obj.metainfo.is_a, ": ",          obj.text        );      } @@ -514,12 +514,12 @@ auto inline_notes_scroll(O)(    }    debug(markup_endnotes) {      if (_txt.match(rgx.inline_notes_delimiter_al_regular_number_note)) { -      writeln(__LINE__, " (missed) markup endnote: ", obj.typeinfo.is_a, ": ", obj.text); +      writeln(__LINE__, " (missed) markup endnote: ", obj.metainfo.is_a, ": ", obj.text);      }    }    debug(markup) {      if (_txt.match(rgx.inline_notes_delimiter_al_regular_number_note)) { -      writeln(__LINE__, " (missed) markup endnote: ", obj.typeinfo.is_a, ": ", obj.text); +      writeln(__LINE__, " (missed) markup endnote: ", obj.metainfo.is_a, ": ", obj.text);      }    }    return _txt; @@ -560,7 +560,7 @@ auto inline_notes_seg(O)(      );    } else if (_txt.match(rgx.inline_notes_delimiter_al_regular_number_note)) {      debug(markup) { -      writeln(__LINE__, " endnote: ", obj.typeinfo.is_a, ": ", obj.text); +      writeln(__LINE__, " endnote: ", obj.metainfo.is_a, ": ", obj.text);      }    }    auto t = tuple( @@ -733,12 +733,12 @@ auto heading(O)(    auto tags = _xhtml_anchor_tags(obj.tags.anchor_tags);    string _horizontal_rule = "<hr />";    if ((_xml_type != "html") -  || (obj.node.heading_lev_markup == 0 || obj.node.heading_lev_markup > 4)) { +  || (obj.metainfo.heading_lev_markup == 0 || obj.metainfo.heading_lev_markup > 4)) {      _horizontal_rule = "";    }    _txt = font_face(_txt);    string o; -  if (obj.node.object_number.empty) { +  if (obj.metainfo.object_number.empty) {      o = format(q"¶%s    <div class="substance">      <h%s class="%s">%s @@ -746,11 +746,11 @@ auto heading(O)(      </h%s>    </div>¶",        _horizontal_rule, -      obj.node.heading_lev_markup, -      obj.typeinfo.is_a, +      obj.metainfo.heading_lev_markup, +      obj.metainfo.is_a,        tags,        _txt, -      obj.node.heading_lev_markup, +      obj.metainfo.heading_lev_markup,      );    } else {      o = format(q"¶%s @@ -761,15 +761,15 @@ auto heading(O)(      </h%s>    </div>¶",      _horizontal_rule, -    obj.node.object_number, -    obj.node.object_number, -    obj.node.heading_lev_markup, -    obj.typeinfo.is_a, -    obj.node.object_number, -    obj.node.object_number, +    obj.metainfo.object_number, +    obj.metainfo.object_number, +    obj.metainfo.heading_lev_markup, +    obj.metainfo.is_a, +    obj.metainfo.object_number, +    obj.metainfo.object_number,      tags,      _txt, -    obj.node.heading_lev_markup, +    obj.metainfo.heading_lev_markup,      );    }    return o; @@ -827,13 +827,13 @@ auto para(O)(    _txt = font_face(_txt);    string o;    _txt = (obj.attrib.bullet) ? ("●  " ~ _txt) : _txt; -  if (obj.node.object_number.empty) { +  if (obj.metainfo.object_number.empty) {      o = format(q"¶  <div class="substance">    <p class="%s" indent="h%si%s">%s      %s    </p>  </div>¶", -      obj.typeinfo.is_a, +      obj.metainfo.is_a,        obj.attrib.indent_hang,        obj.attrib.indent_base,        tags, @@ -846,12 +846,12 @@ auto para(O)(      %s    </p>  </div>¶", -      obj.node.object_number, -      obj.node.object_number, -      obj.typeinfo.is_a, +      obj.metainfo.object_number, +      obj.metainfo.object_number, +      obj.metainfo.is_a,        obj.attrib.indent_hang,        obj.attrib.indent_base, -      obj.node.object_number, +      obj.metainfo.object_number,        tags,        _txt      ); @@ -909,13 +909,13 @@ auto quote(O)(  ) {    _txt = font_face(_txt);    string o; -  if (obj.node.object_number.empty) { +  if (obj.metainfo.object_number.empty) {      o = format(q"¶  <div class="substance">    <p class="%s">      %s    </p>  </div>¶", -      obj.typeinfo.is_a, +      obj.metainfo.is_a,        _txt      );    } else { @@ -925,10 +925,10 @@ auto quote(O)(      %s    </p>  </div>¶", -      obj.node.object_number, -      obj.node.object_number, -      obj.typeinfo.is_a, -      obj.node.object_number, +      obj.metainfo.object_number, +      obj.metainfo.object_number, +      obj.metainfo.is_a, +      obj.metainfo.object_number,        _txt      );    } @@ -985,13 +985,13 @@ auto group(O)(  ) {    _txt = font_face(_txt);    string o; -  if (obj.node.object_number.empty) { +  if (obj.metainfo.object_number.empty) {      o = format(q"¶  <div class="substance">    <p class="%s">      %s    </p>  </div>¶", -      obj.typeinfo.is_a, +      obj.metainfo.is_a,        _txt      );    } else { @@ -1001,10 +1001,10 @@ auto group(O)(      %s    </p>  </div>¶", -      obj.node.object_number, -      obj.node.object_number, -      obj.typeinfo.is_a, -      obj.node.object_number, +      obj.metainfo.object_number, +      obj.metainfo.object_number, +      obj.metainfo.is_a, +      obj.metainfo.object_number,        _txt      );    } @@ -1062,11 +1062,11 @@ auto block(O)(  ) {    _txt = font_face(_txt);    string o; -  if (obj.node.object_number.empty) { +  if (obj.metainfo.object_number.empty) {      o = format(q"¶  <div class="substance">    <p class="%s">%s</p>  </div>¶", -      obj.typeinfo.is_a, +      obj.metainfo.is_a,        _txt.stripRight      );    } else { @@ -1074,10 +1074,10 @@ auto block(O)(    <label class="ocn"><a href="#%s" class="lnkocn">%s</a></label>    <p class="%s" id="%s">%s</p>  </div>¶", -      obj.node.object_number, -      obj.node.object_number, -      obj.typeinfo.is_a, -      obj.node.object_number, +      obj.metainfo.object_number, +      obj.metainfo.object_number, +      obj.metainfo.is_a, +      obj.metainfo.object_number,        _txt.stripRight      );    } @@ -1135,11 +1135,11 @@ auto verse(O)(  ) {    _txt = font_face(_txt);    string o; -  if (obj.node.object_number.empty) { +  if (obj.metainfo.object_number.empty) {        o = format(q"¶  <div class="substance">          <p class="%s">%s</p>      </div>¶", -      obj.typeinfo.is_a, +      obj.metainfo.is_a,        _txt      );    } else { @@ -1147,10 +1147,10 @@ auto verse(O)(        <label class="ocn"><a href="#%s" class="lnkocn">%s</a></label>        <p class="%s" id="%s">%s</p>      </div>¶", -      obj.node.object_number, -      obj.node.object_number, -      obj.typeinfo.is_a, -      obj.node.object_number, +      obj.metainfo.object_number, +      obj.metainfo.object_number, +      obj.metainfo.is_a, +      obj.metainfo.object_number,        _txt      );    } @@ -1206,11 +1206,11 @@ auto code(O)(    string                   _txt,  ) {    string o; -  if (obj.node.object_number.empty) { +  if (obj.metainfo.object_number.empty) {        o = format(q"¶  <div class="substance">      <p class="%s">%s</p>  </div>¶", -      obj.typeinfo.is_a, +      obj.metainfo.is_a,        _txt      );    } else { @@ -1218,10 +1218,10 @@ auto code(O)(    <label class="ocn"><a href="#%s" class="lnkocn">%s</a></label>    <p class="%s" id="%s">%s</p>  </div>¶", -      obj.node.object_number, -      obj.node.object_number, -      obj.typeinfo.is_a, -      obj.node.object_number, +      obj.metainfo.object_number, +      obj.metainfo.object_number, +      obj.metainfo.is_a, +      obj.metainfo.object_number,        _txt      );    } @@ -1300,10 +1300,10 @@ auto table(O)(      %s    </p>  </div>¶", -    obj.node.object_number, -    obj.node.object_number, -    obj.typeinfo.is_a, -    obj.node.object_number, +    obj.metainfo.object_number, +    obj.metainfo.object_number, +    obj.metainfo.is_a, +    obj.metainfo.object_number,      tags,      _txt,      _note @@ -1324,7 +1324,7 @@ auto endnote(O)(    o = format(q"¶    <p class="%s" indent="h%si%s">    %s  </p>¶", -    obj.typeinfo.is_a, +    obj.metainfo.is_a,      obj.attrib.indent_hang,      obj.attrib.indent_base,      _txt @@ -1369,11 +1369,11 @@ void scroll(D,I)(      foreach (obj; doc_abstraction[part]) {        delimit = xhtml_format.div_delimit(part, previous_part);        string _txt = xhtml_format.special_characters(obj, obj.text); -      switch (obj.typeinfo.is_of_part) { +      switch (obj.metainfo.is_of_part) {        case "frontmatter":              assert(part == "head" || "toc_scroll"); -        switch (obj.typeinfo.is_of_type) { +        switch (obj.metainfo.is_of_type) {          case "para": -          switch (obj.typeinfo.is_a) { +          switch (obj.metainfo.is_a) {            case "heading":              doc_html ~= delimit ~ xhtml_format.heading_scroll(obj, _txt, suffix);              break; @@ -1382,22 +1382,22 @@ void scroll(D,I)(              break;            default:              if ((doc_matters.opt.action.debug_do)) { -              writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a); +              writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_a);              }              break;            }            break;          default:            if ((doc_matters.opt.action.debug_do)) { -            writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_of_type); +            writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_of_type);            }            break;          }          break;        case "body":                     assert(part == "body" || "head"); // surprise -        switch (obj.typeinfo.is_of_type) { +        switch (obj.metainfo.is_of_type) {          case "para": -          switch (obj.typeinfo.is_a) { +          switch (obj.metainfo.is_a) {            case "heading":              doc_html ~= delimit ~ xhtml_format.heading_scroll(obj, _txt, suffix);              break; @@ -1406,13 +1406,13 @@ void scroll(D,I)(              break;            default:              if ((doc_matters.opt.action.debug_do)) { -              writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a); +              writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_a);              }              break;            }            break;          case "block": -          switch (obj.typeinfo.is_a) { +          switch (obj.metainfo.is_a) {            case "quote":              doc_html ~= xhtml_format.quote_scroll(obj, _txt);              break; @@ -1435,23 +1435,23 @@ void scroll(D,I)(              break;            default:              if ((doc_matters.opt.action.debug_do)) { -              writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a); +              writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_a);              }              break;            }            break;          default:            if ((doc_matters.opt.action.debug_do)) { -            writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_of_type); +            writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_of_type);            }            break;          }          break;        case "backmatter":          assert(part == "endnotes" || "glossary" || "bibliography" || "bookindex_scroll" || "blurb" || "tail"); -        switch (obj.typeinfo.is_of_type) { +        switch (obj.metainfo.is_of_type) {          case "para": -          switch (obj.typeinfo.is_a) { +          switch (obj.metainfo.is_a) {            case "heading":              doc_html ~= delimit ~ xhtml_format.heading_scroll(obj, _txt, suffix);              break; @@ -1472,14 +1472,14 @@ void scroll(D,I)(              break;            default:              if ((doc_matters.opt.action.debug_do)) { -              writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a); +              writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_a);              }              break;            }            break;          default:            if ((doc_matters.opt.action.debug_do)) { -            writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_of_type); +            writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_of_type);            }            break;          } @@ -1488,8 +1488,8 @@ void scroll(D,I)(          break;        default:          if ((doc_matters.opt.action.debug_do)) { -          writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_of_part); -          writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a); +          writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_of_part); +          writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_a);            writeln(__FILE__, ":", __LINE__, ": ", obj.text);          }          break; @@ -1554,12 +1554,12 @@ void seg(D,M)(      foreach (obj; doc_abstraction[part]) {        delimit = xhtml_format.div_delimit(part, previous_part);        string _txt = xhtml_format.special_characters(obj, obj.text); -      if (obj.typeinfo.is_a == "heading") { +      if (obj.metainfo.is_a == "heading") {          assert(part == "head" || "toc_seg" || "body" || "endnotes" || "glossary" || "bibliography" || "bookindex_seg" || "blurb" || "tail"); -        switch (obj.node.heading_lev_markup) { +        switch (obj.metainfo.heading_lev_markup) {          case 0: .. case 3:            /+ fill buffer, and replace with new levels from 1 to 3 +/ -          switch (obj.node.heading_lev_markup) { +          switch (obj.metainfo.heading_lev_markup) {            case 0:              top_level_headings[0] = "";              top_level_headings[1] = ""; @@ -1580,7 +1580,7 @@ void seg(D,M)(              goto default;            default:              auto t = xhtml_format.heading_seg(obj, _txt, suffix, "seg"); -            top_level_headings[obj.node.heading_lev_markup] = t[0]; +            top_level_headings[obj.metainfo.heading_lev_markup] = t[0];              break;            }            break; @@ -1606,45 +1606,45 @@ void seg(D,M)(            break;          case 8: .. case 9:            if ((doc_matters.opt.action.debug_do)) { -            writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a, ": ", obj.node.heading_lev_markup); +            writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_a, ": ", obj.metainfo.heading_lev_markup);              writeln(__FILE__, ":", __LINE__, ": ", obj.text);            }            break;          default:            if ((doc_matters.opt.action.debug_do)) { -            writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a, ": ", obj.node.heading_lev_markup); +            writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_a, ": ", obj.metainfo.heading_lev_markup);            }            break;          }        } else {          assert(part == "head" || "toc_seg" || "body" || "endnotes" || "glossary" || "bibliography" || "bookindex_seg" || "blurb" || "tail"); -        switch (obj.typeinfo.is_of_part) { +        switch (obj.metainfo.is_of_part) {          case "frontmatter":             assert(part == "head" || "toc_seg"); -          switch (obj.typeinfo.is_of_type) { +          switch (obj.metainfo.is_of_type) {            case "para": -            switch (obj.typeinfo.is_a) { +            switch (obj.metainfo.is_a) {              case "toc":                auto t = xhtml_format.para_seg(obj, _txt, suffix, "seg");                doc_html[segment_filename] ~= t[0].to!string;                break;              default:                if ((doc_matters.opt.action.debug_do)) { -                writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a); +                writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_a);                }                break;              }              break;            default:              if ((doc_matters.opt.action.debug_do)) { -              writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a); +              writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_a);              }              break;            }            break;          case "body":                    assert(part == "body"); -          switch (obj.typeinfo.is_of_type) { +          switch (obj.metainfo.is_of_type) {            case "para": -            switch (obj.typeinfo.is_a) { +            switch (obj.metainfo.is_a) {              case "para":                auto t = xhtml_format.para_seg(obj, _txt, suffix, "seg");                doc_html[segment_filename] ~= t[0].to!string; @@ -1652,13 +1652,13 @@ void seg(D,M)(                break;              default:                if ((doc_matters.opt.action.debug_do)) { -                writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a); +                writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_a);                }                break;              }              break;            case "block": -            switch (obj.typeinfo.is_a) { +            switch (obj.metainfo.is_a) {              case "quote":                auto t = xhtml_format.quote_seg(obj, _txt, suffix, "seg");                doc_html[segment_filename] ~= t[0].to!string; @@ -1690,23 +1690,23 @@ void seg(D,M)(                break;              default:                if ((doc_matters.opt.action.debug_do)) { -                writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a); +                writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_a);                }                break;              }              break;            default:              if ((doc_matters.opt.action.debug_do)) { -              writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_of_type); +              writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_of_type);              }              break;            }            break;          case "backmatter":            assert(part == "endnotes" || "glossary" || "bibliography" || "bookindex_seg" || "blurb" || "tail"); -          switch (obj.typeinfo.is_of_type) { +          switch (obj.metainfo.is_of_type) {            case "para": -            switch (obj.typeinfo.is_a) { +            switch (obj.metainfo.is_a) {              case "endnote":             assert(part == "endnotes");                auto t = xhtml_format.para_seg(obj, _txt, suffix, "seg");                doc_html[segment_filename] ~= t[0]; @@ -1733,14 +1733,14 @@ void seg(D,M)(                break;              default:                if ((doc_matters.opt.action.debug_do)) { -                writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a); +                writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_a);                }                break;              }              break;            default:              if ((doc_matters.opt.action.debug_do)) { -              writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_of_type); +              writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_of_type);              }              break;            } @@ -1749,7 +1749,7 @@ void seg(D,M)(            break;          default:            if ((doc_matters.opt.action.debug_do)) { -            writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_of_part); +            writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_of_part);            }            break;          } @@ -2004,20 +2004,20 @@ string epub3_oebps_content(D,M,P)(D doc_abstraction, M doc_matters, P parts) {    debug(epubmanifest) {      foreach (s; doc_matters.xml.keys_seq.seg) {        foreach (obj; doc_abstraction[s]) { -        if (obj.typeinfo.is_a == "heading") { -          if (obj.node.heading_lev_markup == 4) { +        if (obj.metainfo.is_a == "heading") { +          if (obj.metainfo.heading_lev_markup == 4) {              writefln(                "%s~ [%s.xhtml] %s",                obj.marked_up_level,                obj.tags.segment_anchor_tag,                obj.text              ); -          } else if (obj.node.heading_lev_markup > 4) { +          } else if (obj.metainfo.heading_lev_markup > 4) {              writefln(                "%s~ [%s.xhtml#%s] %s",                obj.marked_up_level,                obj.tags.segment_anchor_tag, -              obj.node.object_number, +              obj.metainfo.object_number,                obj.text              );            } @@ -2054,27 +2054,27 @@ string epub3_oebps_toc_nav_xhtml(D,I)(D doc_abstraction, I doc_matters) {    );    foreach (sect; doc_matters.xml.keys_seq.seg) {      foreach (obj; doc_abstraction[sect]) { -      if (obj.typeinfo.is_a == "heading") { +      if (obj.metainfo.is_a == "heading") {          string _txt = obj.text.replaceAll(rgx.inline_notes_al_gen, "").strip;          foreach_reverse (n; 0 .. 7) {            string k = n.to!string; -          switch (obj.node.dom_collapsed[n]) { +          switch (obj.metainfo.dom_collapsed[n]) {            case DomTags.close :              toc ~= markup.indent_by_spaces_provided((n + 1), "  ") ~ "</li>" ~ "\n";              toc ~= markup.indent_by_spaces_provided(n, "  ") ~ "</ol>" ~ "\n";              break;            case DomTags.close_and_open :              toc ~= markup.indent_by_spaces_provided((n + 1), "  ") ~ "</li>" ~ "\n"; -            if  (obj.node.heading_lev_markup < 4) { +            if  (obj.metainfo.heading_lev_markup < 4) {                toc ~= markup.indent_by_spaces_provided((n + 1), "  ") ~ "<li>" ~ "\n"                ~ markup.indent_by_spaces_provided((n + 2), "  ")                ~ "<a href=\"" ~ obj.tags.segment_anchor_tag ~ ".xhtml" ~ "\">"                ~ _txt                ~ "</a>" ~ "\n";              } else { -              string hashtag =(obj.node.heading_lev_markup == 4) +              string hashtag =(obj.metainfo.heading_lev_markup == 4)                ? "" -              : ("#" ~ obj.node.ocn.to!string); +              : ("#" ~ obj.metainfo.ocn.to!string);                toc ~= markup.indent_by_spaces_provided((n + 1), "  ") ~ "<li>" ~ "\n"                ~ markup.indent_by_spaces_provided((n + 2), "  ")                ~ "<a href=\"" ~ obj.tags.segment_anchor_tag ~ ".xhtml" ~ hashtag ~ "\">" @@ -2084,16 +2084,16 @@ string epub3_oebps_toc_nav_xhtml(D,I)(D doc_abstraction, I doc_matters) {              break;            case DomTags.open :              toc ~= markup.indent_by_spaces_provided(n, "  ") ~ "<ol>" ~ "\n"; -            if  (obj.node.heading_lev_markup < 4) { +            if  (obj.metainfo.heading_lev_markup < 4) {                toc ~= markup.indent_by_spaces_provided((n + 1), "  ") ~ "<li>" ~ "\n"                ~ markup.indent_by_spaces_provided((n + 2), "  ")                ~ "<a href=\"" ~ obj.tags.segment_anchor_tag ~ ".xhtml" ~ "\">"                ~ _txt                ~ "</a>" ~ "\n";              } else { -              string hashtag =(obj.node.heading_lev_markup == 4) +              string hashtag =(obj.metainfo.heading_lev_markup == 4)                ? "" -              : ("#" ~ obj.node.ocn.to!string); +              : ("#" ~ obj.metainfo.ocn.to!string);                toc ~= markup.indent_by_spaces_provided((n + 1), "  ") ~ "<li>" ~ "\n"                ~ markup.indent_by_spaces_provided((n + 2), "  ")                ~ "<a href=\"" ~ obj.tags.segment_anchor_tag ~ ".xhtml" ~ hashtag ~ "\">" @@ -2160,11 +2160,11 @@ string epub2_oebps_toc_ncx(D,I)(D doc_abstraction, I doc_matters) {    );    foreach (sect; doc_matters.xml.keys_seq.seg) {      foreach (obj; doc_abstraction[sect]) { -      if (obj.typeinfo.is_a == "heading") { +      if (obj.metainfo.is_a == "heading") {          string _txt = obj.text.replaceAll(rgx.inline_notes_al_gen, "").strip; -        string hashtag =(obj.node.heading_lev_markup <= 4) ? "" : ("#" ~ obj.node.ocn.to!string); +        string hashtag =(obj.metainfo.heading_lev_markup <= 4) ? "" : ("#" ~ obj.metainfo.ocn.to!string);          foreach_reverse (k; 0 .. 7) { -          switch (obj.node.dom_markedup[k]) { +          switch (obj.metainfo.dom_markedup[k]) {            case DomTags.close :              toc ~= "\n    </navPoint>";              break; @@ -2233,12 +2233,12 @@ void outputEPub3(D,I)(    foreach (part; doc_matters.xml.keys_seq.seg) {      foreach (obj; doc_abstraction[part]) {        string _txt = xhtml_format.special_characters(obj, obj.text); -      if (obj.typeinfo.is_a == "heading") { +      if (obj.metainfo.is_a == "heading") {          assert(part == "head" || "toc_seg" || "body" || "endnotes" || "glossary" || "bibliography" || "bookindex_seg" || "blurb" || "tail"); -        switch (obj.node.heading_lev_markup) { +        switch (obj.metainfo.heading_lev_markup) {          case 0: .. case 3:            /+ fill buffer, and replace with new levels from 1 to 3 +/ -          switch (obj.node.heading_lev_markup) { +          switch (obj.metainfo.heading_lev_markup) {            case 0:              top_level_headings[0] = "";              top_level_headings[1] = ""; @@ -2280,23 +2280,23 @@ void outputEPub3(D,I)(            break;          case 8: .. case 9:            if ((doc_matters.opt.action.debug_do)) { -            writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a, ": ", obj.node.heading_lev_markup); +            writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_a, ": ", obj.metainfo.heading_lev_markup);              writeln(__FILE__, ":", __LINE__, ": ", obj.text);            }            break;          default:            if ((doc_matters.opt.action.debug_do)) { -            writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a, ": ", obj.node.heading_lev_markup); +            writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_a, ": ", obj.metainfo.heading_lev_markup);            }            break;          }        } else {          assert(part == "head" || "toc_seg" || "body" || "endnotes" || "glossary" || "bibliography" || "bookindex_seg" || "blurb" || "tail"); -        switch (obj.typeinfo.is_of_part) { +        switch (obj.metainfo.is_of_part) {          case "frontmatter":             assert(part == "head" || "toc_seg"); -          switch (obj.typeinfo.is_of_type) { +          switch (obj.metainfo.is_of_type) {            case "para": -            switch (obj.typeinfo.is_a) { +            switch (obj.metainfo.is_a) {              case "toc":                auto t = xhtml_format.para_seg(obj, _txt, suffix, "epub");                doc_epub3[segment_filename] ~= t[0]; @@ -2304,22 +2304,22 @@ void outputEPub3(D,I)(                break;              default:                if ((doc_matters.opt.action.debug_do)) { -                writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a); +                writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_a);                }                break;              }              break;            default:              if ((doc_matters.opt.action.debug_do)) { -              writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_of_type); +              writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_of_type);              }              break;            }            break;          case "body":                    assert(part == "body"); -          switch (obj.typeinfo.is_of_type) { +          switch (obj.metainfo.is_of_type) {            case "para": -            switch (obj.typeinfo.is_a) { +            switch (obj.metainfo.is_a) {              case "para":                auto t = xhtml_format.para_seg(obj, _txt, suffix, "epub");                doc_epub3[segment_filename] ~= t[0]; @@ -2327,13 +2327,13 @@ void outputEPub3(D,I)(                break;              default:                if ((doc_matters.opt.action.debug_do)) { -                writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a); +                writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_a);                }                break;              }              break;            case "block": -            switch (obj.typeinfo.is_a) { +            switch (obj.metainfo.is_a) {              case "quote":                auto t = xhtml_format.quote_seg(obj, _txt, suffix, "epub");                doc_epub3[segment_filename] ~= t[0].to!string; @@ -2365,23 +2365,23 @@ void outputEPub3(D,I)(                break;              default:                if ((doc_matters.opt.action.debug_do)) { -                writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a); +                writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_a);                }                break;              }              break;            default:              if ((doc_matters.opt.action.debug_do)) { -              writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_of_type); +              writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_of_type);              }              break;            }            break;          case "backmatter":            assert(part == "endnotes" || "glossary" || "bibliography" || "bookindex_seg" || "blurb" || "tail"); -          switch (obj.typeinfo.is_of_type) { +          switch (obj.metainfo.is_of_type) {            case "para": -            switch (obj.typeinfo.is_a) { +            switch (obj.metainfo.is_a) {              case "endnote":             assert(part == "endnotes");                auto t = xhtml_format.para_seg(obj, _txt, suffix, "epub");                doc_epub3[segment_filename] ~= t[0]; @@ -2408,14 +2408,14 @@ void outputEPub3(D,I)(                break;              default:                if ((doc_matters.opt.action.debug_do)) { -                writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_a); +                writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_a);                }                break;              }              break;            default:              if ((doc_matters.opt.action.debug_do)) { -              writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_of_type); +              writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_of_type);              }              break;            } @@ -2424,14 +2424,14 @@ void outputEPub3(D,I)(            break;          default:            if ((doc_matters.opt.action.debug_do)) { -            writeln(__FILE__, ":", __LINE__, ": ", obj.typeinfo.is_of_part); +            writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_of_part);            }            break;          }        } -      if (obj.typeinfo.is_a == "heading") { +      if (obj.metainfo.is_a == "heading") {          assert(obj.text.length > 0); -        if (obj.node.heading_lev_markup <= 4) { +        if (obj.metainfo.heading_lev_markup <= 4) {            oepbs_content_parts["manifest_documents"] ~=              format(q"¶      <item id="%s.xhtml" href="%s.xhtml" media-type="application/xhtml+xml" />  ¶", @@ -2449,28 +2449,28 @@ void outputEPub3(D,I)(              obj.tags.segment_anchor_tag,              obj.tags.segment_anchor_tag,            ); -        } else if (obj.node.heading_lev_markup > 4) { +        } else if (obj.metainfo.heading_lev_markup > 4) {            oepbs_content_parts["manifest_documents"] ~=              format(q"¶      <item id="%s.xhtml#%s" href="%s.xhtml#%s" media-type="application/xhtml+xml" />  ¶",              obj.tags.segment_anchor_tag, -            obj.node.object_number, +            obj.metainfo.object_number,              obj.tags.segment_anchor_tag, -            obj.node.object_number, +            obj.metainfo.object_number,            );            oepbs_content_parts["spine"] ~=              format(q"¶    <itemref idref="%s.xhtml#%s" linear="yes" />  ¶",              obj.tags.segment_anchor_tag, -            obj.node.object_number, +            obj.metainfo.object_number,            );            oepbs_content_parts["guide"] ~=              format(q"¶      <reference type="%s#%s" href="%s#%s" />  ¶",              obj.tags.segment_anchor_tag, -            obj.node.object_number, +            obj.metainfo.object_number,              obj.tags.segment_anchor_tag, -            obj.node.object_number, +            obj.metainfo.object_number,            );          }        } diff --git a/org/sdp.org b/org/sdp.org index e5ed367..fe560e1 100644 --- a/org/sdp.org +++ b/org/sdp.org @@ -995,18 +995,18 @@ string[string] check = [  ];  foreach (k; doc_matters.xml.keys_seq.seg) {    foreach (obj; doc_abstraction[k]) { -    if (obj.typeinfo.is_of_part != "empty") { -      if (!empty(obj.node.object_number)) { +    if (obj.metainfo.is_of_part != "empty") { +      if (!empty(obj.metainfo.object_number)) {          if (k == "body") { -          check["last_object_number_body"] = obj.node.object_number; +          check["last_object_number_body"] = obj.metainfo.object_number;          } -        if (!(obj.node.object_number.empty)) { -          check["last_object_number"] = obj.node.object_number; +        if (!(obj.metainfo.object_number.empty)) { +          check["last_object_number"] = obj.metainfo.object_number;          }        }        if (k == "bookindex_seg") { -        if (obj.misc.object_number_type == 2) { -          check["last_object_number_book_index"] = obj.misc.object_number_book_index; +        if (obj.metainfo.object_number_type == 2) { +          check["last_object_number_book_index"] = obj.metainfo.object_number_book_index;          }        }      }  | 
