From f163bae9496feff1ef5bc299ca54ffcc497b12f7 Mon Sep 17 00:00:00 2001 From: Ralph Amissah Date: Mon, 17 Oct 2016 21:07:55 -0400 Subject: 0.7.3 provide associated segment name for endnotes section and book index --- org/ao_abstract_doc_source.org | 274 ++++++++++++++++++++++----------------- org/ao_output_debugs.org | 2 +- org/sdp.org | 2 +- src/sdp/ao_abstract_doc_source.d | 208 ++++++++++++++--------------- src/sdp/ao_object_setter.d | 12 +- src/sdp/ao_output_debugs.d | 54 ++++---- views/version.txt | 2 +- 7 files changed, 289 insertions(+), 265 deletions(-) diff --git a/org/ao_abstract_doc_source.org b/org/ao_abstract_doc_source.org index 8b564d3..7255cc7 100644 --- a/org/ao_abstract_doc_source.org +++ b/org/ao_abstract_doc_source.org @@ -19,6 +19,7 @@ Process markup document, create document abstraction. ** _1. pre loop processing_ :pre: *** imports :imports: + [[./ao_defaults.org][ao_defaults]] #+name: abs_imports @@ -46,6 +47,7 @@ auto rgx = Rgx(); ObjComposite[] contents_the_objects; string[string] an_object, processing; string[] anchor_tags; +string segment_object_belongs_to; auto set_abstract_object = ObjectAbstractSet(); auto note_section = NotesSection(); /+ enum +/ @@ -94,40 +96,8 @@ string[][string][string] bkidx_hash(string bookindex_section, int obj_cite_numbe return bookindex_extract_hash.bookindex_nugget_hash(bookindex_section, obj_cite_number); } /+ node +/ -string node; +string _node; auto node_construct = NodeStructureMetadata(); -string node_jstr( - string lev_markup_number, - int obj_cite_number_, - long counter, - int heading_pointer, - string is_ -) { - return node_construct.node_emitter( - lev_markup_number, - obj_cite_number_, - counter, - heading_pointer, - is_ - ); -} -string node_jstr_heading( - string lev_markup_number, - string lev_collapsed_number, - int obj_cite_number_, - long counter, - int heading_pointer, - string is_ -) { - return node_construct.node_emitter_heading( - lev_markup_number, - lev_collapsed_number, - obj_cite_number_, - counter, - heading_pointer, - is_ - ); -} #+END_SRC *** scope @@ -512,7 +482,7 @@ if (matchFirst(line, rgx.block_open)) { #+BEGIN_SRC d } else if (type["blocks"] == TriState.closing) { /+ line empty, with blocks flag +/ - _block_flag_line_empty_(line, an_object, contents_the_objects, bookindex_unordered_hashes, obj_cite_number, node, counter, type, obj_cite_number_poem, dochead_make_aa); // watch + _block_flag_line_empty_(line, an_object, contents_the_objects, bookindex_unordered_hashes, obj_cite_number, _node, counter, type, obj_cite_number_poem, dochead_make_aa); // watch #+END_SRC ****** line empty [+1] @@ -551,22 +521,32 @@ if ((type["heading"] == State.on) bookindex_unordered_hashes = bkidx_hash(an_object["bookindex"], obj_cite_number); an_object["is"] = "heading"; - node = - node_jstr_heading( + auto substantive_object_and_anchor_tags_tuple = + obj_im.obj_inline_markup_and_anchor_tags(an_object, dochead_make_aa); // tuple this with anchor tags? + 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]; + } else if (to!int(an_object["lev_markup_number"]) < 4) { + segment_object_belongs_to = ""; + } + _node = + node_construct.node_emitter_heading( an_object["lev_markup_number"], an_object["lev_collapsed_number"], + segment_object_belongs_to, obj_cite_number, counter, heading_pointer, an_object["is"] ); // heading - auto substantive_object_and_anchor_tags_tuple = - obj_im.obj_inline_markup_and_anchor_tags(an_object, dochead_make_aa); // tuple this with anchor tags? - an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0]; - anchor_tags = substantive_object_and_anchor_tags_tuple[1]; an_object["attrib"] = - obj_att.obj_attributes(an_object["is"], an_object["obj"], node); + obj_att.obj_attributes(an_object["is"], an_object["obj"], _node); ++heading_pointer; + debug(segments) { + writeln(an_object["lev_markup_number"]); + writeln(segment_object_belongs_to); + } contents_the_objects ~= set_abstract_object.contents_heading( an_object["substantive"], @@ -604,9 +584,10 @@ if ((type["heading"] == State.on) bookindex_unordered_hashes = bkidx_hash(an_object["bookindex"], obj_cite_number); an_object["is"] = "para"; - node = - node_jstr( + _node = + node_construct.node_emitter( content_non_header, + segment_object_belongs_to, obj_cite_number, counter, heading_pointer-1, @@ -617,7 +598,7 @@ if ((type["heading"] == State.on) an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0]; anchor_tags = substantive_object_and_anchor_tags_tuple[1]; an_object["attrib"] = - obj_att.obj_attributes(an_object["is"], an_object["obj"], node); + obj_att.obj_attributes(an_object["is"], an_object["obj"], _node); contents_the_objects ~= set_abstract_object.contents_para( an_object["is"], @@ -669,16 +650,12 @@ if (contents_the_objects.length > 0) { && (counter-1 > previous_count)) { if (match(contents_the_objects[$-1].object, rgx.inline_notes_delimiter_al_regular_number_note)) { - // endnotes/ footnotes for - // doc objects other than paragraphs & headings - // various forms of grouped text previous_count=contents_the_objects.length -1; note_section.gather_notes_for_endnote_section( contents_the_objects, + segment_object_belongs_to, contents_the_objects.length -1 ); - // notes[notepoint]=note_section.notes_section(contents_the_objects, counter-1); - // notepoint +=1; } } } @@ -691,10 +668,6 @@ if (contents_the_objects.length > 0) { #+BEGIN_SRC d debug(objectrelated2) { // check writeln(line); - // writeln(__FILE__, ":", __LINE__); - // writeln(counter); - // // contents_am[0..counter] - // writeln(contents_am.length); } /+ Backmatter: @@ -745,7 +718,7 @@ auto biblio_ordered = #+BEGIN_SRC d auto bi = BookIndexReportSection(); auto bi_tuple = - bi.bookindex_build_section(bookindex_unordered_hashes, obj_cite_number); + bi.bookindex_build_section(bookindex_unordered_hashes, obj_cite_number, segment_object_belongs_to); static assert(!isTypeTuple!(bi_tuple)); auto bookindex_section = bi_tuple[0]; obj_cite_number = bi_tuple[1]; @@ -799,6 +772,7 @@ return t; #+END_SRC * Functions :abstract:function: + functions used in document abstraction ** set & resets :reset: @@ -1308,6 +1282,7 @@ void _biblio_block_( #+END_SRC **** TODO poem block, verse objects :poem:verse: + why extra object stuff only in poem/verse? #+name: abs_functions_block_poem @@ -1355,7 +1330,7 @@ void _poem_block_( an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0]; anchor_tags = substantive_object_and_anchor_tags_tuple[1]; an_object["attrib"] = - obj_att.obj_attributes(an_object["is"], an_object["obj"], node); + obj_att.obj_attributes(an_object["is"], an_object["obj"], _node); contents_the_objects ~= set_abstract_object.contents_block( an_object["is"], @@ -1394,8 +1369,9 @@ void _poem_block_( } processing.remove("verse"); an_object["is"] = "verse"; - node = node_jstr( + _node = node_construct.node_emitter( content_non_header, + segment_object_belongs_to, obj_cite_number, counter, heading_pointer-1, @@ -1406,7 +1382,7 @@ void _poem_block_( an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0]; anchor_tags = substantive_object_and_anchor_tags_tuple[1]; an_object["attrib"] = - obj_att.obj_attributes(an_object["is"], an_object["obj"], node); + obj_att.obj_attributes(an_object["is"], an_object["obj"], _node); contents_the_objects ~= set_abstract_object.contents_block( an_object["is"], @@ -1443,7 +1419,7 @@ void _poem_block_( an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0]; anchor_tags = substantive_object_and_anchor_tags_tuple[1]; an_object["attrib"] = - obj_att.obj_attributes(an_object["is"], an_object["obj"], node); + obj_att.obj_attributes(an_object["is"], an_object["obj"], _node); contents_the_objects ~= set_abstract_object.contents_block( an_object["is"], @@ -1481,9 +1457,10 @@ void _poem_block_( } processing.remove("verse"); an_object["is"] = "verse"; - node = - node_jstr( + _node = + node_construct.node_emitter( content_non_header, + segment_object_belongs_to, obj_cite_number, counter, heading_pointer-1, @@ -1494,7 +1471,7 @@ void _poem_block_( an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0]; anchor_tags = substantive_object_and_anchor_tags_tuple[1]; an_object["attrib"] = - obj_att.obj_attributes(an_object["is"], an_object["obj"], node); + obj_att.obj_attributes(an_object["is"], an_object["obj"], _node); contents_the_objects ~= set_abstract_object.contents_block( an_object["is"], @@ -1685,7 +1662,7 @@ void _block_flag_line_empty_( ref ObjComposite[] contents_the_objects, ref string[][string][string] bookindex_unordered_hashes, ref int obj_cite_number, - ref string node, + ref string _node, ref long counter, ref int[string] type, string[string] obj_cite_number_poem, @@ -1709,9 +1686,10 @@ void _block_flag_line_empty_( bookindex_unordered_hashes = bkidx_hash(an_object["bookindex"], obj_cite_number); an_object["is"] = "code"; - node = - node_jstr( + _node = + node_construct.node_emitter( content_non_header, + segment_object_belongs_to, obj_cite_number, counter, heading_pointer-1, @@ -1722,7 +1700,7 @@ void _block_flag_line_empty_( an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0]; anchor_tags = substantive_object_and_anchor_tags_tuple[1]; an_object["attrib"] = - obj_att.obj_attributes(an_object["is"], an_object["obj"], node); + obj_att.obj_attributes(an_object["is"], an_object["obj"], _node); contents_the_objects ~= set_abstract_object.contents_block_code( an_object["is"], @@ -1742,9 +1720,10 @@ void _block_flag_line_empty_( bkidx_hash(an_object["bookindex"], obj_cite_number); // obj_cite_number = obj_cite_number_emit(type["obj_cite_number_status"]); an_object["is"] = "verse"; // check also - node = - node_jstr( + _node = + node_construct.node_emitter( content_non_header, + segment_object_belongs_to, obj_cite_number, counter, heading_pointer-1, @@ -1756,7 +1735,7 @@ void _block_flag_line_empty_( "poem", "", (obj_cite_number_poem["start"], obj_cite_number_poem["end"]), - node + _node ); // bookindex object_reset(an_object); processing.remove("verse"); @@ -1771,9 +1750,10 @@ void _block_flag_line_empty_( bookindex_unordered_hashes = bkidx_hash(an_object["bookindex"], obj_cite_number); an_object["is"] = "table"; - node = - node_jstr( + _node = + node_construct.node_emitter( content_non_header, + segment_object_belongs_to, obj_cite_number, counter, heading_pointer-1, @@ -1784,7 +1764,7 @@ void _block_flag_line_empty_( an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0]; anchor_tags = substantive_object_and_anchor_tags_tuple[1]; an_object["attrib"] = - obj_att.obj_attributes(an_object["is"], an_object["obj"], node); + obj_att.obj_attributes(an_object["is"], an_object["obj"], _node); contents_the_objects ~= set_abstract_object.contents_block( an_object["is"], @@ -1805,9 +1785,10 @@ void _block_flag_line_empty_( bookindex_unordered_hashes = bkidx_hash(an_object["bookindex"], obj_cite_number); an_object["is"] = "group"; - node = - node_jstr( + _node = + node_construct.node_emitter( content_non_header, + segment_object_belongs_to, obj_cite_number, counter, heading_pointer-1, @@ -1818,7 +1799,7 @@ void _block_flag_line_empty_( an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0]; anchor_tags = substantive_object_and_anchor_tags_tuple[1]; an_object["attrib"] = - obj_att.obj_attributes(an_object["is"], an_object["obj"], node); + obj_att.obj_attributes(an_object["is"], an_object["obj"], _node); contents_the_objects ~= set_abstract_object.contents_block( an_object["is"], @@ -1838,9 +1819,10 @@ void _block_flag_line_empty_( bookindex_unordered_hashes = bkidx_hash(an_object["bookindex"], obj_cite_number); an_object["is"] = "block"; - node = - node_jstr( + _node = + node_construct.node_emitter( content_non_header, + segment_object_belongs_to, obj_cite_number, counter, heading_pointer-1, @@ -1851,7 +1833,7 @@ void _block_flag_line_empty_( an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0]; anchor_tags = substantive_object_and_anchor_tags_tuple[1]; an_object["attrib"] = - obj_att.obj_attributes(an_object["is"], an_object["obj"], node); + obj_att.obj_attributes(an_object["is"], an_object["obj"], _node); contents_the_objects ~= set_abstract_object.contents_block( an_object["is"], @@ -1872,9 +1854,10 @@ void _block_flag_line_empty_( bookindex_unordered_hashes = bkidx_hash(an_object["bookindex"], obj_cite_number); an_object["is"] = "quote"; - node = - node_jstr( + _node = + node_construct.node_emitter( content_non_header, + segment_object_belongs_to, obj_cite_number, counter, heading_pointer-1, @@ -1885,7 +1868,7 @@ void _block_flag_line_empty_( an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0]; anchor_tags = substantive_object_and_anchor_tags_tuple[1]; an_object["attrib"] = - obj_att.obj_attributes(an_object["is"], an_object["obj"], node); + obj_att.obj_attributes(an_object["is"], an_object["obj"], _node); contents_the_objects ~= set_abstract_object.contents_block( an_object["is"], @@ -2608,6 +2591,7 @@ struct ObjInlineMarkup { #+END_SRC ***** private: + #+name: ao_emitters_obj_inline_markup_private #+BEGIN_SRC d private: @@ -2824,6 +2808,7 @@ private: **** object attrib :attributes: ***** attributes structure open, public + #+name: ao_emitters_obj_attributes #+BEGIN_SRC d struct ObjAttributes { @@ -2831,15 +2816,16 @@ struct ObjAttributes { #+END_SRC ***** attributes structure open, public + #+name: ao_emitters_obj_attributes_public #+BEGIN_SRC d - string obj_attributes(string obj_is_, string obj_raw, string node) + string obj_attributes(string obj_is_, string obj_raw, string _node) in { } body { scope(exit) { - // destroy(obj_is_); + destroy(obj_is_); destroy(obj_raw); - destroy(node); + destroy(_node); } _obj_attrib.remove("json"); _obj_attrib["json"] ="{"; @@ -2879,12 +2865,12 @@ struct ObjAttributes { break; } _obj_attrib["json"] ~=" }"; - _obj_attrib["json"]=_set_additional_values_parse_as_json(_obj_attrib["json"], obj_is_, node); + _obj_attrib["json"]=_set_additional_values_parse_as_json(_obj_attrib["json"], obj_is_, _node); debug(structattrib) { if (oa_j["is"].str() == "heading") { // writeln(__LINE__); writeln(_obj_attrib["json"]); - // writeln(node); + // writeln(_node); writeln( "is: ", oa_j["is"].str(), "; obj_cite_number: ", oa_j["obj_cite_number"].integer() @@ -2898,6 +2884,7 @@ struct ObjAttributes { #+END_SRC ***** private + #+name: ao_emitters_obj_attributes_private #+BEGIN_SRC d private: @@ -2906,6 +2893,7 @@ struct ObjAttributes { ****** attrubutes ******* para and block + #+name: ao_emitters_obj_attributes_private_an_attribute #+BEGIN_SRC d string _para_and_blocks(string obj_txt_in) @@ -2938,6 +2926,7 @@ struct ObjAttributes { #+END_SRC ******* para + #+name: ao_emitters_obj_attributes_private_an_attribute #+BEGIN_SRC d string _para(string obj_txt_in) @@ -2953,6 +2942,7 @@ struct ObjAttributes { #+END_SRC ******* heading + #+name: ao_emitters_obj_attributes_private_an_attribute #+BEGIN_SRC d string _heading(string obj_txt_in) @@ -2968,6 +2958,7 @@ struct ObjAttributes { #+END_SRC ******* code + #+name: ao_emitters_obj_attributes_private_an_attribute #+BEGIN_SRC d string _code(string obj_txt_in) @@ -2983,6 +2974,7 @@ struct ObjAttributes { #+END_SRC ******* group + #+name: ao_emitters_obj_attributes_private_an_attribute #+BEGIN_SRC d string _group(string obj_txt_in) @@ -2998,6 +2990,7 @@ struct ObjAttributes { #+END_SRC ******* block + #+name: ao_emitters_obj_attributes_private_an_attribute #+BEGIN_SRC d string _block(string obj_txt_in) @@ -3013,6 +3006,7 @@ struct ObjAttributes { #+END_SRC ******* verse + #+name: ao_emitters_obj_attributes_private_an_attribute #+BEGIN_SRC d string _verse(string obj_txt_in) @@ -3028,6 +3022,7 @@ struct ObjAttributes { #+END_SRC ******* quote + #+name: ao_emitters_obj_attributes_private_an_attribute #+BEGIN_SRC d string _quote(string obj_txt_in) @@ -3043,6 +3038,7 @@ struct ObjAttributes { #+END_SRC ******* table + #+name: ao_emitters_obj_attributes_private_an_attribute #+BEGIN_SRC d string _table(string obj_txt_in) @@ -3058,6 +3054,7 @@ struct ObjAttributes { #+END_SRC ******* comment + #+name: ao_emitters_obj_attributes_private_an_attribute #+BEGIN_SRC d string _comment(string obj_txt_in) @@ -3076,9 +3073,9 @@ struct ObjAttributes { #+name: ao_emitters_obj_attributes_private_json #+BEGIN_SRC d - string _set_additional_values_parse_as_json(string _obj_attrib, string obj_is_, string node) { + string _set_additional_values_parse_as_json(string _obj_attrib, string obj_is_, string _node) { JSONValue oa_j = parseJSON(_obj_attrib); - JSONValue node_j = parseJSON(node); + JSONValue node_j = parseJSON(_node); assert( (oa_j.type == JSON_TYPE.OBJECT) && (node_j.type == JSON_TYPE.OBJECT) @@ -3100,6 +3097,7 @@ struct ObjAttributes { #+END_SRC ***** close + #+name: ao_emitters_obj_attributes_private_close #+BEGIN_SRC d } @@ -3216,8 +3214,8 @@ struct BookIndexReportIndent { #+END_SRC **** book index (sort &) report section :report:section: - ***** book index struct open + #+name: ao_emitters_book_index_report_section #+BEGIN_SRC d struct BookIndexReportSection { @@ -3226,6 +3224,7 @@ struct BookIndexReportSection { #+END_SRC ***** bookindex write section + #+name: ao_emitters_book_index_report_section #+BEGIN_SRC d auto bookindex_write_section( @@ -3257,11 +3256,13 @@ struct BookIndexReportSection { #+END_SRC ***** book index (sort &) build section :report:section: + #+name: ao_emitters_book_index_report_section #+BEGIN_SRC d auto bookindex_build_section( string[][string][string] bookindex_unordered_hashes, - int obj_cite_number + int obj_cite_number, + string segment_object_belongs_to, ) { string type; string lev, lev_markup_number, lev_collapsed_number; @@ -3312,7 +3313,9 @@ struct BookIndexReportSection { // bi_tmp = "_0_1 !{" ~ mainkey ~ "}! "; foreach (ref_; bookindex_unordered_hashes[mainkey]["_a"]) { auto go = replaceAll(ref_, rgx.book_index_go, "$1"); - bi_tmp ~= " {" ~ ref_ ~ "}#" ~ go ~ ", "; + bi_tmp ~= (segment_object_belongs_to.empty) + ? (" {" ~ ref_ ~ "}#" ~ go ~ ", ") + : (" {" ~ ref_ ~ "}[../" ~ segment_object_belongs_to ~ ".fn_suffix]#" ~ go ~ ", "); } bi_tmp ~= " \\\\\n "; bookindex_unordered_hashes[mainkey].remove("_a"); @@ -3322,7 +3325,9 @@ struct BookIndexReportSection { bi_tmp ~= subkey ~ ", "; foreach (ref_; bookindex_unordered_hashes[mainkey][subkey]) { auto go = replaceAll(ref_, rgx.book_index_go, "$1"); - bi_tmp ~= " {" ~ ref_ ~ "}#" ~ go ~ ", "; + bi_tmp ~= (segment_object_belongs_to.empty) + ? (" {" ~ ref_ ~ "}#" ~ go ~ ", ") + : (" {" ~ ref_ ~ "}[../" ~ segment_object_belongs_to ~ ".fn_suffix]#" ~ go ~ ", "); } bi_tmp ~= " \\\\\n "; ++skn; @@ -3358,6 +3363,7 @@ struct BookIndexReportSection { #+END_SRC ***** book index struct close + #+name: ao_emitters_book_index_report_section #+BEGIN_SRC d } @@ -3375,10 +3381,12 @@ struct NotesSection { #+END_SRC **** gather notes for endnote section struct open + #+name: ao_emitters_endnotes #+BEGIN_SRC d private auto gather_notes_for_endnote_section( ObjComposite[] contents_am, + string segment_object_belongs_to, ulong counter ) in { @@ -3400,19 +3408,22 @@ struct NotesSection { rgx.inline_notes_delimiter_al_regular_number_note)) { debug(endnotes_build) { writeln( - "{^{", m.captures[1], ".}^}#noteref_", m.captures[1], " ", + "{^{", m.captures[1], ".}^}[../", segment_object_belongs_to, ".fn_suffix]#noteref_\n ", m.captures[1], " ", m.captures[2]); // sometimes need segment name (segmented html & epub) // writeln("{^{", m.captures[1], ".}^}#", contents_am[counter]["obj_cite_number"], " ", m.captures[2]); } - object_notes ~= - "{^{" ~ m.captures[1] ~ ".}^}#noteref_" ~ - m.captures[1] ~ " " ~ m.captures[2] ~ "』"; + object_notes ~= (segment_object_belongs_to.empty) + ? ("{^{" ~ m.captures[1] ~ ".}^}#noteref_" ~ + m.captures[1] ~ " " ~ m.captures[2] ~ "』") + : ("{^{" ~ m.captures[1] ~ ".}^}[../" ~ segment_object_belongs_to ~ ".fn_suffix]#noteref_" ~ + m.captures[1] ~ " " ~ m.captures[2] ~ "』"); } return object_notes; } #+END_SRC **** gathered notes + #+name: ao_emitters_endnotes #+BEGIN_SRC d private auto gathered_notes() @@ -3428,6 +3439,7 @@ struct NotesSection { #+END_SRC **** endnote objects + #+name: ao_emitters_endnotes #+BEGIN_SRC d private auto endnote_objects(int obj_cite_number) @@ -3497,20 +3509,22 @@ struct NotesSection { #+END_SRC **** gather notes for endnote section struct close + #+name: ao_emitters_endnotes #+BEGIN_SRC d } #+END_SRC *** bibliography :bibliography: - **** biblio struct open + #+name: ao_emitters_bibliography #+BEGIN_SRC d struct Bibliography { #+END_SRC **** biblio + #+name: ao_emitters_bibliography #+BEGIN_SRC d public JSONValue[] _bibliography_( @@ -3542,6 +3556,7 @@ struct Bibliography { #+END_SRC **** biblio unsorted complete + #+name: ao_emitters_bibliography #+BEGIN_SRC d final private JSONValue[] _biblio_unsorted_complete_( @@ -3576,6 +3591,7 @@ struct Bibliography { #+END_SRC **** biblio sort + #+name: ao_emitters_bibliography #+BEGIN_SRC d final private JSONValue[] biblio_sort(JSONValue[] biblio_unordered) { @@ -3597,6 +3613,7 @@ struct Bibliography { #+END_SRC **** biblio debug + #+name: ao_emitters_bibliography #+BEGIN_SRC d void biblio_debug(JSONValue[] biblio_sorted) { @@ -3611,6 +3628,7 @@ struct Bibliography { #+END_SRC **** biblio struct close + #+name: ao_emitters_bibliography #+BEGIN_SRC d } @@ -3625,14 +3643,16 @@ struct NodeStructureMetadata { int lv, lv0, lv1, lv2, lv3, lv4, lv5, lv6, lv7; int obj_cite_number; int[string] p_; // p_ parent_ - string node; + string _node; #+END_SRC -**** metadata node emitter +**** TODO metadata node emitter + #+name: ao_emitters_metadata #+BEGIN_SRC d string node_emitter( string lev_markup_number, + string segment_anchor_tag, int obj_cite_number_, long counter_, int pointer_, @@ -3647,7 +3667,7 @@ struct NodeStructureMetadata { // scope(failure) { // writeln(__FILE__, ":", __LINE__, " failed here:"); // writeln(" is : ", is_); - // writeln(" node: ", node); + // writeln(" node: ", _node); // } assert(is_ != "heading"); // should not be necessary assert(to!int(obj_cite_number_) >= 0); // should not be necessary @@ -3665,39 +3685,41 @@ struct NodeStructureMetadata { p_["lev_markup_number"] = DocStructMarkupHeading.h_text_1; p_["obj_cite_number"] = lv4; } - node=("{ " ~ + _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"]) ~ ", \"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("* ", to!string(_node)); } else { - writeln("* ", to!string(node)); + writeln("* ", to!string(_node)); } } - JSONValue j = parseJSON(node); + JSONValue j = parseJSON(_node); assert(j["parent_lev_markup_number"].integer >= 4); assert(j["parent_lev_markup_number"].integer <= 7); assert(j["parent_obj_cite_number"].integer >= 0); - return node; + return _node; } invariant() { } #+END_SRC -**** metadata emitter heading +**** TODO metadata emitter heading #+name: ao_emitters_metadata #+BEGIN_SRC d string node_emitter_heading( string lev_markup_number, string lev_collapsed_number, + string segment_anchor_tag, int obj_cite_number_, long counter_, int pointer_, @@ -3723,7 +3745,7 @@ struct NodeStructureMetadata { // scope(failure) { // writeln(__FILE__, ":", __LINE__, " failed here:"); // writeln(" is : ", is_); - // writeln(" node: ", node); + // writeln(" node: ", _node); // } auto rgx = Rgx(); int obj_cite_number = to!int(obj_cite_number_); @@ -3816,30 +3838,31 @@ struct NodeStructureMetadata { // } break; } - node=("{ " ~ + _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"]) ~ " }" ); debug(heading) { if (match(lev_markup_number, rgx.levels_numbered_headings)) { - writeln("* ", to!string(node)); + writeln("* ", to!string(_node)); } } debug(node) { if (match(lev_markup_number, rgx.levels_numbered_headings)) { - writeln("* ", to!string(node)); + writeln("* ", to!string(_node)); } else { - writeln("* ", to!string(node)); + writeln("* ", to!string(_node)); } } - JSONValue j = parseJSON(node); + JSONValue j = parseJSON(_node); assert(j["parent_lev_markup_number"].integer <= 7); assert(j["parent_obj_cite_number"].integer >= 0); if (match(lev_markup_number, rgx.levels_numbered_headings)) { @@ -3873,13 +3896,14 @@ struct NodeStructureMetadata { // assert(j["parent_lev_markup_number"].integer <= 7); } } - return node; + return _node; } invariant() { } #+END_SRC **** metadata node struct close + #+name: ao_emitters_metadata #+BEGIN_SRC d } @@ -4093,11 +4117,12 @@ auto assertions_flag_types_block_status_none_or_closed(int[string] type) { #+END_SRC * Object Setter :abstract:object: + set abstracted objects for downstream processing ** initialize structs :struct: - *** heading attribute + #+name: ao_structs_init #+BEGIN_SRC d struct HeadingAttrib { @@ -4108,6 +4133,7 @@ struct HeadingAttrib { #+END_SRC *** paragraph attribute + #+name: ao_structs_init #+BEGIN_SRC d struct ParaAttrib { @@ -4118,6 +4144,7 @@ struct ParaAttrib { #+END_SRC *** block attribute + #+name: ao_structs_init #+BEGIN_SRC d struct BlockAttrib { @@ -4126,6 +4153,7 @@ struct BlockAttrib { #+END_SRC *** comment attribute + #+name: ao_structs_init #+BEGIN_SRC d struct Comment { @@ -4133,7 +4161,8 @@ struct Comment { } #+END_SRC -*** node +*** TODO node + #+name: ao_structs_init #+BEGIN_SRC d struct Node { @@ -4144,7 +4173,8 @@ struct Node { } #+END_SRC -*** composite object +*** TODO composite object + #+name: ao_structs_init #+BEGIN_SRC d struct ObjComposite { @@ -4163,6 +4193,7 @@ struct ObjComposite { #+END_SRC *** object composite array + #+name: ao_structs_init #+BEGIN_SRC d struct ObjCompositeArr { @@ -4208,7 +4239,7 @@ auto contents_heading( 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.node_structure.node = _node; return object_set; } #+END_SRC @@ -4234,7 +4265,7 @@ auto contents_para( object_set.para_attrib.indent_start = 0; // indent["hang_position"]; object_set.para_attrib.indent_rest = 0; // indent["base_position"]; object_set.para_attrib.bullet = false; - // object_set.node_structure.node = node; + // object_set.node_structure.node = _node; return object_set; } #+END_SRC @@ -4278,7 +4309,7 @@ auto contents_block( object_set.is_a = type; object_set.object = object; object_set.obj_cite_number = (obj_cite_number==0) ? "" : to!string(obj_cite_number); - // object_set.node_structure.node = node; + // object_set.node_structure.node = _node; return object_set; } #+END_SRC @@ -4300,7 +4331,7 @@ auto contents_block_code( object_set.block_attrib.syntax = attrib_language_syntax; object_set.object = object; object_set.obj_cite_number = (obj_cite_number==0) ? "" : to!string(obj_cite_number); - // object_set.node_structure.node = node; + // object_set.node_structure.node = _node; return object_set; } #+END_SRC @@ -4313,7 +4344,7 @@ auto contents_block_obj_cite_number_string( in string type, in string object, in string obj_cite_number, - in string node + in string _node ) { ObjComposite object_set; object_set.use = "content"; @@ -4321,7 +4352,7 @@ auto contents_block_obj_cite_number_string( object_set.is_a = type; object_set.object = object; object_set.obj_cite_number = obj_cite_number; - object_set.node_structure.node = node; + object_set.node_structure.node = _node; return object_set; } #+END_SRC @@ -4442,6 +4473,7 @@ template ObjectSetter() { #+END_SRC * TODO work on + - bespoke struct for sisu objects to replace JSON strings - book index *sort* fix (Aa-Zz instead of A-Za-z) - determine what goes in node info diff --git a/org/ao_output_debugs.org b/org/ao_output_debugs.org index 85e349c..3322373 100644 --- a/org/ao_output_debugs.org +++ b/org/ao_output_debugs.org @@ -618,7 +618,6 @@ debug(checkdoc) { output debugs +/ template SiSUoutputDebugs() { - <> struct SDPoutputDebugs { auto abstract_doc_source_debugs(S)( auto ref const S contents, @@ -631,6 +630,7 @@ template SiSUoutputDebugs() { ) { mixin RgxInit; auto rgx = Rgx(); + <> <> <> } diff --git a/org/sdp.org b/org/sdp.org index 75cffea..97d1498 100644 --- a/org/sdp.org +++ b/org/sdp.org @@ -24,7 +24,7 @@ struct Version { int minor; int patch; } -enum ver = Version(0, 7, 2); +enum ver = Version(0, 7, 3); #+END_SRC * sdp.d sisu document parser :sdp.d: diff --git a/src/sdp/ao_abstract_doc_source.d b/src/sdp/ao_abstract_doc_source.d index 17ffa35..143040f 100644 --- a/src/sdp/ao_abstract_doc_source.d +++ b/src/sdp/ao_abstract_doc_source.d @@ -20,6 +20,7 @@ template SiSUdocAbstraction() { ObjComposite[] contents_the_objects; string[string] an_object, processing; string[] anchor_tags; + string segment_object_belongs_to; auto set_abstract_object = ObjectAbstractSet(); auto note_section = NotesSection(); /+ enum +/ @@ -68,40 +69,8 @@ template SiSUdocAbstraction() { return bookindex_extract_hash.bookindex_nugget_hash(bookindex_section, obj_cite_number); } /+ node +/ - string node; + string _node; auto node_construct = NodeStructureMetadata(); - string node_jstr( - string lev_markup_number, - int obj_cite_number_, - long counter, - int heading_pointer, - string is_ - ) { - return node_construct.node_emitter( - lev_markup_number, - obj_cite_number_, - counter, - heading_pointer, - is_ - ); - } - string node_jstr_heading( - string lev_markup_number, - string lev_collapsed_number, - int obj_cite_number_, - long counter, - int heading_pointer, - string is_ - ) { - return node_construct.node_emitter_heading( - lev_markup_number, - lev_collapsed_number, - obj_cite_number_, - counter, - heading_pointer, - is_ - ); - } /+ ↓ abstract marked up document +/ auto abstract_doc_source( char[][] markup_sourcefile_content, @@ -351,7 +320,7 @@ template SiSUdocAbstraction() { } } else if (type["blocks"] == TriState.closing) { /+ line empty, with blocks flag +/ - _block_flag_line_empty_(line, an_object, contents_the_objects, bookindex_unordered_hashes, obj_cite_number, node, counter, type, obj_cite_number_poem, dochead_make_aa); // watch + _block_flag_line_empty_(line, an_object, contents_the_objects, bookindex_unordered_hashes, obj_cite_number, _node, counter, type, obj_cite_number_poem, dochead_make_aa); // watch } else { /+ line empty +/ /+ line.empty, post contents, empty variables: +/ @@ -372,22 +341,32 @@ template SiSUdocAbstraction() { bookindex_unordered_hashes = bkidx_hash(an_object["bookindex"], obj_cite_number); an_object["is"] = "heading"; - node = - node_jstr_heading( + auto substantive_object_and_anchor_tags_tuple = + obj_im.obj_inline_markup_and_anchor_tags(an_object, dochead_make_aa); // tuple this with anchor tags? + 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]; + } else if (to!int(an_object["lev_markup_number"]) < 4) { + segment_object_belongs_to = ""; + } + _node = + node_construct.node_emitter_heading( an_object["lev_markup_number"], an_object["lev_collapsed_number"], + segment_object_belongs_to, obj_cite_number, counter, heading_pointer, an_object["is"] ); // heading - auto substantive_object_and_anchor_tags_tuple = - obj_im.obj_inline_markup_and_anchor_tags(an_object, dochead_make_aa); // tuple this with anchor tags? - an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0]; - anchor_tags = substantive_object_and_anchor_tags_tuple[1]; an_object["attrib"] = - obj_att.obj_attributes(an_object["is"], an_object["obj"], node); + obj_att.obj_attributes(an_object["is"], an_object["obj"], _node); ++heading_pointer; + debug(segments) { + writeln(an_object["lev_markup_number"]); + writeln(segment_object_belongs_to); + } contents_the_objects ~= set_abstract_object.contents_heading( an_object["substantive"], @@ -419,9 +398,10 @@ template SiSUdocAbstraction() { bookindex_unordered_hashes = bkidx_hash(an_object["bookindex"], obj_cite_number); an_object["is"] = "para"; - node = - node_jstr( + _node = + node_construct.node_emitter( content_non_header, + segment_object_belongs_to, obj_cite_number, counter, heading_pointer-1, @@ -432,7 +412,7 @@ template SiSUdocAbstraction() { an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0]; anchor_tags = substantive_object_and_anchor_tags_tuple[1]; an_object["attrib"] = - obj_att.obj_attributes(an_object["is"], an_object["obj"], node); + obj_att.obj_attributes(an_object["is"], an_object["obj"], _node); contents_the_objects ~= set_abstract_object.contents_para( an_object["is"], @@ -472,16 +452,12 @@ template SiSUdocAbstraction() { && (counter-1 > previous_count)) { if (match(contents_the_objects[$-1].object, rgx.inline_notes_delimiter_al_regular_number_note)) { - // endnotes/ footnotes for - // doc objects other than paragraphs & headings - // various forms of grouped text previous_count=contents_the_objects.length -1; note_section.gather_notes_for_endnote_section( contents_the_objects, + segment_object_belongs_to, contents_the_objects.length -1 ); - // notes[notepoint]=note_section.notes_section(contents_the_objects, counter-1); - // notepoint +=1; } } } @@ -489,10 +465,6 @@ template SiSUdocAbstraction() { /+ ↓ post loop markup document/text +/ debug(objectrelated2) { // check writeln(line); - // writeln(__FILE__, ":", __LINE__); - // writeln(counter); - // // contents_am[0..counter] - // writeln(contents_am.length); } /+ Backmatter: @@ -525,7 +497,7 @@ template SiSUdocAbstraction() { biblio._bibliography_(biblio_unsorted_incomplete, bib_arr_json); auto bi = BookIndexReportSection(); auto bi_tuple = - bi.bookindex_build_section(bookindex_unordered_hashes, obj_cite_number); + bi.bookindex_build_section(bookindex_unordered_hashes, obj_cite_number, segment_object_belongs_to); static assert(!isTypeTuple!(bi_tuple)); auto bookindex_section = bi_tuple[0]; obj_cite_number = bi_tuple[1]; @@ -971,7 +943,7 @@ template SiSUdocAbstraction() { an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0]; anchor_tags = substantive_object_and_anchor_tags_tuple[1]; an_object["attrib"] = - obj_att.obj_attributes(an_object["is"], an_object["obj"], node); + obj_att.obj_attributes(an_object["is"], an_object["obj"], _node); contents_the_objects ~= set_abstract_object.contents_block( an_object["is"], @@ -1010,8 +982,9 @@ template SiSUdocAbstraction() { } processing.remove("verse"); an_object["is"] = "verse"; - node = node_jstr( + _node = node_construct.node_emitter( content_non_header, + segment_object_belongs_to, obj_cite_number, counter, heading_pointer-1, @@ -1022,7 +995,7 @@ template SiSUdocAbstraction() { an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0]; anchor_tags = substantive_object_and_anchor_tags_tuple[1]; an_object["attrib"] = - obj_att.obj_attributes(an_object["is"], an_object["obj"], node); + obj_att.obj_attributes(an_object["is"], an_object["obj"], _node); contents_the_objects ~= set_abstract_object.contents_block( an_object["is"], @@ -1059,7 +1032,7 @@ template SiSUdocAbstraction() { an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0]; anchor_tags = substantive_object_and_anchor_tags_tuple[1]; an_object["attrib"] = - obj_att.obj_attributes(an_object["is"], an_object["obj"], node); + obj_att.obj_attributes(an_object["is"], an_object["obj"], _node); contents_the_objects ~= set_abstract_object.contents_block( an_object["is"], @@ -1097,9 +1070,10 @@ template SiSUdocAbstraction() { } processing.remove("verse"); an_object["is"] = "verse"; - node = - node_jstr( + _node = + node_construct.node_emitter( content_non_header, + segment_object_belongs_to, obj_cite_number, counter, heading_pointer-1, @@ -1110,7 +1084,7 @@ template SiSUdocAbstraction() { an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0]; anchor_tags = substantive_object_and_anchor_tags_tuple[1]; an_object["attrib"] = - obj_att.obj_attributes(an_object["is"], an_object["obj"], node); + obj_att.obj_attributes(an_object["is"], an_object["obj"], _node); contents_the_objects ~= set_abstract_object.contents_block( an_object["is"], @@ -1271,7 +1245,7 @@ template SiSUdocAbstraction() { ref ObjComposite[] contents_the_objects, ref string[][string][string] bookindex_unordered_hashes, ref int obj_cite_number, - ref string node, + ref string _node, ref long counter, ref int[string] type, string[string] obj_cite_number_poem, @@ -1295,9 +1269,10 @@ template SiSUdocAbstraction() { bookindex_unordered_hashes = bkidx_hash(an_object["bookindex"], obj_cite_number); an_object["is"] = "code"; - node = - node_jstr( + _node = + node_construct.node_emitter( content_non_header, + segment_object_belongs_to, obj_cite_number, counter, heading_pointer-1, @@ -1308,7 +1283,7 @@ template SiSUdocAbstraction() { an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0]; anchor_tags = substantive_object_and_anchor_tags_tuple[1]; an_object["attrib"] = - obj_att.obj_attributes(an_object["is"], an_object["obj"], node); + obj_att.obj_attributes(an_object["is"], an_object["obj"], _node); contents_the_objects ~= set_abstract_object.contents_block_code( an_object["is"], @@ -1328,9 +1303,10 @@ template SiSUdocAbstraction() { bkidx_hash(an_object["bookindex"], obj_cite_number); // obj_cite_number = obj_cite_number_emit(type["obj_cite_number_status"]); an_object["is"] = "verse"; // check also - node = - node_jstr( + _node = + node_construct.node_emitter( content_non_header, + segment_object_belongs_to, obj_cite_number, counter, heading_pointer-1, @@ -1342,7 +1318,7 @@ template SiSUdocAbstraction() { "poem", "", (obj_cite_number_poem["start"], obj_cite_number_poem["end"]), - node + _node ); // bookindex object_reset(an_object); processing.remove("verse"); @@ -1357,9 +1333,10 @@ template SiSUdocAbstraction() { bookindex_unordered_hashes = bkidx_hash(an_object["bookindex"], obj_cite_number); an_object["is"] = "table"; - node = - node_jstr( + _node = + node_construct.node_emitter( content_non_header, + segment_object_belongs_to, obj_cite_number, counter, heading_pointer-1, @@ -1370,7 +1347,7 @@ template SiSUdocAbstraction() { an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0]; anchor_tags = substantive_object_and_anchor_tags_tuple[1]; an_object["attrib"] = - obj_att.obj_attributes(an_object["is"], an_object["obj"], node); + obj_att.obj_attributes(an_object["is"], an_object["obj"], _node); contents_the_objects ~= set_abstract_object.contents_block( an_object["is"], @@ -1391,9 +1368,10 @@ template SiSUdocAbstraction() { bookindex_unordered_hashes = bkidx_hash(an_object["bookindex"], obj_cite_number); an_object["is"] = "group"; - node = - node_jstr( + _node = + node_construct.node_emitter( content_non_header, + segment_object_belongs_to, obj_cite_number, counter, heading_pointer-1, @@ -1404,7 +1382,7 @@ template SiSUdocAbstraction() { an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0]; anchor_tags = substantive_object_and_anchor_tags_tuple[1]; an_object["attrib"] = - obj_att.obj_attributes(an_object["is"], an_object["obj"], node); + obj_att.obj_attributes(an_object["is"], an_object["obj"], _node); contents_the_objects ~= set_abstract_object.contents_block( an_object["is"], @@ -1424,9 +1402,10 @@ template SiSUdocAbstraction() { bookindex_unordered_hashes = bkidx_hash(an_object["bookindex"], obj_cite_number); an_object["is"] = "block"; - node = - node_jstr( + _node = + node_construct.node_emitter( content_non_header, + segment_object_belongs_to, obj_cite_number, counter, heading_pointer-1, @@ -1437,7 +1416,7 @@ template SiSUdocAbstraction() { an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0]; anchor_tags = substantive_object_and_anchor_tags_tuple[1]; an_object["attrib"] = - obj_att.obj_attributes(an_object["is"], an_object["obj"], node); + obj_att.obj_attributes(an_object["is"], an_object["obj"], _node); contents_the_objects ~= set_abstract_object.contents_block( an_object["is"], @@ -1458,9 +1437,10 @@ template SiSUdocAbstraction() { bookindex_unordered_hashes = bkidx_hash(an_object["bookindex"], obj_cite_number); an_object["is"] = "quote"; - node = - node_jstr( + _node = + node_construct.node_emitter( content_non_header, + segment_object_belongs_to, obj_cite_number, counter, heading_pointer-1, @@ -1471,7 +1451,7 @@ template SiSUdocAbstraction() { an_object["substantive"] = substantive_object_and_anchor_tags_tuple[0]; anchor_tags = substantive_object_and_anchor_tags_tuple[1]; an_object["attrib"] = - obj_att.obj_attributes(an_object["is"], an_object["obj"], node); + obj_att.obj_attributes(an_object["is"], an_object["obj"], _node); contents_the_objects ~= set_abstract_object.contents_block( an_object["is"], @@ -2318,13 +2298,13 @@ template SiSUdocAbstraction() { } struct ObjAttributes { string[string] _obj_attrib; - string obj_attributes(string obj_is_, string obj_raw, string node) + string obj_attributes(string obj_is_, string obj_raw, string _node) in { } body { scope(exit) { - // destroy(obj_is_); + destroy(obj_is_); destroy(obj_raw); - destroy(node); + destroy(_node); } _obj_attrib.remove("json"); _obj_attrib["json"] ="{"; @@ -2364,12 +2344,12 @@ template SiSUdocAbstraction() { break; } _obj_attrib["json"] ~=" }"; - _obj_attrib["json"]=_set_additional_values_parse_as_json(_obj_attrib["json"], obj_is_, node); + _obj_attrib["json"]=_set_additional_values_parse_as_json(_obj_attrib["json"], obj_is_, _node); debug(structattrib) { if (oa_j["is"].str() == "heading") { // writeln(__LINE__); writeln(_obj_attrib["json"]); - // writeln(node); + // writeln(_node); writeln( "is: ", oa_j["is"].str(), "; obj_cite_number: ", oa_j["obj_cite_number"].integer() @@ -2499,9 +2479,9 @@ template SiSUdocAbstraction() { } invariant() { } - string _set_additional_values_parse_as_json(string _obj_attrib, string obj_is_, string node) { + string _set_additional_values_parse_as_json(string _obj_attrib, string obj_is_, string _node) { JSONValue oa_j = parseJSON(_obj_attrib); - JSONValue node_j = parseJSON(node); + JSONValue node_j = parseJSON(_node); assert( (oa_j.type == JSON_TYPE.OBJECT) && (node_j.type == JSON_TYPE.OBJECT) @@ -2649,7 +2629,8 @@ template SiSUdocAbstraction() { } auto bookindex_build_section( string[][string][string] bookindex_unordered_hashes, - int obj_cite_number + int obj_cite_number, + string segment_object_belongs_to, ) { string type; string lev, lev_markup_number, lev_collapsed_number; @@ -2700,7 +2681,9 @@ template SiSUdocAbstraction() { // bi_tmp = "_0_1 !{" ~ mainkey ~ "}! "; foreach (ref_; bookindex_unordered_hashes[mainkey]["_a"]) { auto go = replaceAll(ref_, rgx.book_index_go, "$1"); - bi_tmp ~= " {" ~ ref_ ~ "}#" ~ go ~ ", "; + bi_tmp ~= (segment_object_belongs_to.empty) + ? (" {" ~ ref_ ~ "}#" ~ go ~ ", ") + : (" {" ~ ref_ ~ "}[../" ~ segment_object_belongs_to ~ ".fn_suffix]#" ~ go ~ ", "); } bi_tmp ~= " \\\\\n "; bookindex_unordered_hashes[mainkey].remove("_a"); @@ -2710,7 +2693,9 @@ template SiSUdocAbstraction() { bi_tmp ~= subkey ~ ", "; foreach (ref_; bookindex_unordered_hashes[mainkey][subkey]) { auto go = replaceAll(ref_, rgx.book_index_go, "$1"); - bi_tmp ~= " {" ~ ref_ ~ "}#" ~ go ~ ", "; + bi_tmp ~= (segment_object_belongs_to.empty) + ? (" {" ~ ref_ ~ "}#" ~ go ~ ", ") + : (" {" ~ ref_ ~ "}[../" ~ segment_object_belongs_to ~ ".fn_suffix]#" ~ go ~ ", "); } bi_tmp ~= " \\\\\n "; ++skn; @@ -2751,6 +2736,7 @@ template SiSUdocAbstraction() { auto rgx = Rgx(); private auto gather_notes_for_endnote_section( ObjComposite[] contents_am, + string segment_object_belongs_to, ulong counter ) in { @@ -2772,13 +2758,15 @@ template SiSUdocAbstraction() { rgx.inline_notes_delimiter_al_regular_number_note)) { debug(endnotes_build) { writeln( - "{^{", m.captures[1], ".}^}#noteref_", m.captures[1], " ", + "{^{", m.captures[1], ".}^}[../", segment_object_belongs_to, ".fn_suffix]#noteref_\n ", m.captures[1], " ", m.captures[2]); // sometimes need segment name (segmented html & epub) // writeln("{^{", m.captures[1], ".}^}#", contents_am[counter]["obj_cite_number"], " ", m.captures[2]); } - object_notes ~= - "{^{" ~ m.captures[1] ~ ".}^}#noteref_" ~ - m.captures[1] ~ " " ~ m.captures[2] ~ "』"; + object_notes ~= (segment_object_belongs_to.empty) + ? ("{^{" ~ m.captures[1] ~ ".}^}#noteref_" ~ + m.captures[1] ~ " " ~ m.captures[2] ~ "』") + : ("{^{" ~ m.captures[1] ~ ".}^}[../" ~ segment_object_belongs_to ~ ".fn_suffix]#noteref_" ~ + m.captures[1] ~ " " ~ m.captures[2] ~ "』"); } return object_notes; } @@ -2943,9 +2931,10 @@ template SiSUdocAbstraction() { int lv, lv0, lv1, lv2, lv3, lv4, lv5, lv6, lv7; int obj_cite_number; int[string] p_; // p_ parent_ - string node; + string _node; string node_emitter( string lev_markup_number, + string segment_anchor_tag, int obj_cite_number_, long counter_, int pointer_, @@ -2960,7 +2949,7 @@ template SiSUdocAbstraction() { // scope(failure) { // writeln(__FILE__, ":", __LINE__, " failed here:"); // writeln(" is : ", is_); - // writeln(" node: ", node); + // writeln(" node: ", _node); // } assert(is_ != "heading"); // should not be necessary assert(to!int(obj_cite_number_) >= 0); // should not be necessary @@ -2978,33 +2967,35 @@ template SiSUdocAbstraction() { p_["lev_markup_number"] = DocStructMarkupHeading.h_text_1; p_["obj_cite_number"] = lv4; } - node=("{ " ~ + _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"]) ~ ", \"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("* ", to!string(_node)); } else { - writeln("* ", to!string(node)); + writeln("* ", to!string(_node)); } } - JSONValue j = parseJSON(node); + JSONValue j = parseJSON(_node); assert(j["parent_lev_markup_number"].integer >= 4); assert(j["parent_lev_markup_number"].integer <= 7); assert(j["parent_obj_cite_number"].integer >= 0); - return node; + return _node; } invariant() { } string node_emitter_heading( string lev_markup_number, string lev_collapsed_number, + string segment_anchor_tag, int obj_cite_number_, long counter_, int pointer_, @@ -3030,7 +3021,7 @@ template SiSUdocAbstraction() { // scope(failure) { // writeln(__FILE__, ":", __LINE__, " failed here:"); // writeln(" is : ", is_); - // writeln(" node: ", node); + // writeln(" node: ", _node); // } auto rgx = Rgx(); int obj_cite_number = to!int(obj_cite_number_); @@ -3123,30 +3114,31 @@ template SiSUdocAbstraction() { // } break; } - node=("{ " ~ + _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"]) ~ " }" ); debug(heading) { if (match(lev_markup_number, rgx.levels_numbered_headings)) { - writeln("* ", to!string(node)); + writeln("* ", to!string(_node)); } } debug(node) { if (match(lev_markup_number, rgx.levels_numbered_headings)) { - writeln("* ", to!string(node)); + writeln("* ", to!string(_node)); } else { - writeln("* ", to!string(node)); + writeln("* ", to!string(_node)); } } - JSONValue j = parseJSON(node); + JSONValue j = parseJSON(_node); assert(j["parent_lev_markup_number"].integer <= 7); assert(j["parent_obj_cite_number"].integer >= 0); if (match(lev_markup_number, rgx.levels_numbered_headings)) { @@ -3180,7 +3172,7 @@ template SiSUdocAbstraction() { // assert(j["parent_lev_markup_number"].integer <= 7); } } - return node; + return _node; } invariant() { } diff --git a/src/sdp/ao_object_setter.d b/src/sdp/ao_object_setter.d index 6cb359b..35ad0ff 100644 --- a/src/sdp/ao_object_setter.d +++ b/src/sdp/ao_object_setter.d @@ -73,7 +73,7 @@ template ObjectSetter() { 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.node_structure.node = _node; return object_set; } auto contents_para( @@ -93,7 +93,7 @@ template ObjectSetter() { object_set.para_attrib.indent_start = 0; // indent["hang_position"]; object_set.para_attrib.indent_rest = 0; // indent["base_position"]; object_set.para_attrib.bullet = false; - // object_set.node_structure.node = node; + // object_set.node_structure.node = _node; return object_set; } auto contents_endnote( @@ -125,7 +125,7 @@ template ObjectSetter() { object_set.is_a = type; object_set.object = object; object_set.obj_cite_number = (obj_cite_number==0) ? "" : to!string(obj_cite_number); - // object_set.node_structure.node = node; + // object_set.node_structure.node = _node; return object_set; } auto contents_block_code( @@ -141,14 +141,14 @@ template ObjectSetter() { object_set.block_attrib.syntax = attrib_language_syntax; object_set.object = object; object_set.obj_cite_number = (obj_cite_number==0) ? "" : to!string(obj_cite_number); - // object_set.node_structure.node = node; + // object_set.node_structure.node = _node; return object_set; } auto contents_block_obj_cite_number_string( in string type, in string object, in string obj_cite_number, - in string node + in string _node ) { ObjComposite object_set; object_set.use = "content"; @@ -156,7 +156,7 @@ template ObjectSetter() { object_set.is_a = type; object_set.object = object; object_set.obj_cite_number = obj_cite_number; - object_set.node_structure.node = node; + object_set.node_structure.node = _node; return object_set; } } diff --git a/src/sdp/ao_output_debugs.d b/src/sdp/ao_output_debugs.d index 1725ed9..1de30fc 100644 --- a/src/sdp/ao_output_debugs.d +++ b/src/sdp/ao_output_debugs.d @@ -2,33 +2,6 @@ output debugs +/ template SiSUoutputDebugs() { - struct BookIndexReport { - // class BookIndexReport : AssertBookIndexReport { - 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]) - ); - } - // bookindex_the[mkn][mainkey][skn][subkey] ~= (bookindex_unordered_hashes[mainkey][subkey]); - ++skn; - } - ++mkn; - } - // return bookindex_the; - } - } struct SDPoutputDebugs { auto abstract_doc_source_debugs(S)( auto ref const S contents, @@ -41,6 +14,33 @@ template SiSUoutputDebugs() { ) { mixin RgxInit; auto rgx = Rgx(); + struct BookIndexReport { + // class BookIndexReport : AssertBookIndexReport { + 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]) + ); + } + // bookindex_the[mkn][mainkey][skn][subkey] ~= (bookindex_unordered_hashes[mainkey][subkey]); + ++skn; + } + ++mkn; + } + // return bookindex_the; + } + } debug(parent) { writefln( "%s:%s", diff --git a/views/version.txt b/views/version.txt index 11844df..077a941 100644 --- a/views/version.txt +++ b/views/version.txt @@ -4,4 +4,4 @@ struct Version { int minor; int patch; } -enum ver = Version(0, 7, 2); +enum ver = Version(0, 7, 3); -- cgit v1.2.3