diff options
Diffstat (limited to 'org')
| -rw-r--r-- | org/ao_doc_abstraction.org | 137 | ||||
| -rw-r--r-- | org/sdp.org | 2 | 
2 files changed, 99 insertions, 40 deletions
| diff --git a/org/ao_doc_abstraction.org b/org/ao_doc_abstraction.org index e4f38d3..b3f31c0 100644 --- a/org/ao_doc_abstraction.org +++ b/org/ao_doc_abstraction.org @@ -106,7 +106,7 @@ template SiSUdocAbstraction() {    /+ +/    <<ao_emitters_obj_inline_markup_munge>>    <<ao_emitters_obj_inline_markup>> -  <<ao_emitters_obj_inline_markup_and_anchor_tags>> +  <<ao_emitters_obj_inline_markup_and_anchor_tags_and_misc>>    <<ao_emitters_obj_inline_markup_table_of_contents>>    <<ao_emitters_obj_inline_markup_private>>    <<ao_emitters_obj_inline_markup_heading_numbering_segment_anchor_tags>> @@ -142,8 +142,8 @@ template SiSUdocAbstraction() {  #+name: abs_top_imports  #+BEGIN_SRC d  import -  ao_object_setter,    ao_defaults, +  ao_object_setter,    ao_rgx,    output_hub;  private import @@ -191,7 +191,6 @@ string[] anchor_tags;  string anchor_tag_;  string segment_anchor_tag_that_object_belongs_to;  string segment_anchor_tag_that_object_belongs_to_uri; -auto note_section = NotesSection();  /+ enum +/  enum State { off, on }  enum TriState { off, on, closing } @@ -216,8 +215,8 @@ JSONValue[] bib_arr_json;  int bib_entry;  /+ counters +/  int cntr, previous_count, previous_length; +bool reset_note_numbers=true;  int[string] line_occur; -string[] html_segnames=["toc"];  int html_segnames_ptr=0;  int html_segnames_ptr_cntr=0;  int verse_line, heading_ptr; @@ -395,13 +394,6 @@ int ocn_emit(int ocn_status_flag) {  /+ book index variables +/  string book_idx_tmp;  string[][string][string] bookindex_unordered_hashes; -auto bookindex_extract_hash = BookIndexNuggetHash(); -string[][string][string] bkidx_hash( -  string bookindex_section, -  int    obj_cite_number -) { -  return bookindex_extract_hash.bookindex_nugget_hash(bookindex_section, obj_cite_number); -}  /+ node +/  ObjGenericComposite comp_obj_heading, comp_obj_location, comp_obj_block, comp_obj_code, comp_obj_poem_ocn, comp_obj_comment;  auto node_construct = NodeStructureMetadata(); @@ -423,6 +415,8 @@ scope(exit) {    destroy(an_object);    destroy(processing);    destroy(biblio_arr_json); +  previous_length=0; +  reset_note_numbers=true;  }  #+END_SRC @@ -516,7 +510,10 @@ the_table_of_contents_section = [  ];  auto mkup = InlineMarkup();  auto munge = ObjInlineMarkupMunge(); +auto note_section = NotesSection(); +auto bookindex_extract_hash = BookIndexNuggetHash();  string[][string] lev4_subtoc; +string[] html_segnames=["toc"];  #+END_SRC  ** 2. _loop: process document body_ [+6]                              :loop: @@ -994,6 +991,7 @@ if ((matchFirst(line, rgx.book_index))  #+name: abs_in_loop_body_not_block_obj_line_empty_blocks_flags  #+BEGIN_SRC d  _block_flag_line_empty_( +  bookindex_extract_hash,    line,    an_object,    the_document_body_section, @@ -1035,7 +1033,7 @@ if ((type["heading"] == State.on)    an_object["bookindex_nugget"] =      ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : "";    bookindex_unordered_hashes = -    bkidx_hash(an_object["bookindex_nugget"], obj_cite_number); +    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 = @@ -1109,7 +1107,7 @@ if ((type["heading"] == State.on)    an_object["bookindex_nugget"] =      ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : "";    bookindex_unordered_hashes = -    bkidx_hash(an_object["bookindex_nugget"], obj_cite_number); +    bookindex_extract_hash.bookindex_nugget_hash(an_object["bookindex_nugget"], obj_cite_number);    an_object["is"] = "para";    auto comp_obj_heading =      node_construct.node_location_emitter( @@ -1393,6 +1391,7 @@ auto bi_tuple =      segment_anchor_tag_that_object_belongs_to,      opt_action_bool,    ); +destroy(bookindex_unordered_hashes);  static assert(!isTypeTuple!(bi_tuple));  auto the_bookindex_section = bi_tuple[0];  obj_cite_number = bi_tuple[1]; @@ -2022,6 +2021,13 @@ if ((opt_action_bool["html"])  }  #+END_SRC +*** dup + +#+name: abs_post +#+BEGIN_SRC d +auto segnames = html_segnames.dup; +#+END_SRC +  *** clean out structure  #+name: abs_post @@ -2034,6 +2040,19 @@ destroy(the_glossary_section);  destroy(the_bibliography_section);  destroy(the_bookindex_section);  destroy(the_blurb_section); +destroy(html_segnames); +destroy(bookindex_unordered_hashes); +destroy(an_object); +biblio_arr_json = []; +obj_cite_number=0; +obj_cite_number_=0; +html_segnames_ptr=0; +html_segnames_ptr_cntr=0; +content_non_header = "8"; +dom_markedup = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; +dom_markedup_buffer = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; +dom_collapsed = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; +dom_collapsed_buffer = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,];  #+END_SRC  *** [#A] _return document tuple_                               :return:tuple: @@ -2043,7 +2062,7 @@ destroy(the_blurb_section);  auto t = tuple(    document_the,    document_section_keys_sequenced, -  html_segnames, +  segnames,    images,  );  return t; @@ -2990,7 +3009,8 @@ void _table_block_(L,O,T)(  #+name: abs_functions_block_line_status_empty  #+BEGIN_SRC d -void _block_flag_line_empty_( +void _block_flag_line_empty_(B)( +  B                            bookindex_extract_hash,    char[]                       line,    ref string[string]           an_object,    ref ObjGenericComposite[]    the_document_body_section, @@ -3018,7 +3038,7 @@ void _block_flag_line_empty_(      an_object["bookindex_nugget"] =        ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : "";      bookindex_unordered_hashes = -      bkidx_hash(an_object["bookindex_nugget"], obj_cite_number); +      bookindex_extract_hash.bookindex_nugget_hash(an_object["bookindex_nugget"], obj_cite_number);      an_object["is"] = "code";      auto comp_obj_location =        node_construct.node_location_emitter( @@ -3050,7 +3070,7 @@ void _block_flag_line_empty_(      an_object["bookindex_nugget"] =        ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : "";      bookindex_unordered_hashes = -      bkidx_hash(an_object["bookindex_nugget"], obj_cite_number); +      bookindex_extract_hash.bookindex_nugget_hash(an_object["bookindex_nugget"], obj_cite_number);      an_object["is"] = "verse"; // check also      auto comp_obj_location =        node_construct.node_location_emitter( @@ -3079,7 +3099,7 @@ void _block_flag_line_empty_(      an_object["bookindex_nugget"] =        ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : "";      bookindex_unordered_hashes = -      bkidx_hash(an_object["bookindex_nugget"], obj_cite_number); +      bookindex_extract_hash.bookindex_nugget_hash(an_object["bookindex_nugget"], obj_cite_number);      an_object["is"] = "table";      auto comp_obj_location =        node_construct.node_location_emitter( @@ -3113,7 +3133,7 @@ void _block_flag_line_empty_(      an_object["bookindex_nugget"] =        ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : "";      bookindex_unordered_hashes = -      bkidx_hash(an_object["bookindex_nugget"], obj_cite_number); +      bookindex_extract_hash.bookindex_nugget_hash(an_object["bookindex_nugget"], obj_cite_number);      an_object["is"] = "group";      auto comp_obj_location =        node_construct.node_location_emitter( @@ -3146,7 +3166,7 @@ void _block_flag_line_empty_(      an_object["bookindex_nugget"] =        ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : "";      bookindex_unordered_hashes = -      bkidx_hash(an_object["bookindex_nugget"], obj_cite_number); +      bookindex_extract_hash.bookindex_nugget_hash(an_object["bookindex_nugget"], obj_cite_number);      an_object["is"] = "block";      auto comp_obj_location =        node_construct.node_location_emitter( @@ -3180,7 +3200,7 @@ void _block_flag_line_empty_(      an_object["bookindex_nugget"] =        ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : "";      bookindex_unordered_hashes = -      bkidx_hash(an_object["bookindex_nugget"], obj_cite_number); +      bookindex_extract_hash.bookindex_nugget_hash(an_object["bookindex_nugget"], obj_cite_number);      an_object["is"] = "quote";      auto comp_obj_location =        node_construct.node_location_emitter( @@ -3705,6 +3725,7 @@ struct ObjInlineMarkupMunge {    string obj_txt_out, tail, note;    auto rgx = Rgx();    auto mkup = InlineMarkup(); +  int stage_reset_note_numbers = true;    private auto initialize_note_numbers() {      n_foot = 0;      n_foot_reg = 0; @@ -3716,14 +3737,17 @@ struct ObjInlineMarkupMunge {        static assert(is(typeof(obj_txt_in) == string));      }      /+ url matched +/ -    if (auto m = matchAll(obj_txt_in, rgx.inline_url)) { +    if (match(obj_txt_in, rgx.inline_url)) {        /+ link: naked url: http://url +/        if (match(obj_txt_in, rgx.inline_link_naked_url)) {          obj_txt_in =            replaceAll(              obj_txt_in,              rgx.inline_link_naked_url, -            ("$1" ~ mkup.lnk_o ~ " $2 " ~ mkup.lnk_c ~  mkup.url_o ~ "$2" ~  mkup.url_c ~ "$3")            // ("$1{ $2 }$2$3") +            ("$1" +              ~ mkup.lnk_o ~ " $2 " ~ mkup.lnk_c +              ~  mkup.url_o ~ "$2" ~  mkup.url_c +              ~ "$3")            // ("$1{ $2 }$2$3")            );        }        /+ link with helper for endnote including the url: @@ -3736,13 +3760,21 @@ struct ObjInlineMarkupMunge {            replaceAll(              obj_txt_in,              rgx.inline_link_endnote_url_helper_punctuated, -            (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 ~  " }~$3") // ("{ $1 }$2~{ { $2 }$2 }~$3") +            (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 +              ~  " }~$3") // ("{ $1 }$2~{ { $2 }$2 }~$3")            );          obj_txt_in =            replaceAll(              obj_txt_in,              rgx.inline_link_endnote_url_helper, -            (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 ~  " }~")   // ("{ $1 }$2~{ { $2 }$2 }~") +            (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 +              ~  " }~") // ("{ $1 }$2~{ { $2 }$2 }~")            );        }        /+ link with regular markup: @@ -3753,13 +3785,16 @@ struct ObjInlineMarkupMunge {            replaceAll(              obj_txt_in,              rgx.inline_link_markup_regular, -            ("$1" ~ mkup.lnk_o ~ " $2 " ~ mkup.lnk_c ~  mkup.url_o ~ "$3" ~  mkup.url_c ~ "$4")            // ("$1{ $2 }$3$4") +            ("$1" +              ~ mkup.lnk_o ~ " $2 " ~ mkup.lnk_c +              ~  mkup.url_o ~ "$3" ~  mkup.url_c +              ~ "$4")            // ("$1{ $2 }$3$4")            );        }      }      return obj_txt_in;    } -  string footnotes_endnotes_markup_and_number_or_stars(Ot)(Ot obj_txt_in) {                                // here endnotes are marked up +  string footnotes_endnotes_markup_and_number_or_stars(Ot)(Ot obj_txt_in, bool reset_note_numbers) {       // here endnotes are marked up      debug(asserts){        static assert(is(typeof(obj_txt_in) == string));      } @@ -3770,8 +3805,18 @@ struct ObjInlineMarkupMunge {          rgx.inline_notes_curly,          (mkup.en_a_o ~ " $1" ~ mkup.en_a_c)        ); +    if (!(stage_reset_note_numbers) && reset_note_numbers) { +      stage_reset_note_numbers = true; +    }      if (match(obj_txt_in, rgx.inline_notes_al_gen)) {        if (auto m = matchAll(obj_txt_in, rgx.inline_text_and_note_al_)) { +        if (stage_reset_note_numbers) { +          n_foot = 0; +          n_foot_reg = 0; +          n_foot_sp_asterisk = 0; +          n_foot_sp_plus = 0; +        } +        stage_reset_note_numbers = false;          foreach(n; m) {            if (match(to!string(n.hit), rgx.inline_al_delimiter_open_symbol_star)) {              ++n_foot_sp_asterisk; @@ -3802,8 +3847,12 @@ struct ObjInlineMarkupMunge {      }      return obj_txt_out;    } -  private auto object_notes_(string obj_txt_in) -  in { } +  private auto object_notes_(Ot)(Ot obj_txt_in, bool reset_note_numbers=false) +  in { +    debug(asserts){ +      assert(is(typeof(obj_txt_in) == string)); +    } +  }    body {      obj_txt_out = "";      tail = ""; @@ -3820,10 +3869,10 @@ struct ObjInlineMarkupMunge {          (mkup.en_a_o ~ "+" ~ " $1" ~ mkup.en_a_c)        );      /+ url matched +/ -    if (auto m = matchAll(obj_txt_in, rgx.inline_url)) { +    if (match(obj_txt_in, rgx.inline_url)) {        obj_txt_in = url_links(obj_txt_in);      } -    obj_txt_out = footnotes_endnotes_markup_and_number_or_stars(obj_txt_in); +    obj_txt_out = footnotes_endnotes_markup_and_number_or_stars(obj_txt_in, reset_note_numbers);      debug(footnotes) {        writeln(obj_txt_out, tail);      } @@ -3856,7 +3905,7 @@ struct ObjInlineMarkupMunge {      }      return obj_txt["munge"];    } -  string heading(Ot)(Ot obj_txt_in) +  string heading(Ot)(Ot obj_txt_in, bool reset_note_numbers=false)    in {      debug(asserts){        static assert(is(typeof(obj_txt_in) == string)); @@ -3867,7 +3916,7 @@ struct ObjInlineMarkupMunge {      obj_txt["munge"]=replaceFirst(obj_txt["munge"], rgx.heading, "");      obj_txt["munge"]=replaceFirst(obj_txt["munge"], rgx.obj_cite_number_off_all, "");      obj_txt["munge"]=strip(obj_txt["munge"]); -    obj_txt["munge"]=object_notes_(obj_txt["munge"]); +    obj_txt["munge"]=object_notes_(obj_txt["munge"], reset_note_numbers);      debug(munge) {        writeln(__LINE__);        writeln(obj_txt_in); @@ -3978,7 +4027,7 @@ struct ObjInlineMarkup {  ****** object inline markup and anchor tags              :markup:inline: -#+name: ao_emitters_obj_inline_markup_and_anchor_tags +#+name: ao_emitters_obj_inline_markup_and_anchor_tags_and_misc  #+BEGIN_SRC d    auto obj_inline_markup_and_anchor_tags(O,K,Ma)(      O  obj_, @@ -4010,7 +4059,8 @@ struct ObjInlineMarkup {        } else if (obj_["lev"] == "1") {          writeln("heading anchor tag missing: ", obj_txt["munge"]);        } -      obj_txt["munge"]=munge.heading(obj_txt["munge"]); +      obj_txt["munge"]=munge.heading(obj_txt["munge"], reset_note_numbers); +      reset_note_numbers=false;        break;      case "para":        obj_txt["munge"]=munge.para(obj_txt["munge"]); @@ -4043,8 +4093,8 @@ struct ObjInlineMarkup {        break;      }      auto t = tuple( -     obj_txt["munge"], -     anchor_tags_, +      obj_txt["munge"], +      anchor_tags_,      );      anchor_tags_=[];      return t; @@ -5047,7 +5097,10 @@ struct BookIndexReportSection {            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 ~ ", "); +          : munge.url_links(" {" ~ ref_ ~ "}" +              ~ mkup.mark_internal_site_lnk ~ "../" +              ~ segment_anchor_tag_that_object_belongs_to +              ~ ".fnSuffix#" ~ go ~ ", ");          }          bi_tmp_scroll ~= " \\\\\n    ";          bi_tmp_seg ~= " \\\\\n    "; @@ -5064,7 +5117,10 @@ struct BookIndexReportSection {              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 ~ ", "); +            : munge.url_links(" {" ~ ref_ ~ "}" +              ~ mkup.mark_internal_site_lnk ~ "../" +              ~ segment_anchor_tag_that_object_belongs_to +              ~ ".fnSuffix#" ~ go ~ ", ");            }            bi_tmp_scroll ~= " \\\\\n    ";            bi_tmp_seg ~= " \\\\\n    "; @@ -5326,6 +5382,8 @@ struct Bibliography {    body {      JSONValue[] biblio_unsorted =        _biblio_unsorted_complete_(biblio_unsorted_incomplete, bib_arr_json); +    biblio_arr_json = []; +    biblio_unsorted_incomplete = [];      JSONValue[] biblio_sorted__ = biblio_sort(biblio_unsorted);      biblio_debug(biblio_sorted__);      debug(biblio0) { @@ -5380,6 +5438,7 @@ struct Bibliography {      }      JSONValue[] biblio_unsorted_array_of_json_objects =        bib_arr_json.dup; +      destroy(bib_arr_json);      return biblio_unsorted_array_of_json_objects;    }  #+END_SRC diff --git a/org/sdp.org b/org/sdp.org index 658c0b9..032709f 100644 --- a/org/sdp.org +++ b/org/sdp.org @@ -23,7 +23,7 @@ struct Version {    int minor;    int patch;  } -enum ver = Version(0, 12, 2); +enum ver = Version(0, 13, 0);  #+END_SRC  * 1. sdp (sisu document parser)                                         :sdp: | 
