From d7966a333d107ff9372fb33a5a9dbc21425ab63d Mon Sep 17 00:00:00 2001
From: Ralph Amissah <ralph.amissah@gmail.com>
Date: Wed, 15 May 2019 17:03:30 -0400
Subject: doc_abstraction reduce use of return ref, check

---
 src/doc_reform/meta/metadoc_from_src.d | 160 +++++++++++++++++----------------
 1 file changed, 84 insertions(+), 76 deletions(-)

(limited to 'src')

diff --git a/src/doc_reform/meta/metadoc_from_src.d b/src/doc_reform/meta/metadoc_from_src.d
index 6a10534..99e834d 100644
--- a/src/doc_reform/meta/metadoc_from_src.d
+++ b/src/doc_reform/meta/metadoc_from_src.d
@@ -608,7 +608,7 @@ template DocReformDocAbstraction() {
               tag_assoc[comp_obj_heading_.tags.anchor_tag_html]["seg_lv4"]              = comp_obj_heading_.tags.in_segment_html;
               tag_assoc[comp_obj_heading_.tags.segment_anchor_tag_epub]["seg_lv1_to_4"] = comp_obj_heading_.tags.segment_anchor_tag_epub;
             } else {
-              line.flow_para_match_(an_object, an_object_key, indent, bullet, obj_type_status, line_occur);
+              an_object = line.flow_para_match_(an_object, an_object_key, indent, bullet, obj_type_status, line_occur);
               comp_obj_para                               = comp_obj_para.init;
               comp_obj_para.metainfo.is_of_part           = "backmatter";
               comp_obj_para.metainfo.is_of_section        = "glossary";
@@ -756,7 +756,7 @@ template DocReformDocAbstraction() {
               tag_assoc[comp_obj_heading_.tags.anchor_tag_html]["seg_lv4"]              = comp_obj_heading_.tags.in_segment_html;
               tag_assoc[comp_obj_heading_.tags.segment_anchor_tag_epub]["seg_lv1_to_4"] = comp_obj_heading_.tags.segment_anchor_tag_epub;
             } else {
-              line.flow_para_match_(an_object, an_object_key, indent, bullet, obj_type_status, line_occur);
+              an_object = line.flow_para_match_(an_object, an_object_key, indent, bullet, obj_type_status, line_occur);
               comp_obj_para                               = comp_obj_para.init;
               comp_obj_para.metainfo.is_of_part           = "backmatter";
               comp_obj_para.metainfo.is_of_section        = "blurb";
@@ -780,7 +780,7 @@ template DocReformDocAbstraction() {
           line = line
             ._doc_header_and_make_substitutions_(conf_make_meta)
             ._doc_header_and_make_substitutions_fontface_(conf_make_meta);
-          line.flow_txt_block_quote(an_object, obj_type_status);
+          an_object = line.flow_txt_block_quote(an_object, obj_type_status);
           continue;
         /+ within block object: group +/
         } else if (obj_type_status["group"] == TriState.on) {                          /+ within block object: group +/
@@ -788,7 +788,7 @@ template DocReformDocAbstraction() {
             ._doc_header_and_make_substitutions_(conf_make_meta)
             ._doc_header_and_make_substitutions_fontface_(conf_make_meta)
             .replaceAll(rgx.para_delimiter, mkup.br_paragraph ~ "$1");
-          line.flow_txt_block_group(an_object, obj_type_status);
+          an_object = line.flow_txt_block_group(an_object, obj_type_status);
           continue;
         } else if (obj_type_status["block"] == TriState.on) {                          /+ within block object: block +/
           line = line
@@ -798,13 +798,13 @@ template DocReformDocAbstraction() {
             line = line
               .replaceAll(rgx.spaces_keep, (m.captures[1]).translate([ ' ' : mkup.nbsp ]));
           }
-          line.flow_txt_block_block(an_object, obj_type_status);
+          an_object = line.flow_txt_block_block(an_object, obj_type_status);
           continue;
         } else if (obj_type_status["poem"] == TriState.on) {                           /+ within block object: poem +/
-          line.flow_txt_block_poem(an_object, obj_type_status, cntr, object_number_poem, conf_make_meta, tag_in_seg);
+          an_object = line.flow_txt_block_poem(an_object, obj_type_status, cntr, object_number_poem, conf_make_meta, tag_in_seg);
           continue;
         } else if (obj_type_status["table"] == TriState.on) {                          /+ within block object: table +/
-          line.flow_txt_block_table(an_object, obj_type_status, conf_make_meta);
+          an_object = line.flow_txt_block_table(an_object, obj_type_status, conf_make_meta);
           continue;
         } else {                                                                       /+ not within a block group +/
           assert(
@@ -848,7 +848,7 @@ template DocReformDocAbstraction() {
             if (line.matchFirst(rgx.book_index)
             || line.matchFirst(rgx.book_index_open)
             || obj_type_status["book_index"] == State.on )  {                              /+ book_index +/
-              line.flow_book_index_(book_idx_tmp, an_object, obj_type_status, opt_action);
+              an_object = line.flow_book_index_(an_object, book_idx_tmp, obj_type_status, opt_action);
             } else {                                                                       /+ not book_index +/
               an_object_key="body_nugget";
               if (auto m = line.matchFirst(rgx.comment)) {                                 /+ matched comment +/
@@ -872,7 +872,7 @@ template DocReformDocAbstraction() {
               && (obj_type_status["heading"] == State.off))) {                             /+ heading or para but neither flag nor line exists +/
                 if ((conf_make_meta.make.headings.length > 2)
                 && (obj_type_status["make_headings"] == State.off)) {                      /+ heading found +/
-                  line.flow_heading_found_(conf_make_meta.make.headings, heading_match_str, heading_match_rgx, obj_type_status);
+                  heading_match_str = line.flow_heading_found_(heading_match_str, conf_make_meta.make.headings, heading_match_rgx, obj_type_status);
                 }
                 if ((obj_type_status["make_headings"] == State.on)
                 && ((line_occur["para"] == State.off)
@@ -889,13 +889,13 @@ template DocReformDocAbstraction() {
                 +/
                 if (line.matchFirst(rgx.heading)) {                                        /+ heading match +/
                   line = line._doc_header_and_make_substitutions_(conf_make_meta);
-                  line.flow_heading_matched_(line_occur, an_object, an_object_key, lv, collapsed_lev, obj_type_status, conf_make_meta);
+                  an_object = line.flow_heading_matched_(an_object, line_occur, an_object_key, lv, collapsed_lev, obj_type_status, conf_make_meta);
                 } else if (line_occur["para"] == State.off) {                              /+ para match +/
                   an_object_key="body_nugget";
                   line = line
                     ._doc_header_and_make_substitutions_(conf_make_meta)
                     ._doc_header_and_make_substitutions_fontface_(conf_make_meta);
-                  line.flow_para_match_(an_object, an_object_key, indent, bullet, obj_type_status, line_occur);
+                  an_object = line.flow_para_match_(an_object, an_object_key, indent, bullet, obj_type_status, line_occur);
                 }
               } else if (line_occur["heading"] > State.off) {                              /+ heading +/
                 debug(heading) {
@@ -915,10 +915,9 @@ template DocReformDocAbstraction() {
               }
             }
           } else if (obj_type_status["blocks"] == TriState.closing) {                  /+ line empty, with blocks flag +/
-            flow_block_flag_line_empty_(
-              bookindex_extract_hash,
-              line,
+            an_object = line.flow_block_flag_line_empty_(
               an_object,
+              bookindex_extract_hash,
               the_document_body_section,
               bookindex_unordered_hashes,
               obj_cite_digits,
@@ -2731,9 +2730,9 @@ template DocReformDocAbstraction() {
       obj_type_status["tic_table"] = TriState.on;
     }
   }
-  void flow_txt_block_quote(L,O,T)(
+  auto flow_txt_block_quote(L,O,T)(
                L line,
-    return ref O an_object,
+               O an_object,
     return ref T obj_type_status
   ) {
     debug(asserts) {
@@ -2773,10 +2772,11 @@ template DocReformDocAbstraction() {
         an_object[an_object_key] ~= line ~= "\n";   // build quote array (or string)
       }
     }
+    return an_object;
   }
-  void flow_txt_block_group(L,O,T)(
+  auto flow_txt_block_group(L,O,T)(
                L line,
-    return ref O an_object,
+               O an_object,
     return ref T obj_type_status
   ) {
     debug(asserts) {
@@ -2816,10 +2816,11 @@ template DocReformDocAbstraction() {
         an_object[an_object_key] ~= line ~= "\n";   // build group array (or string)
       }
     }
+    return an_object;
   }
-  void flow_txt_block_block(L,O,T)(
+  auto flow_txt_block_block(L,O,T)(
                L line,
-    return ref O an_object,
+               O an_object,
     return ref T obj_type_status
   ) {
     debug(asserts) {
@@ -2859,10 +2860,11 @@ template DocReformDocAbstraction() {
         an_object[an_object_key] ~= line ~= "\n";   // build block array (or string)
       }
     }
+    return an_object;
   }
-  void flow_txt_block_poem(L,O,T,C,N,CMM,Ts)(
+  auto flow_txt_block_poem(L,O,T,C,N,CMM,Ts)(
                L   line,
-    return ref O   an_object,
+               O   an_object,
     return ref T   obj_type_status,
     return ref C   cntr,
                N   object_number_poem,
@@ -3107,6 +3109,7 @@ template DocReformDocAbstraction() {
         }
       }
     }
+    return an_object;
   }
   void flow_txt_block_code(L,O,T)(
                L line,
@@ -3155,9 +3158,9 @@ template DocReformDocAbstraction() {
       }
     }
   }
-  void flow_txt_block_table(L,O,T,CMM)(
+  auto flow_txt_block_table(L,O,T,CMM)(
                L   line,
-    return ref O   an_object,
+               O   an_object,
     return ref T   obj_type_status,
     return ref CMM conf_make_meta,
   ) {
@@ -3186,8 +3189,7 @@ template DocReformDocAbstraction() {
         obj_type_status["blocks"]                     = TriState.off;
         obj_type_status["table"]                      = TriState.off;
         obj_type_status["curly_table_special_markup"] = TriState.off;
-        flow_table_closed_make_special_notation_table_(
-          line,
+        line.flow_table_closed_make_special_notation_table_(
           an_object,
           the_document_body_section,
           obj_cite_digits,
@@ -3217,6 +3219,7 @@ template DocReformDocAbstraction() {
         an_object[an_object_key] ~= line ~= "\n";           // build table array (or string)
       }
     }
+    return an_object;
   }
   final string biblio_tag_map(A)(A abr) {
     debug(asserts) {
@@ -3370,7 +3373,7 @@ template DocReformDocAbstraction() {
     }
   }
   void flow_table_closed_make_special_notation_table_(N,CMM)(
-    char[]                           line,
+               char[]                line,
     return ref string[string]        an_object,
     return ref ObjGenericComposite[] the_document_body_section,
     return ref N                     obj_cite_digits,
@@ -3379,41 +3382,41 @@ template DocReformDocAbstraction() {
     return ref int[string]           obj_type_status,
     CMM                              conf_make_meta
   ) {
-      comp_obj_block = comp_obj_block.init;
-      obj_cite_digits = ocn_emit(obj_type_status["ocn_status"]);
-      auto comp_obj_location
-        = node_construct.node_location_emitter(
-          content_non_header,
-          tag_in_seg,
-          lev_anchor_tag,
-          tag_assoc,
-          obj_cite_digits,
-          cntr,
-          heading_ptr-1,
-          "table"
-        );
-      an_object["is"] = "table";
-      auto substantive_obj_misc_tuple
-        = obj_im.obj_inline_markup_and_anchor_tags_and_misc(an_object, "body_nugget", conf_make_meta, No._new_doc);
-      an_object["substantive"]                       = substantive_obj_misc_tuple[sObj.content];
-      comp_obj_block.metainfo.ocn                    = obj_cite_digits.object_number;
-      comp_obj_block.metainfo.identifier             = obj_cite_digits.identifier;
-      comp_obj_block.metainfo.object_number_off      = obj_cite_digits.off;
-      comp_obj_block.tags.html_segment_anchor_tag_is = tag_in_seg["seg_lv4"];
-      comp_obj_block.tags.epub_segment_anchor_tag_is = tag_in_seg["seg_lv1_to_4"];
-      comp_obj_block.metainfo.o_n_book_index         = obj_cite_digits.bkidx;
-      comp_obj_block.metainfo.object_number_type     = obj_cite_digits.type;
-      comp_obj_block                                 = comp_obj_block.flow_table_instructions(an_object["table_head"]);
-      comp_obj_block                                 = comp_obj_block.flow_table_substantive_munge_special(an_object["substantive"]);
-      the_document_body_section                      ~= comp_obj_block;
-      object_reset(an_object);
-      processing.remove("verse");
-      ++cntr;
+    comp_obj_block = comp_obj_block.init;
+    obj_cite_digits = ocn_emit(obj_type_status["ocn_status"]);
+    auto comp_obj_location
+      = node_construct.node_location_emitter(
+        content_non_header,
+        tag_in_seg,
+        lev_anchor_tag,
+        tag_assoc,
+        obj_cite_digits,
+        cntr,
+        heading_ptr-1,
+        "table"
+      );
+    an_object["is"] = "table";
+    auto substantive_obj_misc_tuple
+      = obj_im.obj_inline_markup_and_anchor_tags_and_misc(an_object, "body_nugget", conf_make_meta, No._new_doc);
+    an_object["substantive"]                       = substantive_obj_misc_tuple[sObj.content];
+    comp_obj_block.metainfo.ocn                    = obj_cite_digits.object_number;
+    comp_obj_block.metainfo.identifier             = obj_cite_digits.identifier;
+    comp_obj_block.metainfo.object_number_off      = obj_cite_digits.off;
+    comp_obj_block.tags.html_segment_anchor_tag_is = tag_in_seg["seg_lv4"];
+    comp_obj_block.tags.epub_segment_anchor_tag_is = tag_in_seg["seg_lv1_to_4"];
+    comp_obj_block.metainfo.o_n_book_index         = obj_cite_digits.bkidx;
+    comp_obj_block.metainfo.object_number_type     = obj_cite_digits.type;
+    comp_obj_block                                 = comp_obj_block.flow_table_instructions(an_object["table_head"]);
+    comp_obj_block                                 = comp_obj_block.flow_table_substantive_munge_special(an_object["substantive"]);
+    the_document_body_section                      ~= comp_obj_block;
+    object_reset(an_object);
+    processing.remove("verse");
+    ++cntr;
   }
-  void flow_block_flag_line_empty_(B,N,CMM,Ts)(
-    B                                   bookindex_extract_hash,
-    char[]                              line,
-    return ref string[string]           an_object,
+  auto flow_block_flag_line_empty_(B,N,CMM,Ts)(
+               char[]                   line,
+               string[string]           an_object,
+               B                        bookindex_extract_hash,
     return ref ObjGenericComposite[]    the_document_body_section,
     return ref string[][string][string] bookindex_unordered_hashes,
     return ref N                        obj_cite_digits,
@@ -3716,13 +3719,14 @@ template DocReformDocAbstraction() {
       processing.remove("verse");
       ++cntr;
     }
+    return an_object;
   }
   auto flow_book_index_(L,I,O,T,B)(
-    L      line,
-    return ref I  book_idx_tmp,
-    return ref O  an_object,
+               L  line,
+               O  an_object,
+               I  book_idx_tmp,
     return ref T  obj_type_status,
-    B             opt_action,
+               B  opt_action,
   ) {
     debug(asserts) {
       static assert(is(typeof(line)            == char[]));
@@ -3771,11 +3775,12 @@ template DocReformDocAbstraction() {
         }
       }
     }
+    return an_object;
   }
-  auto flow_heading_found_(L,X,H,R,T)(
-    L     line,
-    X     _make_unmarked_headings,
-    return ref H heading_match_str,
+  auto flow_heading_found_(L,H,X,R,T)(
+               L line,
+               H heading_match_str,
+               X _make_unmarked_headings,
     return ref R heading_match_rgx,
     return ref T obj_type_status
   ) {
@@ -3858,6 +3863,7 @@ template DocReformDocAbstraction() {
       }
       obj_type_status["make_headings"] = State.on;
     }
+    return heading_match_str;
   }
   auto flow_heading_make_set_(L,C,R,T)(
                L line,
@@ -3923,8 +3929,8 @@ template DocReformDocAbstraction() {
   }
   auto flow_heading_matched_(L,C,O,K,Lv,Lc,T,CMM)(
                L   line,
+               O   an_object,
     return ref C   line_occur,
-    return ref O   an_object,
     return ref K   an_object_key,
     return ref Lv  lv,
     return ref Lc  collapsed_lev,
@@ -4074,10 +4080,11 @@ template DocReformDocAbstraction() {
         writeln(line.strip);
       }
     }
+    return an_object;
   }
-  void flow_para_match_(L,O,K,I,B,T,C)(
+  auto flow_para_match_(L,O,K,I,B,T,C)(
                L  line,
-    return ref O  an_object,
+               O  an_object,
     return ref K  an_object_key,
     return ref I  indent,
     return ref B  bullet,
@@ -4119,7 +4126,7 @@ template DocReformDocAbstraction() {
         debug(paraindenthang) {
           writeln(line);
         }
-        indent=[
+        indent = [
           "hang_position" : (m["hang"]).to!int,
           "base_position" : (m["indent"]).to!int,
         ];
@@ -4127,7 +4134,7 @@ template DocReformDocAbstraction() {
         debug(parabulletindent) {
           writeln(line);
         }
-        indent=[
+        indent = [
           "hang_position" : (m["indent"]).to!int,
           "base_position" : (m["indent"]).to!int,
         ];
@@ -4135,6 +4142,7 @@ template DocReformDocAbstraction() {
       }
       ++line_occur["para"];
     }
+    return an_object;
   }
   auto font_faces_line(T)(
     T  textline,
@@ -5430,7 +5438,7 @@ template DocReformDocAbstraction() {
   }
   struct BookIndexReportIndent {
     int mkn, skn;
-    auto bookindex_report_indented(BI)(
+    void bookindex_report_indented(BI)(
       BI bookindex_unordered_hashes
     ) {
       debug(asserts) {
@@ -5461,7 +5469,7 @@ template DocReformDocAbstraction() {
     int  mkn, skn;
     static auto rgx = Rgx();
     static auto munge = ObjInlineMarkupMunge();
-    auto bookindex_write_section(BI)(
+    void bookindex_write_section(BI)(
       BI bookindex_unordered_hashes
     ) {
       auto mainkeys =
-- 
cgit v1.2.3