diff options
Diffstat (limited to 'src/sdp')
| -rw-r--r-- | src/sdp/ao_abstract_doc_source.d | 127 | 
1 files changed, 90 insertions, 37 deletions
| diff --git a/src/sdp/ao_abstract_doc_source.d b/src/sdp/ao_abstract_doc_source.d index 119a718..a0dccbe 100644 --- a/src/sdp/ao_abstract_doc_source.d +++ b/src/sdp/ao_abstract_doc_source.d @@ -6,8 +6,8 @@  template SiSUdocAbstraction() {    /+ ↓ abstraction imports +/    import -    ao_object_setter,      ao_defaults, +    ao_object_setter,      ao_rgx,      output_hub;    private import @@ -44,7 +44,6 @@ template SiSUdocAbstraction() {    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 } @@ -69,8 +68,8 @@ template SiSUdocAbstraction() {    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; @@ -224,13 +223,6 @@ template SiSUdocAbstraction() {    /+ 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(); @@ -261,6 +253,8 @@ template SiSUdocAbstraction() {        destroy(an_object);        destroy(processing);        destroy(biblio_arr_json); +      previous_length=0; +      reset_note_numbers=true;      }      mixin SiSUrgxInitFlags;      mixin SiSUnode; @@ -348,7 +342,10 @@ template SiSUdocAbstraction() {      ];      auto mkup = InlineMarkup();      auto munge = ObjInlineMarkupMunge(); +    auto note_section = NotesSection(); +    auto bookindex_extract_hash = BookIndexNuggetHash();      string[][string] lev4_subtoc; +    string[] html_segnames=["toc"];      /+ abstraction init ↑ +/      /+ ↓ loop markup document/text line by line +/      srcDocLoop: @@ -696,6 +693,7 @@ template SiSUdocAbstraction() {            } else if (type["blocks"] == TriState.closing) {              /+ line empty, with blocks flag +/              _block_flag_line_empty_( +              bookindex_extract_hash,                line,                an_object,                the_document_body_section, @@ -726,7 +724,7 @@ template SiSUdocAbstraction() {                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 = @@ -794,7 +792,7 @@ template SiSUdocAbstraction() {                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( @@ -996,6 +994,7 @@ template SiSUdocAbstraction() {          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]; @@ -1552,6 +1551,7 @@ template SiSUdocAbstraction() {        document_section_keys_sequenced["seg"]    ~= "tail";        document_section_keys_sequenced["scroll"] ~= "tail";      } +    auto segnames = html_segnames.dup;      destroy(the_document_head_section);      destroy(the_table_of_contents_section);      destroy(the_document_body_section); @@ -1560,10 +1560,23 @@ template SiSUdocAbstraction() {      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,];      auto t = tuple(        document_the,        document_section_keys_sequenced, -      html_segnames, +      segnames,        images,      );      return t; @@ -2347,7 +2360,8 @@ template SiSUdocAbstraction() {        }      }    } -  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, @@ -2375,7 +2389,7 @@ template SiSUdocAbstraction() {        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( @@ -2407,7 +2421,7 @@ template SiSUdocAbstraction() {        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( @@ -2436,7 +2450,7 @@ template SiSUdocAbstraction() {        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( @@ -2470,7 +2484,7 @@ template SiSUdocAbstraction() {        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( @@ -2503,7 +2517,7 @@ template SiSUdocAbstraction() {        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( @@ -2537,7 +2551,7 @@ template SiSUdocAbstraction() {        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( @@ -3020,6 +3034,7 @@ template SiSUdocAbstraction() {      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; @@ -3031,14 +3046,17 @@ template SiSUdocAbstraction() {          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: @@ -3051,13 +3069,21 @@ template SiSUdocAbstraction() {              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: @@ -3068,13 +3094,16 @@ template SiSUdocAbstraction() {              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));        } @@ -3085,8 +3114,18 @@ template SiSUdocAbstraction() {            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; @@ -3117,8 +3156,12 @@ template SiSUdocAbstraction() {        }        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 = ""; @@ -3135,10 +3178,10 @@ template SiSUdocAbstraction() {            (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);        } @@ -3171,7 +3214,7 @@ template SiSUdocAbstraction() {        }        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)); @@ -3182,7 +3225,7 @@ template SiSUdocAbstraction() {        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); @@ -3312,7 +3355,8 @@ template SiSUdocAbstraction() {          } 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"]); @@ -3345,8 +3389,8 @@ template SiSUdocAbstraction() {          break;        }        auto t = tuple( -       obj_txt["munge"], -       anchor_tags_, +        obj_txt["munge"], +        anchor_tags_,        );        anchor_tags_=[];        return t; @@ -4186,7 +4230,10 @@ template SiSUdocAbstraction() {              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    "; @@ -4203,7 +4250,10 @@ template SiSUdocAbstraction() {                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    "; @@ -4418,6 +4468,8 @@ template SiSUdocAbstraction() {      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) { @@ -4466,6 +4518,7 @@ template SiSUdocAbstraction() {        }        JSONValue[] biblio_unsorted_array_of_json_objects =          bib_arr_json.dup; +        destroy(bib_arr_json);        return biblio_unsorted_array_of_json_objects;      }      final private JSONValue[] biblio_sort(BJ)(BJ biblio_unordered) { | 
