From b11f8f104e8c3a4ab9740d086da91aa943200e6e Mon Sep 17 00:00:00 2001 From: Ralph Amissah Date: Sun, 26 Feb 2017 18:01:24 -0500 Subject: 0.13.4 includes ao bookindex segname (anchors) fix --- org/ao_doc_abstraction.org | 234 +++++++++++++++++++++++++++------------------ org/defaults.org | 20 ++-- org/sdp.org | 2 +- 3 files changed, 154 insertions(+), 102 deletions(-) (limited to 'org') diff --git a/org/ao_doc_abstraction.org b/org/ao_doc_abstraction.org index 63491de..d2b13aa 100644 --- a/org/ao_doc_abstraction.org +++ b/org/ao_doc_abstraction.org @@ -206,7 +206,6 @@ enum DocStructMarkupHeading { h_text_5, // extra level, drop content_non_header } // header section A-D; header text 1-4 -enum DocStructCollapsedHeading { lv0, lv1, lv2, lv3, lv4, lv5, lv6, lv7 } /+ biblio variables +/ string biblio_tag_name, biblio_tag_entry, st; string[] biblio_arr_json; @@ -332,8 +331,8 @@ auto dom_set_markup_tags(int[] dom, int lev) { } } } - debug(dom) { - writeln(lev, ": ", dom); + debug(dom_magic_numbers) { + writeln("marked up: ", lev, ": ", dom); } return dom; } @@ -377,8 +376,8 @@ auto dom_set_collapsed_tags(int[] dom, int lev) { } } } - debug(dom) { - writeln(lev, ": ", dom); + debug(dom_magic_numbers) { + writeln("collapsed: ", lev, ": ", dom); } return dom; } @@ -558,7 +557,7 @@ if (!line.empty) { } #+END_SRC -*** [#A] separate regular markup text from code blocks [+5] +*** [#A] separate _code blocks_ from _other markup text_ [+5] **** code blocks :block:code: #+name: abs_in_loop_body_00_code_block @@ -569,7 +568,7 @@ continue; #+END_SRC **** non code objects (other blocks or regular text) [+4] :non_code: -***** in section (biblio, glossary, blurb) (block group) [+1] :block:active: +***** in section (biblio, glossary, blurb) +(block group)+ [+1] :block:active: ****** within section: biblio :biblio: #+name: abs_in_loop_body_non_code_obj @@ -584,7 +583,7 @@ if ((matchFirst(line, rgx.heading_biblio) type["biblio_section"] = State.on; type["blurb_section"] = State.off; if (opt_action_bool["backmatter"] && opt_action_bool["section_biblio"]) { - _biblio_block_(line, type, bib_entry, biblio_entry_str_json, biblio_arr_json); // + _biblio_block_(line, type, bib_entry, biblio_entry_str_json, biblio_arr_json); debug(bibliobuild) { writeln("- ", biblio_entry_str_json); writeln("-> ", biblio_arr_json.length); @@ -1031,10 +1030,6 @@ if ((type["heading"] == State.on) obj_cite_number = (to!int(an_object["lev_markup_number"]) == 0) ? (ocn_emit(3)) : (obj_cite_number = ocn_emit(type["ocn_status"])); - an_object["bookindex_nugget"] = - ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : ""; - bookindex_unordered_hashes = - bookindex_extract_hash.bookindex_nugget_hash(an_object["bookindex_nugget"], obj_cite_number); an_object["is"] = "heading"; an_object_key="body_nugget"; auto substantive_object_and_anchor_tags_tuple = @@ -1052,6 +1047,10 @@ if ((type["heading"] == State.on) segment_anchor_tag_that_object_belongs_to = ""; segment_anchor_tag_that_object_belongs_to_uri = ""; } + an_object["bookindex_nugget"] = + ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : ""; + bookindex_unordered_hashes = + bookindex_extract_hash.bookindex_nugget_hash(an_object["bookindex_nugget"], obj_cite_number, segment_anchor_tag_that_object_belongs_to); /+ (incrementally build toc) table of contents here! +/ _anchor_tag=to!string(obj_cite_number); the_table_of_contents_section = obj_im.table_of_contents_gather_headings( @@ -1111,7 +1110,7 @@ if ((type["heading"] == State.on) an_object["bookindex_nugget"] = ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : ""; bookindex_unordered_hashes = - bookindex_extract_hash.bookindex_nugget_hash(an_object["bookindex_nugget"], obj_cite_number); + bookindex_extract_hash.bookindex_nugget_hash(an_object["bookindex_nugget"], obj_cite_number, segment_anchor_tag_that_object_belongs_to); an_object["is"] = "para"; auto comp_obj_heading = node_construct.node_location_emitter( @@ -1395,7 +1394,6 @@ auto bi_tuple = bi.bookindex_build_abstraction_section( bookindex_unordered_hashes, obj_cite_number, - segment_anchor_tag_that_object_belongs_to, opt_action_bool, ); destroy(bookindex_unordered_hashes); @@ -1455,24 +1453,28 @@ comp_obj_toc.indent_base = indent["base_position"]; comp_obj_toc.bullet = false; if (the_endnotes_section.length > 1) { toc_txt_ = format( - "{ %s }%s../%s.fnSuffix", + "{ %s }%s%s%s", "Endnotes", mkup.mark_internal_site_lnk, "endnotes", // segment_anchor_tag_that_object_belongs_to + ".fnSuffix", ); toc_txt_= munge.url_links(toc_txt_); comp_obj_toc.text = to!string(toc_txt_).strip; + comp_obj_toc.inline_links = true; the_table_of_contents_section["seg"] ~= comp_obj_toc; } if (the_glossary_section.length > 1) { toc_txt_ = format( - "{ %s }%s../%s.fnSuffixs", + "{ %s }%s%s%s", "Glossary", mkup.mark_internal_site_lnk, "glossary", // segment_anchor_tag_that_object_belongs_to + ".fnSuffix", ); toc_txt_= munge.url_links(toc_txt_); comp_obj_toc.text = to!string(toc_txt_).strip; + comp_obj_toc.inline_links = true; the_table_of_contents_section["seg"] ~= comp_obj_toc; toc_txt_ = format( "{ %s }#%s", @@ -1481,17 +1483,20 @@ if (the_glossary_section.length > 1) { ); toc_txt_= munge.url_links(toc_txt_); comp_obj_toc.text = to!string(toc_txt_).strip; + comp_obj_toc.inline_links = true; the_table_of_contents_section["scroll"] ~= comp_obj_toc; } if (the_bibliography_section.length > 1){ toc_txt_ = format( - "{ %s }%s../%s.fnSuffix", + "{ %s }%s%s%s", "Bibliography", mkup.mark_internal_site_lnk, "bibliography", // segment_anchor_tag_that_object_belongs_to + ".fnSuffix", ); toc_txt_= munge.url_links(toc_txt_); comp_obj_toc.text = to!string(toc_txt_).strip; + comp_obj_toc.inline_links = true; the_table_of_contents_section["seg"] ~= comp_obj_toc; toc_txt_ = format( @@ -1501,17 +1506,20 @@ if (the_bibliography_section.length > 1){ ); toc_txt_= munge.url_links(toc_txt_); comp_obj_toc.text = to!string(toc_txt_).strip; + comp_obj_toc.inline_links = true; the_table_of_contents_section["scroll"] ~= comp_obj_toc; } if (the_bookindex_section["seg"].length > 1) { toc_txt_ = format( - "{ %s }%s../%s.fnSuffix", + "{ %s }%s%s%s", "Book Index", mkup.mark_internal_site_lnk, "bookindex", // segment_anchor_tag_that_object_belongs_to + ".fnSuffix", ); toc_txt_= munge.url_links(toc_txt_); comp_obj_toc.text = to!string(toc_txt_).strip; + comp_obj_toc.inline_links = true; the_table_of_contents_section["seg"] ~= comp_obj_toc; } if (the_bookindex_section["scroll"].length > 1) { @@ -1522,17 +1530,20 @@ if (the_bookindex_section["scroll"].length > 1) { ); toc_txt_= munge.url_links(toc_txt_); comp_obj_toc.text = to!string(toc_txt_).strip; + comp_obj_toc.inline_links = true; the_table_of_contents_section["scroll"] ~= comp_obj_toc; } if (the_blurb_section.length > 1) { toc_txt_ = format( - "{ %s }%s../%s.fnSuffix", + "{ %s }%s%s%s", "Blurb", mkup.mark_internal_site_lnk, "blurb", // segment_anchor_tag_that_object_belongs_to + ".fnSuffix", ); toc_txt_= munge.url_links(toc_txt_); comp_obj_toc.text = to!string(toc_txt_).strip; + comp_obj_toc.inline_links = true; the_table_of_contents_section["seg"] ~= comp_obj_toc; toc_txt_ = format( "{ %s }#%s", @@ -1540,6 +1551,7 @@ if (the_blurb_section.length > 1) { "blurb", // _anchor_tag ); toc_txt_= munge.url_links(toc_txt_); + comp_obj_toc.inline_links = true; comp_obj_toc.text = to!string(toc_txt_).strip; the_table_of_contents_section["scroll"] ~= comp_obj_toc; } @@ -3057,7 +3069,7 @@ void _block_flag_line_empty_(B)( an_object["bookindex_nugget"] = ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : ""; bookindex_unordered_hashes = - bookindex_extract_hash.bookindex_nugget_hash(an_object["bookindex_nugget"], obj_cite_number); + bookindex_extract_hash.bookindex_nugget_hash(an_object["bookindex_nugget"], obj_cite_number, segment_anchor_tag_that_object_belongs_to); an_object["is"] = "code"; auto comp_obj_location = node_construct.node_location_emitter( @@ -3092,7 +3104,7 @@ void _block_flag_line_empty_(B)( an_object["bookindex_nugget"] = ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : ""; bookindex_unordered_hashes = - bookindex_extract_hash.bookindex_nugget_hash(an_object["bookindex_nugget"], obj_cite_number); + bookindex_extract_hash.bookindex_nugget_hash(an_object["bookindex_nugget"], obj_cite_number, segment_anchor_tag_that_object_belongs_to); an_object["is"] = "verse"; // check also auto comp_obj_location = node_construct.node_location_emitter( @@ -3121,7 +3133,7 @@ void _block_flag_line_empty_(B)( an_object["bookindex_nugget"] = ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : ""; bookindex_unordered_hashes = - bookindex_extract_hash.bookindex_nugget_hash(an_object["bookindex_nugget"], obj_cite_number); + bookindex_extract_hash.bookindex_nugget_hash(an_object["bookindex_nugget"], obj_cite_number, segment_anchor_tag_that_object_belongs_to); an_object["is"] = "table"; auto comp_obj_location = node_construct.node_location_emitter( @@ -3158,7 +3170,7 @@ void _block_flag_line_empty_(B)( an_object["bookindex_nugget"] = ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : ""; bookindex_unordered_hashes = - bookindex_extract_hash.bookindex_nugget_hash(an_object["bookindex_nugget"], obj_cite_number); + bookindex_extract_hash.bookindex_nugget_hash(an_object["bookindex_nugget"], obj_cite_number, segment_anchor_tag_that_object_belongs_to); an_object["is"] = "group"; auto comp_obj_location = node_construct.node_location_emitter( @@ -3194,7 +3206,7 @@ void _block_flag_line_empty_(B)( an_object["bookindex_nugget"] = ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : ""; bookindex_unordered_hashes = - bookindex_extract_hash.bookindex_nugget_hash(an_object["bookindex_nugget"], obj_cite_number); + bookindex_extract_hash.bookindex_nugget_hash(an_object["bookindex_nugget"], obj_cite_number, segment_anchor_tag_that_object_belongs_to); an_object["is"] = "block"; auto comp_obj_location = node_construct.node_location_emitter( @@ -3231,7 +3243,7 @@ void _block_flag_line_empty_(B)( an_object["bookindex_nugget"] = ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : ""; bookindex_unordered_hashes = - bookindex_extract_hash.bookindex_nugget_hash(an_object["bookindex_nugget"], obj_cite_number); + bookindex_extract_hash.bookindex_nugget_hash(an_object["bookindex_nugget"], obj_cite_number, segment_anchor_tag_that_object_belongs_to); an_object["is"] = "quote"; auto comp_obj_location = node_construct.node_location_emitter( @@ -3310,7 +3322,8 @@ auto _book_index_(L,I,O,T,B)( /+ book_index flag set +/ if (auto m = match(line, rgx.book_index_close)) { type["book_index"] = State.off; - if (opt_action_bool["backmatter"] && opt_action_bool["section_bookindex"]) { + if (opt_action_bool["backmatter"] + && opt_action_bool["section_bookindex"]) { an_object["bookindex_nugget"] = book_idx_tmp ~ to!string(m.captures[1]); debug(bookindexmatch) { // book index writefln( @@ -3321,7 +3334,8 @@ auto _book_index_(L,I,O,T,B)( } book_idx_tmp = ""; } else { - if (opt_action_bool["backmatter"] && opt_action_bool["section_bookindex"]) { + if (opt_action_bool["backmatter"] + && opt_action_bool["section_bookindex"]) { book_idx_tmp ~= line; } } @@ -3766,7 +3780,7 @@ struct ObjInlineMarkupMunge { n_foot_sp_asterisk = 0; n_foot_sp_plus = 0; } - string url_links(Ot)(Ot obj_txt_in) { + string url_links(Ot)(Ot obj_txt_in, string suffix = ".html") { debug(asserts){ static assert(is(typeof(obj_txt_in) == string)); } @@ -3779,7 +3793,7 @@ struct ObjInlineMarkupMunge { obj_txt_in, rgx.inline_link_naked_url, ("$1" - ~ mkup.lnk_o ~ " $2 " ~ mkup.lnk_c + ~ mkup.lnk_o ~ "$2" ~ mkup.lnk_c ~ mkup.url_o ~ "$2" ~ mkup.url_c ~ "$3") // ("$1{ $2 }$2$3") ); @@ -3794,7 +3808,7 @@ struct ObjInlineMarkupMunge { replaceAll( obj_txt_in, rgx.inline_link_endnote_url_helper_punctuated, - (mkup.lnk_o ~ " $1 " ~ mkup.lnk_c + (mkup.lnk_o ~ "$1" ~ mkup.lnk_c ~ mkup.url_o ~ "$2" ~ mkup.url_c ~ "~{ " ~ mkup.lnk_o ~ " $2 " ~ mkup.lnk_c ~ mkup.url_o ~ "$2" ~ mkup.url_c @@ -3804,7 +3818,7 @@ struct ObjInlineMarkupMunge { replaceAll( obj_txt_in, rgx.inline_link_endnote_url_helper, - (mkup.lnk_o ~ " $1 " ~ mkup.lnk_c + (mkup.lnk_o ~ "$1" ~ mkup.lnk_c ~ mkup.url_o ~ "$2" ~ mkup.url_c ~ "~{ " ~ mkup.lnk_o ~ " $2 " ~ mkup.lnk_c ~ mkup.url_o ~ "$2" ~ mkup.url_c @@ -3820,7 +3834,7 @@ struct ObjInlineMarkupMunge { obj_txt_in, rgx.inline_link_markup_regular, ("$1" - ~ mkup.lnk_o ~ " $2 " ~ mkup.lnk_c + ~ mkup.lnk_o ~ "$2" ~ mkup.lnk_c ~ mkup.url_o ~ "$3" ~ mkup.url_c ~ "$4") // ("$1{ $2 }$3$4") ); @@ -3833,8 +3847,8 @@ struct ObjInlineMarkupMunge { static assert(is(typeof(obj_txt_in) == string)); } /+ endnotes (regular) +/ - bool notes_reg = false; - bool notes_star = false; + bool flg_notes_reg = false; + bool flg_notes_star = false; obj_txt_in = replaceAll( obj_txt_in, @@ -3855,7 +3869,7 @@ struct ObjInlineMarkupMunge { stage_reset_note_numbers = false; foreach(n; m) { if (match(to!string(n.hit), rgx.inline_al_delimiter_open_symbol_star)) { - notes_star = true; + flg_notes_star = true; ++n_foot_sp_asterisk; asterisks_ = "*"; n_foot=n_foot_sp_asterisk; @@ -3866,7 +3880,7 @@ struct ObjInlineMarkupMunge { (mkup.en_a_o ~ replicate(asterisks_, n_foot_sp_asterisk) ~ " ") ) ~ "\n"); } else if (match(to!string(n.hit), rgx.inline_al_delimiter_open_regular)) { - notes_reg = true; + flg_notes_reg = true; ++n_foot_reg; n_foot=n_foot_reg; obj_txt_out ~= @@ -3885,8 +3899,8 @@ struct ObjInlineMarkupMunge { } auto t = tuple( obj_txt_out, - notes_reg, - notes_star, + flg_notes_reg, + flg_notes_star, ); return t; } @@ -4120,7 +4134,7 @@ struct ObjInlineMarkup { obj_txt["munge"]=_make_segment_anchor_tags_if_none_provided(obj_txt["munge"], obj_["lev"]); if (auto m = match(obj_txt["munge"], rgx.heading_anchor_tag)) { anchor_tag = m.captures[1]; - anchor_tags_ ~=anchor_tag; + anchor_tags_ ~= anchor_tag; } else if (obj_["lev"] == "1") { writeln("heading anchor tag missing: ", obj_txt["munge"]); } @@ -4242,6 +4256,7 @@ struct ObjInlineMarkup { comp_obj_toc.indent_base = indent["base_position"]; comp_obj_toc.bullet = false; comp_obj_toc.text = to!string(toc_txt_).strip; + comp_obj_toc.inline_links = true; the_table_of_contents_section["scroll"] ~= comp_obj_toc; } else { indent=[ @@ -4258,6 +4273,7 @@ struct ObjInlineMarkup { comp_obj_toc.indent_base = indent["base_position"]; comp_obj_toc.bullet = false; comp_obj_toc.text = "Table of Contents"; + comp_obj_toc.inline_links = true; the_table_of_contents_section["scroll"] ~= comp_obj_toc; } comp_obj_toc = comp_obj_toc.init; @@ -4267,17 +4283,19 @@ struct ObjInlineMarkup { comp_obj_toc.ocn = 0; comp_obj_toc.obj_cite_number = ""; comp_obj_toc.bullet = false; + comp_obj_toc.inline_links = true; switch (to!int(obj_["lev_markup_number"])) { case 0: indent=[ "hang_position" : 0, "base_position" : 0, ]; - toc_txt_ = "{ Table of Contents }" ~ mkup.mark_internal_site_lnk ~ "../toc.fnSuffix"; + toc_txt_ = "{ Table of Contents }" ~ mkup.mark_internal_site_lnk ~ "toc.fnSuffix"; toc_txt_= munge.url_links(toc_txt_); comp_obj_toc.indent_hang = indent["hang_position"]; comp_obj_toc.indent_base = indent["base_position"]; comp_obj_toc.text = to!string(toc_txt_).strip; + comp_obj_toc.inline_links = true; the_table_of_contents_section["seg"] ~= comp_obj_toc; break; case 1: .. case 3: @@ -4293,14 +4311,16 @@ struct ObjInlineMarkup { comp_obj_toc.indent_hang = indent["hang_position"]; comp_obj_toc.indent_base = indent["base_position"]; comp_obj_toc.text = to!string(toc_txt_).strip; + comp_obj_toc.inline_links = true; the_table_of_contents_section["seg"] ~= comp_obj_toc; break; case 4: toc_txt_ = format( - "{ %s }%s../%s.fnSuffix", + "{ %s }%s%s%s", heading_toc_, mkup.mark_internal_site_lnk, segment_anchor_tag_that_object_belongs_to, + ".fnSuffix", ); lev4_subtoc[segment_anchor_tag_that_object_belongs_to] = []; toc_txt_= munge.url_links(toc_txt_); @@ -4311,14 +4331,16 @@ struct ObjInlineMarkup { comp_obj_toc.indent_hang = indent["hang_position"]; comp_obj_toc.indent_base = indent["base_position"]; comp_obj_toc.text = to!string(toc_txt_).strip; + comp_obj_toc.inline_links = true; the_table_of_contents_section["seg"] ~= comp_obj_toc; break; case 5: .. case 7: toc_txt_ = format( - "{ %s }%s../%s.fnSuffix#%s", + "{ %s }%s%s%s#%s", heading_toc_, mkup.mark_internal_site_lnk, segment_anchor_tag_that_object_belongs_to, + ".fnSuffix", _anchor_tag, ); subtoc_txt_ = format( @@ -4335,6 +4357,7 @@ struct ObjInlineMarkup { comp_obj_toc.indent_hang = indent["hang_position"]; comp_obj_toc.indent_base = indent["base_position"]; comp_obj_toc.text = to!string(toc_txt_).strip; + comp_obj_toc.inline_links = true; the_table_of_contents_section["seg"] ~= comp_obj_toc; break; default: @@ -4934,9 +4957,10 @@ struct BookIndexNuggetHash { string[][string][string] bi; string[][string][string] hash_nugget; string[] bi_main_terms_split_arr; - string[][string][string] bookindex_nugget_hash(BI,N)( + string[][string][string] bookindex_nugget_hash(BI,N,S)( BI bookindex_section, - N obj_cite_number + N obj_cite_number, + S segment_anchor_tag, ) in { debug(asserts){ @@ -4947,7 +4971,7 @@ struct BookIndexNuggetHash { if (!bookindex_section.empty) { writeln( "* [bookindex] ", - "[", to!string(obj_cite_number), "] ", bookindex_section + "[", to!string(obj_cite_number), ": ", segment_anchor_tag, "] ", bookindex_section ); } } @@ -4967,10 +4991,12 @@ struct BookIndexNuggetHash { main_term = strip(m.captures[1]); obj_cite_number_offset = to!int(m.captures[2]); obj_cite_number_endpoint=(obj_cite_number + obj_cite_number_offset); - obj_cite_numbers ~= (to!string(obj_cite_number) ~ "-" ~ to!string(obj_cite_number_endpoint)); + obj_cite_numbers ~= (to!string(obj_cite_number) ~ "-" ~ to!string(obj_cite_number_endpoint) + ~ ":" ~ segment_anchor_tag); } else { main_term = strip(bi_main_term_and_rest[0]); - obj_cite_numbers ~= to!string(obj_cite_number); + obj_cite_numbers ~= to!string(obj_cite_number) + ~ ":" ~ segment_anchor_tag; } bi[main_term]["_a"] ~= obj_cite_numbers; obj_cite_numbers=null; @@ -4985,10 +5011,12 @@ struct BookIndexNuggetHash { sub_term = strip(m.captures[1]); obj_cite_number_offset = to!int(m.captures[2]); obj_cite_number_endpoint=(obj_cite_number + obj_cite_number_offset); - obj_cite_numbers ~= (to!string(obj_cite_number) ~ " - " ~ to!string(obj_cite_number_endpoint)); + obj_cite_numbers ~= (to!string(obj_cite_number) ~ " - " ~ to!string(obj_cite_number_endpoint) + ~ ":" ~ segment_anchor_tag); } else { sub_term = strip(sub_terms_bits); - obj_cite_numbers ~= to!string(obj_cite_number); + obj_cite_numbers ~= to!string(obj_cite_number) + ~ ":" ~ segment_anchor_tag; } if (!empty(sub_term)) { bi[main_term][sub_term] ~= obj_cite_numbers; @@ -5021,13 +5049,13 @@ struct BookIndexReportIndent { auto mainkeys= bookindex_unordered_hashes.byKey.array.sort().release; foreach (mainkey; mainkeys) { - debug(bookindex) { + debug(bookindex1) { writeln(mainkey); } auto subkeys= bookindex_unordered_hashes[mainkey].byKey.array.sort().release; foreach (subkey; subkeys) { - debug(bookindex) { + debug(bookindex1) { writeln(" ", subkey); writeln(" ", to!string( bookindex_unordered_hashes[mainkey][subkey] @@ -5091,16 +5119,14 @@ struct BookIndexReportSection { #+name: ao_emitters_book_index_report_section #+BEGIN_SRC d - auto bookindex_build_abstraction_section(BI,N,Ta,B)( + auto bookindex_build_abstraction_section(BI,N,B)( BI bookindex_unordered_hashes, N obj_cite_number, - Ta segment_anchor_tag_that_object_belongs_to, B opt_action_bool, ) { debug(asserts){ static assert(is(typeof(bookindex_unordered_hashes) == string[][string][string])); static assert(is(typeof(obj_cite_number) == int)); - static assert(is(typeof(segment_anchor_tag_that_object_belongs_to) == string)); static assert(is(typeof(opt_action_bool) == bool[string])); } mixin SiSUnode; @@ -5118,7 +5144,8 @@ struct BookIndexReportSection { auto node_para_int_ = node_metadata_para_int; auto node_para_str_ = node_metadata_para_str; if ((mainkeys.length > 0) - && (opt_action_bool["backmatter"] && opt_action_bool["section_bookindex"])) { + && (opt_action_bool["backmatter"] + && opt_action_bool["section_bookindex"])) { string bi_tmp_seg, bi_tmp_scroll; string[] bi_tmp_tags; comp_obj_heading_ = comp_obj_heading_.init; @@ -5133,6 +5160,7 @@ struct BookIndexReportSection { comp_obj_heading_.heading_lev_collapsed = 1; comp_obj_heading_.parent_ocn = 1; comp_obj_heading_.parent_lev_markup = 0; + comp_obj_heading.inline_links = true; bookindex_section["scroll"] ~= comp_obj_heading_; bookindex_section["seg"] ~= comp_obj_heading_; ++obj_cite_number; @@ -5150,6 +5178,7 @@ struct BookIndexReportSection { comp_obj_heading_.heading_lev_collapsed = 2; comp_obj_heading_.parent_ocn = 1; comp_obj_heading_.parent_lev_markup = 0; + comp_obj_heading.inline_links = false; comp_obj_heading_.anchor_tags = ["bookindex"]; bookindex_section["scroll"] ~= comp_obj_heading_; bookindex_section["seg"] ~= comp_obj_heading_; @@ -5164,15 +5193,33 @@ struct BookIndexReportSection { buffer.clear(); bi_tmp_tags ~= translate(mainkey, transTable); bi_tmp_seg = "!{" ~ mainkey ~ "}! "; + auto bkidx_lnk_seg(string locs) { + string markup = ""; + if (auto m = matchFirst(locs, rgx.book_index_go_seg)) { + markup = + munge.url_links("{ " ~ m["link"] ~ " }" + ~ mkup.mark_internal_site_lnk ~ m["seg"] ~ ".fnSuffix" + ~ "#" ~ m["ocn"] ~ ", "); + } else { + writeln(__LINE__, ": ", locs); + } + return markup; + } + auto bkidx_lnk_scroll(string locs) { + string markup = ""; + if (auto m = matchFirst(locs, rgx.book_index_go)) { + markup = + munge.url_links("{ " ~ m["link"] ~ " }" + ~ mkup.mark_internal_site_lnk + ~ "#" ~ m["ocn"] ~ ", "); + } else { + writeln(__LINE__, ": ", locs); + } + return markup; + } 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_anchor_tag_that_object_belongs_to.empty) - ? munge.url_links(" {" ~ ref_ ~ "}#" ~ go ~ ", ") - : munge.url_links(" {" ~ ref_ ~ "}" - ~ mkup.mark_internal_site_lnk ~ "../" - ~ segment_anchor_tag_that_object_belongs_to - ~ ".fnSuffix#" ~ go ~ ", "); + bi_tmp_scroll ~= bkidx_lnk_scroll(ref_); + bi_tmp_seg ~= bkidx_lnk_seg(ref_); } bi_tmp_scroll ~= " \\\\\n "; bi_tmp_seg ~= " \\\\\n "; @@ -5185,21 +5232,15 @@ struct BookIndexReportSection { bi_tmp_tags ~= translate(subkey, transTable); bi_tmp_seg ~= subkey ~ ", "; 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_anchor_tag_that_object_belongs_to.empty) - ? munge.url_links(" {" ~ ref_ ~ "}#" ~ go ~ ", ") - : munge.url_links(" {" ~ ref_ ~ "}" - ~ mkup.mark_internal_site_lnk ~ "../" - ~ segment_anchor_tag_that_object_belongs_to - ~ ".fnSuffix#" ~ go ~ ", "); + bi_tmp_scroll ~= bkidx_lnk_scroll(ref_); + bi_tmp_seg ~= bkidx_lnk_seg(ref_); } bi_tmp_scroll ~= " \\\\\n "; bi_tmp_seg ~= " \\\\\n "; ++skn; } - bi_tmp_scroll = replaceFirst(bi_tmp_scroll, rgx.trailing_linebreak, ""); - bi_tmp_seg = replaceFirst(bi_tmp_seg, rgx.trailing_linebreak, ""); + bi_tmp_scroll = replaceFirst(bi_tmp_scroll, rgx.trailing_linebreak, ""); + bi_tmp_seg = replaceFirst(bi_tmp_seg, rgx.trailing_linebreak, ""); comp_obj_para = comp_obj_para.init; comp_obj_para.use = "backmatter"; comp_obj_para.is_of = "para"; @@ -5211,6 +5252,7 @@ struct BookIndexReportSection { comp_obj_para.indent_hang = 0; comp_obj_para.indent_base = 1; comp_obj_para.bullet = false; + comp_obj_para.inline_links = true; bookindex_section["scroll"] ~= comp_obj_para; comp_obj_para.text = to!string(bi_tmp_seg).strip; bookindex_section["seg"] ~= comp_obj_para; @@ -5263,9 +5305,6 @@ struct NotesSection { int cntr, ) in { - // endnotes/ footnotes for - // doc objects other than paragraphs & headings - // various forms of grouped text assert((contents_am[cntr].is_a == "para") || (contents_am[cntr].is_a == "heading") || (contents_am[cntr].is_a == "group")); @@ -5289,20 +5328,27 @@ struct NotesSection { ) { debug(endnotes_build) { writeln( - "{^{", m.captures[1], ".}^}" ~ mkup.mark_internal_site_lnk ~ "../", segment_anchor_tag_that_object_belongs_to, ".fnSuffix#noteref_\n ", m.captures[1], " ", + "{^{", m.captures[1], ".}^}" + ~ mkup.mark_internal_site_lnk, + segment_anchor_tag_that_object_belongs_to, + ".fnSuffix#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["notes"] ~= (segment_anchor_tag_that_object_belongs_to.empty) ? (munge.url_links( - "{^{" ~ m.captures[1] ~ ".}^}#noteref_" ~ - m.captures[1]) ~ " " ~ m.captures[2] ~ "』" + "{^{" ~ m.captures[1] ~ ".}^}#noteref_" + ~ m.captures[1]) ~ " " + ~ m.captures[2] ~ "』" ) : (munge.url_links( - "{^{" ~ m.captures[1] ~ ".}^}" ~ mkup.mark_internal_site_lnk ~ "../" ~ - segment_anchor_tag_that_object_belongs_to ~ ".fnSuffix#noteref_" ~ - m.captures[1]) ~ " " ~ m.captures[2] ~ "』" + "{^{" ~ m.captures[1] ~ ".}^}" + ~ mkup.mark_internal_site_lnk + ~ segment_anchor_tag_that_object_belongs_to + ~ ".fnSuffix#noteref_" + ~ m.captures[1]) ~ " " + ~ m.captures[2] ~ "』" ); } return object_notes; @@ -5413,6 +5459,7 @@ struct NotesSection { string notenumber = to!string(m.captures[1]); string anchor_tag = "note_" ~ notenumber; comp_obj_endnote_.anchor_tags ~= [ endnotes_["anchor"][i] ]; + comp_obj_endnote_.inline_links = true; comp_obj_endnote_.text = endnote.strip; the_endnotes_section ~= comp_obj_endnote_; } @@ -5772,7 +5819,7 @@ struct NodeStructureMetadata { _comp_obj_heading_ = _comp_obj_heading_.init; _comp_obj_heading_.use = "body"; _comp_obj_heading_.is_of = "para"; - _comp_obj_heading_.is_a = "heading"; // = is_; // check whether needed, constant??? + _comp_obj_heading_.is_a = "heading"; _comp_obj_heading_.text = to!string(_text).strip; _comp_obj_heading_.ocn = obj_cite_number_; _comp_obj_heading_.obj_cite_number = (obj_cite_number==0) ? "" : to!string(obj_cite_number); @@ -5786,6 +5833,9 @@ struct NodeStructureMetadata { _comp_obj_heading_.ptr_doc_object = cntr_; _comp_obj_heading_.ptr_html_segnames = ((lev_markup_number == "4") ? html_segnames_ptr : 0); _comp_obj_heading_.ptr_heading = ptr_; + _comp_obj_heading_.inline_notes_reg = flag_notes_reg; + _comp_obj_heading_.inline_notes_star = flag_notes_star; + _comp_obj_heading_.inline_links = flag_links; debug(node) { if (match(lev_markup_number, rgx.levels_numbered_headings)) { writeln("* ", to!string(_node)); @@ -6102,12 +6152,12 @@ struct ObjGenericComposite { string text = ""; string obj_cite_number = ""; string[] anchor_tags = []; - string marked_up_level = "9"; - int[] closes_lev_collapsed = []; - int[] closes_lev_markup = []; int indent_base = 0; int indent_hang = 0; bool bullet = false; + bool inline_links = false; + bool inline_notes_reg = false; + bool inline_notes_star = false; string syntax = ""; int ocn = 0; string segment_anchor_tag = ""; @@ -6116,24 +6166,20 @@ struct ObjGenericComposite { int parent_lev_markup = 0; int parent_ocn = 0; int[] ancestors = []; + string marked_up_level = "9"; int heading_lev_markup = 9; int heading_lev_collapsed = 9; - int[] heading_closes_lev_collapsed = []; - int[] heading_closes_lev_markup = []; + int[] dom_markedup = [ 0, 0, 0, 0, 0, 0, 0, 0,]; + int[] dom_collapsed = [ 0, 0, 0, 0, 0, 0, 0, 0,]; string[] heading_ancestors_text = [ "", "", "", "", "", "", "", "", ]; + string[] lev4_subtoc = []; int heading_array_ptr = 0; int ptr_doc_object = 0; int ptr_html_segnames = 0; int ptr_heading = 0; int array_ptr = 0; int heading_array_ptr_segments = 0; - string[] lev4_subtoc = []; string[string][string] node; - int[] dom_markedup = [ 0, 0, 0, 0, 0, 0, 0, 0,]; - int[] dom_collapsed = [ 0, 0, 0, 0, 0, 0, 0, 0,]; - bool inline_links = false; - bool inline_notes_reg = false; - bool inline_notes_star = false; } #+END_SRC diff --git a/org/defaults.org b/org/defaults.org index 8b6a74f..616921b 100644 --- a/org/defaults.org +++ b/org/defaults.org @@ -568,7 +568,11 @@ static within_quotes = ctRegex!(`"(.+?)"`); static make_heading_delimiter = ctRegex!(`[;][ ]*`); static arr_delimiter = ctRegex!(`[ ]*[;][ ]*`); static name_delimiter = ctRegex!(`^([^,]+)[ ]*,[ ]+(.+?)$`); -static book_index_go = ctRegex!("([0-9]+)(?:-[0-9]+)?"); +static book_index_go = ctRegex!("(?P(?P[0-9]+)(?:-[0-9]+)?)"); +static book_index_go_scroll = ctRegex!("(?P(?P[0-9]+)(?:-[0-9]+)?)"); +static book_index_go_seg = ctRegex!("(?P(?P[0-9]+)(?:-[0-9]+)?):(?P[a-z0-9_-]+)"); +static book_index_go_seg_ = ctRegex!("(?P(?P[0-9]+)(?:-[0-9]+)?)(:(?P[a-z0-9_-]+))?"); +static book_index_go_seg_anchorless = ctRegex!("(?P(?P[0-9]+)(?:-[0-9]+)?)"); static trailing_comma = ctRegex!(",[ ]*$"); static trailing_linebreak = ctRegex!(",[ ]{1,2}\\\\\\\\\n[ ]{4}$","m"); static newline_eol_delimiter = ctRegex!("\n"); @@ -748,6 +752,9 @@ static inline_text_and_note_square_sp = ctRegex!(`(.+?)~\[[*+]+\ static inline_text_and_note_square = ctRegex!(`(.+?)~\[\s*(.+?)\]~`, "mg"); static inline_note_square_delimiters = ctRegex!(`(~\[\s*)(.+?)(\]~)`, "mg"); static inline_curly_delimiter_open_regular = ctRegex!(`~\{\s*`, "m"); +static inline_curly_delimiter_open_symbol_star = ctRegex!(`~\{[*]\s`, "m"); // +static inline_curly_delimiter_open_symbol_plus = ctRegex!(`~\{[+]\s`, "m"); // +static inline_curly_delimiter_open_star_or_plus = ctRegex!(`~\{[+*]`, "m"); // static inline_curly_delimiter_close_regular = ctRegex!(`\s*\}~`, "m"); static inline_text_and_note_curly = ctRegex!(`(?P.+?)(?:(?:[~])[{][*+ ]*)(?P.+?)(?:[}][~])`, "mg"); static note_ref = ctRegex!(`^\S+?noteref_([0-9]+)`, "mg"); // {^{73.}^}#noteref_73 @@ -757,12 +764,11 @@ static note_ref = ctRegex!(`^\S+?noteref_( #+name: ao_rgx #+BEGIN_SRC d -static inline_url = ctRegex!(`((?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|#)\S+)`, "mg"); -static inline_link_naked_url = ctRegex!(`(^|[ ])((?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|#)\S+?)([.,;:?!]?(?:[ ]|$))`, "mg"); -static inline_link_markup_regular = ctRegex!(`(^|[ ])\{\s*(.+?)\s*\}((?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|#)\S+?)([.,;:?!]?(?:[ ]|$))`, "mg"); -static inline_link_endnote_url_helper_punctuated = ctRegex!(`\{~\^\s+(.+?)\}((?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|#)\S+?)([.,;:?!]?(?:[ ]|$))`, "mg"); -static inline_link_endnote_url_helper = ctRegex!(`\{~\^\s+(.+?)\}((?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|#)\S+)`, "mg"); -static inline_a_url = ctRegex!(`(┤)(\S+?)(├)`, "mg"); +static inline_url = ctRegex!(`((?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)\S+)`, "mg"); +static inline_link_naked_url = ctRegex!(`(?P^|[ ])(?P(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)\S+?)(?P[.,;:?!]?(?:[ ]|$))`, "mg"); +static inline_link_markup_regular = ctRegex!(`(?P^|[ ])\{\s*(?P.+?)\s*\}(?P(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)\S+?)(?P[.,;:?!]?(?:[ ]|$))`, "mg"); +static inline_link_endnote_url_helper_punctuated = ctRegex!(`\{~\^\s+(?P.+?)\}(?P(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)\S+?)(?P[.,;:?!]?(?:[ ]|$))`, "mg"); +static inline_link_endnote_url_helper = ctRegex!(`\{~\^\s+(?P.+?)\}(?P(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)\S+)`, "mg"); #+END_SRC *** images :images: diff --git a/org/sdp.org b/org/sdp.org index 5dd7f45..2318ee7 100644 --- a/org/sdp.org +++ b/org/sdp.org @@ -23,7 +23,7 @@ struct Version { int minor; int patch; } -enum ver = Version(0, 13, 3); +enum ver = Version(0, 13, 4); #+END_SRC * 1. sdp (sisu document parser) :sdp: -- cgit v1.2.3