diff options
Diffstat (limited to 'src/doc_reform/meta/metadoc_from_src.d')
-rw-r--r-- | src/doc_reform/meta/metadoc_from_src.d | 377 |
1 files changed, 189 insertions, 188 deletions
diff --git a/src/doc_reform/meta/metadoc_from_src.d b/src/doc_reform/meta/metadoc_from_src.d index 620f884..da8949e 100644 --- a/src/doc_reform/meta/metadoc_from_src.d +++ b/src/doc_reform/meta/metadoc_from_src.d @@ -54,7 +54,7 @@ +/ module doc_reform.meta.metadoc_from_src; template docAbstraction() { - /+ ↓ abstraction imports +/ + /+ ↓ abstraction imports +/ import std.algorithm, std.container, @@ -67,11 +67,11 @@ template docAbstraction() { doc_reform.meta.rgx, doc_reform.meta.metadoc_object_setter, doc_reform.meta.rgx; - /+ ↓ abstraction mixins +/ + /+ ↓ abstraction mixins +/ mixin ObjectSetter; mixin InternalMarkup; mixin spineRgxIn; - /+ ↓ abstraction struct init +/ + /+ ↓ abstraction struct init +/ @safe static auto eN() { struct _e { enum bi { @@ -436,7 +436,88 @@ template docAbstraction() { } return tag_assoc; } - /+ ↓ abstract marked up document +/ + struct retStruct_txt_by_line_common_reset { + int[string] line_occur; + string[string] this_object; + uint[string] pith; + } + struct retStruct_txt_by_line_block_start { + uint[string] pith; + uint[string] dochas; + string[string] object_number_poem; + } + struct retStruct_txt_by_line_block_generic { + uint[string] pith; + string[string] this_object; + } + struct retStruct_txt_by_line_block_poem { + int cntr; + uint[string] pith; + string[string] this_object; + } + struct retStruct_txt_by_line_block_biblio { + uint[string] pith; + int bib_entry; + string biblio_entry_str_json; + string[] biblio_arr_json; + } + struct retStruct_flow_book_index { + string[string] this_object; + uint[string] pith; + string book_idx_tmp; + } + struct retStruct_flow_heading_found { + string[string] heading_match_str; + Regex!(char)[string] heading_match_rgx; + uint[string] pith; + } + struct retStruct_flow_heading_make_set { + char[] line; + uint[string] pith; + string[string] this_object; + } + struct retStruct_flow_para_match { + uint[string] pith; + string[string] this_object; + string this_object_key; + int[string] indent; + bool bullet; + int[string] line_occur; + } + struct retStruct_flow_table_array_munge { + ObjGenericComposite table_object; + string[][] table_array; + } + struct retStruct_flow_table_of_contents_gather_headings { + ObjGenericComposite[] the_document_toc_section; + string[][string] lev4_subtoc; + } + struct retStruct_flow_bibliography { + JSONValue[] biblio_sorted; + JSONValue[] bib_arr_json; + string[] biblio_unsorted_incomplete; + } + struct retStruct_flow_table_closed_make_special_notation_table { + string[string] this_object; + ObjGenericComposite[] the_document_body_section; + OCNset obj_cite_digits; + ObjGenericComposite _comp_obj_heading; + int cntr; + uint[string] pith; + } + struct retStruct_flow_block_flag_line_empty { + string[string] this_object; + ObjGenericComposite[] the_document_body_section; + string[][string][string] bookindex_unordered_hashes; + OCNset obj_cite_digits; + ObjGenericComposite comp_obj_heading; + int cntr; + uint[string] pith; + } + struct retStruct_flow_table_substantive_munge { + ObjGenericComposite table_object; + string table_substantive; + } @system auto docAbstraction(CMM,Opt,Mf) ( char[][] markup_sourcefile_content, CMM conf_make_meta, @@ -445,7 +526,7 @@ template docAbstraction() { bool _new_doc ) { static auto rgx = RgxI(); - /+ ↓ abstraction init +/ + /+ ↓ abstraction init +/ scope(success) { } scope(failure) { @@ -465,9 +546,6 @@ template docAbstraction() { reset_note_numbers = true; lev_anchor_tag = ""; anchor_tag = ""; - // dom_structure_collapsed_tags_status = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; - // dom_structure_markedup_tags_status_buffer = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; - // dom_structure_collapsed_tags_status_buffer = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; } mixin spineNode; auto node_para_int_ = node_metadata_para_int; @@ -589,7 +667,7 @@ template docAbstraction() { string[][string] lev4_subtoc; string[][string] segnames = ["html": ["toc"], "epub": ["toc"]]; int cnt1 = 1; int cnt2 = 1; int cnt3 = 1; - /+ abstraction init ↑ +/ + /+ abstraction init ↑ +/ enum Substitute { match, markup, } debug (substitutions) { writeln(__LINE__, ":", __FILE__, ": DEBUG substitutions:"); @@ -630,8 +708,9 @@ template docAbstraction() { } _loopMarkupSrcByLineStruct ret; srcDocLoopLineByLine_: - foreach (line; markup_sourcefile_content) { /+ ↓ markup document/text line by line +/ - // "line" variable can be empty but should never be null + foreach (line; markup_sourcefile_content) { + /+ ↓ markup document/text line by line +/ + // "line" variable can be empty but should never be null /+ scope +/ scope(exit) { } scope(failure) { @@ -659,9 +738,10 @@ template docAbstraction() { pith = _get.pith; } continue; - } else if (!matchFirst(line, rgx.skip_from_regular_parse)) { /+ object other than "code block" object +/ - /+ (includes regular text paragraph, headings & blocks other than code) +/ - /+ heading, glossary, blurb, poem, group, block, quote, table +/ + } else if (!matchFirst(line, rgx.skip_from_regular_parse)) { + /+ object other than "code block" object +/ + /+ (includes regular text paragraph, headings & blocks other than code) +/ + /+ heading, glossary, blurb, poem, group, block, quote, table +/ line = line.inline_markup_faces; // by text line (rather than by text object), linebreaks in para problematic if (line.matchFirst(rgx.heading_biblio) || (pith["section"] == eN.sect.bibliography @@ -1012,14 +1092,16 @@ template docAbstraction() { } continue; } - } else { /+ not within a block group +/ + } else { + /+ not within a block group +/ assert( (pith["block_state"] == eN.blk_state.off) || (pith["block_state"] == eN.blk_state.closing), "block status: none or closed" ); if (line.matchFirst(rgx.block_open)) { - if (line.matchFirst(rgx.block_poem_open)) { /+ poem to verse exceptions! +/ + if (line.matchFirst(rgx.block_poem_open)) { + /+ poem to verse exceptions! +/ object_reset(an_object); processing.remove("verse"); object_number_poem["start"] = obj_cite_digits.object_number.to!string; @@ -1033,7 +1115,8 @@ template docAbstraction() { } } continue; - } else if (!line.empty) { /+ line not empty - non blocks (headings, paragraphs) & closed blocks +/ + } else if (!line.empty) { + /+ line not empty - non blocks (headings, paragraphs) & closed blocks +/ assert( !line.empty, "line tested, line not empty surely:\n \"" ~ line ~ "\"" @@ -1058,7 +1141,8 @@ template docAbstraction() { } if (line.matchFirst(rgx.book_index_item) || line.matchFirst(rgx.book_index_item_open) - || pith["section"] == eN.sect.book_index) { /+ book_index +/ + || pith["section"] == eN.sect.book_index) { + /+ book_index +/ { auto _get = line.flow_book_index_(an_object, book_idx_tmp, pith, opt_action); { @@ -1067,9 +1151,11 @@ template docAbstraction() { book_idx_tmp = _get.book_idx_tmp; } } - } else { /+ not book_index +/ + } else { + /+ not book_index +/ an_object_key = "body_nugget"; - if (auto m = line.matchFirst(rgx.comment)) { /+ matched comment +/ + if (auto m = line.matchFirst(rgx.comment)) { + /+ matched comment +/ debug(comment) { writeln(line); } @@ -1096,7 +1182,8 @@ template docAbstraction() { && pith["txt_is"] == eN.txt_is.off ) { /+ heading or para but neither flag nor line exists +/ if ((conf_make_meta.make.headings.length > 2) - && (pith["make_headings"] == eN.bi.off)) { /+ heading found +/ + && (pith["make_headings"] == eN.bi.off)) { + /+ heading found +/ { auto _get = line.flow_heading_found_(heading_match_str, conf_make_meta.make.headings, heading_match_rgx, pith); { @@ -1110,7 +1197,8 @@ template docAbstraction() { && (line_occur["para"] == eN.bi.off && line_occur["heading"] == eN.bi.off) && pith["txt_is"] == eN.txt_is.off - ) { /+ heading make set +/ + ) { + /+ heading make set +/ { auto _get = line.flow_heading_make_set_(line_occur, heading_match_rgx, pith); { @@ -1126,7 +1214,8 @@ template docAbstraction() { - should be incorporated in composite objects - should happen before endnote links set (they need to be moved down?) +/ - if (line.matchFirst(rgx.headings)) { /+ heading match +/ + if (line.matchFirst(rgx.headings)) { + /+ heading match +/ line = line._doc_header_and_make_substitutions_(conf_make_meta); { auto _get = line.flow_heading_matched_( @@ -1143,7 +1232,8 @@ template docAbstraction() { pith = _get.pith; } } - } else if (line_occur["para"] == eN.bi.off) { /+ para match +/ + } else if (line_occur["para"] == eN.bi.off) { + /+ para match +/ an_object_key = "body_nugget"; line = line ._doc_header_and_make_substitutions_(conf_make_meta) @@ -1160,13 +1250,15 @@ template docAbstraction() { } } } - } else if (line_occur["heading"] > eN.bi.off) { /+ heading +/ + } else if (line_occur["heading"] > eN.bi.off) { + /+ heading +/ debug(heading) { writeln(line); } an_object[an_object_key] ~= line ~= "\n"; ++line_occur["heading"]; - } else if (line_occur["para"] > eN.bi.off) { /+ paragraph +/ + } else if (line_occur["para"] > eN.bi.off) { + /+ paragraph +/ debug(para) { writeln(an_object_key, "-> ", line); } @@ -1177,7 +1269,8 @@ template docAbstraction() { ++line_occur["para"]; } } - } else if (pith["block_state"] == eN.blk_state.closing) { /+ line empty, with blocks flag +/ + } else if (pith["block_state"] == eN.blk_state.closing) { + /+ line empty, with blocks flag +/ { auto _get = line.flow_block_flag_line_empty_( an_object, @@ -1202,7 +1295,8 @@ template docAbstraction() { pith = _get.pith; } } - } else { /+ line.empty, post contents, empty variables: +/ + } else { + /+ line.empty, post contents, empty variables: +/ assert( line.empty, "\nline should be empty:\n \"" @@ -1219,7 +1313,8 @@ template docAbstraction() { } if (pith["txt_is"] == eN.txt_is.heading && line_occur["heading"] > eN.bi.off - ) { /+ heading object (current line empty) +/ + ) { + /+ heading object (current line empty) +/ obj_cite_digits = (an_object["lev_markup_number"].to!int == 0) ? ocn_emit(eN.ocn.reset) : ocn_emit(pith["ocn"]); @@ -1245,7 +1340,8 @@ template docAbstraction() { lev_anchor_tag = anchor_tag; tag_assoc[anchor_tag]["seg_lv4"] = tag_in_seg["seg_lv4"]; tag_assoc[anchor_tag]["seg_lv1to4"] = tag_in_seg["seg_lv1to4"]; - if (lv0to3_tags.length > 0) { /+ names used for html markup segments 1 to 4 (rather than epub which has separate segments for A to D) +/ + if (lv0to3_tags.length > 0) { + /+ names used for html markup segments 1 to 4 (rather than epub which has separate segments for A to D) +/ foreach (lv0_to_lv3_html_tag; lv0to3_tags) { tag_assoc[lv0_to_lv3_html_tag]["seg_lv4"] = anchor_tag; } @@ -1260,7 +1356,8 @@ template docAbstraction() { tag_assoc[anchor_tag]["seg_lv1to4"] = tag_in_seg["seg_lv1to4"]; } else if (an_object["lev_markup_number"].to!int < 4) { string segn; - switch (an_object["lev_markup_number"].to!int) { /+ names used for epub markup segments A to D +/ + switch (an_object["lev_markup_number"].to!int) { + /+ names used for epub markup segments A to D +/ case 0: segn = "_the_title"; goto default; @@ -1416,9 +1513,9 @@ template docAbstraction() { ++cntr; // } else { // could be useful to test line variable should be empty and never null } - } // close else for line empty - } // close else for not the above - } // close after non code, other blocks or regular text + } // close else for line empty + } // close else for not the above + } // close after non code, other blocks or regular text /+ unless (the_document_body_section.length == 0) ? +/ if (the_document_body_section.length > 0) { if (((the_document_body_section[$-1].metainfo.is_a == "para") @@ -1432,7 +1529,8 @@ template docAbstraction() { && (the_document_body_section[$-1].metainfo.heading_lev_markup < 5)) { pith["section"] = eN.sect.unset; } - if (the_document_body_section[$-1].metainfo.is_a == "verse") { /+ scan for endnotes for whole poem (each verse in poem) +/ + if (the_document_body_section[$-1].metainfo.is_a == "verse") { + /+ scan for endnotes for whole poem (each verse in poem) +/ foreach (i; previous_length .. the_document_body_section.length) { if (the_document_body_section[i].metainfo.is_a == "verse") { if ((the_document_body_section[i].text).match( @@ -1446,7 +1544,8 @@ template docAbstraction() { } } } - } else { /+ scan object for endnotes +/ + } else { + /+ scan object for endnotes +/ previous_length = the_document_body_section.length.to!int; if ((the_document_body_section[$-1].text).match( rgx.inline_notes_al_all_note @@ -2577,12 +2676,12 @@ template docAbstraction() { } } } - /+ TODO - - note create/insert heading object sole purpose eof close all open tags - sort out: - - obj.metainfo.dom_structure_markedup_tags_status = dom_structure_markedup_tags_status; - - obj.metainfo.dom_structure_collapsed_tags_status = dom_structure_collapsed_tags_status; - +/ + /+ TODO + - note create/insert heading object sole purpose eof close all open tags + sort out: + - obj.metainfo.dom_structure_markedup_tags_status = dom_structure_markedup_tags_status; + - obj.metainfo.dom_structure_collapsed_tags_status = dom_structure_collapsed_tags_status; + +/ comp_obj_heading_ = comp_obj_heading_.init; comp_obj_heading_.metainfo.is_of_part = "empty"; comp_obj_heading_.metainfo.is_of_section = "empty"; @@ -2744,18 +2843,18 @@ template docAbstraction() { @safe auto doc_has() { return DocHas_(); } - struct retStruct { + struct retStruct_docAbstraction { ObjGenericComposite[][string] document_the; DocHas_ doc_has; } - retStruct ret; + retStruct_docAbstraction ret; { ret.document_the = document_the; ret.doc_has = doc_has; } return ret; } /+ ← closed: abstract doc source +/ - @system auto txt_by_line_common_reset_()( + @system retStruct_txt_by_line_common_reset txt_by_line_common_reset_()( int[string] line_occur, string[string] an_object, uint[string] pith, @@ -2764,12 +2863,7 @@ template docAbstraction() { line_occur["para"] = eN.bi.off; pith["txt_is"] = eN.txt_is.off; an_object = an_object.object_reset; - struct retStruct { - int[string] line_occur; - string[string] this_object; - uint[string] pith; - } - retStruct ret; + retStruct_txt_by_line_common_reset ret; { ret.line_occur = line_occur; ret.this_object = an_object; @@ -2777,7 +2871,7 @@ template docAbstraction() { } return ret; } - @safe auto txt_by_line_block_start()( + @safe retStruct_txt_by_line_block_start txt_by_line_block_start()( char[] line, uint[string] pith, uint[string] dochas, @@ -2962,12 +3056,7 @@ template docAbstraction() { pith["block_state"] = eN.blk_state.on; pith["block_delim"] = eN.blk_delim.tic; } - struct retStruct { - uint[string] pith; - uint[string] dochas; - string[string] object_number_poem; - } - retStruct ret; + retStruct_txt_by_line_block_start ret; { ret.pith = pith; ret.dochas = dochas; @@ -2975,7 +3064,7 @@ template docAbstraction() { } return ret; } - @safe auto txt_by_line_block_quote()( + @safe retStruct_txt_by_line_block_generic txt_by_line_block_quote()( char[] line, string[string] an_object, uint[string] pith, @@ -3014,18 +3103,14 @@ template docAbstraction() { } } } - struct retStruct { - uint[string] pith; - string[string] this_object; - } - retStruct ret; + retStruct_txt_by_line_block_generic ret; { ret.pith = pith; ret.this_object = an_object; } return ret; } - @safe auto txt_by_line_block_group()( + @safe retStruct_txt_by_line_block_generic txt_by_line_block_group()( char[] line, string[string] an_object, uint[string] pith, @@ -3064,18 +3149,14 @@ template docAbstraction() { } } } - struct retStruct { - uint[string] pith; - string[string] this_object; - } - retStruct ret; + retStruct_txt_by_line_block_generic ret; { ret.pith = pith; ret.this_object = an_object; } return ret; } - @safe auto txt_by_line_block_block()( + @safe retStruct_txt_by_line_block_generic txt_by_line_block_block()( char[] line, string[string] an_object, uint[string] pith, @@ -3114,18 +3195,14 @@ template docAbstraction() { } } } - struct retStruct { - uint[string] pith; - string[string] this_object; - } - retStruct ret; + retStruct_txt_by_line_block_generic ret; { ret.pith = pith; ret.this_object = an_object; } return ret; } - @safe auto txt_by_line_block_poem(CMM)( + @safe retStruct_txt_by_line_block_poem txt_by_line_block_poem(CMM)( char[] line, string[string] an_object, uint[string] pith, @@ -3367,12 +3444,7 @@ template docAbstraction() { } } } - struct retStruct { - int cntr; - uint[string] pith; - string[string] this_object; - } - retStruct ret; + retStruct_txt_by_line_block_poem ret; { ret.cntr = cntr; ret.pith = pith; @@ -3380,7 +3452,7 @@ template docAbstraction() { } return ret; } - @safe auto txt_by_line_block_code()( + @safe retStruct_txt_by_line_block_generic txt_by_line_block_code()( char[] line, string[string] an_object, uint[string] pith, @@ -3423,11 +3495,7 @@ template docAbstraction() { } } } - struct retStruct { - uint[string] pith; - string[string] this_object; - } - retStruct ret; + retStruct_txt_by_line_block_generic ret; { ret.pith = pith; ret.this_object = an_object; @@ -3502,12 +3570,12 @@ template docAbstraction() { } } } - struct retStruct { + struct retStruct_txt_by_line_block_table { CMM conf_make_meta; uint[string] pith; string[string] this_object; } - retStruct ret; + retStruct_txt_by_line_block_table ret; { ret.conf_make_meta = conf_make_meta, ret.pith = pith; @@ -3515,7 +3583,7 @@ template docAbstraction() { } return ret; } - @system auto txt_by_line_block_biblio( + @system retStruct_txt_by_line_block_biblio txt_by_line_block_biblio( char[] line, uint[string] pith, int bib_entry, @@ -3653,13 +3721,7 @@ template docAbstraction() { } header_tag_value = ""; } - struct retStruct { - uint[string] pith; - int bib_entry; - string biblio_entry_str_json; - string[] biblio_arr_json; - } - retStruct ret; + retStruct_txt_by_line_block_biblio ret; { ret.pith = pith; ret.bib_entry = bib_entry; @@ -3771,7 +3833,7 @@ template docAbstraction() { } return line; } - @system auto flow_table_closed_make_special_notation_table_(CMM)( + @system retStruct_flow_table_closed_make_special_notation_table flow_table_closed_make_special_notation_table_(CMM)( char[] line, string[string] an_object, ObjGenericComposite[] the_document_body_section, @@ -3816,15 +3878,7 @@ template docAbstraction() { object_reset(an_object); processing.remove("verse"); ++cntr; - struct retStruct { - string[string] this_object; - ObjGenericComposite[] the_document_body_section; - OCNset obj_cite_digits; - ObjGenericComposite _comp_obj_heading; - int cntr; - uint[string] pith; - } - retStruct ret; + retStruct_flow_table_closed_make_special_notation_table ret; { ret.this_object = an_object; ret.the_document_body_section = the_document_body_section; @@ -3835,7 +3889,7 @@ template docAbstraction() { } return ret; } - @system auto flow_block_flag_line_empty_(B,CMM,Ts)( + @system retStruct_flow_block_flag_line_empty flow_block_flag_line_empty_(B,CMM,Ts)( char[] line, string[string] an_object, B bookindex_extract_hash, @@ -4156,16 +4210,7 @@ template docAbstraction() { ++cntr; } } - struct retStruct { - string[string] this_object; - ObjGenericComposite[] the_document_body_section; - string[][string][string] bookindex_unordered_hashes; - OCNset obj_cite_digits; - ObjGenericComposite comp_obj_heading; - int cntr; - uint[string] pith; - } - retStruct ret; + retStruct_flow_block_flag_line_empty ret; { ret.this_object = an_object; ret.the_document_body_section = the_document_body_section; @@ -4177,7 +4222,7 @@ template docAbstraction() { } return ret; } - @system auto flow_book_index_(B)( + @system retStruct_flow_book_index flow_book_index_(B)( char[] line, string[string] an_object, string book_idx_tmp, @@ -4225,12 +4270,7 @@ template docAbstraction() { } } } - struct retStruct { - string[string] this_object; - uint[string] pith; - string book_idx_tmp; - } - retStruct ret; + retStruct_flow_book_index ret; { ret.this_object = an_object; ret.pith = pith; @@ -4238,7 +4278,7 @@ template docAbstraction() { } return ret; } - @safe auto flow_heading_found_()( + @safe retStruct_flow_heading_found flow_heading_found_()( char[] line, string[string] heading_match_str, string[] _make_unmarked_headings, @@ -4317,12 +4357,7 @@ template docAbstraction() { } pith["make_headings"] = eN.bi.on; } - struct retStruct { - string[string] heading_match_str; - Regex!(char)[string] heading_match_rgx; - uint[string] pith; - } - retStruct ret; + retStruct_flow_heading_found ret; { ret.heading_match_str = heading_match_str; ret.heading_match_rgx = heading_match_rgx; @@ -4330,7 +4365,7 @@ template docAbstraction() { } return ret; } - @safe auto flow_heading_make_set_()( + @safe retStruct_flow_heading_make_set flow_heading_make_set_()( char[] line, int[string] line_occur, return ref Regex!(char)[string] heading_match_rgx, @@ -4384,12 +4419,7 @@ template docAbstraction() { } } } - struct retStruct { - char[] line; - uint[string] pith; - string[string] this_object; - } - retStruct ret; + retStruct_flow_heading_make_set ret; { ret.line = line; ret.pith = pith; @@ -4567,7 +4597,7 @@ template docAbstraction() { writeln(line.strip); } } - struct retStruct { + struct retStruct_flow_heading_matched { string[string] this_object; int[string] line_occur; string an_object_key; @@ -4576,7 +4606,7 @@ template docAbstraction() { uint[string] pith; CMM conf_make_meta; } - retStruct ret; + retStruct_flow_heading_matched ret; { ret.this_object = an_object; ret.line_occur = line_occur; @@ -4588,7 +4618,7 @@ template docAbstraction() { } return ret; } - @safe auto flow_para_match_()( + @safe retStruct_flow_para_match flow_para_match_()( char[] line, string[string] an_object, string an_object_key, @@ -4639,15 +4669,7 @@ template docAbstraction() { } ++line_occur["para"]; } - struct retStruct { - uint[string] pith; - string[string] this_object; - string this_object_key; - int[string] indent; - bool bullet; - int[string] line_occur; - } - retStruct ret; + retStruct_flow_para_match ret; { ret.pith = pith; ret.this_object = an_object; @@ -4705,7 +4727,7 @@ template docAbstraction() { } return table_object; } - @safe auto flow_table_array_munge()( + @safe retStruct_flow_table_array_munge flow_table_array_munge()( ObjGenericComposite table_object, string[][] table_array, ) { @@ -4825,18 +4847,14 @@ template docAbstraction() { _table_substantive); } table_object.text = _table_substantive; - struct retStruct { - ObjGenericComposite table_object; - string[][] table_array; - } - retStruct ret; + retStruct_flow_table_array_munge ret; { ret.table_object = table_object; ret.table_array = table_array; } return ret; } - @system auto flow_table_substantive_munge()( + @system retStruct_flow_table_substantive_munge flow_table_substantive_munge()( ObjGenericComposite table_object, string table_substantive, ) { @@ -4856,18 +4874,14 @@ template docAbstraction() { _table_array = _get.table_array; // what do you do with this? how is this passed down? } } - struct retStruct { - ObjGenericComposite table_object; - string table_substantive; - } - retStruct ret; + retStruct_flow_table_substantive_munge ret; { ret.table_object = table_object; ret.table_substantive = table_substantive; // has anything been changed here? } return ret; } - @system auto flow_table_substantive_munge_special()( + @system retStruct_flow_table_substantive_munge flow_table_substantive_munge_special()( ObjGenericComposite table_object, string table_substantive, ) { @@ -4887,19 +4901,15 @@ template docAbstraction() { _table_array = _get.table_array; } } - struct retStruct { - ObjGenericComposite table_object; - string table_substantive; - } - retStruct ret; + retStruct_flow_table_substantive_munge ret; { ret.table_object = table_object; ret.table_substantive = table_substantive; } return ret; } - /+ abstraction functions ↑ +/ - /+ ↓ abstraction function emitters +/ + /+ abstraction functions ↑ +/ + /+ ↓ abstraction function emitters +/ @safe pure struct OCNemitter { int ocn_digit, ocn_object_number, ocn_on_, ocn_off_, ocn_bkidx, ocn_bkidx_; string object_identifier; @@ -5311,7 +5321,7 @@ template docAbstraction() { heading_toc_ = (m.post).replaceAll(rgx.inline_notes_curly_gen, ""); return heading_toc_; }; - @safe auto flow_table_of_contents_gather_headings(CMM)( // + @safe retStruct_flow_table_of_contents_gather_headings flow_table_of_contents_gather_headings(CMM)( // string[string] obj_, CMM conf_make_meta, string[string] tag_in_seg, @@ -5394,11 +5404,7 @@ template docAbstraction() { default: break; } - struct retStruct { - ObjGenericComposite[] the_document_toc_section; - string[][string] lev4_subtoc; - } - retStruct ret; + retStruct_flow_table_of_contents_gather_headings ret; { ret.the_document_toc_section = the_document_toc_section; ret.lev4_subtoc = lev4_subtoc; @@ -6276,7 +6282,7 @@ template docAbstraction() { } /+ +/ struct Bibliography { - @system public auto flow_bibliography_()( + @system public retStruct_flow_bibliography flow_bibliography_()( string[] biblio_unsorted_incomplete, JSONValue[] bib_arr_json ) { @@ -6299,12 +6305,7 @@ template docAbstraction() { cntr++; } } - struct retStruct { - JSONValue[] biblio_sorted; - JSONValue[] bib_arr_json; - string[] biblio_unsorted_incomplete; - } - retStruct ret; + retStruct_flow_bibliography ret; { ret.biblio_sorted = biblio_sorted__; ret.bib_arr_json = bib_arr_json; @@ -7194,8 +7195,8 @@ template docAbstraction() { break; } } - /+ abstraction functions assertions ↑ +/ -} /+ ← closed: template docAbstraction +/ + /+ abstraction functions assertions ↑ +/ +} template docSectKeysSeq() { @safe auto docSectKeysSeq(string[][string] document_section_keys_sequenced) { struct doc_sect_keys_seq { |