diff options
Diffstat (limited to 'org/ao_abstract_doc_source.org')
-rw-r--r-- | org/ao_abstract_doc_source.org | 640 |
1 files changed, 453 insertions, 187 deletions
diff --git a/org/ao_abstract_doc_source.org b/org/ao_abstract_doc_source.org index 2100faf..a7d3d84 100644 --- a/org/ao_abstract_doc_source.org +++ b/org/ao_abstract_doc_source.org @@ -40,9 +40,9 @@ template SiSUdocAbstraction() { ) { debug(asserts){ static assert(is(typeof(markup_sourcefile_content) == char[][])); - static assert(is(typeof(dochead_make_aa) == string[string][string])); - static assert(is(typeof(dochead_meta_aa) == string[string][string])); - static assert(is(typeof(opt_action_bool) == bool[string])); + static assert(is(typeof(dochead_make_aa) == string[string][string])); + static assert(is(typeof(dochead_meta_aa) == string[string][string])); + static assert(is(typeof(opt_action_bool) == bool[string])); } /+ ↓ abstraction init +/ <<abs_init_rest>> @@ -2016,7 +2016,10 @@ functions used in document abstraction #+name: abs_functions_object_reset #+BEGIN_SRC d -auto object_reset(ref string[string] an_object) { +auto object_reset(O)(ref O an_object) { + debug(asserts){ + static assert(is(typeof(an_object) == string[string])); + } an_object.remove("body_nugget"); an_object.remove("substantive"); an_object.remove("is"); @@ -2029,11 +2032,16 @@ auto object_reset(ref string[string] an_object) { #+name: abs_functions_header_set_common #+BEGIN_SRC d -auto _common_reset_( - ref int[string] line_occur, - ref string[string] an_object, - ref int[string] type +auto _common_reset_(L,O,T)( + ref L line_occur, + ref O an_object, + ref T type ) { + debug(asserts){ + static assert(is(typeof(line_occur) == int[string])); + static assert(is(typeof(an_object) == string[string])); + static assert(is(typeof(type) == int[string])); + } line_occur["heading"] = State.off; line_occur["para"] = State.off; type["heading"] = State.off; @@ -2046,10 +2054,14 @@ auto _common_reset_( #+name: abs_functions_ocn_status #+BEGIN_SRC d -void _check_ocn_status_( - char[] line, - ref int[string] type +void _check_ocn_status_(L,T)( + L line, + ref T type ) { + debug(asserts){ + static assert(is(typeof(line) == char[])); + static assert(is(typeof(type) == int[string])); + } if ((!line.empty) && (type["ocn_status_multi_obj"] == TriState.off)) { /+ not multi-line object, check whether obj_cite_number is on or turned off +/ if (matchFirst(line, rgx.obj_cite_number_block_marks)) { @@ -2098,11 +2110,16 @@ void _check_ocn_status_( #+name: abs_functions_block #+BEGIN_SRC d -void _start_block_( - char[] line, - ref int[string] type, - string[string] obj_cite_number_poem +void _start_block_(L,T,N)( + L line, + ref T type, + N obj_cite_number_poem ) { + debug(asserts){ + static assert(is(typeof(line) == char[])); + static assert(is(typeof(type) == int[string])); + static assert(is(typeof(obj_cite_number_poem) == string[string])); + } #+END_SRC ***** block (various) curly open :curly: @@ -2267,11 +2284,16 @@ void _start_block_( #+name: abs_functions_block_code #+BEGIN_SRC d -void _code_block_( - char[] line, - ref string[string] an_object, - ref int[string] type +void _code_block_(L,O,T)( + ref L line, + ref O an_object, + ref T type ) { + debug(asserts){ + static assert(is(typeof(line) == char[])); + static assert(is(typeof(an_object) == string[string])); + static assert(is(typeof(type) == int[string])); + } if (type["curly_code"] == TriState.on) { if (matchFirst(line, rgx.block_curly_code_close)) { debug(code) { // code (curly) close @@ -2309,7 +2331,10 @@ void _code_block_( #+name: abs_functions_block_biblio #+BEGIN_SRC d -final string biblio_tag_map(string abr) { +final string biblio_tag_map(A)(A abr) { + debug(asserts){ + static assert(is(typeof(abr) == string)); + } auto btm = [ "au" : "author_raw", "ed" : "editor_raw", @@ -2334,7 +2359,10 @@ final string biblio_tag_map(string abr) { #+name: none #+BEGIN_SRC d -final string biblio_tag_map_(string abr) { +final string biblio_tag_map_(A)(A abr) { + debug(asserts){ + static assert(is(typeof(abr) == string)); + } string name; switch (abr) { case "au": @@ -2518,14 +2546,22 @@ why extra object stuff only in poem/verse? #+name: abs_functions_block_poem #+BEGIN_SRC d -void _poem_block_( - char[] line, - ref string[string] an_object, - ref int[string] type, - ref int cntr, - string[string] obj_cite_number_poem, - string[string][string] dochead_make_aa, +void _poem_block_(L,O,T,C,N,Ma)( + L line, + ref O an_object, + ref T type, + ref C cntr, + N obj_cite_number_poem, + Ma dochead_make_aa, ) { + debug(asserts){ + static assert(is(typeof(line) == char[])); + static assert(is(typeof(an_object) == string[string])); + static assert(is(typeof(type) == int[string])); + static assert(is(typeof(cntr) == int)); + static assert(is(typeof(obj_cite_number_poem) == string[string])); + static assert(is(typeof(dochead_make_aa) == string[string][string])); + } if (type["curly_poem"] == TriState.on) { if (matchFirst(line, rgx.block_curly_poem_close)) { an_object[an_object_key]="verse"; // check that this is as you please @@ -2717,11 +2753,16 @@ void _poem_block_( #+name: abs_functions_block_group #+BEGIN_SRC d -void _group_block_( - char[] line, - ref string[string] an_object, - ref int[string] type +void _group_block_(L,O,T)( + ref L line, + ref O an_object, + ref T type ) { + debug(asserts){ + static assert(is(typeof(line) == char[])); + static assert(is(typeof(an_object) == string[string])); + static assert(is(typeof(type) == int[string])); + } if (type["curly_group"] == State.on) { if (matchFirst(line, rgx.block_curly_group_close)) { debug(group) { // group (curly) close @@ -2758,11 +2799,16 @@ void _group_block_( #+name: abs_functions_block_block #+BEGIN_SRC d -void _block_block_( - char[] line, - ref string[string] an_object, - ref int[string] type +void _block_block_(L,O,T)( + ref L line, + ref O an_object, + ref T type ) { + debug(asserts){ + static assert(is(typeof(line) == char[])); + static assert(is(typeof(an_object) == string[string])); + static assert(is(typeof(type) == int[string])); + } if (type["curly_block"] == TriState.on) { if (matchFirst(line, rgx.block_curly_block_close)) { debug(block) { // block (curly) close @@ -2799,11 +2845,16 @@ void _block_block_( #+name: abs_functions_block_quote #+BEGIN_SRC d -void _quote_block_( - char[] line, - ref string[string] an_object, - ref int[string] type +void _quote_block_(L,O,T)( + ref L line, + ref O an_object, + ref T type ) { + debug(asserts){ + static assert(is(typeof(line) == char[])); + static assert(is(typeof(an_object) == string[string])); + static assert(is(typeof(type) == int[string])); + } if (type["curly_quote"] == TriState.on) { if (matchFirst(line, rgx.block_curly_quote_close)) { debug(quote) { // quote (curly) close @@ -2840,11 +2891,16 @@ void _quote_block_( #+name: abs_functions_block_table #+BEGIN_SRC d -void _table_block_( - char[] line, - ref string[string] an_object, - ref int[string] type +void _table_block_(L,O,T)( + ref L line, + ref O an_object, + ref T type ) { + debug(asserts){ + static assert(is(typeof(line) == char[])); + static assert(is(typeof(an_object) == string[string])); + static assert(is(typeof(type) == int[string])); + } if (type["curly_table"] == TriState.on) { if (matchFirst(line, rgx.block_curly_table_close)) { debug(table) { // table (curly) close @@ -3107,13 +3163,20 @@ void _block_flag_line_empty_( #+name: abs_functions_book_index #+BEGIN_SRC d -auto _book_index_( - char[] line, - ref string book_idx_tmp, - ref string[string] an_object, - ref int[string] type, - bool[string] opt_action_bool, +auto _book_index_(L,I,O,T,B)( + L line, + ref I book_idx_tmp, + ref O an_object, + ref T type, + B opt_action_bool, ) { + debug(asserts){ + static assert(is(typeof(line) == char[])); + static assert(is(typeof(book_idx_tmp) == string)); + static assert(is(typeof(an_object) == string[string])); + static assert(is(typeof(type) == int[string])); + static assert(is(typeof(opt_action_bool) == bool[string])); + } if (auto m = match(line, rgx.book_index)) { /+ match book_index +/ debug(bookindexmatch) { // book index @@ -3163,13 +3226,20 @@ auto _book_index_( #+name: abs_functions_heading #+BEGIN_SRC d -auto _heading_found_( - char[] line, - string dochead_make_identify_unmarked_headings, - ref string[string] heading_match_str, - ref Regex!(char)[string] heading_match_rgx, - ref int[string] type +auto _heading_found_(L,X,H,R,T)( + L line, + X dochead_make_identify_unmarked_headings, + ref H heading_match_str, + ref R heading_match_rgx, + ref T type ) { + debug(asserts){ + static assert(is(typeof(line) == char[])); + static assert(is(typeof(dochead_make_identify_unmarked_headings) == string)); + static assert(is(typeof(heading_match_str) == string[string])); + static assert(is(typeof(heading_match_rgx) == Regex!(char)[string])); + static assert(is(typeof(type) == int[string])); + } if ((dochead_make_identify_unmarked_headings.length > 2) && (type["make_headings"] == State.off)) { /+ headings found +/ @@ -3253,12 +3323,18 @@ auto _heading_found_( #+name: abs_functions_heading #+BEGIN_SRC d -auto _heading_make_set_( - ref char[] line, - ref int[string] line_occur, - ref Regex!(char)[string] heading_match_rgx, - ref int[string] type +auto _heading_make_set_(L,C,R,T)( + L line, + C line_occur, + ref R heading_match_rgx, + ref T type ) { + debug(asserts){ + static assert(is(typeof(line) == char[])); + static assert(is(typeof(line_occur) == int[string])); + static assert(is(typeof(heading_match_rgx) == Regex!(char)[string])); + static assert(is(typeof(type) == int[string])); + } if ((type["make_headings"] == State.on) && ((line_occur["para"] == State.off) && (line_occur["heading"] == State.off)) @@ -3315,16 +3391,26 @@ auto _heading_make_set_( #+name: abs_functions_heading #+BEGIN_SRC d -auto _heading_matched_( - char[] line, - ref int[string] line_occur, - ref string[string] an_object, - ref string an_object_key, - ref int[string] lv, - ref int[string] collapsed_lev, - ref int[string] type, - ref string[string][string] dochead_meta_aa +auto _heading_matched_(L,C,O,K,Lv,Lc,T,Me)( + ref L line, + ref C line_occur, + ref O an_object, + ref K an_object_key, + ref Lv lv, + ref Lc collapsed_lev, + ref T type, + ref Me dochead_meta_aa, ) { + debug(asserts){ + static assert(is(typeof(line) == char[])); + static assert(is(typeof(line_occur) == int[string])); + static assert(is(typeof(an_object) == string[string])); + static assert(is(typeof(an_object_key) == string)); + static assert(is(typeof(lv) == int[string])); + static assert(is(typeof(collapsed_lev) == int[string])); + static assert(is(typeof(type) == int[string])); + static assert(is(typeof(dochead_meta_aa) == string[string][string])); + } if (auto m = match(line, rgx.heading)) { /+ heading match +/ type["heading"] = State.on; @@ -3464,15 +3550,24 @@ auto _heading_matched_( #+name: abs_functions_para #+BEGIN_SRC d -auto _para_match_( - char[] line, - ref string[string] an_object, - ref string an_object_key, - ref int[string] indent, - ref bool bullet, - ref int[string] type, - ref int[string] line_occur, +auto _para_match_(L,O,K,I,B,T,C)( + ref L line, + ref O an_object, + ref K an_object_key, + ref I indent, + ref B bullet, + ref T type, + ref C line_occur, ) { + debug(asserts){ + static assert(is(typeof(line) == char[])); + static assert(is(typeof(an_object) == string[string])); + static assert(is(typeof(an_object_key) == string)); + static assert(is(typeof(indent) == int[string])); + static assert(is(typeof(bullet) == bool)); + static assert(is(typeof(type) == int[string])); + static assert(is(typeof(line_occur) == int[string])); + } if (line_occur["para"] == State.off) { /+ para matches +/ type["para"] = State.on; @@ -3559,7 +3654,10 @@ struct ObjInlineMarkupMunge { n_foot_sp_asterisk = 0; n_foot_sp_plus = 0; } - string url_links(string obj_txt_in) { + string url_links(Ot)(Ot obj_txt_in) { + debug(asserts){ + static assert(is(typeof(obj_txt_in) == string)); + } /+ url matched +/ if (auto m = matchAll(obj_txt_in, rgx.inline_url)) { /+ link: naked url: http://url +/ @@ -3604,7 +3702,10 @@ struct ObjInlineMarkupMunge { } return obj_txt_in; } - string footnotes_endnotes_markup_and_number_or_stars(string obj_txt_in) { + string footnotes_endnotes_markup_and_number_or_stars(Ot)(Ot obj_txt_in) { // here endnotes are marked up + debug(asserts){ + static assert(is(typeof(obj_txt_in) == string)); + } /+ endnotes (regular) +/ obj_txt_in = replaceAll( @@ -3679,8 +3780,12 @@ struct ObjInlineMarkupMunge { } return obj_txt_out; } - string para(string obj_txt_in) - in { } + string para(Ot)(Ot obj_txt_in) + in { + debug(asserts){ + static assert(is(typeof(obj_txt_in) == string)); + } + } body { auto rgx = Rgx(); obj_txt["munge"]=obj_txt_in; @@ -3695,8 +3800,12 @@ struct ObjInlineMarkupMunge { } return obj_txt["munge"]; } - string heading(string obj_txt_in) - in { } + string heading(Ot)(Ot obj_txt_in) + in { + debug(asserts){ + static assert(is(typeof(obj_txt_in) == string)); + } + } body { auto rgx = Rgx(); obj_txt["munge"]=obj_txt_in; @@ -3732,8 +3841,12 @@ struct ObjInlineMarkupMunge { } invariant() { } - string block(string obj_txt_in) - in { } + string block(Ot)(Ot obj_txt_in) + in { + debug(asserts){ + static assert(is(typeof(obj_txt_in) == string)); + } + } body { obj_txt["munge"]=obj_txt_in; obj_txt["munge"]=object_notes_(obj_txt["munge"]); @@ -3741,8 +3854,12 @@ struct ObjInlineMarkupMunge { } invariant() { } - string verse(string obj_txt_in) - in { } + string verse(Ot)(Ot obj_txt_in) + in { + debug(asserts){ + static assert(is(typeof(obj_txt_in) == string)); + } + } body { obj_txt["munge"]=obj_txt_in; obj_txt["munge"]=object_notes_(obj_txt["munge"]); @@ -3750,24 +3867,36 @@ struct ObjInlineMarkupMunge { } invariant() { } - string quote(string obj_txt_in) - in { } + string quote(Ot)(Ot obj_txt_in) + in { + debug(asserts){ + static assert(is(typeof(obj_txt_in) == string)); + } + } body { obj_txt["munge"]=obj_txt_in; return obj_txt["munge"]; } invariant() { } - string table(string obj_txt_in) - in { } + string table(Ot)(Ot obj_txt_in) + in { + debug(asserts){ + static assert(is(typeof(obj_txt_in) == string)); + } + } body { obj_txt["munge"]=obj_txt_in; return obj_txt["munge"]; } invariant() { } - string comment(string obj_txt_in) - in { } + string comment(Ot)(Ot obj_txt_in) + in { + debug(asserts){ + static assert(is(typeof(obj_txt_in) == string)); + } + } body { obj_txt["munge"]=obj_txt_in; return obj_txt["munge"]; @@ -3791,12 +3920,18 @@ struct ObjInlineMarkup { #+name: ao_emitters_obj_inline_markup_and_anchor_tags #+BEGIN_SRC d - auto obj_inline_markup_and_anchor_tags( - string[string] obj_, - string obj_key_, - string[string][string] dochead_make_aa + auto obj_inline_markup_and_anchor_tags(O,K,Ma)( + O obj_, + K obj_key_, + Ma dochead_make_aa ) - in { } + in { + debug(asserts){ + static assert(is(typeof(obj_) == string[string])); + static assert(is(typeof(obj_key_) == string)); + static assert(is(typeof(dochead_make_aa) == string[string][string])); + } + } body { obj_txt["munge"]=obj_[obj_key_].dup; obj_txt["munge"]=(match(obj_["is"], ctRegex!(`verse|code`))) @@ -3862,9 +3997,12 @@ struct ObjInlineMarkup { #+name: ao_emitters_obj_inline_markup_table_of_contents #+BEGIN_SRC d - auto _clean_heading_toc_( - char[] heading_toc_, + auto _clean_heading_toc_(Toc)( + Toc heading_toc_, ) { + debug(asserts){ + static assert(is(typeof(heading_toc_) == char[])); + } auto m = matchFirst(cast(char[]) heading_toc_, rgx.heading); heading_toc_ = replaceAll( @@ -3874,15 +4012,24 @@ struct ObjInlineMarkup { ); return heading_toc_; }; - auto table_of_contents_gather_headings( - string[string] obj_, - string[string][string] dochead_make_aa, - string segment_anchor_tag_that_object_belongs_to, - string _anchor_tag, - ref string[][string] lev4_subtoc, - ObjGenericComposite[][string] the_table_of_contents_section, + auto table_of_contents_gather_headings(O,Ma,Ts,Ta,X,Toc)( + O obj_, + Ma dochead_make_aa, + Ts segment_anchor_tag_that_object_belongs_to, + Ta _anchor_tag, + ref X lev4_subtoc, + Toc the_table_of_contents_section, ) - in { } + in { + debug(asserts){ + static assert(is(typeof(obj_) == string[string])); + static assert(is(typeof(dochead_make_aa) == string[string][string])); + static assert(is(typeof(segment_anchor_tag_that_object_belongs_to) == string)); + static assert(is(typeof(_anchor_tag) == string)); + static assert(is(typeof(lev4_subtoc) == string[][string])); + static assert(is(typeof(the_table_of_contents_section) == ObjGenericComposite[][string])); + } + } body { ObjGenericComposite comp_obj_toc; mixin InternalMarkup; @@ -4028,11 +4175,16 @@ private: #+name: ao_emitters_obj_inline_markup_heading_numbering_segment_anchor_tags #+BEGIN_SRC d - static string _configured_auto_heading_numbering_and_segment_anchor_tags( - string munge_, - string[string] obj_, - string[string][string] dochead_make_aa + static string _configured_auto_heading_numbering_and_segment_anchor_tags(M,O,Ma)( + M munge_, + O obj_, + Ma dochead_make_aa ) { + debug(asserts){ + static assert(is(typeof(munge_) == string)); + static assert(is(typeof(obj_) == string[string])); + static assert(is(typeof(dochead_make_aa) == string[string][string])); + } if (dochead_make_aa["make"]["num_top"].length > 0) { if (!(match(munge_, rgx.heading_anchor_tag))) { static __gshared int heading_num_top_level=9; @@ -4156,7 +4308,11 @@ private: #+name: ao_emitters_obj_inline_markup_heading_numbering_segment_anchor_tags #+BEGIN_SRC d - static string _make_segment_anchor_tags_if_none_provided(string munge_, string lev_) { + static string _make_segment_anchor_tags_if_none_provided(M,Lv)(M munge_, Lv lev_) { + debug(asserts){ + static assert(is(typeof(munge_) == string)); + static assert(is(typeof(lev_) == string)); + } if (!(match(munge_, rgx.heading_anchor_tag))) { // if (anchor_tags_.length == 0) { if (match(munge_, rgx.heading_identify_anchor_tag)) { if (auto m = match(munge_, rgx.heading_extract_named_anchor_tag)) { @@ -4247,12 +4403,18 @@ struct ObjAttributes { #+name: ao_emitters_obj_attributes_public #+BEGIN_SRC d - string obj_attributes( - string obj_is_, - string obj_raw, - ObjGenericComposite _comp_obj_heading, + string obj_attributes(Oi,OR,OH)( + Oi obj_is_, + OR obj_raw, + OH _comp_obj_heading, ) - in { } + in { + debug(asserts){ + static assert(is(typeof(obj_is_) == string)); + static assert(is(typeof(obj_raw) == string)); + static assert(is(typeof(_comp_obj_heading) == ObjGenericComposite)); + } + } body { scope(exit) { destroy(obj_is_); @@ -4325,8 +4487,12 @@ struct ObjAttributes { #+name: ao_emitters_obj_attributes_private_an_attribute #+BEGIN_SRC d - string _para_and_blocks(string obj_txt_in) - in { } + string _para_and_blocks(Ot)(Ot obj_txt_in) + in { + debug(asserts){ + static assert(is(typeof(obj_txt_in) == string)); + } + } body { auto rgx = Rgx(); if (matchFirst(obj_txt_in, rgx.para_bullet)) { @@ -4358,8 +4524,12 @@ struct ObjAttributes { #+name: ao_emitters_obj_attributes_private_an_attribute #+BEGIN_SRC d - string _para(string obj_txt_in) - in { } + string _para(Ot)(Ot obj_txt_in) + in { + debug(asserts){ + static assert(is(typeof(obj_txt_in) == string)); + } + } body { _obj_attributes = " \"use\": \"content\"," ~ " \"of\": \"para\"," @@ -4374,8 +4544,12 @@ struct ObjAttributes { #+name: ao_emitters_obj_attributes_private_an_attribute #+BEGIN_SRC d - string _heading(string obj_txt_in) - in { } + string _heading(Ot)(Ot obj_txt_in) + in { + debug(asserts){ + static assert(is(typeof(obj_txt_in) == string)); + } + } body { _obj_attributes = " \"use\": \"content\"," ~ " \"of\": \"para\"," @@ -4390,8 +4564,12 @@ struct ObjAttributes { #+name: ao_emitters_obj_attributes_private_an_attribute #+BEGIN_SRC d - string _code(string obj_txt_in) - in { } + string _code(Ot)(Ot obj_txt_in) + in { + debug(asserts){ + static assert(is(typeof(obj_txt_in) == string)); + } + } body { _obj_attributes = " \"use\": \"content\"," ~ " \"of\": \"block\"," @@ -4406,8 +4584,12 @@ struct ObjAttributes { #+name: ao_emitters_obj_attributes_private_an_attribute #+BEGIN_SRC d - string _group(string obj_txt_in) - in { } + string _group(Ot)(Ot obj_txt_in) + in { + debug(asserts){ + static assert(is(typeof(obj_txt_in) == string)); + } + } body { _obj_attributes = " \"use\": \"content\"," ~ " \"of\": \"block\"," @@ -4422,8 +4604,12 @@ struct ObjAttributes { #+name: ao_emitters_obj_attributes_private_an_attribute #+BEGIN_SRC d - string _block(string obj_txt_in) - in { } + string _block(Ot)(Ot obj_txt_in) + in { + debug(asserts){ + static assert(is(typeof(obj_txt_in) == string)); + } + } body { _obj_attributes = " \"use\": \"content\"," ~ " \"of\": \"block\"," @@ -4438,8 +4624,12 @@ struct ObjAttributes { #+name: ao_emitters_obj_attributes_private_an_attribute #+BEGIN_SRC d - string _verse(string obj_txt_in) - in { } + string _verse(Ot)(Ot obj_txt_in) + in { + debug(asserts){ + static assert(is(typeof(obj_txt_in) == string)); + } + } body { _obj_attributes = " \"use\": \"content\"," ~ " \"of\": \"block\"," @@ -4454,8 +4644,12 @@ struct ObjAttributes { #+name: ao_emitters_obj_attributes_private_an_attribute #+BEGIN_SRC d - string _quote(string obj_txt_in) - in { } + string _quote(Ot)(Ot obj_txt_in) + in { + debug(asserts){ + static assert(is(typeof(obj_txt_in) == string)); + } + } body { _obj_attributes = " \"use\": \"content\"," ~ " \"of\": \"block\"," @@ -4470,8 +4664,12 @@ struct ObjAttributes { #+name: ao_emitters_obj_attributes_private_an_attribute #+BEGIN_SRC d - string _table(string obj_txt_in) - in { } + string _table(Ot)(Ot obj_txt_in) + in { + debug(asserts){ + static assert(is(typeof(obj_txt_in) == string)); + } + } body { _obj_attributes = " \"use\": \"content\"," ~ " \"of\": \"block\"," @@ -4486,8 +4684,12 @@ struct ObjAttributes { #+name: ao_emitters_obj_attributes_private_an_attribute #+BEGIN_SRC d - string _comment(string obj_txt_in) - in { } + string _comment(Ot)(Ot obj_txt_in) + in { + debug(asserts){ + static assert(is(typeof(obj_txt_in) == string)); + } + } body { _obj_attributes = " \"use\": \"comment\"," ~ " \"of\": \"comment\"," @@ -4502,11 +4704,16 @@ struct ObjAttributes { #+name: ao_emitters_obj_attributes_private_json #+BEGIN_SRC d - string _set_additional_values_parse_as_json( - string _obj_attrib, - string obj_is_, - ObjGenericComposite _comp_obj_heading, + string _set_additional_values_parse_as_json(OA,Oi,OH)( + OA _obj_attrib, + Oi obj_is_, + OH _comp_obj_heading, ) { // + debug(asserts){ + static assert(is(typeof(_obj_attrib) == string)); + static assert(is(typeof(obj_is_) == string)); + static assert(is(typeof(_comp_obj_heading) == ObjGenericComposite)); + } JSONValue oa_j = parseJSON(_obj_attrib); assert( (oa_j.type == JSON_TYPE.OBJECT) @@ -4546,11 +4753,15 @@ struct BookIndexNuggetHash { string[][string][string] bi; string[][string][string] hash_nugget; string[] bi_main_terms_split_arr; - string[][string][string] bookindex_nugget_hash( - string bookindex_section, - int obj_cite_number + string[][string][string] bookindex_nugget_hash(BI,N)( + BI bookindex_section, + N obj_cite_number ) in { + debug(asserts){ + static assert(is(typeof(bookindex_section) == string)); + static assert(is(typeof(obj_cite_number) == int)); + } debug(bookindexraw) { if (!bookindex_section.empty) { writeln( @@ -4620,9 +4831,12 @@ struct BookIndexNuggetHash { #+BEGIN_SRC d struct BookIndexReportIndent { int mkn, skn; - auto bookindex_report_indented( - string[][string][string] bookindex_unordered_hashes + auto bookindex_report_indented(BI)( + BI bookindex_unordered_hashes ) { + debug(asserts){ + static assert(is(typeof(bookindex_unordered_hashes) == string[][string][string])); + } auto mainkeys= bookindex_unordered_hashes.byKey.array.sort().release; foreach (mainkey; mainkeys) { @@ -4661,9 +4875,12 @@ struct BookIndexReportSection { #+name: ao_emitters_book_index_report_section #+BEGIN_SRC d - auto bookindex_write_section( - string[][string][string] bookindex_unordered_hashes + auto bookindex_write_section(BI)( + BI bookindex_unordered_hashes ) { + debug(asserts){ + static assert(is(typeof(bookindex_unordered_hashes) == string[][string][string])); + } auto mainkeys=bookindex_unordered_hashes.byKey.array.sort().release; foreach (mainkey; mainkeys) { write("_0_1 !{", mainkey, "}! "); @@ -4693,12 +4910,18 @@ struct BookIndexReportSection { #+name: ao_emitters_book_index_report_section #+BEGIN_SRC d - auto bookindex_build_abstraction_section( - string[][string][string] bookindex_unordered_hashes, - int obj_cite_number, - string segment_anchor_tag_that_object_belongs_to, - bool[string] opt_action_bool, + auto bookindex_build_abstraction_section(BI,N,Ta,B)( + BI bookindex_unordered_hashes, + N obj_cite_number, + Ta segment_anchor_tag_that_object_belongs_to, + B opt_action_bool, ) { + debug(asserts){ + static assert(is(typeof(bookindex_unordered_hashes) == string[][string][string])); + static assert(is(typeof(obj_cite_number) == int)); + static assert(is(typeof(segment_anchor_tag_that_object_belongs_to) == string)); + static assert(is(typeof(opt_action_bool) == bool[string])); + } mixin SiSUnode; mixin InternalMarkup; auto mkup = InlineMarkup(); @@ -5031,11 +5254,16 @@ struct Bibliography { #+name: ao_emitters_bibliography #+BEGIN_SRC d - public JSONValue[] _bibliography_( - ref string[] biblio_unsorted_incomplete, - ref JSONValue[] bib_arr_json + public JSONValue[] _bibliography_(Bi,BJ)( + ref Bi biblio_unsorted_incomplete, + ref BJ bib_arr_json ) - in { } + in { + debug(asserts){ + static assert(is(typeof(biblio_unsorted_incomplete) == string[])); + static assert(is(typeof(bib_arr_json) == JSONValue[])); + } + } body { JSONValue[] biblio_unsorted = _biblio_unsorted_complete_(biblio_unsorted_incomplete, bib_arr_json); @@ -5062,10 +5290,14 @@ struct Bibliography { #+name: ao_emitters_bibliography #+BEGIN_SRC d - final private JSONValue[] _biblio_unsorted_complete_( - string[] biblio_unordered, - ref JSONValue[] bib_arr_json + final private JSONValue[] _biblio_unsorted_complete_(Bi,BJ)( + Bi biblio_unordered, + ref BJ bib_arr_json ) { + debug(asserts){ + static assert(is(typeof(biblio_unordered) == string[])); + static assert(is(typeof(bib_arr_json) == JSONValue[])); + } foreach (bibent; biblio_unordered) { // update bib to include deemed_author, needed for: // sort_bibliography_array_by_deemed_author_year_title @@ -5097,7 +5329,10 @@ struct Bibliography { #+name: ao_emitters_bibliography #+BEGIN_SRC d - final private JSONValue[] biblio_sort(JSONValue[] biblio_unordered) { + final private JSONValue[] biblio_sort(BJ)(BJ biblio_unordered) { + debug(asserts){ + static assert(is(typeof(biblio_unordered) == JSONValue[])); + } JSONValue[] biblio_sorted_; biblio_sorted_ = sort!((a, b){ @@ -5118,7 +5353,10 @@ struct Bibliography { #+name: ao_emitters_bibliography #+BEGIN_SRC d - void biblio_debug(JSONValue[] biblio_sorted) { + void biblio_debug(BJ)(BJ biblio_sorted) { + debug(asserts){ + static assert(is(typeof(biblio_sorted) == JSONValue[])); + } debug(biblio0) { foreach (j; biblio_sorted) { if (!empty(j["fulltitle"].str)) { @@ -5151,15 +5389,23 @@ struct NodeStructureMetadata { #+name: ao_emitters_metadata #+BEGIN_SRC d - ObjGenericComposite node_location_emitter( - string lev_markup_number, - string segment_anchor_tag, - int obj_cite_number_, - int cntr_, - int ptr_, - string is_ + ObjGenericComposite node_location_emitter(Lv,Ta,N,C,P,I)( + Lv lev_markup_number, + Ta segment_anchor_tag, + N obj_cite_number_, + C cntr_, + P ptr_, + I is_ ) in { + debug(asserts){ + static assert(is(typeof(lev_markup_number) == string)); + static assert(is(typeof(segment_anchor_tag) == string)); + static assert(is(typeof(obj_cite_number_) == int)); + static assert(is(typeof(cntr_) == int)); + static assert(is(typeof(ptr_) == int)); + static assert(is(typeof(is_) == string)); + } auto rgx = Rgx(); assert(is_ != "heading"); assert(to!int(obj_cite_number_) >= 0); @@ -5208,20 +5454,33 @@ struct NodeStructureMetadata { #+name: ao_emitters_metadata #+BEGIN_SRC d - ObjGenericComposite node_emitter_heading( - string _text, - string lev, - string lev_markup_number, - string lev_collapsed_number, - string segment_anchor_tag, - int obj_cite_number_, - int cntr_, - int ptr_, - string[] lv_ancestors, - string is_, - int html_segnames_ptr, + ObjGenericComposite node_emitter_heading(T,L,Lm,Lc,Ta,N,C,P,LA,I,PSn)( + T _text, + L lev, + Lm lev_markup_number, + Lc lev_collapsed_number, + Ta segment_anchor_tag, + N obj_cite_number_, + C cntr_, + P ptr_, + LA lv_ancestors, + I is_, + PSn html_segnames_ptr, ) in { + debug(asserts){ + static assert(is(typeof(_text) == string)); + static assert(is(typeof(lev) == string)); + static assert(is(typeof(lev_markup_number) == string)); + static assert(is(typeof(lev_collapsed_number) == string)); + static assert(is(typeof(segment_anchor_tag) == string)); + static assert(is(typeof(obj_cite_number_) == int)); + static assert(is(typeof(cntr_) == int)); + static assert(is(typeof(ptr_) == int)); + static assert(is(typeof(lv_ancestors) == string[])); + static assert(is(typeof(is_) == string)); + static assert(is(typeof(html_segnames_ptr) == int)); + } auto rgx = Rgx(); assert(is_ == "heading"); assert(to!int(obj_cite_number_) >= 0); @@ -5394,10 +5653,14 @@ struct NodeStructureMetadata { #+name: abs_functions_assertions #+BEGIN_SRC d -auto assertions_doc_structure( - string[string] an_object, - int[string] lv +auto assertions_doc_structure(O,Lv)( + O an_object, + Lv lv ) { + debug(asserts){ + static assert(is(typeof(an_object) == string[string])); + static assert(is(typeof(lv) == int[string])); + } if (lv["h3"] > State.off) { assert(lv["h0"] > State.off); assert(lv["h1"] > State.off); @@ -5575,7 +5838,10 @@ auto assertions_doc_structure( #+name: abs_functions_assertions #+BEGIN_SRC d -auto assertions_flag_types_block_status_none_or_closed(int[string] type) { +auto assertions_flag_types_block_status_none_or_closed(T)(T type) { + debug(asserts){ + static assert(is(typeof(type) == int[string])); + } assert( (type["code"] == TriState.off) || (type["code"] == TriState.closing), |