diff options
| -rw-r--r-- | org/ao_abstract_doc_source.org | 386 | ||||
| -rw-r--r-- | org/ao_output_debugs.org | 102 | ||||
| -rw-r--r-- | org/output.org | 5 | ||||
| -rw-r--r-- | org/sdp.org | 11 | ||||
| -rwxr-xr-x | src/sdp.d | 9 | ||||
| -rw-r--r-- | src/sdp/ao_abstract_doc_source.d | 338 | ||||
| -rw-r--r-- | src/sdp/ao_object_setter.d | 48 | ||||
| -rw-r--r-- | src/sdp/ao_output_debugs.d | 85 | ||||
| -rw-r--r-- | src/sdp/output_html.d | 4 | ||||
| -rw-r--r-- | src/sdp/output_hub.d | 1 | ||||
| -rw-r--r-- | views/version.txt | 2 | 
11 files changed, 465 insertions, 526 deletions
| diff --git a/org/ao_abstract_doc_source.org b/org/ao_abstract_doc_source.org index c5535fd..cec9f08 100644 --- a/org/ao_abstract_doc_source.org +++ b/org/ao_abstract_doc_source.org @@ -49,7 +49,7 @@ ObjComposite[] the_document_head_section, the_document_body_section, the_bibliog  string[string] an_object, processing;  string an_object_key;  string[] anchor_tags; -string segment_object_belongs_to; +string segment_anchor_tag_that_object_belongs_to;  auto set_abstract_object = ObjectAbstractSet();  auto note_section = NotesSection();  /+ enum +/ @@ -75,9 +75,12 @@ string biblio_entry_str_json;  JSONValue[] bib_arr_json;  int bib_entry;  /+ counters +/ -long counter, previous_count, previous_length; +long cntr, previous_count, previous_length;  int[string] line_occur; -int verse_line, heading_pointer; +int verse_line, heading_ptr; +string[] html_segnames=[]; +uint html_segnames_ptr=0; +uint html_segnames_ptr_cntr=0;  /+ paragraph attributes +/  int[string] indent;  bool bullet = true; @@ -153,7 +156,7 @@ int[string] lv = [    "h5" : State.off,    "h6" : State.off,    "h7" : State.off, -  "lev_collapsed_number" : 0, +  "lev_int_collapsed" : 0,  ];  int[string] collapsed_lev = [    "h0" : State.off, @@ -196,8 +199,8 @@ auto toc_head =      0,                   // obj_cite_number      ["toc"],             // anchor tag      "1",                 // lev -    4,                   // lev_markup_number -    2,                   // lev_collapsed_number +    4,                   // lev_int_markup +    2,                   // lev_int_collapsed    );  the_table_of_contents_section = [    "seg": [toc_head], @@ -326,8 +329,8 @@ if there is a glossary section you need to:            0,                // obj_cite_number            [""],             // anchor tag            "B",              // lev -          1,                // lev_markup_number -          1,                // lev_collapsed_number +          1,                // lev_int_markup +          1,                // lev_int_collapsed          );        the_glossary_section ~=          set_abstract_object.contents_heading( @@ -336,8 +339,8 @@ if there is a glossary section you need to:            0,                // obj_cite_number            ["glossary"],     // anchor tag            "1",              // lev -          4,                // lev_markup_number -          2,                // lev_collapsed_number +          4,                // lev_int_markup +          2,                // lev_int_collapsed          );      // } else if (matchFirst(line, rgx.heading)) {      //   _heading_matched_(line, line_occur, an_object, an_object_key, lv, collapsed_lev, type, dochead_meta_aa); // levels? @@ -400,8 +403,8 @@ if there is a blurb section you need to:            0,                // obj_cite_number            [""],             // anchor tag            "B",              // lev -          1,                // lev_markup_number -          1,                // lev_collapsed_number +          1,                // lev_int_markup +          1,                // lev_int_collapsed          );        the_blurb_section ~=          set_abstract_object.contents_heading( @@ -410,8 +413,8 @@ if there is a blurb section you need to:            0,                // obj_cite_number            ["blurb"],        // anchor tag            "1",              // lev -          4,                // lev_markup_number -          2,                // lev_collapsed_number +          4,                // lev_int_markup +          2,                // lev_int_collapsed          );      } else if ((matchFirst(line, rgx.heading))        && (opt_action_bool["backmatter"] && opt_action_bool["section_blurb"])) { @@ -450,7 +453,7 @@ if there is a blurb section you need to:  #+BEGIN_SRC d  } else if (type["poem"] == TriState.on) {    /+ within block object: poem +/ -  _poem_block_(line, an_object, type, counter, obj_cite_number_poem, dochead_make_aa); +  _poem_block_(line, an_object, type, cntr, obj_cite_number_poem, dochead_make_aa);    continue;  #+END_SRC @@ -585,7 +588,7 @@ if ((matchFirst(line, rgx.book_index))        set_abstract_object.contents_comment(strip(an_object[an_object_key]));      _common_reset_(line_occur, an_object, type);      processing.remove("verse"); -    ++counter; +    ++cntr;  #+END_SRC  ******** flag not set & line not exist: heading or para   :heading:paragraph: @@ -666,7 +669,7 @@ _block_flag_line_empty_(    bookindex_unordered_hashes,    obj_cite_number,    _node, -  counter, +  cntr,    type,    obj_cite_number_poem,    dochead_make_aa @@ -708,34 +711,40 @@ if ((type["heading"] == State.on)    an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0];    anchor_tags = substantive_object_and_anchor_tags_tuple[1];    if (to!int(an_object["lev_markup_number"]) == 4) { -    segment_object_belongs_to = anchor_tags[0]; +    segment_anchor_tag_that_object_belongs_to = anchor_tags[0];    } else if (to!int(an_object["lev_markup_number"]) < 4) { -    segment_object_belongs_to = ""; +    segment_anchor_tag_that_object_belongs_to = "";    }    _anchor_tag=to!string(obj_cite_number);    the_table_of_contents_section = obj_im.table_of_contents_gather_headings(      an_object,      dochead_make_aa, -    segment_object_belongs_to, +    segment_anchor_tag_that_object_belongs_to,      _anchor_tag,      the_table_of_contents_section,    ); +  if (an_object["lev_markup_number"] == "4") { +    html_segnames ~= segment_anchor_tag_that_object_belongs_to; +    html_segnames_ptr = html_segnames_ptr_cntr; +    html_segnames_ptr_cntr++; +  }    _node =      node_construct.node_emitter_heading(        an_object["lev_markup_number"],        an_object["lev_collapsed_number"], -      segment_object_belongs_to, +      segment_anchor_tag_that_object_belongs_to,        obj_cite_number, -      counter, -      heading_pointer, -      an_object["is"] +      cntr, +      heading_ptr, +      an_object["is"], +      html_segnames_ptr,      ); // heading    an_object["attrib"] =      obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node); -  ++heading_pointer; +  ++heading_ptr;    debug(segments) {      writeln(an_object["lev_markup_number"]); -    writeln(segment_object_belongs_to); +    writeln(segment_anchor_tag_that_object_belongs_to);    }    the_document_body_section ~=      set_abstract_object.contents_heading( @@ -755,7 +764,7 @@ if ((type["heading"] == State.on)    an_object.remove("lev");    an_object.remove("lev_markup_number");    processing.remove("verse"); -  ++counter; +  ++cntr;  #+END_SRC  ******* paragraph object                                   :paragraph:object: @@ -773,11 +782,11 @@ if ((type["heading"] == State.on)    _node =      node_construct.node_emitter(        content_non_header, -      segment_object_belongs_to, +      segment_anchor_tag_that_object_belongs_to,        obj_cite_number, -      counter, -      heading_pointer-1, -      an_object["is"] +      cntr, +      heading_ptr-1, +      an_object["is"],      );    auto substantive_object_and_anchor_tags_tuple =      obj_im.obj_inline_markup_and_anchor_tags(an_object, an_object_key, dochead_make_aa); // ... @@ -801,7 +810,7 @@ if ((type["heading"] == State.on)    ];    bullet = false;    processing.remove("verse"); -  ++counter; +  ++cntr;  } else {    assert(      line == null, @@ -825,7 +834,7 @@ if (the_document_body_section.length > 0) {    && (the_document_body_section.length > previous_length)  ) {      if ((the_document_body_section[$-1].is_a == "heading") -    && (the_document_body_section[$-1].heading_attrib.lev_markup_number < 5)) { +    && (the_document_body_section[$-1].heading_attrib.lev_int_markup < 5)) {        type["biblio_section"] = State.off;        type["glossary_section"] = State.off;        type["blurb_section"] = State.off; @@ -838,8 +847,8 @@ if (the_document_body_section.length > 0) {        previous_count=the_document_body_section.length -1;        note_section.gather_notes_for_endnote_section(          the_document_body_section, -        segment_object_belongs_to, -        the_document_body_section.length-1 +        segment_anchor_tag_that_object_belongs_to, +        the_document_body_section.length-1,        );      }    } @@ -901,8 +910,8 @@ if (an_object["glossary_nugget"].length == 0) {        0,                // obj_cite_number        [""],             // anchor tag        "B",              // lev -      1,                // lev_markup_number -      1,                // lev_collapsed_number +      1,                // lev_int_markup +      1,                // lev_int_collapsed      );  } else {    writeln("gloss"); @@ -935,8 +944,8 @@ if (biblio_ordered.length > 0) {        0,                // obj_cite_number        [""],             // anchor tag        "B",              // lev -      1,                // lev_markup_number -      1,                // lev_collapsed_number +      1,                // lev_int_markup +      1,                // lev_int_collapsed      );    the_bibliography_section ~=      set_abstract_object.contents_heading( @@ -945,8 +954,8 @@ if (biblio_ordered.length > 0) {        0,                // obj_cite_number        ["bibliography"], // anchor tag        "1",              // lev -      4,                // lev_markup_number -      2,                // lev_collapsed_number +      4,                // lev_int_markup +      2,                // lev_int_collapsed      );  } else {    the_bibliography_section ~= @@ -956,8 +965,8 @@ if (biblio_ordered.length > 0) {        0,                // obj_cite_number        [""],             // anchor tag        "B",              // lev -      1,                // lev_markup_number -      1,                // lev_collapsed_number +      1,                // lev_int_markup +      1,                // lev_int_collapsed      );  }  #+END_SRC @@ -1044,7 +1053,7 @@ auto bi_tuple =    bi.bookindex_build_section(      bookindex_unordered_hashes,      obj_cite_number, -    segment_object_belongs_to, +    segment_anchor_tag_that_object_belongs_to,      opt_action_bool,    );  static assert(!isTypeTuple!(bi_tuple)); @@ -1070,8 +1079,8 @@ if (an_object["blurb_nugget"].length == 0) {        0,                // obj_cite_number        [""],             // anchor tag        "B",              // lev -      1,                // lev_markup_number -      1,                // lev_collapsed_number +      1,                // lev_int_markup +      1,                // lev_int_collapsed      );  } else {    writeln("blurb"); @@ -1096,7 +1105,7 @@ if (the_endnotes_section["seg"].length > 1) {    toc_txt_ = format(      "{ %s }../%s.fn_suffix",      "Endnotes", -    "endnotes",            // segment_object_belongs_to +    "endnotes",            // segment_anchor_tag_that_object_belongs_to    );    toc_txt_= munge.url_links(toc_txt_);    the_table_of_contents_section["seg"] ~= @@ -1130,7 +1139,7 @@ if (the_glossary_section.length > 1) {    toc_txt_ = format(      "{ %s }../%s.fn_suffixs",      "Glossary", -    "glossary",  // segment_object_belongs_to +    "glossary",  // segment_anchor_tag_that_object_belongs_to    );    toc_txt_= munge.url_links(toc_txt_);    the_table_of_contents_section["seg"] ~= @@ -1162,7 +1171,7 @@ if (the_bibliography_section.length > 1){    toc_txt_ = format(      "{ %s }../%s.fn_suffix",      "Bibliography", -    "bibliography",        // segment_object_belongs_to +    "bibliography",        // segment_anchor_tag_that_object_belongs_to    );    toc_txt_= munge.url_links(toc_txt_);    the_table_of_contents_section["seg"] ~= @@ -1194,7 +1203,7 @@ if (the_bookindex_section["seg"].length > 1) {    toc_txt_ = format(      "{ %s }../%s.fn_suffix",      "Book Index", -    "bookindex",          // segment_object_belongs_to +    "bookindex",          // segment_anchor_tag_that_object_belongs_to    );    toc_txt_= munge.url_links(toc_txt_);    the_table_of_contents_section["seg"] ~= @@ -1228,7 +1237,7 @@ if (the_blurb_section.length > 1) {    toc_txt_ = format(      "{ %s }../%s.fn_suffix",      "Blurb", -    "blurb",                // segment_object_belongs_to +    "blurb",                // segment_anchor_tag_that_object_belongs_to    );    toc_txt_= munge.url_links(toc_txt_);    the_table_of_contents_section["seg"] ~= @@ -1303,8 +1312,7 @@ destroy(the_bookindex_section);  #+BEGIN_SRC d  auto t = tuple(    document_the, -  bookindex_unordered_hashes, -  biblio_ordered +  html_segnames,  );  return t;  #+END_SRC @@ -1825,7 +1833,7 @@ void _poem_block_(    char[] line,    ref string[string] an_object,    ref int[string] type, -  ref long counter, +  ref long cntr,    string[string] obj_cite_number_poem,    string[string][string] dochead_make_aa,  ) { @@ -1872,7 +1880,7 @@ void _poem_block_(            );          object_reset(an_object);          processing.remove("verse"); -        ++counter; +        ++cntr;        }        obj_cite_number_poem["end"] =          to!string(obj_cite_number); @@ -1903,10 +1911,10 @@ void _poem_block_(          an_object["is"] = "verse";          _node = node_construct.node_emitter(            content_non_header, -          segment_object_belongs_to, +          segment_anchor_tag_that_object_belongs_to,            obj_cite_number, -          counter, -          heading_pointer-1, +          cntr, +          heading_ptr-1,            an_object["is"]          );          auto substantive_object_and_anchor_tags_tuple = @@ -1924,7 +1932,7 @@ void _poem_block_(            );          object_reset(an_object);          processing.remove("verse"); -        ++counter; +        ++cntr;        }      }    } else if (type["tic_poem"] == TriState.on) { @@ -1962,7 +1970,7 @@ void _poem_block_(          obj_cite_number_poem["end"] = to!string(obj_cite_number);          object_reset(an_object);          processing.remove("verse"); -        ++counter; +        ++cntr;        }        type["blocks"] = TriState.closing;        type["poem"] = TriState.closing; @@ -1992,10 +2000,10 @@ void _poem_block_(          _node =            node_construct.node_emitter(              content_non_header, -            segment_object_belongs_to, +            segment_anchor_tag_that_object_belongs_to,              obj_cite_number, -            counter, -            heading_pointer-1, +            cntr, +            heading_ptr-1,              an_object["is"]            );          auto substantive_object_and_anchor_tags_tuple = @@ -2013,7 +2021,7 @@ void _poem_block_(            );          object_reset(an_object);          processing.remove("verse"); -        ++counter; +        ++cntr;        }      }    } @@ -2195,7 +2203,7 @@ void _block_flag_line_empty_(    ref string[][string][string] bookindex_unordered_hashes,    ref int obj_cite_number,    ref string _node, -  ref long counter, +  ref long cntr,    ref int[string] type,    string[string] obj_cite_number_poem,    string[string][string] dochead_make_aa, @@ -2221,10 +2229,10 @@ void _block_flag_line_empty_(      _node =        node_construct.node_emitter(          content_non_header, -        segment_object_belongs_to, +        segment_anchor_tag_that_object_belongs_to,          obj_cite_number, -        counter, -        heading_pointer-1, +        cntr, +        heading_ptr-1,          an_object["is"]        );      auto substantive_object_and_anchor_tags_tuple = @@ -2242,7 +2250,7 @@ void _block_flag_line_empty_(        );      object_reset(an_object);      processing.remove("verse"); -    ++counter; +    ++cntr;      type["blocks"] = TriState.off;      type["code"] = TriState.off;    } else if (type["poem"] == TriState.closing) { @@ -2254,10 +2262,10 @@ void _block_flag_line_empty_(      _node =        node_construct.node_emitter(          content_non_header, -        segment_object_belongs_to, +        segment_anchor_tag_that_object_belongs_to,          obj_cite_number, -        counter, -        heading_pointer-1, +        cntr, +        heading_ptr-1,          an_object["is"]        );      the_document_body_section ~= @@ -2282,10 +2290,10 @@ void _block_flag_line_empty_(      _node =        node_construct.node_emitter(          content_non_header, -        segment_object_belongs_to, +        segment_anchor_tag_that_object_belongs_to,          obj_cite_number, -        counter, -        heading_pointer-1, +        cntr, +        heading_ptr-1,          an_object["is"]        );      auto substantive_object_and_anchor_tags_tuple = @@ -2303,7 +2311,7 @@ void _block_flag_line_empty_(        );      object_reset(an_object);      processing.remove("verse"); -    ++counter; +    ++cntr;      type["blocks"] = TriState.off;      type["table"] = TriState.off;    } else if (type["group"] == TriState.closing) { @@ -2317,10 +2325,10 @@ void _block_flag_line_empty_(      _node =        node_construct.node_emitter(          content_non_header, -        segment_object_belongs_to, +        segment_anchor_tag_that_object_belongs_to,          obj_cite_number, -        counter, -        heading_pointer-1, +        cntr, +        heading_ptr-1,          an_object["is"]        );      auto substantive_object_and_anchor_tags_tuple = @@ -2338,7 +2346,7 @@ void _block_flag_line_empty_(        );      object_reset(an_object);      processing.remove("verse"); -    ++counter; +    ++cntr;      type["blocks"] = TriState.off;      type["group"] = TriState.off;    } else if (type["block"] == TriState.closing) { @@ -2351,10 +2359,10 @@ void _block_flag_line_empty_(      _node =        node_construct.node_emitter(          content_non_header, -        segment_object_belongs_to, +        segment_anchor_tag_that_object_belongs_to,          obj_cite_number, -        counter, -        heading_pointer-1, +        cntr, +        heading_ptr-1,          an_object["is"]         );      auto substantive_object_and_anchor_tags_tuple = @@ -2372,7 +2380,7 @@ void _block_flag_line_empty_(        );      object_reset(an_object);      processing.remove("verse"); -    ++counter; +    ++cntr;      type["blocks"] = TriState.off;      type["block"] = TriState.off;    } else if (type["quote"] == TriState.closing) { @@ -2386,10 +2394,10 @@ void _block_flag_line_empty_(      _node =        node_construct.node_emitter(          content_non_header, -        segment_object_belongs_to, +        segment_anchor_tag_that_object_belongs_to,          obj_cite_number, -        counter, -        heading_pointer-1, +        cntr, +        heading_ptr-1,          an_object["is"]        );      auto substantive_object_and_anchor_tags_tuple = @@ -2407,7 +2415,7 @@ void _block_flag_line_empty_(        );      object_reset(an_object);      processing.remove("verse"); -    ++counter; +    ++cntr;      type["blocks"] = TriState.off;      type["quote"] = TriState.off;    } @@ -3184,7 +3192,7 @@ struct ObjInlineMarkup {    auto table_of_contents_gather_headings(      string[string] obj_,      string[string][string] dochead_make_aa, -    string segment_object_belongs_to, +    string segment_anchor_tag_that_object_belongs_to,      string _anchor_tag,      ObjComposite[][string] the_table_of_contents_section,    ) @@ -3279,7 +3287,7 @@ struct ObjInlineMarkup {        toc_txt_ = format(          "{ %s }../%s.fn_suffix",          heading_toc_, -        segment_object_belongs_to, +        segment_anchor_tag_that_object_belongs_to,        );        toc_txt_= munge.url_links(toc_txt_);        indent=[ @@ -3300,7 +3308,7 @@ struct ObjInlineMarkup {        toc_txt_ = format(          "{ %s }../%s.fn_suffix#%s",          heading_toc_, -        segment_object_belongs_to, +        segment_anchor_tag_that_object_belongs_to,          _anchor_tag,        );        toc_txt_= munge.url_links(toc_txt_); @@ -3816,10 +3824,10 @@ struct ObjAttributes {        oa_j.object["obj_cite_number"] = node_j["obj_cite_number"];        oa_j.object["lev_markup_number"] = node_j["lev_markup_number"];        oa_j.object["lev_collapsed_number"] = node_j["lev_collapsed_number"]; -      oa_j.object["heading_pointer"] = -        node_j["heading_pointer"]; // check -      oa_j.object["doc_object_pointer"] = -        node_j["doc_object_pointer"]; // check +      oa_j.object["heading_ptr"] = +        node_j["heading_ptr"]; // check +      oa_j.object["doc_object_ptr"] = +        node_j["doc_object_ptr"]; // check      }      oa_j.object["parent_obj_cite_number"] = node_j["parent_obj_cite_number"];      oa_j.object["parent_lev_markup_number"] = node_j["parent_lev_markup_number"]; @@ -3994,12 +4002,12 @@ struct BookIndexReportSection {    auto bookindex_build_section(      string[][string][string] bookindex_unordered_hashes,      int                      obj_cite_number, -    string                   segment_object_belongs_to, +    string                   segment_anchor_tag_that_object_belongs_to,      bool[string]             opt_action_bool,    ) {      string type;      string lev; -    int lev_markup_number, lev_collapsed_number; +    int lev_int_markup, lev_int_collapsed;      string attrib;      int[string] indent;      auto set_abstract_object = ObjectAbstractSet(); @@ -4011,8 +4019,8 @@ struct BookIndexReportSection {        string bi_tmp_seg, bi_tmp_scroll;        attrib="";        lev="B"; -      lev_markup_number=1; -      lev_collapsed_number=1; +      lev_int_markup=1; +      lev_int_collapsed=1;        bookindex_section["scroll"] ~=          set_abstract_object.contents_heading(            "Book Index", @@ -4020,8 +4028,8 @@ struct BookIndexReportSection {            obj_cite_number,            [],            to!string(lev), -          lev_markup_number, -          lev_collapsed_number +          lev_int_markup, +          lev_int_collapsed          );        bookindex_section["seg"] ~=          set_abstract_object.contents_heading( @@ -4030,16 +4038,16 @@ struct BookIndexReportSection {            obj_cite_number,            [],            to!string(lev), -          lev_markup_number, -          lev_collapsed_number +          lev_int_markup, +          lev_int_collapsed          );        ++obj_cite_number;        ++mkn;        // 1~ Index        attrib="";        lev="1"; -      lev_markup_number=4; -      lev_collapsed_number=2; +      lev_int_markup=4; +      lev_int_collapsed=2;        bookindex_section["scroll"] ~=          set_abstract_object.contents_heading(            "Index", @@ -4047,8 +4055,8 @@ struct BookIndexReportSection {            obj_cite_number,            ["book_index"],            to!string(lev), -          lev_markup_number, -          lev_collapsed_number +          lev_int_markup, +          lev_int_collapsed          );        bookindex_section["seg"] ~=          set_abstract_object.contents_heading( @@ -4057,8 +4065,8 @@ struct BookIndexReportSection {            obj_cite_number,            ["book_index"],            to!string(lev), -          lev_markup_number, -          lev_collapsed_number +          lev_int_markup, +          lev_int_collapsed          );        ++obj_cite_number;        ++mkn; @@ -4068,9 +4076,9 @@ struct BookIndexReportSection {          foreach (ref_; bookindex_unordered_hashes[mainkey]["_a"]) {            auto go = replaceAll(ref_, rgx.book_index_go, "$1");            bi_tmp_scroll ~= munge.url_links(" {" ~ ref_ ~ "}#" ~ go ~ ", "); -          bi_tmp_seg ~= (segment_object_belongs_to.empty) +          bi_tmp_seg ~= (segment_anchor_tag_that_object_belongs_to.empty)            ? munge.url_links(" {" ~ ref_ ~ "}#" ~ go ~ ", ") -          : munge.url_links(" {" ~ ref_ ~ "}../" ~ segment_object_belongs_to ~ ".fn_suffix#" ~ go ~ ", "); +          : munge.url_links(" {" ~ ref_ ~ "}../" ~ segment_anchor_tag_that_object_belongs_to ~ ".fn_suffix#" ~ go ~ ", ");          }          bi_tmp_scroll ~= " \\\\\n    ";          bi_tmp_seg ~= " \\\\\n    "; @@ -4083,9 +4091,9 @@ struct BookIndexReportSection {            foreach (ref_; bookindex_unordered_hashes[mainkey][subkey]) {              auto go = replaceAll(ref_, rgx.book_index_go, "$1");              bi_tmp_scroll ~= munge.url_links(" {" ~ ref_ ~ "}#" ~ go ~ ", "); -            bi_tmp_seg ~= (segment_object_belongs_to.empty) +            bi_tmp_seg ~= (segment_anchor_tag_that_object_belongs_to.empty)              ? munge.url_links(" {" ~ ref_ ~ "}#" ~ go ~ ", ") -            : munge.url_links(" {" ~ ref_ ~ "}../" ~ segment_object_belongs_to ~ ".fn_suffix#" ~ go ~ ", "); +            : munge.url_links(" {" ~ ref_ ~ "}../" ~ segment_anchor_tag_that_object_belongs_to ~ ".fn_suffix#" ~ go ~ ", ");            }            bi_tmp_scroll ~= " \\\\\n    ";            bi_tmp_seg ~= " \\\\\n    "; @@ -4171,20 +4179,20 @@ struct NotesSection {  #+BEGIN_SRC d    private auto gather_notes_for_endnote_section(      ObjComposite[] contents_am, -    string         segment_object_belongs_to, -    ulong          counter, +    string         segment_anchor_tag_that_object_belongs_to, +    ulong          cntr,    )    in {      // endnotes/ footnotes for      // doc objects other than paragraphs & headings      // various forms of grouped text -    assert((contents_am[counter].is_a == "para") -    || (contents_am[counter].is_a == "heading") -    || (contents_am[counter].is_a == "group")); -    assert(counter >= previous_count); -    previous_count=counter; +    assert((contents_am[cntr].is_a == "para") +    || (contents_am[cntr].is_a == "heading") +    || (contents_am[cntr].is_a == "group")); +    assert(cntr >= previous_count); +    previous_count=cntr;      assert( -      match(contents_am[counter].object, +      match(contents_am[cntr].object,        rgx.inline_notes_delimiter_al_regular_number_note)      );    } @@ -4193,24 +4201,24 @@ struct NotesSection {      foreach(        m;        matchAll( -        contents_am[counter].object, +        contents_am[cntr].object,          rgx.inline_notes_delimiter_al_regular_number_note        )      ) {        debug(endnotes_build) {          writeln( -          "{^{", m.captures[1], ".}^}../", segment_object_belongs_to, ".fn_suffix#noteref_\n  ", m.captures[1], " ", +          "{^{", m.captures[1], ".}^}../", segment_anchor_tag_that_object_belongs_to, ".fn_suffix#noteref_\n  ", m.captures[1], " ",            m.captures[2]); // sometimes need segment name (segmented html & epub)        }        // TODO NEXT you need anchor for segments at this point ->        object_notes["anchor"] ~= "#note_" ~ m.captures[1] ~ "』"; -      object_notes["seg"] ~= (segment_object_belongs_to.empty) +      object_notes["seg"] ~= (segment_anchor_tag_that_object_belongs_to.empty)        ? (munge.url_links(            "{^{" ~ m.captures[1] ~ ".}^}#noteref_" ~            m.captures[1]) ~ " " ~ m.captures[2] ~ "』"          )        : (munge.url_links( -          "{^{" ~ m.captures[1] ~ ".}^}../" ~ segment_object_belongs_to ~ ".fn_suffix#noteref_" ~ +          "{^{" ~ m.captures[1] ~ ".}^}../" ~ segment_anchor_tag_that_object_belongs_to ~ ".fn_suffix#noteref_" ~            m.captures[1]) ~ " " ~ m.captures[2] ~ "』"          );        object_notes["scroll"] ~= @@ -4391,11 +4399,11 @@ struct Bibliography {        writeln("json:                ", bib_arr_json.length);        writeln("unsorted:            ", biblio_unsorted.length);        writeln("sorted:              ", biblio_sorted__.length); -      int counter; +      int cntr;        int[7] x; -      while (counter < x.length) { -        writeln(counter, ": ", biblio_sorted__[counter]["fulltitle"]); -        counter++; +      while (cntr < x.length) { +        writeln(cntr, ": ", biblio_sorted__[cntr]["fulltitle"]); +        cntr++;        }      }      return biblio_sorted__; @@ -4499,9 +4507,9 @@ struct NodeStructureMetadata {    string node_emitter(      string lev_markup_number,      string segment_anchor_tag, -    int obj_cite_number_, -    long counter_, -    int pointer_, +    int    obj_cite_number_, +    long   cntr_, +    int    ptr_,      string is_    )    in { @@ -4527,20 +4535,20 @@ struct NodeStructureMetadata {        p_["obj_cite_number"] = lv4;      }      _node=("{ " ~ -      "\"is\": \"" ~ is_ ~ "\"" ~ -      ", \"heading_pointer\": " ~ to!string(pointer_) ~ -      ", \"doc_object_pointer\": " ~ to!string(counter_) ~ -      ", \"obj_cite_number\": " ~ to!string(obj_cite_number_) ~ -      ", \"segment_anchor_tag\": \"" ~ segment_anchor_tag ~ "\"" ~ -      ", \"parent_obj_cite_number\": " ~ to!string(p_["obj_cite_number"]) ~ +      "\"is\": \""                       ~ is_ ~ "\"" ~ +      ", \"heading_ptr\": "          ~ to!string(ptr_) ~ +      ", \"doc_object_ptr\": "       ~ to!string(cntr_) ~ +      ", \"obj_cite_number\": "          ~ to!string(obj_cite_number_) ~ +      ", \"segment_anchor_tag\": \""     ~ segment_anchor_tag ~ "\"" ~ +      ", \"parent_obj_cite_number\": "   ~ to!string(p_["obj_cite_number"]) ~        ", \"parent_lev_markup_number\": " ~ to!string(p_["lev_markup_number"]) ~        " }"      );      debug(node) {        if (match(lev_markup_number, rgx.levels_numbered_headings)) { -        writeln("* ", to!string(_node)); +        writeln("x ", to!string(_node));        } else { -        writeln("* ", to!string(_node)); +        writeln("- ", to!string(_node));        }      }      JSONValue j = parseJSON(_node); @@ -4561,10 +4569,11 @@ struct NodeStructureMetadata {      string lev_markup_number,      string lev_collapsed_number,      string segment_anchor_tag, -    int obj_cite_number_, -    long counter_, -    int pointer_, -    string is_ +    int    obj_cite_number_, +    long   cntr_, +    int    ptr_, +    string is_, +    uint html_segnames_ptr,    )    in {      auto rgx = Rgx(); @@ -4583,15 +4592,15 @@ struct NodeStructureMetadata {    body {      auto rgx = Rgx();      int obj_cite_number = to!int(obj_cite_number_); -    switch (lev_markup_number) { // switch (to!string(lv)) { -    case "0": +    switch (to!int(lev_markup_number)) { // switch (to!string(lv)) { +    case 0:        lv = DocStructMarkupHeading.h_sect_A;        lv0 = obj_cite_number;        lv1=0; lv2=0; lv3=0; lv4=0; lv5=0; lv6=0; lv7=0;        p_["lev_markup_number"] = 0;        p_["obj_cite_number"] = 0;        break; -    case "1": +    case 1:        lv = DocStructMarkupHeading.h_sect_B;        lv1 = obj_cite_number;        lv2=0; lv3=0; lv4=0; lv5=0; lv6=0; lv7=0; @@ -4599,7 +4608,7 @@ struct NodeStructureMetadata {          DocStructMarkupHeading.h_sect_A;        p_["obj_cite_number"] = lv0;        break; -    case "2": +    case 2:        lv = DocStructMarkupHeading.h_sect_C;        lv2 = obj_cite_number;        lv3=0; lv4=0; lv5=0; lv6=0; lv7=0; @@ -4607,7 +4616,7 @@ struct NodeStructureMetadata {          DocStructMarkupHeading.h_sect_B;        p_["obj_cite_number"] = lv1;        break; -    case "3": +    case 3:        lv = DocStructMarkupHeading.h_sect_D;        lv3=obj_cite_number;        lv4=0; lv5=0; lv6=0; lv7=0; @@ -4615,7 +4624,7 @@ struct NodeStructureMetadata {          DocStructMarkupHeading.h_sect_C;        p_["obj_cite_number"] = lv2;        break; -    case "4": +    case 4:        lv = DocStructMarkupHeading.h_text_1;        lv4 = obj_cite_number;        lv5=0; lv6=0; lv7=0; @@ -4637,7 +4646,7 @@ struct NodeStructureMetadata {          p_["obj_cite_number"] = lv0;        }        break; -    case "5": +    case 5:        lv = DocStructMarkupHeading.h_text_2;        lv5 = obj_cite_number;        lv6=0; lv7=0; @@ -4645,7 +4654,7 @@ struct NodeStructureMetadata {          DocStructMarkupHeading.h_text_1;        p_["obj_cite_number"] = lv4;        break; -    case "6": +    case 6:        lv = DocStructMarkupHeading.h_text_3;        lv6 = obj_cite_number;        lv7=0; @@ -4653,7 +4662,7 @@ struct NodeStructureMetadata {          DocStructMarkupHeading.h_text_2;        p_["obj_cite_number"] = lv5;        break; -    case "7": +    case 7:        lv = DocStructMarkupHeading.h_text_4;        lv7 = obj_cite_number;        p_["lev_markup_number"] = @@ -4664,15 +4673,16 @@ struct NodeStructureMetadata {        break;      }      _node=("{ " ~ -      "\"is\": \"" ~ is_ ~ "\"" ~ -      ", \"heading_pointer\": " ~ to!string(pointer_) ~ -      ", \"doc_object_pointer\": " ~ to!string(counter_) ~ -      ", \"obj_cite_number\": " ~ to!string(obj_cite_number_) ~ -      ",  \"lev_markup_number\": " ~ to!string(lev_markup_number) ~ -      ",  \"lev_collapsed_number\": " ~ to!string(lev_collapsed_number) ~ -      ", \"segment_anchor_tag\": \"" ~ segment_anchor_tag ~ "\"" ~ -      ", \"parent_obj_cite_number\": " ~ to!string(p_["obj_cite_number"]) ~ -      ", \"parent_lev_markup_number\": " ~ to!string(p_["lev_markup_number"]) ~ +      "\"is\": \""                             ~ is_ ~ "\"" ~ +      ", \"heading_ptr\": "                ~ to!string(ptr_) ~ +      ", \"doc_object_ptr\": "             ~ to!string(cntr_) ~ +      ", \"html_segnames_ptr\": \""        ~ ((lev_markup_number == "4") ? (to!string(html_segnames_ptr)) : "") ~ "\"" ~ +      ", \"obj_cite_number\": "                ~ to!string(obj_cite_number_) ~ +      ", \"lev_markup_number\": "              ~ to!string(lev_markup_number) ~ +      ", \"lev_collapsed_number\": "           ~ to!string(lev_collapsed_number) ~ +      ", \"segment_anchor_tag\": \""           ~ segment_anchor_tag ~ "\"" ~ +      ", \"parent_obj_cite_number\": "         ~ to!string(p_["obj_cite_number"]) ~ +      ", \"parent_lev_markup_number\": "       ~ to!string(p_["lev_markup_number"]) ~        " }"      );      debug(heading) { @@ -4680,11 +4690,9 @@ struct NodeStructureMetadata {          writeln("* ", to!string(_node));        }      } -    debug(node) { +    debug(nodeheading) {        if (match(lev_markup_number, rgx.levels_numbered_headings)) {          writeln("* ", to!string(_node)); -      } else { -        writeln("* ", to!string(_node));        }      }      JSONValue j = parseJSON(_node); @@ -4948,9 +4956,14 @@ set abstracted objects for downstream processing  #+name: ao_structs_init  #+BEGIN_SRC d  struct HeadingAttrib { -  string lev                  = "9"; -  int lev_markup_number       = 9; -  int lev_collapsed_number    = 9; +  string lev                            = "9"; +  int    lev_int_markup                 = 9; +  int    lev_int_collapsed              = 9; +  int[]  closes_lev_collapsed           = []; // TODO track +  int[]  closes_lev_markup              = []; // TODO track +  int    array_ptr                  = 0; +// heading segments, 1~ lev4: +  int    heading_array_ptr_segments = 0; // TODO  }  #+END_SRC @@ -4988,10 +5001,22 @@ struct Comment {  #+name: ao_structs_init  #+BEGIN_SRC d  struct Node { -  int ocn                     = 0; -  int parent_lev              = 0; -  int parent_ocn              = 0; -  string node                 = ""; +  int ocn                            = 0; +  string seg_anchor_tag              = ""; +// parent +  int parent_lev_int_markup          = 0; +  int parent_ocn                     = 0; +  int[] ancestors                    = []; // TODO track +// heading: +  int heading_lev_int_markup         = 0; +  int heading_lev_int_collapsed      = 0; +  int[] heading_closes_lev_collapsed = []; // TODO track +  int[] heading_closes_lev_markup    = []; // TODO track +  int heading_array_ptr          = 0; +// heading segments, 1~ lev4: +  int heading_array_ptr_segments = 0; // TODO +// node info json string: +  string node                        = "";  }  #+END_SRC @@ -5047,8 +5072,8 @@ auto contents_heading(    in int obj_cite_number,    in string[] tags,    in string lev, -  in int lev_markup_number, -  in int lev_collapsed_number, +  in int lev_int_markup, +  in int lev_int_collapsed,  ) {    ObjComposite object_set;    object_set.use                                 = "content"; @@ -5058,9 +5083,8 @@ auto contents_heading(    object_set.obj_cite_number                     = (obj_cite_number==0) ? "" : to!string(obj_cite_number);    object_set.anchor_tags                         ~= tags;    object_set.heading_attrib.lev                  = lev; -  object_set.heading_attrib.lev_markup_number    = lev_markup_number; -  object_set.heading_attrib.lev_collapsed_number = lev_collapsed_number; -  // object_set.node_structure.node               = _node; +  object_set.heading_attrib.lev_int_markup       = lev_int_markup; +  object_set.heading_attrib.lev_int_collapsed    = lev_int_collapsed;    return object_set;  }  #+END_SRC @@ -5075,7 +5099,7 @@ auto contents_para(    in string attrib,    in int obj_cite_number,    in int[string] indent, -  in bool bullet +  in bool bullet,  ) {    ObjComposite object_set;    object_set.use                      = "content"; @@ -5101,7 +5125,7 @@ auto contents_toc(    in string attrib,    in int obj_cite_number,    in int[string] indent, -  in bool bullet +  in bool bullet,  ) {    ObjComposite object_set;    object_set.use                      = "content"; @@ -5149,7 +5173,7 @@ auto contents_block(    in string type,    in string object,    in string attrib, -  in int obj_cite_number +  in int obj_cite_number,  ) {    ObjComposite object_set;    object_set.use                 = "content"; @@ -5170,7 +5194,7 @@ auto contents_block_code(    in string type,    in string object,    in string attrib_language_syntax, -  in int obj_cite_number +  in int obj_cite_number,  ) {    ObjComposite object_set;    object_set.use                 = "content"; diff --git a/org/ao_output_debugs.org b/org/ao_output_debugs.org index 5349200..c576264 100644 --- a/org/ao_output_debugs.org +++ b/org/ao_output_debugs.org @@ -24,36 +24,6 @@ auto markup = InlineMarkup();  string key;  #+END_SRC -** book index (sort &) report                                        :report: - -#+name: book_index_sorted_report -#+BEGIN_SRC d -struct BookIndexReport { -  int mkn, skn; -  auto bookindex_report_sorted( -    string[][string][string] bookindex_unordered_hashes -  ) { -    auto mainkeys=bookindex_unordered_hashes.byKey.array. -      sort!("toLower(a) < toLower(b)", SwapStrategy.stable).release; -    foreach (mainkey; mainkeys) { -      auto subkeys=bookindex_unordered_hashes[mainkey].byKey.array. -        sort!("toLower(a) < toLower(b)", SwapStrategy.stable).release; -      foreach (subkey; subkeys) { -        debug(bookindex) { -          writeln( -            mainkey, ": ", -            subkey, ": ", -            to!string(bookindex_unordered_hashes[mainkey][subkey]) -          ); -        } -        ++skn; -      } -      ++mkn; -    } -  } -} -#+END_SRC -  ** (parent)                                                          :parent:  #+name: ao_output_debugs @@ -72,7 +42,7 @@ debug(parent) {              "%s node: %s heading: %s %s",              obj.obj_cite_number,              obj.node, -            obj.lev_markup_number, +            obj.lev_int_markup,              obj.object,            );          } @@ -395,12 +365,12 @@ debug(headermakejson) {      "%s\n%s\n%s",      "document header, metadata & make instructions:",      dochead_meta, -    pointer_head_main, +    ptr_head_main,    ); -  foreach (main_header; pointer_head_main) { +  foreach (main_header; ptr_head_main) {      switch (main_header) {      case "make": -      foreach (sub_header; pointer_head_sub_make) { +      foreach (sub_header; ptr_head_sub_make) {          if (to!string(dochead_meta[main_header][sub_header]).length > 2) {            writefln(              "%s:%s: %s", @@ -427,12 +397,12 @@ debug(headermetadatajson) {      "%s\n%s\n%s",      "document header, metadata & make instructions:",      dochead_meta, -    pointer_head_main, +    ptr_head_main,    ); -  foreach (main_header; pointer_head_main) { +  foreach (main_header; ptr_head_main) {      switch (main_header) {      case "creator": -      foreach (sub_header; pointer_head_sub_creator) { +      foreach (sub_header; ptr_head_sub_creator) {          if (to!string(dochead_meta[main_header][sub_header]).length > 2) {            writefln(              "%s:%s: %s", @@ -444,7 +414,7 @@ debug(headermetadatajson) {        }        break;      case "title": -      foreach (sub_header; pointer_head_sub_title) { +      foreach (sub_header; ptr_head_sub_title) {          if (to!string(dochead_meta[main_header][sub_header]).length > 2) {            writefln(              "%s:%s: %s", @@ -456,7 +426,7 @@ debug(headermetadatajson) {        }        break;      case "rights": -      foreach (sub_header; pointer_head_sub_rights) { +      foreach (sub_header; ptr_head_sub_rights) {          if (to!string(dochead_meta[main_header][sub_header]).length > 2) {            writefln(              "%s:%s: %s", @@ -468,7 +438,7 @@ debug(headermetadatajson) {        }        break;      case "date": -      foreach (sub_header; pointer_head_sub_date) { +      foreach (sub_header; ptr_head_sub_date) {          if (to!string(dochead_meta[main_header][sub_header]).length > 2) {            writefln(              "%s:%s: %s", @@ -480,7 +450,7 @@ debug(headermetadatajson) {        }        break;      case "original": -      foreach (sub_header; pointer_head_sub_original) { +      foreach (sub_header; ptr_head_sub_original) {          if (to!string(dochead_meta[main_header][sub_header]).length > 2) {            writefln(              "%s:%s: %s", @@ -492,7 +462,7 @@ debug(headermetadatajson) {        }        break;      case "classify": -      foreach (sub_header; pointer_head_sub_classify) { +      foreach (sub_header; ptr_head_sub_classify) {          if (to!string(dochead_meta[main_header][sub_header]).length > 2) {            writefln(              "%s:%s: %s", @@ -504,7 +474,7 @@ debug(headermetadatajson) {        }        break;      case "identifier": -      foreach (sub_header; pointer_head_sub_identifier) { +      foreach (sub_header; ptr_head_sub_identifier) {          if (to!string(dochead_meta[main_header][sub_header]).length > 2) {            writefln(              "%s:%s: %s", @@ -516,7 +486,7 @@ debug(headermetadatajson) {        }        break;      case "notes": -      foreach (sub_header; pointer_head_sub_notes) { +      foreach (sub_header; ptr_head_sub_notes) {          if (to!string(dochead_meta[main_header][sub_header]).length > 2) {            writefln(              "%s:%s: %s", @@ -528,7 +498,7 @@ debug(headermetadatajson) {        }        break;      case "publisher": -      foreach (sub_header; pointer_head_sub_publisher) { +      foreach (sub_header; ptr_head_sub_publisher) {          if (to!string(dochead_meta[main_header][sub_header]).length > 2) {            writefln(              "%s:%s: %s", @@ -546,39 +516,6 @@ debug(headermetadatajson) {  }  #+END_SRC -** (bookindex)                                                    :bookindex: - -#+name: ao_output_debugs -#+BEGIN_SRC d -debug(bookindex) { -  writefln( -    "%s\n%s:%s", -    "-------------------------------", -    __FILE__, -    __LINE__, -  ); -  auto bookindex = BookIndexReport(); -  bookindex.bookindex_report_sorted(bookindex_unordered_hashes); -} -#+END_SRC - -*** biblio (biblio) - -#+name: ao_output_debugs -#+BEGIN_SRC d - -debug(biblio) { -  foreach (entry; biblio) { -    writefln( -      "%s; (%s)", -      entry["sortby_deemed_author_year_title"], -      entry["author"], -    ); -  } -} - -#+END_SRC -  ** anchor tags  #+name: ao_output_debugs @@ -616,7 +553,7 @@ debug(heading) {                         // heading    foreach (k; document_section_keys_sequenced["seg"]) {      foreach (o; contents[k]) {        if (o.is_a == "heading") { -        switch (o.heading_attrib.lev_markup_number) { +        switch (o.heading_attrib.lev_int_markup) {          case 0:            spc="";            break; @@ -652,8 +589,8 @@ debug(heading) {                         // heading            "%s* %s\n                (markup level: %s; collapsed level: %s)",            spc,            strip(o.object), -          o.heading_attrib.lev_markup_number, -          o.heading_attrib.lev_collapsed_number +          o.heading_attrib.lev_int_markup, +          o.heading_attrib.lev_int_collapsed          );        }      } @@ -901,8 +838,7 @@ template SiSUoutputDebugs() {      auto abstract_doc_source_debugs(S)(        auto ref const S         contents,        string[][string]         document_section_keys_sequenced, -      string[][string][string] bookindex_unordered_hashes,      // redundant, consider -      JSONValue[]              biblio,                          // redundant, consider +      string[]                 html_segnames,        string[string][string]   dochead_make,        string[string][string]   dochead_meta,        string                   fn_src, diff --git a/org/output.org b/org/output.org index b77c2dd..8331a59 100644 --- a/org/output.org +++ b/org/output.org @@ -38,12 +38,12 @@ auto html_heading(O)(    ¶",    obj.obj_cite_number,    obj.obj_cite_number, -  obj.heading_attrib.lev_markup_number, +  obj.heading_attrib.lev_int_markup,    obj.is_a,    obj.obj_cite_number,    obj.obj_cite_number,    obj.object, -  obj.heading_attrib.lev_markup_number +  obj.heading_attrib.lev_int_markup    );    return o;  } @@ -1618,6 +1618,7 @@ template SiSUoutputHub() {      void hub(S)(        auto ref const S         contents,        string[][string]         document_section_keys_sequenced, +      string[]                 html_segnames,        string[string][string]   dochead_make,        string[string][string]   dochead_meta,        string                   fn_src, diff --git a/org/sdp.org b/org/sdp.org index a016400..a8e8724 100644 --- a/org/sdp.org +++ b/org/sdp.org @@ -24,7 +24,7 @@ struct Version {    int minor;    int patch;  } -enum ver = Version(0, 9, 2); +enum ver = Version(0, 9, 3);  #+END_SRC  * sdp.d   sisu document parser                                       :sdp.d: @@ -377,8 +377,7 @@ string[string][string] dochead_meta = header_make_and_meta_tuple[1];  auto t = abs.abstract_doc_source(content_body, dochead_make, dochead_meta, opt_action_bool);  static assert(!isTypeTuple!(t));  auto doc_ao_contents = t[0]; // head ~ toc ~ contents ~ endnotes_seg ~ glossary ~ bibliography ~ bookindex ~blurb; -auto doc_ao_bookindex_unordered_hashes = t[1]; // redundant? -auto doc_ao_biblio = t[2];                     // redundant? +auto doc_html_segnames = t[1];  #+END_SRC  **** document section keys view @@ -442,8 +441,7 @@ debug(checkdoc) {    dbg.abstract_doc_source_debugs(      doc_ao_contents,      document_section_keys_sequenced, -    doc_ao_bookindex_unordered_hashes, // redundant? -    doc_ao_biblio,                     // redundant? +    doc_html_segnames,      dochead_make,      dochead_meta,      fn_src, @@ -460,6 +458,7 @@ debug(checkdoc) {  output.hub(    doc_ao_contents,    document_section_keys_sequenced, +  doc_html_segnames,    dochead_make,    dochead_meta,    fn_src, @@ -481,7 +480,7 @@ scope(exit) {    destroy(content_body);    destroy(t);    destroy(doc_ao_contents); -  destroy(doc_ao_biblio); +  destroy(doc_html_segnames);    destroy(fn_src);  }  #+END_SRC @@ -213,8 +213,7 @@ void main(string[] args) {        auto t = abs.abstract_doc_source(content_body, dochead_make, dochead_meta, opt_action_bool);        static assert(!isTypeTuple!(t));        auto doc_ao_contents = t[0]; // head ~ toc ~ contents ~ endnotes_seg ~ glossary ~ bibliography ~ bookindex ~blurb; -      auto doc_ao_bookindex_unordered_hashes = t[1]; // redundant? -      auto doc_ao_biblio = t[2];                     // redundant? +      auto doc_html_segnames = t[1];        string[][string] document_section_keys_sequenced = [          "seg": [             "head", @@ -266,8 +265,7 @@ void main(string[] args) {          dbg.abstract_doc_source_debugs(            doc_ao_contents,            document_section_keys_sequenced, -          doc_ao_bookindex_unordered_hashes, // redundant? -          doc_ao_biblio,                     // redundant? +          doc_html_segnames,            dochead_make,            dochead_meta,            fn_src, @@ -278,6 +276,7 @@ void main(string[] args) {        output.hub(          doc_ao_contents,          document_section_keys_sequenced, +        doc_html_segnames,          dochead_make,          dochead_meta,          fn_src, @@ -293,7 +292,7 @@ void main(string[] args) {          destroy(content_body);          destroy(t);          destroy(doc_ao_contents); -        destroy(doc_ao_biblio); +        destroy(doc_html_segnames);          destroy(fn_src);        }      } else { diff --git a/src/sdp/ao_abstract_doc_source.d b/src/sdp/ao_abstract_doc_source.d index cc39ea1..7dbc573 100644 --- a/src/sdp/ao_abstract_doc_source.d +++ b/src/sdp/ao_abstract_doc_source.d @@ -22,7 +22,7 @@ template SiSUdocAbstraction() {      string[string] an_object, processing;      string an_object_key;      string[] anchor_tags; -    string segment_object_belongs_to; +    string segment_anchor_tag_that_object_belongs_to;      auto set_abstract_object = ObjectAbstractSet();      auto note_section = NotesSection();      /+ enum +/ @@ -48,9 +48,12 @@ template SiSUdocAbstraction() {      JSONValue[] bib_arr_json;      int bib_entry;      /+ counters +/ -    long counter, previous_count, previous_length; +    long cntr, previous_count, previous_length;      int[string] line_occur; -    int verse_line, heading_pointer; +    int verse_line, heading_ptr; +    string[] html_segnames=[]; +    uint html_segnames_ptr=0; +    uint html_segnames_ptr_cntr=0;      /+ paragraph attributes +/      int[string] indent;      bool bullet = true; @@ -122,7 +125,7 @@ template SiSUdocAbstraction() {          "h5" : State.off,          "h6" : State.off,          "h7" : State.off, -        "lev_collapsed_number" : 0, +        "lev_int_collapsed" : 0,        ];        int[string] collapsed_lev = [          "h0" : State.off, @@ -165,8 +168,8 @@ template SiSUdocAbstraction() {            0,                   // obj_cite_number            ["toc"],             // anchor tag            "1",                 // lev -          4,                   // lev_markup_number -          2,                   // lev_collapsed_number +          4,                   // lev_int_markup +          2,                   // lev_int_collapsed          );        the_table_of_contents_section = [          "seg": [toc_head], @@ -262,8 +265,8 @@ template SiSUdocAbstraction() {                      0,                // obj_cite_number                      [""],             // anchor tag                      "B",              // lev -                    1,                // lev_markup_number -                    1,                // lev_collapsed_number +                    1,                // lev_int_markup +                    1,                // lev_int_collapsed                    );                  the_glossary_section ~=                    set_abstract_object.contents_heading( @@ -272,8 +275,8 @@ template SiSUdocAbstraction() {                      0,                // obj_cite_number                      ["glossary"],     // anchor tag                      "1",              // lev -                    4,                // lev_markup_number -                    2,                // lev_collapsed_number +                    4,                // lev_int_markup +                    2,                // lev_int_collapsed                    );                // } else if (matchFirst(line, rgx.heading)) {                //   _heading_matched_(line, line_occur, an_object, an_object_key, lv, collapsed_lev, type, dochead_meta_aa); // levels? @@ -323,8 +326,8 @@ template SiSUdocAbstraction() {                      0,                // obj_cite_number                      [""],             // anchor tag                      "B",              // lev -                    1,                // lev_markup_number -                    1,                // lev_collapsed_number +                    1,                // lev_int_markup +                    1,                // lev_int_collapsed                    );                  the_blurb_section ~=                    set_abstract_object.contents_heading( @@ -333,8 +336,8 @@ template SiSUdocAbstraction() {                      0,                // obj_cite_number                      ["blurb"],        // anchor tag                      "1",              // lev -                    4,                // lev_markup_number -                    2,                // lev_collapsed_number +                    4,                // lev_int_markup +                    2,                // lev_int_collapsed                    );                } else if ((matchFirst(line, rgx.heading))                  && (opt_action_bool["backmatter"] && opt_action_bool["section_blurb"])) { @@ -366,7 +369,7 @@ template SiSUdocAbstraction() {              continue;            } else if (type["poem"] == TriState.on) {              /+ within block object: poem +/ -            _poem_block_(line, an_object, type, counter, obj_cite_number_poem, dochead_make_aa); +            _poem_block_(line, an_object, type, cntr, obj_cite_number_poem, dochead_make_aa);              continue;            /+ within block object: group +/            } else if (type["group"] == TriState.on) { @@ -444,7 +447,7 @@ template SiSUdocAbstraction() {                      set_abstract_object.contents_comment(strip(an_object[an_object_key]));                    _common_reset_(line_occur, an_object, type);                    processing.remove("verse"); -                  ++counter; +                  ++cntr;                  } else if (((line_occur["para"] == State.off)                  && (line_occur["heading"] == State.off))                  && ((type["para"] == State.off) @@ -503,7 +506,7 @@ template SiSUdocAbstraction() {                  bookindex_unordered_hashes,                  obj_cite_number,                  _node, -                counter, +                cntr,                  type,                  obj_cite_number_poem,                  dochead_make_aa @@ -534,34 +537,40 @@ template SiSUdocAbstraction() {                  an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0];                  anchor_tags = substantive_object_and_anchor_tags_tuple[1];                  if (to!int(an_object["lev_markup_number"]) == 4) { -                  segment_object_belongs_to = anchor_tags[0]; +                  segment_anchor_tag_that_object_belongs_to = anchor_tags[0];                  } else if (to!int(an_object["lev_markup_number"]) < 4) { -                  segment_object_belongs_to = ""; +                  segment_anchor_tag_that_object_belongs_to = "";                  }                  _anchor_tag=to!string(obj_cite_number);                  the_table_of_contents_section = obj_im.table_of_contents_gather_headings(                    an_object,                    dochead_make_aa, -                  segment_object_belongs_to, +                  segment_anchor_tag_that_object_belongs_to,                    _anchor_tag,                    the_table_of_contents_section,                  ); +                if (an_object["lev_markup_number"] == "4") { +                  html_segnames ~= segment_anchor_tag_that_object_belongs_to; +                  html_segnames_ptr = html_segnames_ptr_cntr; +                  html_segnames_ptr_cntr++; +                }                  _node =                    node_construct.node_emitter_heading(                      an_object["lev_markup_number"],                      an_object["lev_collapsed_number"], -                    segment_object_belongs_to, +                    segment_anchor_tag_that_object_belongs_to,                      obj_cite_number, -                    counter, -                    heading_pointer, -                    an_object["is"] +                    cntr, +                    heading_ptr, +                    an_object["is"], +                    html_segnames_ptr,                    ); // heading                  an_object["attrib"] =                    obj_att.obj_attributes(an_object["is"], an_object[an_object_key], _node); -                ++heading_pointer; +                ++heading_ptr;                  debug(segments) {                    writeln(an_object["lev_markup_number"]); -                  writeln(segment_object_belongs_to); +                  writeln(segment_anchor_tag_that_object_belongs_to);                  }                  the_document_body_section ~=                    set_abstract_object.contents_heading( @@ -581,7 +590,7 @@ template SiSUdocAbstraction() {                  an_object.remove("lev");                  an_object.remove("lev_markup_number");                  processing.remove("verse"); -                ++counter; +                ++cntr;                } else if ((type["para"] == State.on) && (line_occur["para"] > State.off)) {                  /+ paragraph object (current line empty) +/                  obj_cite_number = obj_cite_number_emit(type["obj_cite_number_status"]); @@ -593,11 +602,11 @@ template SiSUdocAbstraction() {                  _node =                    node_construct.node_emitter(                      content_non_header, -                    segment_object_belongs_to, +                    segment_anchor_tag_that_object_belongs_to,                      obj_cite_number, -                    counter, -                    heading_pointer-1, -                    an_object["is"] +                    cntr, +                    heading_ptr-1, +                    an_object["is"],                    );                  auto substantive_object_and_anchor_tags_tuple =                    obj_im.obj_inline_markup_and_anchor_tags(an_object, an_object_key, dochead_make_aa); // ... @@ -621,7 +630,7 @@ template SiSUdocAbstraction() {                  ];                  bullet = false;                  processing.remove("verse"); -                ++counter; +                ++cntr;                } else {                  assert(                    line == null, @@ -640,7 +649,7 @@ template SiSUdocAbstraction() {            && (the_document_body_section.length > previous_length)          ) {              if ((the_document_body_section[$-1].is_a == "heading") -            && (the_document_body_section[$-1].heading_attrib.lev_markup_number < 5)) { +            && (the_document_body_section[$-1].heading_attrib.lev_int_markup < 5)) {                type["biblio_section"] = State.off;                type["glossary_section"] = State.off;                type["blurb_section"] = State.off; @@ -653,8 +662,8 @@ template SiSUdocAbstraction() {                previous_count=the_document_body_section.length -1;                note_section.gather_notes_for_endnote_section(                  the_document_body_section, -                segment_object_belongs_to, -                the_document_body_section.length-1 +                segment_anchor_tag_that_object_belongs_to, +                the_document_body_section.length-1,                );              }            } @@ -698,8 +707,8 @@ template SiSUdocAbstraction() {              0,                // obj_cite_number              [""],             // anchor tag              "B",              // lev -            1,                // lev_markup_number -            1,                // lev_collapsed_number +            1,                // lev_int_markup +            1,                // lev_int_collapsed            );        } else {          writeln("gloss"); @@ -722,8 +731,8 @@ template SiSUdocAbstraction() {              0,                // obj_cite_number              [""],             // anchor tag              "B",              // lev -            1,                // lev_markup_number -            1,                // lev_collapsed_number +            1,                // lev_int_markup +            1,                // lev_int_collapsed            );          the_bibliography_section ~=            set_abstract_object.contents_heading( @@ -732,8 +741,8 @@ template SiSUdocAbstraction() {              0,                // obj_cite_number              ["bibliography"], // anchor tag              "1",              // lev -            4,                // lev_markup_number -            2,                // lev_collapsed_number +            4,                // lev_int_markup +            2,                // lev_int_collapsed            );        } else {          the_bibliography_section ~= @@ -743,8 +752,8 @@ template SiSUdocAbstraction() {              0,                // obj_cite_number              [""],             // anchor tag              "B",              // lev -            1,                // lev_markup_number -            1,                // lev_collapsed_number +            1,                // lev_int_markup +            1,                // lev_int_collapsed            );        }        string out_; @@ -783,7 +792,7 @@ template SiSUdocAbstraction() {          bi.bookindex_build_section(            bookindex_unordered_hashes,            obj_cite_number, -          segment_object_belongs_to, +          segment_anchor_tag_that_object_belongs_to,            opt_action_bool,          );        static assert(!isTypeTuple!(bi_tuple)); @@ -803,8 +812,8 @@ template SiSUdocAbstraction() {              0,                // obj_cite_number              [""],             // anchor tag              "B",              // lev -            1,                // lev_markup_number -            1,                // lev_collapsed_number +            1,                // lev_int_markup +            1,                // lev_int_collapsed            );        } else {          writeln("blurb"); @@ -823,7 +832,7 @@ template SiSUdocAbstraction() {          toc_txt_ = format(            "{ %s }../%s.fn_suffix",            "Endnotes", -          "endnotes",            // segment_object_belongs_to +          "endnotes",            // segment_anchor_tag_that_object_belongs_to          );          toc_txt_= munge.url_links(toc_txt_);          the_table_of_contents_section["seg"] ~= @@ -857,7 +866,7 @@ template SiSUdocAbstraction() {          toc_txt_ = format(            "{ %s }../%s.fn_suffixs",            "Glossary", -          "glossary",  // segment_object_belongs_to +          "glossary",  // segment_anchor_tag_that_object_belongs_to          );          toc_txt_= munge.url_links(toc_txt_);          the_table_of_contents_section["seg"] ~= @@ -889,7 +898,7 @@ template SiSUdocAbstraction() {          toc_txt_ = format(            "{ %s }../%s.fn_suffix",            "Bibliography", -          "bibliography",        // segment_object_belongs_to +          "bibliography",        // segment_anchor_tag_that_object_belongs_to          );          toc_txt_= munge.url_links(toc_txt_);          the_table_of_contents_section["seg"] ~= @@ -921,7 +930,7 @@ template SiSUdocAbstraction() {          toc_txt_ = format(            "{ %s }../%s.fn_suffix",            "Book Index", -          "bookindex",          // segment_object_belongs_to +          "bookindex",          // segment_anchor_tag_that_object_belongs_to          );          toc_txt_= munge.url_links(toc_txt_);          the_table_of_contents_section["seg"] ~= @@ -955,7 +964,7 @@ template SiSUdocAbstraction() {          toc_txt_ = format(            "{ %s }../%s.fn_suffix",            "Blurb", -          "blurb",                // segment_object_belongs_to +          "blurb",                // segment_anchor_tag_that_object_belongs_to          );          toc_txt_= munge.url_links(toc_txt_);          the_table_of_contents_section["seg"] ~= @@ -1010,8 +1019,7 @@ template SiSUdocAbstraction() {        ];        auto t = tuple(          document_the, -        bookindex_unordered_hashes, -        biblio_ordered +        html_segnames,        );        return t;        /+ post loop markup document/text ↑ +/ @@ -1400,7 +1408,7 @@ template SiSUdocAbstraction() {        char[] line,        ref string[string] an_object,        ref int[string] type, -      ref long counter, +      ref long cntr,        string[string] obj_cite_number_poem,        string[string][string] dochead_make_aa,      ) { @@ -1447,7 +1455,7 @@ template SiSUdocAbstraction() {                );              object_reset(an_object);              processing.remove("verse"); -            ++counter; +            ++cntr;            }            obj_cite_number_poem["end"] =              to!string(obj_cite_number); @@ -1478,10 +1486,10 @@ template SiSUdocAbstraction() {              an_object["is"] = "verse";              _node = node_construct.node_emitter(                content_non_header, -              segment_object_belongs_to, +              segment_anchor_tag_that_object_belongs_to,                obj_cite_number, -              counter, -              heading_pointer-1, +              cntr, +              heading_ptr-1,                an_object["is"]              );              auto substantive_object_and_anchor_tags_tuple = @@ -1499,7 +1507,7 @@ template SiSUdocAbstraction() {                );              object_reset(an_object);              processing.remove("verse"); -            ++counter; +            ++cntr;            }          }        } else if (type["tic_poem"] == TriState.on) { @@ -1537,7 +1545,7 @@ template SiSUdocAbstraction() {              obj_cite_number_poem["end"] = to!string(obj_cite_number);              object_reset(an_object);              processing.remove("verse"); -            ++counter; +            ++cntr;            }            type["blocks"] = TriState.closing;            type["poem"] = TriState.closing; @@ -1567,10 +1575,10 @@ template SiSUdocAbstraction() {              _node =                node_construct.node_emitter(                  content_non_header, -                segment_object_belongs_to, +                segment_anchor_tag_that_object_belongs_to,                  obj_cite_number, -                counter, -                heading_pointer-1, +                cntr, +                heading_ptr-1,                  an_object["is"]                );              auto substantive_object_and_anchor_tags_tuple = @@ -1588,7 +1596,7 @@ template SiSUdocAbstraction() {                );              object_reset(an_object);              processing.remove("verse"); -            ++counter; +            ++cntr;            }          }        } @@ -1740,7 +1748,7 @@ template SiSUdocAbstraction() {        ref string[][string][string] bookindex_unordered_hashes,        ref int obj_cite_number,        ref string _node, -      ref long counter, +      ref long cntr,        ref int[string] type,        string[string] obj_cite_number_poem,        string[string][string] dochead_make_aa, @@ -1766,10 +1774,10 @@ template SiSUdocAbstraction() {          _node =            node_construct.node_emitter(              content_non_header, -            segment_object_belongs_to, +            segment_anchor_tag_that_object_belongs_to,              obj_cite_number, -            counter, -            heading_pointer-1, +            cntr, +            heading_ptr-1,              an_object["is"]            );          auto substantive_object_and_anchor_tags_tuple = @@ -1787,7 +1795,7 @@ template SiSUdocAbstraction() {            );          object_reset(an_object);          processing.remove("verse"); -        ++counter; +        ++cntr;          type["blocks"] = TriState.off;          type["code"] = TriState.off;        } else if (type["poem"] == TriState.closing) { @@ -1799,10 +1807,10 @@ template SiSUdocAbstraction() {          _node =            node_construct.node_emitter(              content_non_header, -            segment_object_belongs_to, +            segment_anchor_tag_that_object_belongs_to,              obj_cite_number, -            counter, -            heading_pointer-1, +            cntr, +            heading_ptr-1,              an_object["is"]            );          the_document_body_section ~= @@ -1827,10 +1835,10 @@ template SiSUdocAbstraction() {          _node =            node_construct.node_emitter(              content_non_header, -            segment_object_belongs_to, +            segment_anchor_tag_that_object_belongs_to,              obj_cite_number, -            counter, -            heading_pointer-1, +            cntr, +            heading_ptr-1,              an_object["is"]            );          auto substantive_object_and_anchor_tags_tuple = @@ -1848,7 +1856,7 @@ template SiSUdocAbstraction() {            );          object_reset(an_object);          processing.remove("verse"); -        ++counter; +        ++cntr;          type["blocks"] = TriState.off;          type["table"] = TriState.off;        } else if (type["group"] == TriState.closing) { @@ -1862,10 +1870,10 @@ template SiSUdocAbstraction() {          _node =            node_construct.node_emitter(              content_non_header, -            segment_object_belongs_to, +            segment_anchor_tag_that_object_belongs_to,              obj_cite_number, -            counter, -            heading_pointer-1, +            cntr, +            heading_ptr-1,              an_object["is"]            );          auto substantive_object_and_anchor_tags_tuple = @@ -1883,7 +1891,7 @@ template SiSUdocAbstraction() {            );          object_reset(an_object);          processing.remove("verse"); -        ++counter; +        ++cntr;          type["blocks"] = TriState.off;          type["group"] = TriState.off;        } else if (type["block"] == TriState.closing) { @@ -1896,10 +1904,10 @@ template SiSUdocAbstraction() {          _node =            node_construct.node_emitter(              content_non_header, -            segment_object_belongs_to, +            segment_anchor_tag_that_object_belongs_to,              obj_cite_number, -            counter, -            heading_pointer-1, +            cntr, +            heading_ptr-1,              an_object["is"]             );          auto substantive_object_and_anchor_tags_tuple = @@ -1917,7 +1925,7 @@ template SiSUdocAbstraction() {            );          object_reset(an_object);          processing.remove("verse"); -        ++counter; +        ++cntr;          type["blocks"] = TriState.off;          type["block"] = TriState.off;        } else if (type["quote"] == TriState.closing) { @@ -1931,10 +1939,10 @@ template SiSUdocAbstraction() {          _node =            node_construct.node_emitter(              content_non_header, -            segment_object_belongs_to, +            segment_anchor_tag_that_object_belongs_to,              obj_cite_number, -            counter, -            heading_pointer-1, +            cntr, +            heading_ptr-1,              an_object["is"]            );          auto substantive_object_and_anchor_tags_tuple = @@ -1952,7 +1960,7 @@ template SiSUdocAbstraction() {            );          object_reset(an_object);          processing.remove("verse"); -        ++counter; +        ++cntr;          type["blocks"] = TriState.off;          type["quote"] = TriState.off;        } @@ -2667,7 +2675,7 @@ template SiSUdocAbstraction() {        auto table_of_contents_gather_headings(          string[string] obj_,          string[string][string] dochead_make_aa, -        string segment_object_belongs_to, +        string segment_anchor_tag_that_object_belongs_to,          string _anchor_tag,          ObjComposite[][string] the_table_of_contents_section,        ) @@ -2762,7 +2770,7 @@ template SiSUdocAbstraction() {            toc_txt_ = format(              "{ %s }../%s.fn_suffix",              heading_toc_, -            segment_object_belongs_to, +            segment_anchor_tag_that_object_belongs_to,            );            toc_txt_= munge.url_links(toc_txt_);            indent=[ @@ -2783,7 +2791,7 @@ template SiSUdocAbstraction() {            toc_txt_ = format(              "{ %s }../%s.fn_suffix#%s",              heading_toc_, -            segment_object_belongs_to, +            segment_anchor_tag_that_object_belongs_to,              _anchor_tag,            );            toc_txt_= munge.url_links(toc_txt_); @@ -3178,10 +3186,10 @@ template SiSUdocAbstraction() {            oa_j.object["obj_cite_number"] = node_j["obj_cite_number"];            oa_j.object["lev_markup_number"] = node_j["lev_markup_number"];            oa_j.object["lev_collapsed_number"] = node_j["lev_collapsed_number"]; -          oa_j.object["heading_pointer"] = -            node_j["heading_pointer"]; // check -          oa_j.object["doc_object_pointer"] = -            node_j["doc_object_pointer"]; // check +          oa_j.object["heading_ptr"] = +            node_j["heading_ptr"]; // check +          oa_j.object["doc_object_ptr"] = +            node_j["doc_object_ptr"]; // check          }          oa_j.object["parent_obj_cite_number"] = node_j["parent_obj_cite_number"];          oa_j.object["parent_lev_markup_number"] = node_j["parent_lev_markup_number"]; @@ -3318,12 +3326,12 @@ template SiSUdocAbstraction() {        auto bookindex_build_section(          string[][string][string] bookindex_unordered_hashes,          int                      obj_cite_number, -        string                   segment_object_belongs_to, +        string                   segment_anchor_tag_that_object_belongs_to,          bool[string]             opt_action_bool,        ) {          string type;          string lev; -        int lev_markup_number, lev_collapsed_number; +        int lev_int_markup, lev_int_collapsed;          string attrib;          int[string] indent;          auto set_abstract_object = ObjectAbstractSet(); @@ -3335,8 +3343,8 @@ template SiSUdocAbstraction() {            string bi_tmp_seg, bi_tmp_scroll;            attrib="";            lev="B"; -          lev_markup_number=1; -          lev_collapsed_number=1; +          lev_int_markup=1; +          lev_int_collapsed=1;            bookindex_section["scroll"] ~=              set_abstract_object.contents_heading(                "Book Index", @@ -3344,8 +3352,8 @@ template SiSUdocAbstraction() {                obj_cite_number,                [],                to!string(lev), -              lev_markup_number, -              lev_collapsed_number +              lev_int_markup, +              lev_int_collapsed              );            bookindex_section["seg"] ~=              set_abstract_object.contents_heading( @@ -3354,16 +3362,16 @@ template SiSUdocAbstraction() {                obj_cite_number,                [],                to!string(lev), -              lev_markup_number, -              lev_collapsed_number +              lev_int_markup, +              lev_int_collapsed              );            ++obj_cite_number;            ++mkn;            // 1~ Index            attrib="";            lev="1"; -          lev_markup_number=4; -          lev_collapsed_number=2; +          lev_int_markup=4; +          lev_int_collapsed=2;            bookindex_section["scroll"] ~=              set_abstract_object.contents_heading(                "Index", @@ -3371,8 +3379,8 @@ template SiSUdocAbstraction() {                obj_cite_number,                ["book_index"],                to!string(lev), -              lev_markup_number, -              lev_collapsed_number +              lev_int_markup, +              lev_int_collapsed              );            bookindex_section["seg"] ~=              set_abstract_object.contents_heading( @@ -3381,8 +3389,8 @@ template SiSUdocAbstraction() {                obj_cite_number,                ["book_index"],                to!string(lev), -              lev_markup_number, -              lev_collapsed_number +              lev_int_markup, +              lev_int_collapsed              );            ++obj_cite_number;            ++mkn; @@ -3392,9 +3400,9 @@ template SiSUdocAbstraction() {              foreach (ref_; bookindex_unordered_hashes[mainkey]["_a"]) {                auto go = replaceAll(ref_, rgx.book_index_go, "$1");                bi_tmp_scroll ~= munge.url_links(" {" ~ ref_ ~ "}#" ~ go ~ ", "); -              bi_tmp_seg ~= (segment_object_belongs_to.empty) +              bi_tmp_seg ~= (segment_anchor_tag_that_object_belongs_to.empty)                ? munge.url_links(" {" ~ ref_ ~ "}#" ~ go ~ ", ") -              : munge.url_links(" {" ~ ref_ ~ "}../" ~ segment_object_belongs_to ~ ".fn_suffix#" ~ go ~ ", "); +              : munge.url_links(" {" ~ ref_ ~ "}../" ~ segment_anchor_tag_that_object_belongs_to ~ ".fn_suffix#" ~ go ~ ", ");              }              bi_tmp_scroll ~= " \\\\\n    ";              bi_tmp_seg ~= " \\\\\n    "; @@ -3407,9 +3415,9 @@ template SiSUdocAbstraction() {                foreach (ref_; bookindex_unordered_hashes[mainkey][subkey]) {                  auto go = replaceAll(ref_, rgx.book_index_go, "$1");                  bi_tmp_scroll ~= munge.url_links(" {" ~ ref_ ~ "}#" ~ go ~ ", "); -                bi_tmp_seg ~= (segment_object_belongs_to.empty) +                bi_tmp_seg ~= (segment_anchor_tag_that_object_belongs_to.empty)                  ? munge.url_links(" {" ~ ref_ ~ "}#" ~ go ~ ", ") -                : munge.url_links(" {" ~ ref_ ~ "}../" ~ segment_object_belongs_to ~ ".fn_suffix#" ~ go ~ ", "); +                : munge.url_links(" {" ~ ref_ ~ "}../" ~ segment_anchor_tag_that_object_belongs_to ~ ".fn_suffix#" ~ go ~ ", ");                }                bi_tmp_scroll ~= " \\\\\n    ";                bi_tmp_seg ~= " \\\\\n    "; @@ -3477,20 +3485,20 @@ template SiSUdocAbstraction() {        auto rgx = Rgx();        private auto gather_notes_for_endnote_section(          ObjComposite[] contents_am, -        string         segment_object_belongs_to, -        ulong          counter, +        string         segment_anchor_tag_that_object_belongs_to, +        ulong          cntr,        )        in {          // endnotes/ footnotes for          // doc objects other than paragraphs & headings          // various forms of grouped text -        assert((contents_am[counter].is_a == "para") -        || (contents_am[counter].is_a == "heading") -        || (contents_am[counter].is_a == "group")); -        assert(counter >= previous_count); -        previous_count=counter; +        assert((contents_am[cntr].is_a == "para") +        || (contents_am[cntr].is_a == "heading") +        || (contents_am[cntr].is_a == "group")); +        assert(cntr >= previous_count); +        previous_count=cntr;          assert( -          match(contents_am[counter].object, +          match(contents_am[cntr].object,            rgx.inline_notes_delimiter_al_regular_number_note)          );        } @@ -3499,24 +3507,24 @@ template SiSUdocAbstraction() {          foreach(            m;            matchAll( -            contents_am[counter].object, +            contents_am[cntr].object,              rgx.inline_notes_delimiter_al_regular_number_note            )          ) {            debug(endnotes_build) {              writeln( -              "{^{", m.captures[1], ".}^}../", segment_object_belongs_to, ".fn_suffix#noteref_\n  ", m.captures[1], " ", +              "{^{", m.captures[1], ".}^}../", segment_anchor_tag_that_object_belongs_to, ".fn_suffix#noteref_\n  ", m.captures[1], " ",                m.captures[2]); // sometimes need segment name (segmented html & epub)            }            // TODO NEXT you need anchor for segments at this point ->            object_notes["anchor"] ~= "#note_" ~ m.captures[1] ~ "』"; -          object_notes["seg"] ~= (segment_object_belongs_to.empty) +          object_notes["seg"] ~= (segment_anchor_tag_that_object_belongs_to.empty)            ? (munge.url_links(                "{^{" ~ m.captures[1] ~ ".}^}#noteref_" ~                m.captures[1]) ~ " " ~ m.captures[2] ~ "』"              )            : (munge.url_links( -              "{^{" ~ m.captures[1] ~ ".}^}../" ~ segment_object_belongs_to ~ ".fn_suffix#noteref_" ~ +              "{^{" ~ m.captures[1] ~ ".}^}../" ~ segment_anchor_tag_that_object_belongs_to ~ ".fn_suffix#noteref_" ~                m.captures[1]) ~ " " ~ m.captures[2] ~ "』"              );            object_notes["scroll"] ~= @@ -3666,11 +3674,11 @@ template SiSUdocAbstraction() {            writeln("json:                ", bib_arr_json.length);            writeln("unsorted:            ", biblio_unsorted.length);            writeln("sorted:              ", biblio_sorted__.length); -          int counter; +          int cntr;            int[7] x; -          while (counter < x.length) { -            writeln(counter, ": ", biblio_sorted__[counter]["fulltitle"]); -            counter++; +          while (cntr < x.length) { +            writeln(cntr, ": ", biblio_sorted__[cntr]["fulltitle"]); +            cntr++;            }          }          return biblio_sorted__; @@ -3737,9 +3745,9 @@ template SiSUdocAbstraction() {        string node_emitter(          string lev_markup_number,          string segment_anchor_tag, -        int obj_cite_number_, -        long counter_, -        int pointer_, +        int    obj_cite_number_, +        long   cntr_, +        int    ptr_,          string is_        )        in { @@ -3765,20 +3773,20 @@ template SiSUdocAbstraction() {            p_["obj_cite_number"] = lv4;          }          _node=("{ " ~ -          "\"is\": \"" ~ is_ ~ "\"" ~ -          ", \"heading_pointer\": " ~ to!string(pointer_) ~ -          ", \"doc_object_pointer\": " ~ to!string(counter_) ~ -          ", \"obj_cite_number\": " ~ to!string(obj_cite_number_) ~ -          ", \"segment_anchor_tag\": \"" ~ segment_anchor_tag ~ "\"" ~ -          ", \"parent_obj_cite_number\": " ~ to!string(p_["obj_cite_number"]) ~ +          "\"is\": \""                       ~ is_ ~ "\"" ~ +          ", \"heading_ptr\": "          ~ to!string(ptr_) ~ +          ", \"doc_object_ptr\": "       ~ to!string(cntr_) ~ +          ", \"obj_cite_number\": "          ~ to!string(obj_cite_number_) ~ +          ", \"segment_anchor_tag\": \""     ~ segment_anchor_tag ~ "\"" ~ +          ", \"parent_obj_cite_number\": "   ~ to!string(p_["obj_cite_number"]) ~            ", \"parent_lev_markup_number\": " ~ to!string(p_["lev_markup_number"]) ~            " }"          );          debug(node) {            if (match(lev_markup_number, rgx.levels_numbered_headings)) { -            writeln("* ", to!string(_node)); +            writeln("x ", to!string(_node));            } else { -            writeln("* ", to!string(_node)); +            writeln("- ", to!string(_node));            }          }          JSONValue j = parseJSON(_node); @@ -3793,10 +3801,11 @@ template SiSUdocAbstraction() {          string lev_markup_number,          string lev_collapsed_number,          string segment_anchor_tag, -        int obj_cite_number_, -        long counter_, -        int pointer_, -        string is_ +        int    obj_cite_number_, +        long   cntr_, +        int    ptr_, +        string is_, +        uint html_segnames_ptr,        )        in {          auto rgx = Rgx(); @@ -3815,15 +3824,15 @@ template SiSUdocAbstraction() {        body {          auto rgx = Rgx();          int obj_cite_number = to!int(obj_cite_number_); -        switch (lev_markup_number) { // switch (to!string(lv)) { -        case "0": +        switch (to!int(lev_markup_number)) { // switch (to!string(lv)) { +        case 0:            lv = DocStructMarkupHeading.h_sect_A;            lv0 = obj_cite_number;            lv1=0; lv2=0; lv3=0; lv4=0; lv5=0; lv6=0; lv7=0;            p_["lev_markup_number"] = 0;            p_["obj_cite_number"] = 0;            break; -        case "1": +        case 1:            lv = DocStructMarkupHeading.h_sect_B;            lv1 = obj_cite_number;            lv2=0; lv3=0; lv4=0; lv5=0; lv6=0; lv7=0; @@ -3831,7 +3840,7 @@ template SiSUdocAbstraction() {              DocStructMarkupHeading.h_sect_A;            p_["obj_cite_number"] = lv0;            break; -        case "2": +        case 2:            lv = DocStructMarkupHeading.h_sect_C;            lv2 = obj_cite_number;            lv3=0; lv4=0; lv5=0; lv6=0; lv7=0; @@ -3839,7 +3848,7 @@ template SiSUdocAbstraction() {              DocStructMarkupHeading.h_sect_B;            p_["obj_cite_number"] = lv1;            break; -        case "3": +        case 3:            lv = DocStructMarkupHeading.h_sect_D;            lv3=obj_cite_number;            lv4=0; lv5=0; lv6=0; lv7=0; @@ -3847,7 +3856,7 @@ template SiSUdocAbstraction() {              DocStructMarkupHeading.h_sect_C;            p_["obj_cite_number"] = lv2;            break; -        case "4": +        case 4:            lv = DocStructMarkupHeading.h_text_1;            lv4 = obj_cite_number;            lv5=0; lv6=0; lv7=0; @@ -3869,7 +3878,7 @@ template SiSUdocAbstraction() {              p_["obj_cite_number"] = lv0;            }            break; -        case "5": +        case 5:            lv = DocStructMarkupHeading.h_text_2;            lv5 = obj_cite_number;            lv6=0; lv7=0; @@ -3877,7 +3886,7 @@ template SiSUdocAbstraction() {              DocStructMarkupHeading.h_text_1;            p_["obj_cite_number"] = lv4;            break; -        case "6": +        case 6:            lv = DocStructMarkupHeading.h_text_3;            lv6 = obj_cite_number;            lv7=0; @@ -3885,7 +3894,7 @@ template SiSUdocAbstraction() {              DocStructMarkupHeading.h_text_2;            p_["obj_cite_number"] = lv5;            break; -        case "7": +        case 7:            lv = DocStructMarkupHeading.h_text_4;            lv7 = obj_cite_number;            p_["lev_markup_number"] = @@ -3896,15 +3905,16 @@ template SiSUdocAbstraction() {            break;          }          _node=("{ " ~ -          "\"is\": \"" ~ is_ ~ "\"" ~ -          ", \"heading_pointer\": " ~ to!string(pointer_) ~ -          ", \"doc_object_pointer\": " ~ to!string(counter_) ~ -          ", \"obj_cite_number\": " ~ to!string(obj_cite_number_) ~ -          ",  \"lev_markup_number\": " ~ to!string(lev_markup_number) ~ -          ",  \"lev_collapsed_number\": " ~ to!string(lev_collapsed_number) ~ -          ", \"segment_anchor_tag\": \"" ~ segment_anchor_tag ~ "\"" ~ -          ", \"parent_obj_cite_number\": " ~ to!string(p_["obj_cite_number"]) ~ -          ", \"parent_lev_markup_number\": " ~ to!string(p_["lev_markup_number"]) ~ +          "\"is\": \""                             ~ is_ ~ "\"" ~ +          ", \"heading_ptr\": "                ~ to!string(ptr_) ~ +          ", \"doc_object_ptr\": "             ~ to!string(cntr_) ~ +          ", \"html_segnames_ptr\": \""        ~ ((lev_markup_number == "4") ? (to!string(html_segnames_ptr)) : "") ~ "\"" ~ +          ", \"obj_cite_number\": "                ~ to!string(obj_cite_number_) ~ +          ", \"lev_markup_number\": "              ~ to!string(lev_markup_number) ~ +          ", \"lev_collapsed_number\": "           ~ to!string(lev_collapsed_number) ~ +          ", \"segment_anchor_tag\": \""           ~ segment_anchor_tag ~ "\"" ~ +          ", \"parent_obj_cite_number\": "         ~ to!string(p_["obj_cite_number"]) ~ +          ", \"parent_lev_markup_number\": "       ~ to!string(p_["lev_markup_number"]) ~            " }"          );          debug(heading) { @@ -3912,11 +3922,9 @@ template SiSUdocAbstraction() {              writeln("* ", to!string(_node));            }          } -        debug(node) { +        debug(nodeheading) {            if (match(lev_markup_number, rgx.levels_numbered_headings)) {              writeln("* ", to!string(_node)); -          } else { -            writeln("* ", to!string(_node));            }          }          JSONValue j = parseJSON(_node); diff --git a/src/sdp/ao_object_setter.d b/src/sdp/ao_object_setter.d index 844af9b..35ca768 100644 --- a/src/sdp/ao_object_setter.d +++ b/src/sdp/ao_object_setter.d @@ -6,9 +6,14 @@  template ObjectSetter() {    /+ structs +/    struct HeadingAttrib { -    string lev                  = "9"; -    int lev_markup_number       = 9; -    int lev_collapsed_number    = 9; +    string lev                            = "9"; +    int    lev_int_markup                 = 9; +    int    lev_int_collapsed              = 9; +    int[]  closes_lev_collapsed           = []; // TODO track +    int[]  closes_lev_markup              = []; // TODO track +    int    array_ptr                  = 0; +  // heading segments, 1~ lev4: +    int    heading_array_ptr_segments = 0; // TODO    }    struct ParaAttrib {      int indent_start            = 0; @@ -22,10 +27,22 @@ template ObjectSetter() {      // no .attrib and no .obj_cite_number    }    struct Node { -    int ocn                     = 0; -    int parent_lev              = 0; -    int parent_ocn              = 0; -    string node                 = ""; +    int ocn                            = 0; +    string seg_anchor_tag              = ""; +  // parent +    int parent_lev_int_markup          = 0; +    int parent_ocn                     = 0; +    int[] ancestors                    = []; // TODO track +  // heading: +    int heading_lev_int_markup         = 0; +    int heading_lev_int_collapsed      = 0; +    int[] heading_closes_lev_collapsed = []; // TODO track +    int[] heading_closes_lev_markup    = []; // TODO track +    int heading_array_ptr          = 0; +  // heading segments, 1~ lev4: +    int heading_array_ptr_segments = 0; // TODO +  // node info json string: +    string node                        = "";    }    struct ObjComposite {      string use                  = ""; @@ -59,8 +76,8 @@ template ObjectSetter() {        in int obj_cite_number,        in string[] tags,        in string lev, -      in int lev_markup_number, -      in int lev_collapsed_number, +      in int lev_int_markup, +      in int lev_int_collapsed,      ) {        ObjComposite object_set;        object_set.use                                 = "content"; @@ -70,9 +87,8 @@ template ObjectSetter() {        object_set.obj_cite_number                     = (obj_cite_number==0) ? "" : to!string(obj_cite_number);        object_set.anchor_tags                         ~= tags;        object_set.heading_attrib.lev                  = lev; -      object_set.heading_attrib.lev_markup_number    = lev_markup_number; -      object_set.heading_attrib.lev_collapsed_number = lev_collapsed_number; -      // object_set.node_structure.node               = _node; +      object_set.heading_attrib.lev_int_markup       = lev_int_markup; +      object_set.heading_attrib.lev_int_collapsed    = lev_int_collapsed;        return object_set;      }      auto contents_para( @@ -81,7 +97,7 @@ template ObjectSetter() {        in string attrib,        in int obj_cite_number,        in int[string] indent, -      in bool bullet +      in bool bullet,      ) {        ObjComposite object_set;        object_set.use                      = "content"; @@ -101,7 +117,7 @@ template ObjectSetter() {        in string attrib,        in int obj_cite_number,        in int[string] indent, -      in bool bullet +      in bool bullet,      ) {        ObjComposite object_set;        object_set.use                      = "content"; @@ -137,7 +153,7 @@ template ObjectSetter() {        in string type,        in string object,        in string attrib, -      in int obj_cite_number +      in int obj_cite_number,      ) {        ObjComposite object_set;        object_set.use                 = "content"; @@ -152,7 +168,7 @@ template ObjectSetter() {        in string type,        in string object,        in string attrib_language_syntax, -      in int obj_cite_number +      in int obj_cite_number,      ) {        ObjComposite object_set;        object_set.use                 = "content"; diff --git a/src/sdp/ao_output_debugs.d b/src/sdp/ao_output_debugs.d index 3c3b101..c6e8ac7 100644 --- a/src/sdp/ao_output_debugs.d +++ b/src/sdp/ao_output_debugs.d @@ -6,8 +6,7 @@ template SiSUoutputDebugs() {      auto abstract_doc_source_debugs(S)(        auto ref const S         contents,        string[][string]         document_section_keys_sequenced, -      string[][string][string] bookindex_unordered_hashes,      // redundant, consider -      JSONValue[]              biblio,                          // redundant, consider +      string[]                 html_segnames,        string[string][string]   dochead_make,        string[string][string]   dochead_meta,        string                   fn_src, @@ -18,30 +17,7 @@ template SiSUoutputDebugs() {        auto rgx = Rgx();        auto markup = InlineMarkup();        string key; -      struct BookIndexReport { -        int mkn, skn; -        auto bookindex_report_sorted( -          string[][string][string] bookindex_unordered_hashes -        ) { -          auto mainkeys=bookindex_unordered_hashes.byKey.array. -            sort!("toLower(a) < toLower(b)", SwapStrategy.stable).release; -          foreach (mainkey; mainkeys) { -            auto subkeys=bookindex_unordered_hashes[mainkey].byKey.array. -              sort!("toLower(a) < toLower(b)", SwapStrategy.stable).release; -            foreach (subkey; subkeys) { -              debug(bookindex) { -                writeln( -                  mainkey, ": ", -                  subkey, ": ", -                  to!string(bookindex_unordered_hashes[mainkey][subkey]) -                ); -              } -              ++skn; -            } -            ++mkn; -          } -        } -      } +              debug(parent) {          writefln(            "%s:%s", @@ -56,7 +32,7 @@ template SiSUoutputDebugs() {                    "%s node: %s heading: %s %s",                    obj.obj_cite_number,                    obj.node, -                  obj.lev_markup_number, +                  obj.lev_int_markup,                    obj.object,                  );                } @@ -251,12 +227,12 @@ template SiSUoutputDebugs() {            "%s\n%s\n%s",            "document header, metadata & make instructions:",            dochead_meta, -          pointer_head_main, +          ptr_head_main,          ); -        foreach (main_header; pointer_head_main) { +        foreach (main_header; ptr_head_main) {            switch (main_header) {            case "make": -            foreach (sub_header; pointer_head_sub_make) { +            foreach (sub_header; ptr_head_sub_make) {                if (to!string(dochead_meta[main_header][sub_header]).length > 2) {                  writefln(                    "%s:%s: %s", @@ -277,12 +253,12 @@ template SiSUoutputDebugs() {            "%s\n%s\n%s",            "document header, metadata & make instructions:",            dochead_meta, -          pointer_head_main, +          ptr_head_main,          ); -        foreach (main_header; pointer_head_main) { +        foreach (main_header; ptr_head_main) {            switch (main_header) {            case "creator": -            foreach (sub_header; pointer_head_sub_creator) { +            foreach (sub_header; ptr_head_sub_creator) {                if (to!string(dochead_meta[main_header][sub_header]).length > 2) {                  writefln(                    "%s:%s: %s", @@ -294,7 +270,7 @@ template SiSUoutputDebugs() {              }              break;            case "title": -            foreach (sub_header; pointer_head_sub_title) { +            foreach (sub_header; ptr_head_sub_title) {                if (to!string(dochead_meta[main_header][sub_header]).length > 2) {                  writefln(                    "%s:%s: %s", @@ -306,7 +282,7 @@ template SiSUoutputDebugs() {              }              break;            case "rights": -            foreach (sub_header; pointer_head_sub_rights) { +            foreach (sub_header; ptr_head_sub_rights) {                if (to!string(dochead_meta[main_header][sub_header]).length > 2) {                  writefln(                    "%s:%s: %s", @@ -318,7 +294,7 @@ template SiSUoutputDebugs() {              }              break;            case "date": -            foreach (sub_header; pointer_head_sub_date) { +            foreach (sub_header; ptr_head_sub_date) {                if (to!string(dochead_meta[main_header][sub_header]).length > 2) {                  writefln(                    "%s:%s: %s", @@ -330,7 +306,7 @@ template SiSUoutputDebugs() {              }              break;            case "original": -            foreach (sub_header; pointer_head_sub_original) { +            foreach (sub_header; ptr_head_sub_original) {                if (to!string(dochead_meta[main_header][sub_header]).length > 2) {                  writefln(                    "%s:%s: %s", @@ -342,7 +318,7 @@ template SiSUoutputDebugs() {              }              break;            case "classify": -            foreach (sub_header; pointer_head_sub_classify) { +            foreach (sub_header; ptr_head_sub_classify) {                if (to!string(dochead_meta[main_header][sub_header]).length > 2) {                  writefln(                    "%s:%s: %s", @@ -354,7 +330,7 @@ template SiSUoutputDebugs() {              }              break;            case "identifier": -            foreach (sub_header; pointer_head_sub_identifier) { +            foreach (sub_header; ptr_head_sub_identifier) {                if (to!string(dochead_meta[main_header][sub_header]).length > 2) {                  writefln(                    "%s:%s: %s", @@ -366,7 +342,7 @@ template SiSUoutputDebugs() {              }              break;            case "notes": -            foreach (sub_header; pointer_head_sub_notes) { +            foreach (sub_header; ptr_head_sub_notes) {                if (to!string(dochead_meta[main_header][sub_header]).length > 2) {                  writefln(                    "%s:%s: %s", @@ -378,7 +354,7 @@ template SiSUoutputDebugs() {              }              break;            case "publisher": -            foreach (sub_header; pointer_head_sub_publisher) { +            foreach (sub_header; ptr_head_sub_publisher) {                if (to!string(dochead_meta[main_header][sub_header]).length > 2) {                  writefln(                    "%s:%s: %s", @@ -394,27 +370,6 @@ template SiSUoutputDebugs() {            }          }        } -      debug(bookindex) { -        writefln( -          "%s\n%s:%s", -          "-------------------------------", -          __FILE__, -          __LINE__, -        ); -        auto bookindex = BookIndexReport(); -        bookindex.bookindex_report_sorted(bookindex_unordered_hashes); -      } -       -      debug(biblio) { -        foreach (entry; biblio) { -          writefln( -            "%s; (%s)", -            entry["sortby_deemed_author_year_title"], -            entry["author"], -          ); -        } -      } -              debug(anchor) {          writefln(            "%s\n%s:%s", @@ -442,7 +397,7 @@ template SiSUoutputDebugs() {          foreach (k; document_section_keys_sequenced["seg"]) {            foreach (o; contents[k]) {              if (o.is_a == "heading") { -              switch (o.heading_attrib.lev_markup_number) { +              switch (o.heading_attrib.lev_int_markup) {                case 0:                  spc="";                  break; @@ -478,8 +433,8 @@ template SiSUoutputDebugs() {                  "%s* %s\n                (markup level: %s; collapsed level: %s)",                  spc,                  strip(o.object), -                o.heading_attrib.lev_markup_number, -                o.heading_attrib.lev_collapsed_number +                o.heading_attrib.lev_int_markup, +                o.heading_attrib.lev_int_collapsed                );              }            } diff --git a/src/sdp/output_html.d b/src/sdp/output_html.d index c20d6ef..3767d5a 100644 --- a/src/sdp/output_html.d +++ b/src/sdp/output_html.d @@ -14,12 +14,12 @@ template SiSUoutputHTML() {        ¶",        obj.obj_cite_number,        obj.obj_cite_number, -      obj.heading_attrib.lev_markup_number, +      obj.heading_attrib.lev_int_markup,        obj.is_a,        obj.obj_cite_number,        obj.obj_cite_number,        obj.object, -      obj.heading_attrib.lev_markup_number +      obj.heading_attrib.lev_int_markup        );        return o;      } diff --git a/src/sdp/output_hub.d b/src/sdp/output_hub.d index bdb8480..7235619 100644 --- a/src/sdp/output_hub.d +++ b/src/sdp/output_hub.d @@ -7,6 +7,7 @@ template SiSUoutputHub() {      void hub(S)(        auto ref const S         contents,        string[][string]         document_section_keys_sequenced, +      string[]                 html_segnames,        string[string][string]   dochead_make,        string[string][string]   dochead_meta,        string                   fn_src, diff --git a/views/version.txt b/views/version.txt index 58c4aa4..22af559 100644 --- a/views/version.txt +++ b/views/version.txt @@ -4,4 +4,4 @@ struct Version {    int minor;    int patch;  } -enum ver = Version(0, 9, 2); +enum ver = Version(0, 9, 3); | 
