From 096fb733867a947752a32b091f5ad92ec7c433cc Mon Sep 17 00:00:00 2001
From: Ralph Amissah <ralph@amissah.com>
Date: Fri, 10 Feb 2017 08:24:05 -0500
Subject: 0.13.0 batch processing, reset values for each document (footnotes,
 bookindex, biblio etc.)

---
 org/ao_doc_abstraction.org | 137 ++++++++++++++++++++++++++++++++-------------
 org/sdp.org                |   2 +-
 2 files changed, 99 insertions(+), 40 deletions(-)

(limited to 'org')

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:
-- 
cgit v1.2.3