diff options
Diffstat (limited to 'org')
| -rw-r--r-- | org/meta_abstraction.org | 148 | ||||
| -rw-r--r-- | org/meta_debugs.org | 39 | 
2 files changed, 175 insertions, 12 deletions
| diff --git a/org/meta_abstraction.org b/org/meta_abstraction.org index 384c8db..6b6ad9f 100644 --- a/org/meta_abstraction.org +++ b/org/meta_abstraction.org @@ -1977,6 +1977,7 @@ if (the_document_body_section.length > 1) {    foreach (ref obj; the_document_body_section) {      if (obj.metainfo.is_a == "heading") {        obj.metainfo.markedup_ancestors = _get_ancestors_markup(obj, _ancestors_markup); +      obj.metainfo.collapsed_ancestors = _get_ancestors_collapsed(obj, _ancestors_collapsed);      }    }    debug(ancestors) { @@ -2116,6 +2117,60 @@ Build here:  - next are not yet known for backmatter during the second pas  ***** Methods +****** decendants + +#+name: abs_post +#+BEGIN_SRC d +auto get_decendants(S)(S document_sections) { +  int[string] _heading_ocn_decendants; +  string[] _ocn_open_key = ["","","","","","","",""]; +  auto _doc_sect_length = document_sections.length - 1; +  int _last_ocn; +  foreach (_lg, ref obj; document_sections) { // TODO the_document_body_section +    if (obj.metainfo.is_a == "heading") { +      foreach (_dts_lv, dom_tag_status; obj.metainfo.dom_structure_markedup_tags_status) { +        switch (dom_tag_status) { +        case DomTags.none: break; +        case DomTags.open: +            _ocn_open_key[_dts_lv] = (obj.metainfo.ocn).to!string; +            _heading_ocn_decendants[_ocn_open_key[_dts_lv]] = obj.metainfo.ocn; +          break; +        case DomTags.close: +          if (_ocn_open_key[_dts_lv].empty) { +            _ocn_open_key[_dts_lv] = "0"; +          } +          _heading_ocn_decendants[_ocn_open_key[_dts_lv]] = obj.metainfo.ocn - 1; +          _ocn_open_key[_dts_lv] = (0).to!string; +          break; +        case DomTags.close_and_open: +          if (_ocn_open_key[_dts_lv].empty) { +            _ocn_open_key[_dts_lv] = "0"; +          } +          _heading_ocn_decendants[_ocn_open_key[_dts_lv]] = obj.metainfo.ocn - 1; +          _ocn_open_key[_dts_lv] = (obj.metainfo.ocn).to!string; +          _heading_ocn_decendants[_ocn_open_key[_dts_lv]] = obj.metainfo.ocn; +          break; +        case DomTags.open_still: break; +        default: break; +        } +      } +    } +    if (obj.metainfo.ocn > 0) { +      _last_ocn = obj.metainfo.ocn; +    } +    if (_lg == _doc_sect_length) { +      _heading_ocn_decendants["1"] = _last_ocn; // close existing o_n key +    } +  } +  Tuple!(int, int)[] pairs; +  foreach (pair; _heading_ocn_decendants.byPair) { +    pairs ~= tuple(pair[0].to!int, pair[1]); +    // pairs ~= tuple(pair.key.to!int, pair.value); +  } +  return pairs.sort; +} +#+END_SRC +  ****** images: extract  #+name: abs_post @@ -2591,6 +2646,98 @@ if (the_blurb_section.length > 1) {  }  #+END_SRC +***** ↻ Loop sections: get decendants + +#+name: abs_post +#+BEGIN_SRC d +if (the_document_body_section.length > 1) { +  auto pairs = get_decendants( +    the_document_head_section ~ +    the_document_body_section ~ +    the_endnotes_section ~ +    the_glossary_section ~ +    the_bibliography_section ~ +    the_bookindex_section["scroll"] ~ +    the_blurb_section +  ); +  foreach (ref obj; the_document_head_section) { +    if (obj.metainfo.is_a == "heading") { +      foreach (pair; pairs) { +        if (obj.metainfo.ocn == pair[0]) { +          obj.metainfo.last_decendant_ocn = pair[1]; +        } +      } +    } +  } +  if (the_document_body_section.length > 1) { +    foreach (ref obj; the_document_body_section) { +      if (obj.metainfo.is_a == "heading") { +        foreach (pair; pairs) { +          if (obj.metainfo.ocn == pair[0]) { +            obj.metainfo.last_decendant_ocn = pair[1]; +          } +        } +      } +    } +  } +  if (the_endnotes_section.length > 1) { +    foreach (ref obj; the_endnotes_section) { +      if (obj.metainfo.is_a == "heading") { +        foreach (pair; pairs) { +          if (obj.metainfo.ocn == pair[0]) { +            obj.metainfo.last_decendant_ocn = pair[1]; +          } +        } +      } +    } +  } +  if (the_glossary_section.length > 1) { +    foreach (ref obj; the_glossary_section) { +      if (obj.metainfo.is_a == "heading") { +        foreach (pair; pairs) { +          if (obj.metainfo.ocn == pair[0]) { +            obj.metainfo.last_decendant_ocn = pair[1]; +          } +        } +      } +    } +  } +  if (the_bibliography_section.length > 1) { +    foreach (ref obj; the_bibliography_section) { +      if (obj.metainfo.is_a == "heading") { +        foreach (pair; pairs) { +          if (obj.metainfo.ocn == pair[0]) { +            obj.metainfo.last_decendant_ocn = pair[1]; +          } +        } +      } +    } +  } +  if (the_bookindex_section["scroll"].length > 1) { +    foreach (ref obj; the_bookindex_section["scroll"]) { +      if (obj.metainfo.is_a == "heading") { +        foreach (pair; pairs) { +          if (obj.metainfo.ocn == pair[0]) { +            obj.metainfo.last_decendant_ocn = pair[1]; +          } +        } +      } +    } +  } +  if (the_blurb_section.length > 1) { +    foreach (ref obj; the_blurb_section) { +      if (obj.metainfo.is_a == "heading") { +        foreach (pair; pairs) { +          if (obj.metainfo.ocn == pair[0]) { +            obj.metainfo.last_decendant_ocn = pair[1]; +          } +        } +      } +    } +  } +} +#+END_SRC +  **** TODO update BUG?  #+name: abs_post @@ -7613,6 +7760,7 @@ struct DocObj_MetaInfo_ {                                   // metainfo    int[]                  dom_structure_collapsed_tags_status = [ 0, 0, 0, 0, 0, 0, 0, 0,];    int                    parent_lev_markup                   = 0;    int                    parent_ocn                          = 0; +  int                    last_decendant_ocn                  = 0;                          // DONE  }  struct DocObj_TxtAttrib_ {                                   // attrib    int                    indent_base                         = 0; diff --git a/org/meta_debugs.org b/org/meta_debugs.org index e34a95c..8542a32 100644 --- a/org/meta_debugs.org +++ b/org/meta_debugs.org @@ -115,18 +115,18 @@ debug(dumpdoc) {      __FILE__,      __LINE__,    ); -  if (key.length > 0) { -    foreach (obj; contents[key]) { -      if (obj.metainfo.is_of_part != "empty") { -        writefln( -          "[%s][%s]\n%s", -          obj.object_number, -          obj.metainfo.is_a, -          obj.text -        ); -      } -    } -  } +  // if (key.length > 0) { +  //   foreach (obj; contents[key]) { +  //     if (obj.metainfo.is_of_part != "empty") { +  //       writefln( +  //         "[%s][%s]\n%s", +  //         obj.object_number, +  //         obj.metainfo.is_a, +  //         obj.text +  //       ); +  //     } +  //   } +  // }  }  #+END_SRC @@ -362,6 +362,21 @@ debug(toc_nav_dom) {  }  #+END_SRC +*** decendants + +#+name: meta_output_debugs +#+BEGIN_SRC d +debug(decendants) { +  foreach (sect; doc_matters.xml.keys_seq.scroll) { +    foreach (obj; contents[sect]) { +      if (obj.metainfo.is_a == "heading") { +        writeln(obj.metainfo.ocn, " .. ", obj.metainfo.last_decendant_ocn); +      } +    } +  } +} +#+END_SRC +  *** endnotes_section (seg & scroll)                              :endnotes:  **** endnotes | 
