diff options
| -rw-r--r-- | org/meta_abstraction.org | 589 | ||||
| -rw-r--r-- | org/meta_debugs.org | 4 | ||||
| -rw-r--r-- | org/output_sqlite.org | 4 | ||||
| -rw-r--r-- | org/output_xmls.org | 4 | ||||
| -rw-r--r-- | src/sdp/meta/doc_debugs.d | 4 | ||||
| -rw-r--r-- | src/sdp/meta/metadoc_from_src.d | 473 | ||||
| -rw-r--r-- | src/sdp/meta/object_setter.d | 72 | ||||
| -rw-r--r-- | src/sdp/output/epub3.d | 4 | ||||
| -rw-r--r-- | src/sdp/output/sqlite.d | 4 | 
9 files changed, 830 insertions, 328 deletions
| diff --git a/org/meta_abstraction.org b/org/meta_abstraction.org index 0153020..feaf5ea 100644 --- a/org/meta_abstraction.org +++ b/org/meta_abstraction.org @@ -85,6 +85,7 @@ template SiSUdocAbstraction() {      } /+ ← closed: loop markup document/text line by line +/      /+ ↓ post loop markup document/text +/      <<abs_post>> +    <<abs_post_doc_reloop_processing>>      <<abs_return_tuple>>      /+ post loop markup document/text ↑ +/    } /+ ← closed: abstract doc source +/ @@ -232,14 +233,14 @@ struct OCNset {  OCNset obj_cite_digits;  int obj_cite_digit_, obj_cite_digit_off, obj_cite_digit_bkidx, obj_cite_digit_type;  auto object_citation_number = OCNemitter(); -int[] dom_markedup         = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; -int[] dom_markedup_buffer  = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; -int[] dom_collapsed        = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; -int[] dom_collapsed_buffer = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; +int[] dom_structure_markedup_tags_status         = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; +int[] dom_structure_markedup_tags_status_buffer  = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; +int[] dom_structure_collapsed_tags_status        = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; +int[] dom_structure_collapsed_tags_status_buffer = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,];  enum DomTags { none, open, close, close_and_open, open_still, }  #+END_SRC -**** initialize heading ancestors +**** method heading ancestors  #+name: abs_top_init_struct  #+BEGIN_SRC d @@ -298,7 +299,7 @@ pure auto obj_heading_ancestors(O)(  }  #+END_SRC -**** initialize dom markup tags +**** method dom markup tags  #+name: abs_top_init_struct  #+BEGIN_SRC d @@ -343,12 +344,12 @@ pure auto obj_dom_structure_set_markup_tags(O)(    debug(dom_magic_numbers) {      writeln("marked up: ", lev, ": ", dom);    } -  obj.metainfo.dom_markedup = dom.dup; +  obj.metainfo.dom_structure_markedup_tags_status = dom.dup;    return obj;  }  #+END_SRC -**** initialize dom collapsed tags +**** method dom collapsed tags  #+name: abs_top_init_struct  #+BEGIN_SRC d @@ -393,12 +394,12 @@ pure auto obj_dom_set_collapsed_tags(O)(    debug(dom_magic_numbers) {      writeln("collapsed: ", lev, ": ", dom);    } -  obj.metainfo.dom_collapsed = dom.dup; +  obj.metainfo.dom_structure_collapsed_tags_status = dom.dup;    return obj;  }  #+END_SRC -**** initialize ocn emit +**** method ocn emit  #+name: abs_top_init_struct  #+BEGIN_SRC d @@ -500,27 +501,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_.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_; +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_structure_markedup_tags_status  = [ 1, 1, 0, 0, 1, 0, 0, 0]; +comp_obj_heading_.metainfo.dom_structure_collapsed_tags_status = [ 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], @@ -691,8 +692,8 @@ if there is a glossary section you need to:        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]; +      comp_obj_heading_.metainfo.dom_structure_markedup_tags_status  = [ 1, 1, 0, 0, 0, 0, 0, 0]; +      comp_obj_heading_.metainfo.dom_structure_collapsed_tags_status = [ 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"; @@ -708,8 +709,8 @@ if there is a glossary section you need to:        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_.metainfo.dom_structure_markedup_tags_status  = [ 1, 1, 0, 0, 1, 0, 0, 0]; +      comp_obj_heading_.metainfo.dom_structure_collapsed_tags_status = [ 1, 1, 1, 0, 0, 0, 0, 0];        comp_obj_heading_.tags.anchor_tags               = ["glossary"];        the_glossary_section                             ~= comp_obj_heading_;      } else { @@ -796,41 +797,41 @@ 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_.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_; +      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_structure_markedup_tags_status  = [ 1, 1, 0, 0, 0, 0, 0, 0]; +      comp_obj_heading_.metainfo.dom_structure_collapsed_tags_status = [ 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_structure_markedup_tags_status  = [ 1, 1, 0, 0, 1, 0, 0, 0]; +      comp_obj_heading_.metainfo.dom_structure_collapsed_tags_status = [ 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; @@ -847,7 +848,7 @@ if there is a blurb section you need to:        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_; +      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; @@ -1772,6 +1773,219 @@ NOTE there are issues attempting to do this on first pass as:    - could optimise a bit by      - skipping this loop unless the html seg or epub output is selected +***** Methods +****** get ancestors markup + +#+name: abs_post +#+BEGIN_SRC d +int[] _get_ancestors_markup(O)(O obj, ref int[] _ancestors_markup) { +  if (obj.metainfo.is_a == "heading") { +    debug(dom) { +      writeln(obj.text); +    } +    if (obj.metainfo.heading_lev_markup == 1) { +      _ancestors_markup = [ +        _ancestors_markup[0], +        0,0,0,0,0,0,0 +      ]; +    } +    if (obj.metainfo.heading_lev_markup == 2) { +      _ancestors_markup = [ +        _ancestors_markup[0], +        _ancestors_markup[1], +        0,0,0,0,0,0 +      ]; +    } +    if (obj.metainfo.heading_lev_markup == 3) { +      _ancestors_markup = [ +        _ancestors_markup[0], +        _ancestors_markup[1], +        _ancestors_markup[2], +        0,0,0,0,0 +      ]; +    } +    if (obj.metainfo.heading_lev_markup == 4) { +      _ancestors_markup = [ +        _ancestors_markup[0], +        _ancestors_markup[1], +        _ancestors_markup[2], +        _ancestors_markup[3], +        0,0,0,0 +      ]; +    } +    if (obj.metainfo.heading_lev_markup == 5) { +      _ancestors_markup = [ +        _ancestors_markup[0], +        _ancestors_markup[1], +        _ancestors_markup[2], +        _ancestors_markup[3], +        _ancestors_markup[4], +        0,0,0 +      ]; +    } +    if (obj.metainfo.heading_lev_markup == 6) { +      _ancestors_markup = [ +        _ancestors_markup[0], +        _ancestors_markup[1], +        _ancestors_markup[2], +        _ancestors_markup[3], +        _ancestors_markup[4], +        _ancestors_markup[5], +        0,0 +      ]; +    } +    if (obj.metainfo.heading_lev_markup == 7) { +      _ancestors_markup = [ +        _ancestors_markup[0], +        _ancestors_markup[1], +        _ancestors_markup[2], +        _ancestors_markup[3], +        _ancestors_markup[4], +        _ancestors_markup[5], +        _ancestors_markup[6], +        0 +      ]; +    } +    if (obj.metainfo.heading_lev_markup == 8) { +      _ancestors_markup = [ +        _ancestors_markup[0], +        _ancestors_markup[1], +        _ancestors_markup[2], +        _ancestors_markup[3], +        _ancestors_markup[4], +        _ancestors_markup[5], +        _ancestors_markup[6], +        _ancestors_markup[7] +      ]; +    } +    _ancestors_markup[obj.metainfo.heading_lev_markup] = obj.metainfo.ocn; +  } +  debug(ancestor_markup) { +    writeln("marked up: ", _ancestors_markup); +  } +  return _ancestors_markup; +} +#+END_SRC + +****** get ancestors collapsed + +#+name: abs_post +#+BEGIN_SRC d +int[] _get_ancestors_collapsed(O)(O obj, ref int[] _ancestors_collapsed) { +  if (obj.metainfo.is_a == "heading") { +    if (obj.metainfo.heading_lev_collapsed == 1) { +      _ancestors_collapsed = [ +        _ancestors_collapsed[0], +        0,0,0,0,0,0,0 +      ]; +    } +    if (obj.metainfo.heading_lev_collapsed == 2) { +      _ancestors_collapsed = [ +        _ancestors_collapsed[0], +        _ancestors_collapsed[1], +        0,0,0,0,0,0 +      ]; +    } +    if (obj.metainfo.heading_lev_collapsed == 3) { +      _ancestors_collapsed = [ +        _ancestors_collapsed[0], +        _ancestors_collapsed[1], +        _ancestors_collapsed[2], +        0,0,0,0,0 +      ]; +    } +    if (obj.metainfo.heading_lev_collapsed == 4) { +      _ancestors_collapsed = [ +        _ancestors_collapsed[0], +        _ancestors_collapsed[1], +        _ancestors_collapsed[2], +        _ancestors_collapsed[3], +        0,0,0,0 +      ]; +    } +    if (obj.metainfo.heading_lev_collapsed == 5) { +      _ancestors_collapsed = [ +        _ancestors_collapsed[0], +        _ancestors_collapsed[1], +        _ancestors_collapsed[2], +        _ancestors_collapsed[3], +        _ancestors_collapsed[4], +        0,0,0 +      ]; +    } +    if (obj.metainfo.heading_lev_collapsed == 6) { +      _ancestors_collapsed = [ +        _ancestors_collapsed[0], +        _ancestors_collapsed[1], +        _ancestors_collapsed[2], +        _ancestors_collapsed[3], +        _ancestors_collapsed[4], +        _ancestors_collapsed[5], +        0,0 +      ]; +    } +    if (obj.metainfo.heading_lev_collapsed == 7) { +      _ancestors_collapsed = [ +        _ancestors_collapsed[0], +        _ancestors_collapsed[1], +        _ancestors_collapsed[2], +        _ancestors_collapsed[3], +        _ancestors_collapsed[4], +        _ancestors_collapsed[5], +        _ancestors_collapsed[6], +        0 +      ]; +    } +    if (obj.metainfo.heading_lev_collapsed == 8) { +      _ancestors_collapsed = [ +        _ancestors_collapsed[0], +        _ancestors_collapsed[1], +        _ancestors_collapsed[2], +        _ancestors_collapsed[3], +        _ancestors_collapsed[4], +        _ancestors_collapsed[5], +        _ancestors_collapsed[6], +        _ancestors_collapsed[7] +      ]; +    } +    _ancestors_collapsed[obj.metainfo.heading_lev_collapsed] = obj.metainfo.ocn; +  } +  debug(ancestor_collapsed) { +    writeln("collapsed: ", _ancestors_collapsed); +  } +  return _ancestors_collapsed; +} +#+END_SRC + +***** ↻ Loop section: document body [bd] + +- substantive object numbers already exist +- number un-numbered non-substantive text + +#+name: abs_post +#+BEGIN_SRC d +/+ multiple 1~ levels, loop through document body +/ +if (the_document_body_section.length > 1) { +  int[] _ancestors_markup = [0,0,0,0,0,0,0,0]; +  int[][] _ancestors_markup_; +  _ancestors_markup = [1,0,0,0,0,0,0,0]; +  _ancestors_markup_ ~= _ancestors_markup; +  int[] _ancestors_collapsed = [0,0,0,0,0,0,0,0]; +  int[][] _ancestors_collapsed_; +  _ancestors_collapsed = [1,0,0,0,0,0,0,0]; +  _ancestors_collapsed_ ~= _ancestors_collapsed; +  foreach (ref obj; the_document_body_section) { +    if (obj.metainfo.is_a == "heading") { +      obj.metainfo.markedup_ancestors = _get_ancestors_markup(obj, _ancestors_markup); +    } +  } +  debug(ancestors) { +    writeln("ancestors markup o_n:    ", obj.metainfo.markedup_ancestors); +    writeln("ancestors collapsed o_n: ", obj.metainfo.markedup_ancestors); +  } +} +#+END_SRC +  ***** ↻ Loop section: endnotes  #+name: abs_post @@ -1879,8 +2093,9 @@ Build here:  - DOM structure    - ancestors & decendants      - ancestors could be determined earlier, but convenient to have here -    - descendants could be in the form of: headings contained under current -      heading, and/or; the range of objects under the current heading +    - descendants could be in the form of: +      - headings contained under current heading, and/or; +      - the range of objects under the current heading  - numbering    - already given      - substantive object numbers @@ -1984,8 +2199,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.metainfo.heading_lev_markup); -      obj = obj_dom_set_collapsed_tags(obj, dom_collapsed, obj.metainfo.heading_lev_collapsed); +      obj = obj_dom_structure_set_markup_tags(obj, dom_structure_markedup_tags_status, obj.metainfo.heading_lev_markup); +      obj = obj_dom_set_collapsed_tags(obj, dom_structure_collapsed_tags_status, obj.metainfo.heading_lev_collapsed);      }      obj = obj_heading_ancestors(obj, lv_ancestors_txt);    } @@ -1998,8 +2213,8 @@ foreach (ref obj; the_document_head_section) {  #+BEGIN_SRC d  if (the_table_of_contents_section["scroll"].length > 1) {    /+ scroll +/ -  dom_markedup_buffer = dom_markedup.dup; -  dom_collapsed_buffer = dom_collapsed.dup; +  dom_structure_markedup_tags_status_buffer = dom_structure_markedup_tags_status.dup; +  dom_structure_collapsed_tags_status_buffer = dom_structure_collapsed_tags_status.dup;    foreach (ref obj; the_table_of_contents_section["scroll"]) {      if (obj.metainfo.is_a == "heading") {        if (obj.metainfo.heading_lev_markup <= 4) { @@ -2018,15 +2233,15 @@ 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.metainfo.heading_lev_markup); -        obj = obj_dom_set_collapsed_tags(obj, dom_collapsed, obj.metainfo.heading_lev_collapsed); +        obj = obj_dom_structure_set_markup_tags(obj, dom_structure_markedup_tags_status, obj.metainfo.heading_lev_markup); +        obj = obj_dom_set_collapsed_tags(obj, dom_structure_collapsed_tags_status, obj.metainfo.heading_lev_collapsed);        }        obj = obj_heading_ancestors(obj, lv_ancestors_txt);      }    }    /+ seg +/ -  dom_markedup = dom_markedup_buffer.dup; -  dom_collapsed = dom_collapsed_buffer.dup; +  dom_structure_markedup_tags_status = dom_structure_markedup_tags_status_buffer.dup; +  dom_structure_collapsed_tags_status = dom_structure_collapsed_tags_status_buffer.dup;    foreach (ref obj; the_table_of_contents_section["seg"]) {      if (obj.metainfo.is_a == "heading") {        debug(dom) { @@ -2044,8 +2259,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.metainfo.heading_lev_markup); -        obj = obj_dom_set_collapsed_tags(obj, dom_collapsed, obj.metainfo.heading_lev_collapsed); +        obj = obj_dom_structure_set_markup_tags(obj, dom_structure_markedup_tags_status, obj.metainfo.heading_lev_markup); +        obj = obj_dom_set_collapsed_tags(obj, dom_structure_collapsed_tags_status, obj.metainfo.heading_lev_collapsed);        }        obj = obj_heading_ancestors(obj, lv_ancestors_txt);      } @@ -2084,8 +2299,8 @@ 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.metainfo.heading_lev_markup); -        obj = obj_dom_set_collapsed_tags(obj, dom_collapsed, obj.metainfo.heading_lev_collapsed); +        obj = obj_dom_structure_set_markup_tags(obj, dom_structure_markedup_tags_status, obj.metainfo.heading_lev_markup); +        obj = obj_dom_set_collapsed_tags(obj, dom_structure_collapsed_tags_status, obj.metainfo.heading_lev_collapsed);        }        obj = obj_heading_ancestors(obj, lv_ancestors_txt);      } else if (obj.metainfo.is_a == "para") { @@ -2105,10 +2320,10 @@ auto images=uniq(_images.sort());  #+BEGIN_SRC d  /+ optional only one 1~ level +/  if (the_endnotes_section.length > 1) { -  dom_markedup_buffer = dom_markedup.dup; -  dom_collapsed_buffer = dom_collapsed.dup; -  dom_markedup = dom_markedup_buffer.dup; -  dom_collapsed = dom_collapsed_buffer.dup; +  dom_structure_markedup_tags_status_buffer = dom_structure_markedup_tags_status.dup; +  dom_structure_collapsed_tags_status_buffer = dom_structure_collapsed_tags_status.dup; +  dom_structure_markedup_tags_status = dom_structure_markedup_tags_status_buffer.dup; +  dom_structure_collapsed_tags_status = dom_structure_collapsed_tags_status_buffer.dup;    foreach (ref obj; the_endnotes_section) {      if (obj.metainfo.is_a == "heading") {        debug(dom) { @@ -2135,8 +2350,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.metainfo.heading_lev_markup); -        obj = obj_dom_set_collapsed_tags(obj, dom_collapsed, obj.metainfo.heading_lev_collapsed); +        obj = obj_dom_structure_set_markup_tags(obj, dom_structure_markedup_tags_status, obj.metainfo.heading_lev_markup); +        obj = obj_dom_set_collapsed_tags(obj, dom_structure_collapsed_tags_status, obj.metainfo.heading_lev_collapsed);        }        obj = obj_heading_ancestors(obj, lv_ancestors_txt);      } @@ -2178,8 +2393,8 @@ 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.metainfo.heading_lev_markup); -        obj = obj_dom_set_collapsed_tags(obj, dom_collapsed, obj.metainfo.heading_lev_collapsed); +        obj = obj_dom_structure_set_markup_tags(obj, dom_structure_markedup_tags_status, obj.metainfo.heading_lev_markup); +        obj = obj_dom_set_collapsed_tags(obj, dom_structure_collapsed_tags_status, obj.metainfo.heading_lev_collapsed);        }        obj = obj_heading_ancestors(obj, lv_ancestors_txt);      } else if (obj.metainfo.is_a == "glossary") { @@ -2224,8 +2439,8 @@ 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.metainfo.heading_lev_markup); -        obj = obj_dom_set_collapsed_tags(obj, dom_collapsed, obj.metainfo.heading_lev_collapsed); +        obj = obj_dom_structure_set_markup_tags(obj, dom_structure_markedup_tags_status, obj.metainfo.heading_lev_markup); +        obj = obj_dom_set_collapsed_tags(obj, dom_structure_collapsed_tags_status, obj.metainfo.heading_lev_collapsed);        }        obj = obj_heading_ancestors(obj, lv_ancestors_txt);      } else if (obj.metainfo.is_a == "bibliography") { @@ -2248,8 +2463,8 @@ int ocn_bkidx_ = 0;  int ocn_bidx_;  if (the_bookindex_section["scroll"].length > 1) {    /+ scroll +/ -  dom_markedup_buffer = dom_markedup.dup; -  dom_collapsed_buffer = dom_collapsed.dup; +  dom_structure_markedup_tags_status_buffer = dom_structure_markedup_tags_status.dup; +  dom_structure_collapsed_tags_status_buffer = dom_structure_collapsed_tags_status.dup;    foreach (ref obj; the_bookindex_section["scroll"]) {      if (obj.metainfo.is_a == "heading") {        debug(dom) { @@ -2275,20 +2490,20 @@ 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.metainfo.heading_lev_markup); -        obj = obj_dom_set_collapsed_tags(obj, dom_collapsed, obj.metainfo.heading_lev_collapsed); +        obj = obj_dom_structure_set_markup_tags(obj, dom_structure_markedup_tags_status, obj.metainfo.heading_lev_markup); +        obj = obj_dom_set_collapsed_tags(obj, dom_structure_collapsed_tags_status, obj.metainfo.heading_lev_collapsed);        }        obj = obj_heading_ancestors(obj, lv_ancestors_txt);      } else if (obj.metainfo.is_a == "bookindex") { -      obj_cite_digits                   = ocn_emit(OCNstatus.bkidx); +      obj_cite_digits                       = ocn_emit(OCNstatus.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; +  dom_structure_markedup_tags_status = dom_structure_markedup_tags_status_buffer.dup; +  dom_structure_collapsed_tags_status = dom_structure_collapsed_tags_status_buffer.dup;    foreach (ref obj; the_bookindex_section["seg"]) {      if (obj.metainfo.is_a == "heading") {        debug(dom) { @@ -2314,12 +2529,12 @@ 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.metainfo.heading_lev_markup); -        obj = obj_dom_set_collapsed_tags(obj, dom_collapsed, obj.metainfo.heading_lev_collapsed); +        obj = obj_dom_structure_set_markup_tags(obj, dom_structure_markedup_tags_status, obj.metainfo.heading_lev_markup); +        obj = obj_dom_set_collapsed_tags(obj, dom_structure_collapsed_tags_status, obj.metainfo.heading_lev_collapsed);        }        obj = obj_heading_ancestors(obj, lv_ancestors_txt);      } else if (obj.metainfo.is_a == "bookindex") { -      ocn_bidx_ = ++ocn_bkidx_; +      ocn_bidx_                             = ++ocn_bkidx_;        obj.metainfo.o_n_book_index           = ocn_bidx_; // FIX need to distinguish from regular ocn        obj.metainfo.object_number_type       = OCNtype.bkidx;      } @@ -2363,8 +2578,8 @@ 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.metainfo.heading_lev_markup); -        obj = obj_dom_set_collapsed_tags(obj, dom_collapsed, obj.metainfo.heading_lev_collapsed); +        obj = obj_dom_structure_set_markup_tags(obj, dom_structure_markedup_tags_status, obj.metainfo.heading_lev_markup); +        obj = obj_dom_set_collapsed_tags(obj, dom_structure_collapsed_tags_status, obj.metainfo.heading_lev_collapsed);        }        obj = obj_heading_ancestors(obj, lv_ancestors_txt);      } else if (obj.metainfo.is_a == "blurb") { @@ -2383,8 +2598,8 @@ if (the_blurb_section.length > 1) {    /+ TODO      - note create/insert heading object sole purpose eof close all open tags        sort out: -      - obj.metainfo.dom_markedup = dom_markedup; -      - obj.metainfo.dom_collapsed = dom_collapsed; +      - obj.metainfo.dom_structure_markedup_tags_status = dom_structure_markedup_tags_status; +      - obj.metainfo.dom_structure_collapsed_tags_status = dom_structure_collapsed_tags_status;    +/  comp_obj_heading_                                = comp_obj_heading_.init;  comp_obj_heading_.metainfo.is_of_part            = "empty"; @@ -2399,10 +2614,10 @@ 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_.metainfo.dom_structure_markedup_tags_status          = dom_structure_markedup_tags_status.dup; +comp_obj_heading_.metainfo.dom_structure_collapsed_tags_status         = dom_structure_collapsed_tags_status.dup; +comp_obj_heading_ = obj_dom_structure_set_markup_tags(comp_obj_heading_, dom_structure_markedup_tags_status, 0); +comp_obj_heading_ = obj_dom_set_collapsed_tags(comp_obj_heading_, dom_structure_collapsed_tags_status, 0);  comp_obj_heading_ = obj_heading_ancestors(comp_obj_heading_, lv_ancestors_txt);  // the_dom_tail_section                      ~= comp_obj_heading_; // remove tail for now, decide on later  #+END_SRC @@ -2497,16 +2712,68 @@ destroy(the_blurb_section);  destroy(html_segnames);  destroy(bookindex_unordered_hashes);  destroy(an_object); -obj_cite_digits        = ocn_emit(OCNstatus.reset); -biblio_arr_json        = []; -obj_cite_digit_        = 0; -html_segnames_ptr      = 0; -html_segnames_ptr_cntr = 0; -content_non_header     = "8"; -dom_markedup           = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; -dom_markedup_buffer    = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; -dom_collapsed          = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; -dom_collapsed_buffer   = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; +obj_cite_digits                              = ocn_emit(OCNstatus.reset); +biblio_arr_json                              = []; +obj_cite_digit_                              = 0; +html_segnames_ptr                            = 0; +html_segnames_ptr_cntr                       = 0; +content_non_header                           = "8"; +dom_structure_markedup_tags_status           = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; +dom_structure_markedup_tags_status_buffer    = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; +dom_structure_collapsed_tags_status          = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; +dom_structure_collapsed_tags_status_buffer   = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; +#+END_SRC + +*** [#A] ↻ _reloop_                                                  :reloop: + +- this would work, but no need for extra loop, remove + +#+name: abs_post_doc_reloop_processing +#+BEGIN_SRC d +debug(abstraction) { +  foreach (part; sequenced_document_keys.scroll) { +    foreach (ref obj; document_the[part]) { +      debug(node_misc) { +        if (obj.metainfo.is_a == "heading") { +          writeln("heading ancestors text?: ", obj.tags.heading_ancestors_text); +        } +      } +      debug(node_headings) { +        if (obj.metainfo.is_a == "heading") { +          writeln("---"); +          writeln(obj.text); +          writeln("  node:                    ", obj.metainfo.node); +          writeln("  ocn:                     ", obj.metainfo.ocn); +          writeln("  markedup heading lev:    ", obj.metainfo.heading_lev_markup); +          writeln("  collapsed heading lev    ", obj.metainfo.heading_lev_collapsed); +          writeln("  parent ocn:              ", obj.metainfo.parent_ocn); +          writeln("  parent lev:              ", obj.metainfo.parent_lev_markup); +          writeln("  markedup ancestors o_n:  ", obj.metainfo.markedup_ancestors); +          writeln("  dom markedup:            ", obj.metainfo.dom_structure_markedup_tags_status); +          writeln("  collapsed ancestors o_n: ", obj.metainfo.collapsed_ancestors); +          writeln("  dom collapsed:           ", obj.metainfo.dom_structure_collapsed_tags_status); +        } +      } +      debug(node_all) { +        writeln("---"); +        if (obj.metainfo.is_a == "heading") { +          writeln(obj.text); +        } +        writeln("node:                    ", obj.metainfo.node); +        writeln("ocn:                     ", obj.metainfo.ocn); +        writeln("markedup heading lev:    ", obj.metainfo.heading_lev_markup); +        writeln("collapsed heading lev    ", obj.metainfo.heading_lev_collapsed); +        writeln("markedup ancestors o_n:  ", obj.metainfo.markedup_ancestors); +        writeln("collapsed ancestors o_n: ", obj.metainfo.collapsed_ancestors); +        writeln("dom markedup:            ", obj.metainfo.dom_structure_markedup_tags_status); +        writeln("dom collapsed:           ", obj.metainfo.dom_structure_collapsed_tags_status); +        writeln("parent ocn:              ", obj.metainfo.parent_ocn); +        writeln("parent lev:              ", obj.metainfo.parent_lev_markup); +        writeln("Node:                    ", obj.metainfo.ocn); +      } +    } +  } +}  #+END_SRC  *** [#A] _return document tuple_                               :return:tuple: @@ -6808,7 +7075,7 @@ struct NodeStructureMetadata {      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) { +    debug(_node) {        if (lev_markup_number.match(rgx.levels_numbered_headings)) {          writeln("x ", _node.to!string);        } else { @@ -6979,7 +7246,7 @@ struct NodeStructureMetadata {      _comp_obj_heading_.has.inline_notes_reg             = flag_notes_reg;      _comp_obj_heading_.has.inline_notes_star            = flag_notes_star;      _comp_obj_heading_.has.inline_links                 = flag_links; -    debug(node) { +    debug(_node) {        if (lev_markup_number.match(rgx.levels_numbered_headings)) {          writeln("* ", _node.to!string);        } @@ -7402,50 +7669,50 @@ struct DocObj_MetaInfo_ {                                   // metainfo      }      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                          = []; +  int[]                  markedup_ancestors                  = [ 0, 0, 0, 0, 0, 0, 0, 0,]; +  int[]                  collapsed_ancestors                 = [ 0, 0, 0, 0, 0, 0, 0, 0,]; +  int[]                  dom_structure_markedup_tags_status  = [ 0, 0, 0, 0, 0, 0, 0, 0,]; +  int[]                  dom_structure_collapsed_tags_status = [ 0, 0, 0, 0, 0, 0, 0, 0,]; +  int                    parent_lev_markup                   = 0; +  int                    parent_ocn                          = 0;  } -struct DocObj_TxtAttrib_ {                                  // attrib -  int                    indent_base                        = 0; -  int                    indent_hang                        = 0; -  bool                   bullet                             = false; -  string                 language                           = ""; // not implemented, consider +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_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_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_CodeBlock_ {                                   // code_block +  string                 syntax                              = "";  } -struct DocObj_Pointer_ {                                    // ptr -  int                    doc_object                         = 0; -  int                    html_segnames                      = 0; -  int                    heading                            = 0; +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_Tags_ {                                        // tags +  string[]               heading_ancestors_text              = [ "", "", "", "", "", "", "", "", ]; // TODO redundant? see markedup and collapsed ancestors DONE +  string                 segment_anchor_tag                  = ""; +  string                 segname_prev                        = ""; +  string                 segname_next                        = ""; +  string[]               lev4_subtoc                         = []; +  string[]               anchor_tags                         = [];  }  struct ObjGenericComposite { -  string                 text                               = ""; +  string                 text                                = "";    DocObj_MetaInfo_       metainfo;    DocObj_TxtAttrib_      attrib;    DocObj_Tags_           tags; diff --git a/org/meta_debugs.org b/org/meta_debugs.org index b89b4ea..e34a95c 100644 --- a/org/meta_debugs.org +++ b/org/meta_debugs.org @@ -310,7 +310,7 @@ debug(toc_nav_dom) {      foreach (obj; contents[sect]) {        if (obj.metainfo.is_a == "heading") {          foreach_reverse (k; 0 .. 7) { -          switch (obj.dom_markedup[k]) { +          switch (obj.dom_structure_markedup_tags_status[k]) {            case DomTags.close :              writeln(markup.indent_by_spaces_provided(k), "</", k, ">");              break; @@ -337,7 +337,7 @@ debug(toc_nav_dom) {      foreach (obj; contents[sect]) {        if (obj.metainfo.is_a == "heading") {          foreach_reverse (k; 0 .. 7) { -          switch (obj.dom_collapsed[k]) { +          switch (obj.dom_structure_collapsed_tags_status[k]) {            case DomTags.close :              writeln(markup.indent_by_spaces_provided(k), "</", k, ">");              break; diff --git a/org/output_sqlite.org b/org/output_sqlite.org index 45f8303..58e612e 100644 --- a/org/output_sqlite.org +++ b/org/output_sqlite.org @@ -1063,9 +1063,9 @@ foreach (part; doc_matters.xml.keys_seq.sql) {        if ((doc_matters.opt.action.verbose)) {          writeln(            "markup: ", obj.metainfo.heading_lev_markup, -          "> ", obj.metainfo.dom_markedup, +          "> ", obj.metainfo.dom_structure_markedup_tags_status,            "; collapsed: ", obj.metainfo.heading_lev_collapsed, -          "> ", obj.metainfo.dom_collapsed, +          "> ", obj.metainfo.dom_structure_collapsed_tags_status,            "; ocn: ", obj.metainfo.ocn,            " node: ", obj.metainfo.node,            "; parent: ", obj.metainfo.parent_lev_markup, diff --git a/org/output_xmls.org b/org/output_xmls.org index 3742975..27c3f2f 100644 --- a/org/output_xmls.org +++ b/org/output_xmls.org @@ -2058,7 +2058,7 @@ string epub3_oebps_toc_nav_xhtml(D,I)(D doc_abstraction, I doc_matters) {          string _txt = obj.text.replaceAll(rgx.inline_notes_al_gen, "").strip;          foreach_reverse (n; 0 .. 7) {            string k = n.to!string; -          switch (obj.metainfo.dom_collapsed[n]) { +          switch (obj.metainfo.dom_structure_collapsed_tags_status[n]) {            case DomTags.close :              toc ~= markup.indent_by_spaces_provided((n + 1), "  ") ~ "</li>" ~ "\n";              toc ~= markup.indent_by_spaces_provided(n, "  ") ~ "</ol>" ~ "\n"; @@ -2164,7 +2164,7 @@ string epub2_oebps_toc_ncx(D,I)(D doc_abstraction, I doc_matters) {          string _txt = obj.text.replaceAll(rgx.inline_notes_al_gen, "").strip;          string hashtag =(obj.metainfo.heading_lev_markup <= 4) ? "" : ("#" ~ obj.metainfo.ocn.to!string);          foreach_reverse (k; 0 .. 7) { -          switch (obj.metainfo.dom_markedup[k]) { +          switch (obj.metainfo.dom_structure_markedup_tags_status[k]) {            case DomTags.close :              toc ~= "\n    </navPoint>";              break; diff --git a/src/sdp/meta/doc_debugs.d b/src/sdp/meta/doc_debugs.d index c8b9dc1..bc781ee 100644 --- a/src/sdp/meta/doc_debugs.d +++ b/src/sdp/meta/doc_debugs.d @@ -120,7 +120,7 @@ template SiSUdebugs() {          foreach (obj; contents[sect]) {            if (obj.metainfo.is_a == "heading") {              foreach_reverse (k; 0 .. 7) { -              switch (obj.dom_markedup[k]) { +              switch (obj.dom_structure_markedup_tags_status[k]) {                case DomTags.close :                  writeln(markup.indent_by_spaces_provided(k), "</", k, ">");                  break; @@ -147,7 +147,7 @@ template SiSUdebugs() {          foreach (obj; contents[sect]) {            if (obj.metainfo.is_a == "heading") {              foreach_reverse (k; 0 .. 7) { -              switch (obj.dom_collapsed[k]) { +              switch (obj.dom_structure_collapsed_tags_status[k]) {                case DomTags.close :                  writeln(markup.indent_by_spaces_provided(k), "</", k, ">");                  break; diff --git a/src/sdp/meta/metadoc_from_src.d b/src/sdp/meta/metadoc_from_src.d index 9c01a47..ee82257 100644 --- a/src/sdp/meta/metadoc_from_src.d +++ b/src/sdp/meta/metadoc_from_src.d @@ -79,10 +79,10 @@ template SiSUdocAbstraction() {    OCNset obj_cite_digits;    int obj_cite_digit_, obj_cite_digit_off, obj_cite_digit_bkidx, obj_cite_digit_type;    auto object_citation_number = OCNemitter(); -  int[] dom_markedup         = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; -  int[] dom_markedup_buffer  = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; -  int[] dom_collapsed        = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; -  int[] dom_collapsed_buffer = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; +  int[] dom_structure_markedup_tags_status         = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; +  int[] dom_structure_markedup_tags_status_buffer  = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; +  int[] dom_structure_collapsed_tags_status        = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; +  int[] dom_structure_collapsed_tags_status_buffer = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,];    enum DomTags { none, open, close, close_and_open, open_still, }    pure auto obj_heading_ancestors(O)(      O          obj, @@ -178,7 +178,7 @@ template SiSUdocAbstraction() {      debug(dom_magic_numbers) {        writeln("marked up: ", lev, ": ", dom);      } -    obj.metainfo.dom_markedup = dom.dup; +    obj.metainfo.dom_structure_markedup_tags_status = dom.dup;      return obj;    }    pure auto obj_dom_set_collapsed_tags(O)( @@ -222,7 +222,7 @@ template SiSUdocAbstraction() {      debug(dom_magic_numbers) {        writeln("collapsed: ", lev, ": ", dom);      } -    obj.metainfo.dom_collapsed = dom.dup; +    obj.metainfo.dom_structure_collapsed_tags_status = dom.dup;      return obj;    }    static auto ocn_emit(int ocn_status_flag) { @@ -323,27 +323,27 @@ template SiSUdocAbstraction() {      ];      string _anchor_tag;      string toc_txt_; -    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_; +    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_structure_markedup_tags_status  = [ 1, 1, 0, 0, 1, 0, 0, 0]; +    comp_obj_heading_.metainfo.dom_structure_collapsed_tags_status = [ 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], @@ -478,8 +478,8 @@ template SiSUdocAbstraction() {                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]; +              comp_obj_heading_.metainfo.dom_structure_markedup_tags_status  = [ 1, 1, 0, 0, 0, 0, 0, 0]; +              comp_obj_heading_.metainfo.dom_structure_collapsed_tags_status = [ 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"; @@ -495,8 +495,8 @@ template SiSUdocAbstraction() {                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_.metainfo.dom_structure_markedup_tags_status  = [ 1, 1, 0, 0, 1, 0, 0, 0]; +              comp_obj_heading_.metainfo.dom_structure_collapsed_tags_status = [ 1, 1, 1, 0, 0, 0, 0, 0];                comp_obj_heading_.tags.anchor_tags               = ["glossary"];                the_glossary_section                             ~= comp_obj_heading_;              } else { @@ -570,41 +570,41 @@ template SiSUdocAbstraction() {              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_.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_; +              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_structure_markedup_tags_status  = [ 1, 1, 0, 0, 0, 0, 0, 0]; +              comp_obj_heading_.metainfo.dom_structure_collapsed_tags_status = [ 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_structure_markedup_tags_status  = [ 1, 1, 0, 0, 1, 0, 0, 0]; +              comp_obj_heading_.metainfo.dom_structure_collapsed_tags_status = [ 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; @@ -621,7 +621,7 @@ template SiSUdocAbstraction() {                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_; +              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; @@ -1325,6 +1325,197 @@ template SiSUdocAbstraction() {      }      the_document_head_section ~= the_document_body_section[0];      the_document_body_section=the_document_body_section[1..$]; +    int[] _get_ancestors_markup(O)(O obj, ref int[] _ancestors_markup) { +      if (obj.metainfo.is_a == "heading") { +        debug(dom) { +          writeln(obj.text); +        } +        if (obj.metainfo.heading_lev_markup == 1) { +          _ancestors_markup = [ +            _ancestors_markup[0], +            0,0,0,0,0,0,0 +          ]; +        } +        if (obj.metainfo.heading_lev_markup == 2) { +          _ancestors_markup = [ +            _ancestors_markup[0], +            _ancestors_markup[1], +            0,0,0,0,0,0 +          ]; +        } +        if (obj.metainfo.heading_lev_markup == 3) { +          _ancestors_markup = [ +            _ancestors_markup[0], +            _ancestors_markup[1], +            _ancestors_markup[2], +            0,0,0,0,0 +          ]; +        } +        if (obj.metainfo.heading_lev_markup == 4) { +          _ancestors_markup = [ +            _ancestors_markup[0], +            _ancestors_markup[1], +            _ancestors_markup[2], +            _ancestors_markup[3], +            0,0,0,0 +          ]; +        } +        if (obj.metainfo.heading_lev_markup == 5) { +          _ancestors_markup = [ +            _ancestors_markup[0], +            _ancestors_markup[1], +            _ancestors_markup[2], +            _ancestors_markup[3], +            _ancestors_markup[4], +            0,0,0 +          ]; +        } +        if (obj.metainfo.heading_lev_markup == 6) { +          _ancestors_markup = [ +            _ancestors_markup[0], +            _ancestors_markup[1], +            _ancestors_markup[2], +            _ancestors_markup[3], +            _ancestors_markup[4], +            _ancestors_markup[5], +            0,0 +          ]; +        } +        if (obj.metainfo.heading_lev_markup == 7) { +          _ancestors_markup = [ +            _ancestors_markup[0], +            _ancestors_markup[1], +            _ancestors_markup[2], +            _ancestors_markup[3], +            _ancestors_markup[4], +            _ancestors_markup[5], +            _ancestors_markup[6], +            0 +          ]; +        } +        if (obj.metainfo.heading_lev_markup == 8) { +          _ancestors_markup = [ +            _ancestors_markup[0], +            _ancestors_markup[1], +            _ancestors_markup[2], +            _ancestors_markup[3], +            _ancestors_markup[4], +            _ancestors_markup[5], +            _ancestors_markup[6], +            _ancestors_markup[7] +          ]; +        } +        _ancestors_markup[obj.metainfo.heading_lev_markup] = obj.metainfo.ocn; +      } +      debug(ancestor_markup) { +        writeln("marked up: ", _ancestors_markup); +      } +      return _ancestors_markup; +    } +    int[] _get_ancestors_collapsed(O)(O obj, ref int[] _ancestors_collapsed) { +      if (obj.metainfo.is_a == "heading") { +        if (obj.metainfo.heading_lev_collapsed == 1) { +          _ancestors_collapsed = [ +            _ancestors_collapsed[0], +            0,0,0,0,0,0,0 +          ]; +        } +        if (obj.metainfo.heading_lev_collapsed == 2) { +          _ancestors_collapsed = [ +            _ancestors_collapsed[0], +            _ancestors_collapsed[1], +            0,0,0,0,0,0 +          ]; +        } +        if (obj.metainfo.heading_lev_collapsed == 3) { +          _ancestors_collapsed = [ +            _ancestors_collapsed[0], +            _ancestors_collapsed[1], +            _ancestors_collapsed[2], +            0,0,0,0,0 +          ]; +        } +        if (obj.metainfo.heading_lev_collapsed == 4) { +          _ancestors_collapsed = [ +            _ancestors_collapsed[0], +            _ancestors_collapsed[1], +            _ancestors_collapsed[2], +            _ancestors_collapsed[3], +            0,0,0,0 +          ]; +        } +        if (obj.metainfo.heading_lev_collapsed == 5) { +          _ancestors_collapsed = [ +            _ancestors_collapsed[0], +            _ancestors_collapsed[1], +            _ancestors_collapsed[2], +            _ancestors_collapsed[3], +            _ancestors_collapsed[4], +            0,0,0 +          ]; +        } +        if (obj.metainfo.heading_lev_collapsed == 6) { +          _ancestors_collapsed = [ +            _ancestors_collapsed[0], +            _ancestors_collapsed[1], +            _ancestors_collapsed[2], +            _ancestors_collapsed[3], +            _ancestors_collapsed[4], +            _ancestors_collapsed[5], +            0,0 +          ]; +        } +        if (obj.metainfo.heading_lev_collapsed == 7) { +          _ancestors_collapsed = [ +            _ancestors_collapsed[0], +            _ancestors_collapsed[1], +            _ancestors_collapsed[2], +            _ancestors_collapsed[3], +            _ancestors_collapsed[4], +            _ancestors_collapsed[5], +            _ancestors_collapsed[6], +            0 +          ]; +        } +        if (obj.metainfo.heading_lev_collapsed == 8) { +          _ancestors_collapsed = [ +            _ancestors_collapsed[0], +            _ancestors_collapsed[1], +            _ancestors_collapsed[2], +            _ancestors_collapsed[3], +            _ancestors_collapsed[4], +            _ancestors_collapsed[5], +            _ancestors_collapsed[6], +            _ancestors_collapsed[7] +          ]; +        } +        _ancestors_collapsed[obj.metainfo.heading_lev_collapsed] = obj.metainfo.ocn; +      } +      debug(ancestor_collapsed) { +        writeln("collapsed: ", _ancestors_collapsed); +      } +      return _ancestors_collapsed; +    } +    /+ multiple 1~ levels, loop through document body +/ +    if (the_document_body_section.length > 1) { +      int[] _ancestors_markup = [0,0,0,0,0,0,0,0]; +      int[][] _ancestors_markup_; +      _ancestors_markup = [1,0,0,0,0,0,0,0]; +      _ancestors_markup_ ~= _ancestors_markup; +      int[] _ancestors_collapsed = [0,0,0,0,0,0,0,0]; +      int[][] _ancestors_collapsed_; +      _ancestors_collapsed = [1,0,0,0,0,0,0,0]; +      _ancestors_collapsed_ ~= _ancestors_collapsed; +      foreach (ref obj; the_document_body_section) { +        if (obj.metainfo.is_a == "heading") { +          obj.metainfo.markedup_ancestors = _get_ancestors_markup(obj, _ancestors_markup); +        } +      } +      debug(ancestors) { +        writeln("ancestors markup o_n:    ", obj.metainfo.markedup_ancestors); +        writeln("ancestors collapsed o_n: ", obj.metainfo.markedup_ancestors); +      } +    }      if (the_endnotes_section.length > 1) {        html_segnames ~= "endnotes";        html_segnames_ptr = html_segnames_ptr_cntr; @@ -1453,16 +1644,16 @@ template SiSUdocAbstraction() {          || (opt_action.sqlite_discrete)          || (opt_action.sqlite_update)          || (opt_action.postgresql)) { -          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_dom_structure_set_markup_tags(obj, dom_structure_markedup_tags_status, obj.metainfo.heading_lev_markup); +          obj = obj_dom_set_collapsed_tags(obj, dom_structure_collapsed_tags_status, obj.metainfo.heading_lev_collapsed);          }          obj = obj_heading_ancestors(obj, lv_ancestors_txt);        }      }      if (the_table_of_contents_section["scroll"].length > 1) {        /+ scroll +/ -      dom_markedup_buffer = dom_markedup.dup; -      dom_collapsed_buffer = dom_collapsed.dup; +      dom_structure_markedup_tags_status_buffer = dom_structure_markedup_tags_status.dup; +      dom_structure_collapsed_tags_status_buffer = dom_structure_collapsed_tags_status.dup;        foreach (ref obj; the_table_of_contents_section["scroll"]) {          if (obj.metainfo.is_a == "heading") {            if (obj.metainfo.heading_lev_markup <= 4) { @@ -1481,15 +1672,15 @@ template SiSUdocAbstraction() {            || (opt_action.sqlite_discrete)            || (opt_action.sqlite_update)            || (opt_action.postgresql)) { -            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_dom_structure_set_markup_tags(obj, dom_structure_markedup_tags_status, obj.metainfo.heading_lev_markup); +            obj = obj_dom_set_collapsed_tags(obj, dom_structure_collapsed_tags_status, obj.metainfo.heading_lev_collapsed);            }            obj = obj_heading_ancestors(obj, lv_ancestors_txt);          }        }        /+ seg +/ -      dom_markedup = dom_markedup_buffer.dup; -      dom_collapsed = dom_collapsed_buffer.dup; +      dom_structure_markedup_tags_status = dom_structure_markedup_tags_status_buffer.dup; +      dom_structure_collapsed_tags_status = dom_structure_collapsed_tags_status_buffer.dup;        foreach (ref obj; the_table_of_contents_section["seg"]) {          if (obj.metainfo.is_a == "heading") {            debug(dom) { @@ -1507,8 +1698,8 @@ template SiSUdocAbstraction() {            || (opt_action.html_scroll)            || (opt_action.html_seg)            || (opt_action.epub)) { -            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_dom_structure_set_markup_tags(obj, dom_structure_markedup_tags_status, obj.metainfo.heading_lev_markup); +            obj = obj_dom_set_collapsed_tags(obj, dom_structure_collapsed_tags_status, obj.metainfo.heading_lev_collapsed);            }            obj = obj_heading_ancestors(obj, lv_ancestors_txt);          } @@ -1541,8 +1732,8 @@ template SiSUdocAbstraction() {            || (opt_action.sqlite_discrete)            || (opt_action.sqlite_update)            || (opt_action.postgresql)) { -            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_dom_structure_set_markup_tags(obj, dom_structure_markedup_tags_status, obj.metainfo.heading_lev_markup); +            obj = obj_dom_set_collapsed_tags(obj, dom_structure_collapsed_tags_status, obj.metainfo.heading_lev_collapsed);            }            obj = obj_heading_ancestors(obj, lv_ancestors_txt);          } else if (obj.metainfo.is_a == "para") { @@ -1554,10 +1745,10 @@ template SiSUdocAbstraction() {      auto images=uniq(_images.sort());      /+ optional only one 1~ level +/      if (the_endnotes_section.length > 1) { -      dom_markedup_buffer = dom_markedup.dup; -      dom_collapsed_buffer = dom_collapsed.dup; -      dom_markedup = dom_markedup_buffer.dup; -      dom_collapsed = dom_collapsed_buffer.dup; +      dom_structure_markedup_tags_status_buffer = dom_structure_markedup_tags_status.dup; +      dom_structure_collapsed_tags_status_buffer = dom_structure_collapsed_tags_status.dup; +      dom_structure_markedup_tags_status = dom_structure_markedup_tags_status_buffer.dup; +      dom_structure_collapsed_tags_status = dom_structure_collapsed_tags_status_buffer.dup;        foreach (ref obj; the_endnotes_section) {          if (obj.metainfo.is_a == "heading") {            debug(dom) { @@ -1584,8 +1775,8 @@ template SiSUdocAbstraction() {            || (opt_action.sqlite_discrete)            || (opt_action.sqlite_update)            || (opt_action.postgresql)) { -            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_dom_structure_set_markup_tags(obj, dom_structure_markedup_tags_status, obj.metainfo.heading_lev_markup); +            obj = obj_dom_set_collapsed_tags(obj, dom_structure_collapsed_tags_status, obj.metainfo.heading_lev_collapsed);            }            obj = obj_heading_ancestors(obj, lv_ancestors_txt);          } @@ -1619,8 +1810,8 @@ template SiSUdocAbstraction() {            || (opt_action.sqlite_discrete)            || (opt_action.sqlite_update)            || (opt_action.postgresql)) { -            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_dom_structure_set_markup_tags(obj, dom_structure_markedup_tags_status, obj.metainfo.heading_lev_markup); +            obj = obj_dom_set_collapsed_tags(obj, dom_structure_collapsed_tags_status, obj.metainfo.heading_lev_collapsed);            }            obj = obj_heading_ancestors(obj, lv_ancestors_txt);          } else if (obj.metainfo.is_a == "glossary") { @@ -1657,8 +1848,8 @@ template SiSUdocAbstraction() {            || (opt_action.sqlite_discrete)            || (opt_action.sqlite_update)            || (opt_action.postgresql)) { -            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_dom_structure_set_markup_tags(obj, dom_structure_markedup_tags_status, obj.metainfo.heading_lev_markup); +            obj = obj_dom_set_collapsed_tags(obj, dom_structure_collapsed_tags_status, obj.metainfo.heading_lev_collapsed);            }            obj = obj_heading_ancestors(obj, lv_ancestors_txt);          } else if (obj.metainfo.is_a == "bibliography") { @@ -1673,8 +1864,8 @@ template SiSUdocAbstraction() {      int ocn_bidx_;      if (the_bookindex_section["scroll"].length > 1) {        /+ scroll +/ -      dom_markedup_buffer = dom_markedup.dup; -      dom_collapsed_buffer = dom_collapsed.dup; +      dom_structure_markedup_tags_status_buffer = dom_structure_markedup_tags_status.dup; +      dom_structure_collapsed_tags_status_buffer = dom_structure_collapsed_tags_status.dup;        foreach (ref obj; the_bookindex_section["scroll"]) {          if (obj.metainfo.is_a == "heading") {            debug(dom) { @@ -1700,20 +1891,20 @@ template SiSUdocAbstraction() {            || (opt_action.sqlite_discrete)            || (opt_action.sqlite_update)            || (opt_action.postgresql)) { -            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_dom_structure_set_markup_tags(obj, dom_structure_markedup_tags_status, obj.metainfo.heading_lev_markup); +            obj = obj_dom_set_collapsed_tags(obj, dom_structure_collapsed_tags_status, obj.metainfo.heading_lev_collapsed);            }            obj = obj_heading_ancestors(obj, lv_ancestors_txt);          } else if (obj.metainfo.is_a == "bookindex") { -          obj_cite_digits                   = ocn_emit(OCNstatus.bkidx); +          obj_cite_digits                       = ocn_emit(OCNstatus.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; +      dom_structure_markedup_tags_status = dom_structure_markedup_tags_status_buffer.dup; +      dom_structure_collapsed_tags_status = dom_structure_collapsed_tags_status_buffer.dup;        foreach (ref obj; the_bookindex_section["seg"]) {          if (obj.metainfo.is_a == "heading") {            debug(dom) { @@ -1739,12 +1930,12 @@ template SiSUdocAbstraction() {            || (opt_action.sqlite_discrete)            || (opt_action.sqlite_update)            || (opt_action.postgresql)) { -            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_dom_structure_set_markup_tags(obj, dom_structure_markedup_tags_status, obj.metainfo.heading_lev_markup); +            obj = obj_dom_set_collapsed_tags(obj, dom_structure_collapsed_tags_status, obj.metainfo.heading_lev_collapsed);            }            obj = obj_heading_ancestors(obj, lv_ancestors_txt);          } else if (obj.metainfo.is_a == "bookindex") { -          ocn_bidx_ = ++ocn_bkidx_; +          ocn_bidx_                             = ++ocn_bkidx_;            obj.metainfo.o_n_book_index           = ocn_bidx_; // FIX need to distinguish from regular ocn            obj.metainfo.object_number_type       = OCNtype.bkidx;          } @@ -1782,8 +1973,8 @@ template SiSUdocAbstraction() {            || (opt_action.sqlite_discrete)            || (opt_action.sqlite_update)            || (opt_action.postgresql)) { -            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_dom_structure_set_markup_tags(obj, dom_structure_markedup_tags_status, obj.metainfo.heading_lev_markup); +            obj = obj_dom_set_collapsed_tags(obj, dom_structure_collapsed_tags_status, obj.metainfo.heading_lev_collapsed);            }            obj = obj_heading_ancestors(obj, lv_ancestors_txt);          } else if (obj.metainfo.is_a == "blurb") { @@ -1796,8 +1987,8 @@ template SiSUdocAbstraction() {        /+ TODO          - note create/insert heading object sole purpose eof close all open tags            sort out: -          - obj.metainfo.dom_markedup = dom_markedup; -          - obj.metainfo.dom_collapsed = dom_collapsed; +          - obj.metainfo.dom_structure_markedup_tags_status = dom_structure_markedup_tags_status; +          - obj.metainfo.dom_structure_collapsed_tags_status = dom_structure_collapsed_tags_status;        +/      comp_obj_heading_                                = comp_obj_heading_.init;      comp_obj_heading_.metainfo.is_of_part            = "empty"; @@ -1812,10 +2003,10 @@ template SiSUdocAbstraction() {      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_.metainfo.dom_structure_markedup_tags_status          = dom_structure_markedup_tags_status.dup; +    comp_obj_heading_.metainfo.dom_structure_collapsed_tags_status         = dom_structure_collapsed_tags_status.dup; +    comp_obj_heading_ = obj_dom_structure_set_markup_tags(comp_obj_heading_, dom_structure_markedup_tags_status, 0); +    comp_obj_heading_ = obj_dom_set_collapsed_tags(comp_obj_heading_, dom_structure_collapsed_tags_status, 0);      comp_obj_heading_ = obj_heading_ancestors(comp_obj_heading_, lv_ancestors_txt);      // the_dom_tail_section                      ~= comp_obj_heading_; // remove tail for now, decide on later      auto document_the = [ @@ -1885,16 +2076,60 @@ template SiSUdocAbstraction() {      destroy(html_segnames);      destroy(bookindex_unordered_hashes);      destroy(an_object); -    obj_cite_digits        = ocn_emit(OCNstatus.reset); -    biblio_arr_json        = []; -    obj_cite_digit_        = 0; -    html_segnames_ptr      = 0; -    html_segnames_ptr_cntr = 0; -    content_non_header     = "8"; -    dom_markedup           = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; -    dom_markedup_buffer    = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; -    dom_collapsed          = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; -    dom_collapsed_buffer   = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; +    obj_cite_digits                              = ocn_emit(OCNstatus.reset); +    biblio_arr_json                              = []; +    obj_cite_digit_                              = 0; +    html_segnames_ptr                            = 0; +    html_segnames_ptr_cntr                       = 0; +    content_non_header                           = "8"; +    dom_structure_markedup_tags_status           = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; +    dom_structure_markedup_tags_status_buffer    = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; +    dom_structure_collapsed_tags_status          = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; +    dom_structure_collapsed_tags_status_buffer   = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; +    debug(abstraction) { +      foreach (part; sequenced_document_keys.scroll) { +        foreach (ref obj; document_the[part]) { +          debug(node_misc) { +            if (obj.metainfo.is_a == "heading") { +              writeln("heading ancestors text?: ", obj.tags.heading_ancestors_text); +            } +          } +          debug(node_headings) { +            if (obj.metainfo.is_a == "heading") { +              writeln("---"); +              writeln(obj.text); +              writeln("  node:                    ", obj.metainfo.node); +              writeln("  ocn:                     ", obj.metainfo.ocn); +              writeln("  markedup heading lev:    ", obj.metainfo.heading_lev_markup); +              writeln("  collapsed heading lev    ", obj.metainfo.heading_lev_collapsed); +              writeln("  parent ocn:              ", obj.metainfo.parent_ocn); +              writeln("  parent lev:              ", obj.metainfo.parent_lev_markup); +              writeln("  markedup ancestors o_n:  ", obj.metainfo.markedup_ancestors); +              writeln("  dom markedup:            ", obj.metainfo.dom_structure_markedup_tags_status); +              writeln("  collapsed ancestors o_n: ", obj.metainfo.collapsed_ancestors); +              writeln("  dom collapsed:           ", obj.metainfo.dom_structure_collapsed_tags_status); +            } +          } +          debug(node_all) { +            writeln("---"); +            if (obj.metainfo.is_a == "heading") { +              writeln(obj.text); +            } +            writeln("node:                    ", obj.metainfo.node); +            writeln("ocn:                     ", obj.metainfo.ocn); +            writeln("markedup heading lev:    ", obj.metainfo.heading_lev_markup); +            writeln("collapsed heading lev    ", obj.metainfo.heading_lev_collapsed); +            writeln("markedup ancestors o_n:  ", obj.metainfo.markedup_ancestors); +            writeln("collapsed ancestors o_n: ", obj.metainfo.collapsed_ancestors); +            writeln("dom markedup:            ", obj.metainfo.dom_structure_markedup_tags_status); +            writeln("dom collapsed:           ", obj.metainfo.dom_structure_collapsed_tags_status); +            writeln("parent ocn:              ", obj.metainfo.parent_ocn); +            writeln("parent lev:              ", obj.metainfo.parent_lev_markup); +            writeln("Node:                    ", obj.metainfo.ocn); +          } +        } +      } +    }      auto t = tuple(        document_the,        sequenced_document_keys, @@ -5473,7 +5708,7 @@ template SiSUdocAbstraction() {        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) { +      debug(_node) {          if (lev_markup_number.match(rgx.levels_numbered_headings)) {            writeln("x ", _node.to!string);          } else { @@ -5638,7 +5873,7 @@ template SiSUdocAbstraction() {        _comp_obj_heading_.has.inline_notes_reg             = flag_notes_reg;        _comp_obj_heading_.has.inline_notes_star            = flag_notes_star;        _comp_obj_heading_.has.inline_links                 = flag_links; -      debug(node) { +      debug(_node) {          if (lev_markup_number.match(rgx.levels_numbered_headings)) {            writeln("* ", _node.to!string);          } diff --git a/src/sdp/meta/object_setter.d b/src/sdp/meta/object_setter.d index a928ec8..09ce2ee 100644 --- a/src/sdp/meta/object_setter.d +++ b/src/sdp/meta/object_setter.d @@ -99,50 +99,50 @@ template ObjectSetter() {        }        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                          = []; +    int[]                  markedup_ancestors                  = [ 0, 0, 0, 0, 0, 0, 0, 0,]; +    int[]                  collapsed_ancestors                 = [ 0, 0, 0, 0, 0, 0, 0, 0,]; +    int[]                  dom_structure_markedup_tags_status  = [ 0, 0, 0, 0, 0, 0, 0, 0,]; +    int[]                  dom_structure_collapsed_tags_status = [ 0, 0, 0, 0, 0, 0, 0, 0,]; +    int                    parent_lev_markup                   = 0; +    int                    parent_ocn                          = 0;    } -  struct DocObj_TxtAttrib_ {                                  // attrib -    int                    indent_base                        = 0; -    int                    indent_hang                        = 0; -    bool                   bullet                             = false; -    string                 language                           = ""; // not implemented, consider +  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_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_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_CodeBlock_ {                                   // code_block +    string                 syntax                              = "";    } -  struct DocObj_Pointer_ {                                    // ptr -    int                    doc_object                         = 0; -    int                    html_segnames                      = 0; -    int                    heading                            = 0; +  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_Tags_ {                                        // tags +    string[]               heading_ancestors_text              = [ "", "", "", "", "", "", "", "", ]; // TODO redundant? see markedup and collapsed ancestors DONE +    string                 segment_anchor_tag                  = ""; +    string                 segname_prev                        = ""; +    string                 segname_next                        = ""; +    string[]               lev4_subtoc                         = []; +    string[]               anchor_tags                         = [];    }    struct ObjGenericComposite { -    string                 text                               = ""; +    string                 text                                = "";      DocObj_MetaInfo_       metainfo;      DocObj_TxtAttrib_      attrib;      DocObj_Tags_           tags; diff --git a/src/sdp/output/epub3.d b/src/sdp/output/epub3.d index 0e864f7..dce1b0c 100644 --- a/src/sdp/output/epub3.d +++ b/src/sdp/output/epub3.d @@ -150,7 +150,7 @@ template outputEPub3() {            string _txt = obj.text.replaceAll(rgx.inline_notes_al_gen, "").strip;            foreach_reverse (n; 0 .. 7) {              string k = n.to!string; -            switch (obj.metainfo.dom_collapsed[n]) { +            switch (obj.metainfo.dom_structure_collapsed_tags_status[n]) {              case DomTags.close :                toc ~= markup.indent_by_spaces_provided((n + 1), "  ") ~ "</li>" ~ "\n";                toc ~= markup.indent_by_spaces_provided(n, "  ") ~ "</ol>" ~ "\n"; @@ -247,7 +247,7 @@ template outputEPub3() {            string _txt = obj.text.replaceAll(rgx.inline_notes_al_gen, "").strip;            string hashtag =(obj.metainfo.heading_lev_markup <= 4) ? "" : ("#" ~ obj.metainfo.ocn.to!string);            foreach_reverse (k; 0 .. 7) { -            switch (obj.metainfo.dom_markedup[k]) { +            switch (obj.metainfo.dom_structure_markedup_tags_status[k]) {              case DomTags.close :                toc ~= "\n    </navPoint>";                break; diff --git a/src/sdp/output/sqlite.d b/src/sdp/output/sqlite.d index 1aa578d..636fe6f 100644 --- a/src/sdp/output/sqlite.d +++ b/src/sdp/output/sqlite.d @@ -1031,9 +1031,9 @@ template SQLiteInsertDocObjectsLoop() {            if ((doc_matters.opt.action.verbose)) {              writeln(                "markup: ", obj.metainfo.heading_lev_markup, -              "> ", obj.metainfo.dom_markedup, +              "> ", obj.metainfo.dom_structure_markedup_tags_status,                "; collapsed: ", obj.metainfo.heading_lev_collapsed, -              "> ", obj.metainfo.dom_collapsed, +              "> ", obj.metainfo.dom_structure_collapsed_tags_status,                "; ocn: ", obj.metainfo.ocn,                " node: ", obj.metainfo.node,                "; parent: ", obj.metainfo.parent_lev_markup, | 
