From de02319cfa7b4bbff8c111bda02be1a7c6591555 Mon Sep 17 00:00:00 2001 From: Ralph Amissah Date: Sun, 5 Jan 2020 20:17:17 -0500 Subject: dlang safe default imminent, look ahead - @safe @trusted & @system, reconsider @trusted --- src/doc_reform/meta/conf_make_meta_json.d | 2 +- src/doc_reform/meta/conf_make_meta_structs.d | 2 +- src/doc_reform/meta/conf_make_meta_yaml.d | 6 +- src/doc_reform/meta/defaults.d | 22 +-- src/doc_reform/meta/metadoc.d | 50 +++--- src/doc_reform/meta/metadoc_from_src.d | 246 +++++++++++++-------------- src/doc_reform/meta/metadoc_harvest.d | 4 +- src/doc_reform/meta/metadoc_object_setter.d | 16 +- src/doc_reform/meta/metadoc_show_config.d | 2 +- src/doc_reform/meta/metadoc_show_make.d | 2 +- src/doc_reform/meta/metadoc_show_metadata.d | 2 +- src/doc_reform/meta/metadoc_show_summary.d | 2 +- 12 files changed, 178 insertions(+), 178 deletions(-) (limited to 'src/doc_reform/meta') diff --git a/src/doc_reform/meta/conf_make_meta_json.d b/src/doc_reform/meta/conf_make_meta_json.d index 4f33108..4fc3bc4 100644 --- a/src/doc_reform/meta/conf_make_meta_json.d +++ b/src/doc_reform/meta/conf_make_meta_json.d @@ -20,7 +20,7 @@ static template contentJSONtoSpineStruct() { doc_reform.meta.defaults, doc_reform.meta.rgx; ConfComposite _struct_composite; - auto contentJSONtoSpineStruct(C,J,M)(C _struct_composite, J _json, M _manifested, string _identifier) @safe { + @safe auto contentJSONtoSpineStruct(C,J,M)(C _struct_composite, J _json, M _manifested, string _identifier) { mixin spineRgxInit; static auto rgx = Rgx(); debug (json) { diff --git a/src/doc_reform/meta/conf_make_meta_structs.d b/src/doc_reform/meta/conf_make_meta_structs.d index 121605a..683d355 100644 --- a/src/doc_reform/meta/conf_make_meta_structs.d +++ b/src/doc_reform/meta/conf_make_meta_structs.d @@ -16,7 +16,7 @@ mixin spineRgxInit; static auto rgx = Rgx(); mixin InternalMarkup; static auto mkup = InlineMarkup(); -string url_markup(string line) @safe { +@safe string url_markup(string line) { string line_ = line .replaceAll( rgx.smid_inline_link_markup_regular, diff --git a/src/doc_reform/meta/conf_make_meta_yaml.d b/src/doc_reform/meta/conf_make_meta_yaml.d index 69ec567..e55a24f 100644 --- a/src/doc_reform/meta/conf_make_meta_yaml.d +++ b/src/doc_reform/meta/conf_make_meta_yaml.d @@ -20,7 +20,7 @@ static template contentYAMLtoSpineStruct() { doc_reform.meta.defaults, doc_reform.meta.rgx; ConfComposite _struct_composite; - auto contentYAMLtoSpineStruct(C,Y,M)( + @system auto contentYAMLtoSpineStruct(C,Y,M)( C _struct_composite, Y _yaml, M _manifested, @@ -794,7 +794,7 @@ static template configParseYAMLreturnSpineStruct() { doc_reform.meta.conf_make_meta_structs, doc_reform.meta.conf_make_meta_json; mixin contentYAMLtoSpineStruct; - auto configParseYAMLreturnSpineStruct(T,CCm,M)( + @system auto configParseYAMLreturnSpineStruct(T,CCm,M)( T _document_struct, CCm _make_and_meta_struct, M _manifested @@ -832,7 +832,7 @@ static template docHeaderMakeAndMetaTupYamlExtractAndConvertToStruct() { mixin spineRgxInit; mixin contentJSONtoSpineStruct; static auto rgx = Rgx(); - auto docHeaderMakeAndMetaTupYamlExtractAndConvertToStruct(CCm,Src,M)( + @system auto docHeaderMakeAndMetaTupYamlExtractAndConvertToStruct(CCm,Src,M)( Src header_src, CCm _make_and_meta_struct, M _manifested, diff --git a/src/doc_reform/meta/defaults.d b/src/doc_reform/meta/defaults.d index 0b6388b..eff632e 100644 --- a/src/doc_reform/meta/defaults.d +++ b/src/doc_reform/meta/defaults.d @@ -4,7 +4,7 @@ module doc_reform.meta.defaults; template spineRgxInitFlags() { /+ regex flags +/ - static int[string] flags_type_init() { + @safe static int[string] flags_type_init() { int[string] flags_type_init = [ "make_headings" : 0, "header_make" : 0, @@ -45,7 +45,7 @@ template spineRgxInitFlags() { } } template spineNode() { - static string[string] node_metadata_heading_str() { + @safe static string[string] node_metadata_heading_str() { string[string] _node = [ "is" : "", "ocn" : "", @@ -56,7 +56,7 @@ template spineNode() { ]; return _node; } - static int[string] node_metadata_heading_int() { + @safe static int[string] node_metadata_heading_int() { int[string] _node = [ "ocn" : 0, // decide whether to use or keep? "ptr_doc_object" : 0, @@ -69,7 +69,7 @@ template spineNode() { ]; return _node; } - static string[string] node_metadata_para_str() { + @safe static string[string] node_metadata_para_str() { string[string] _node = [ "is" : "", "ocn" : "", @@ -77,7 +77,7 @@ template spineNode() { ]; return _node; } - static int[string] node_metadata_para_int() { + @safe static int[string] node_metadata_para_int() { int[string] _node = [ "ocn" : 0, "indent_base" : 0, @@ -88,7 +88,7 @@ template spineNode() { } } template spineHarvest() { - auto spineHarvest() { + @safe auto spineHarvest() { struct _Harvest { struct Harvest { string title = ""; @@ -122,7 +122,7 @@ template spineHarvest() { template spineBiblio() { // required: deemed_author (author || editor); year; fulltitle; struct BibJsnStr { - static auto biblio_entry_tags_jsonstr() { + @safe static auto biblio_entry_tags_jsonstr() { string x = `{ "is" : "", "sortby_deemed_author_year_title" : "", @@ -203,7 +203,7 @@ template InternalMarkup() { template spineLanguageCodes() { /+ language codes +/ struct Lang { - static string[string][string] codes() { + @safe static string[string][string] codes() { auto _lang_codes = [ "am": [ "c": "am", "n": "Amharic", "t": "Amharic", "xlp": "amharic" ], "bg": [ "c": "bg", "n": "Bulgarian", "t": "Български (Bəlgarski)", "xlp": "bulgarian" ], @@ -270,15 +270,15 @@ template spineLanguageCodes() { ]; return _lang_codes; } - static string[] code_arr_ptr() { + @safe static string[] code_arr_ptr() { string[] _lang_codes = ["am", "bg", "bn", "br", "ca", "cs", "cy", "da", "de", "el", "en", "eo", "es", "et", "eu", "fi", "fr", "ga", "gl", "he", "hi", "hr", "hy", "ia", "is", "it", "ja", "ko", "la", "lo", "lt", "lv", "ml", "mr", "nl", "no", "nn", "oc", "pl", "pt", "pt_BR", "ro", "ru", "sa", "se", "sk", "sl", "sq", "sr", "sv", "ta", "te", "th", "tk", "tr", "uk", "ur", "us", "vi", "zh", "en", "xx",]; return _lang_codes; } - static string[] code_arr() { + @safe static string[] code_arr() { string[] _lang_codes = ["am", "bg", "bn", "br", "ca", "cs", "cy", "da", "de", "el", "en", "eo", "es", "et", "eu", "fi", "fr", "ga", "gl", "he", "hi", "hr", "hy", "ia", "is", "it", "ja", "ko", "la", "lo", "lt", "lv", "ml", "mr", "nl", "no", "nn", "oc", "pl", "pt", "pt_BR", "ro", "ru", "sa", "se", "sk", "sl", "sq", "sr", "sv", "ta", "te", "th", "tk", "tr", "uk", "ur", "vi", "zh"]; return _lang_codes; } - static auto codes_() { + @safe static auto codes_() { return "(" ~ join(code_arr,"|") ~ ")"; } static auto codes_regex() { diff --git a/src/doc_reform/meta/metadoc.d b/src/doc_reform/meta/metadoc.d index 03cb098..e18a19e 100644 --- a/src/doc_reform/meta/metadoc.d +++ b/src/doc_reform/meta/metadoc.d @@ -30,7 +30,7 @@ template spineAbstraction() { enum makeMeta { make, meta } enum docAbst { doc_abstract_obj, doc_has } static auto rgx = Rgx(); - auto spineAbstraction(E,P,O,M,S)( + @system auto spineAbstraction(E,P,O,M,S)( E _env, P program_info, O _opt_action, @@ -108,39 +108,39 @@ template spineAbstraction() { writeln("step4 commence → (doc_matters)"); } struct DocumentMatters { - auto generator_program() { + @safe auto generator_program() { struct Prog_ { - string project_name() { + @safe string project_name() { return "spine"; } - string name() { + @safe string name() { return program_info.name; } - string ver() { + @safe string ver() { return program_info.ver; } - string name_and_version() @trusted { + @trusted string name_and_version() { return format("%s-%s", name, ver, ); } - string url_home() { + @safe string url_home() { return "http://sisudoc.org"; } - string url_git() { + @safe string url_git() { return "https://git.sisudoc.org/software/sisu"; } - auto compiler() { + @safe auto compiler() { return program_info.compiler; } - auto stime() { + @safe auto stime() { return Clock.currTime(UTC()).toSimpleString(); } } return Prog_(); } - auto generated_time() { + @safe auto generated_time() { auto _st = Clock.currTime(UTC()); auto _time = _st.year.to!string ~ "-" ~ _st.month.to!int.to!string // prefer as month number @@ -151,26 +151,26 @@ template spineAbstraction() { ~ ":" ~ _st.second.to!string; return _time; } - auto conf_make_meta() { + @safe auto conf_make_meta() { return _make_and_meta_struct; } - auto has() { + @safe auto has() { return _doc_has_struct; } - auto env() { + @safe auto env() { struct Env_ { - auto pwd() { + @safe auto pwd() { return _manifest.env.pwd; } - auto home() { + @safe auto home() { return _manifest.env.home; } } return Env_(); } - auto opt() { + @safe auto opt() { struct Opt_ { - auto action() { + @safe auto action() { /+ getopt options, commandline instructions, raw - processing instructions --epub --html etc. - command line config instructions --output-path @@ -180,27 +180,27 @@ template spineAbstraction() { } return Opt_(); } - auto src() { + @safe auto src() { return _manifest.src; } - auto src_path_info() { + @safe auto src_path_info() { return spinePathsSRC!()(_manifest.env.pwd, _manifest.src.file_with_absolute_path); // would like (to have and use) relative path } - auto pod() { + @safe auto pod() { return _manifest.pod; } - auto sqlite() { + @safe auto sqlite() { struct SQLite_ { - string filename() { + @safe string filename() { return _opt_action.sqlite_filename; } } return SQLite_(); } - auto output_path() { + @safe auto output_path() { return _make_and_meta_struct.conf.output_path; } - auto srcs() { + @safe auto srcs() { struct SRC_ { auto file_insert_list() { return _header_body_insertfilelist_imagelist[headBody.insert_file_list]; diff --git a/src/doc_reform/meta/metadoc_from_src.d b/src/doc_reform/meta/metadoc_from_src.d index 6dbbb22..3c58212 100644 --- a/src/doc_reform/meta/metadoc_from_src.d +++ b/src/doc_reform/meta/metadoc_from_src.d @@ -112,7 +112,7 @@ template docAbstraction() { bool, "has_images_without_dimensions", ); enum DomTags { none, open, close, close_and_open, open_still, } - pure ObjGenericComposite obj_heading_ancestors()( + @safe pure ObjGenericComposite obj_heading_ancestors()( ObjGenericComposite obj, string[] lv_ancestors_txt, ) { @@ -165,7 +165,7 @@ template docAbstraction() { } return obj; } - pure ObjGenericComposite obj_dom_structure_set_markup_tags()( + @safe pure ObjGenericComposite obj_dom_structure_set_markup_tags()( ObjGenericComposite obj, int[] dom, int lev @@ -209,7 +209,7 @@ template docAbstraction() { obj.metainfo.dom_structure_markedup_tags_status = dom.dup; return obj; } - pure ObjGenericComposite obj_dom_set_collapsed_tags()( + @safe pure ObjGenericComposite obj_dom_set_collapsed_tags()( ObjGenericComposite obj, int[] dom, int lev @@ -253,10 +253,10 @@ template docAbstraction() { obj.metainfo.dom_structure_collapsed_tags_status = dom.dup; return obj; } - static auto ocn_emit(int ocn_status_flag) { + @safe static auto ocn_emit(int ocn_status_flag) { return object_citation_number.ocn_emitter(ocn_status_flag); } - static auto inline_markup_faces(L)(L line) { + @safe static auto inline_markup_faces(L)(L line) { static auto rgx = Rgx(); static auto mkup = InlineMarkup(); line = replaceAll!(m => mkup.quote_o ~ m[1] ~ mkup.quote_c)(line, rgx.within_quotes); @@ -267,7 +267,7 @@ template docAbstraction() { } return line; } - static string links_and_images()(string obj_txt) { + @safe static string links_and_images()(string obj_txt) { static auto rgx = Rgx(); static auto mkup = InlineMarkup(); if (obj_txt.match(rgx.smid_inline_url_generic)) { @@ -314,7 +314,7 @@ template docAbstraction() { ObjGenericComposite comp_obj_heading, comp_obj_location, comp_obj_block, comp_obj_code, comp_obj_poem_ocn, comp_obj_comment; auto node_construct = NodeStructureMetadata(); enum sObj { content, anchor_tag, notes_reg, notes_star, links, image_no_dimensions } - string[string][string] inline_para_link_anchor()( + @safe string[string][string] inline_para_link_anchor()( string[string] an_object, string[string] tag_in_seg, string[string][string] tag_assoc @@ -331,7 +331,7 @@ template docAbstraction() { return tag_assoc; } /+ ↓ abstract marked up document +/ - auto docAbstraction(CMM,Opt,Mf) ( + @system auto docAbstraction(CMM,Opt,Mf) ( char[][] markup_sourcefile_content, CMM conf_make_meta, Opt opt_action, @@ -1487,7 +1487,7 @@ template docAbstraction() { } the_document_head_section ~= the_document_body_section[0]; the_document_body_section=the_document_body_section[1..$]; - int[] _get_ancestors_markup(O)(O obj, ref int[] _ancestors_markup) { + @safe int[] _get_ancestors_markup(O)(O obj, ref int[] _ancestors_markup) { if (obj.metainfo.is_a == "heading") { debug(dom) { writeln(obj.text); @@ -1574,7 +1574,7 @@ template docAbstraction() { } return _ancestors_markup; } - int[] _get_ancestors_collapsed(O)(O obj, ref int[] _ancestors_collapsed) { + @safe int[] _get_ancestors_collapsed(O)(O obj, ref int[] _ancestors_collapsed) { if (obj.metainfo.is_a == "heading") { if (obj.metainfo.heading_lev_collapsed == 1) { _ancestors_collapsed = [ @@ -1755,7 +1755,7 @@ template docAbstraction() { } html_segnames_ptr_cntr++; } - auto get_decendants()(ObjGenericComposite[] document_sections) { + @safe auto get_decendants()(ObjGenericComposite[] document_sections) { int[string] _heading_ocn_decendants; string[] _ocn_open_key = ["","","","","","","",""]; auto _doc_sect_length = document_sections.length - 1; @@ -1803,7 +1803,7 @@ template docAbstraction() { return pairs.sort; } string[] _images; - string[] extract_images()(string content_block) { + @safe string[] extract_images()(string content_block) { string[] images_; if (auto m = content_block.matchAll(rgx.image)) { images_ ~= m.captures[1]; @@ -1811,7 +1811,7 @@ template docAbstraction() { return images_; } string[] segnames_0_to_4; - auto _image_dimensions(O,M)(O obj, M manifested) { + @system auto _image_dimensions(O,M)(O obj, M manifested) { if (obj.has.image_without_dimensions) { import std.math; import imageformats; @@ -1852,7 +1852,7 @@ template docAbstraction() { } return obj; } - auto _links(O)(O obj) { + @safe auto _links(O)(O obj) { if (auto m = obj.text.match(rgx.inline_link_stow_uri)) { debug(links) { writeln("number of link matches to stow: ", (obj.text.match(rgx.inline_link_stow_uri)).count); @@ -2358,7 +2358,7 @@ template docAbstraction() { dom_structure_collapsed_tags_status = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; dom_structure_collapsed_tags_status_buffer = [ 0, 0, 0, 0, 0, 0, 0, 0, 0,]; - auto doc_has() { + @safe auto doc_has() { struct DocHas_ { uint inline_links() { return dochas["inline_links"]; @@ -2416,7 +2416,7 @@ template docAbstraction() { /+ post loop markup document/text ↑ +/ } /+ ← closed: abstract doc source +/ /+ ↓ abstraction functions +/ - static string[string] object_reset()(string[string] an_object) @safe { + @safe static string[string] object_reset()(string[string] an_object) { an_object.remove("body_nugget"); an_object.remove("substantive"); an_object.remove("is"); @@ -2424,7 +2424,7 @@ template docAbstraction() { an_object.remove("bookindex_nugget"); return an_object; } - void flow_common_reset_()( + @system void flow_common_reset_()( return ref int[string] line_occur, return ref string[string] an_object, return ref int[string] obj_type_status, @@ -2435,10 +2435,10 @@ template docAbstraction() { obj_type_status["para"] = State.off; an_object = an_object.object_reset; } - static int[string] _check_ocn_status_()( + @safe static int[string] _check_ocn_status_()( char[] line, int[string] obj_type_status, - ) @safe { + ) { static auto rgx = Rgx(); if (!(line.empty) && (obj_type_status["ocn_status_off_for_multiple_objects"] == OCN_off_block_status.off) @@ -2494,10 +2494,10 @@ template docAbstraction() { } return obj_type_status; } - char[] _doc_header_and_make_substitutions_(CMM)( + @safe char[] _doc_header_and_make_substitutions_(CMM)( char[] line, CMM conf_make_meta, - ) @safe { + ) { enum Substitute { match, markup, } if (conf_make_meta.make.substitute) { foreach(substitution_pair; conf_make_meta.make.substitute) { @@ -2509,10 +2509,10 @@ template docAbstraction() { } return line; } - char[] _doc_header_and_make_substitutions_fontface_(CMM)( + @safe char[] _doc_header_and_make_substitutions_fontface_(CMM)( char[] line, CMM conf_make_meta, - ) @safe { + ) { enum Substitute { match, markup, } if ( conf_make_meta.make.bold) { line = line.replaceAll( @@ -2534,12 +2534,12 @@ template docAbstraction() { } return line; } - void flow_txt_block_start()( + @safe void flow_txt_block_start()( char[] line, return ref int[string] obj_type_status, return ref uint[string] dochas, return ref string[string] object_number_poem - ) @safe { + ) { static auto rgx = Rgx(); if (auto m = line.matchFirst(rgx.block_curly_code_open)) { dochas["codeblock"]++; @@ -2720,11 +2720,11 @@ template docAbstraction() { obj_type_status["tic_table"] = TriState.on; } } - string[string] flow_txt_block_quote()( + @safe string[string] flow_txt_block_quote()( char[] line, string[string] an_object, return ref int[string] obj_type_status - ) @safe { + ) { static auto rgx = Rgx(); if (obj_type_status["curly_quote"] == TriState.on) { if (line.matchFirst(rgx.block_curly_quote_close)) { @@ -2759,11 +2759,11 @@ template docAbstraction() { } return an_object; } - string[string] flow_txt_block_group()( + @safe string[string] flow_txt_block_group()( char[] line, string[string] an_object, return ref int[string] obj_type_status - ) @safe { + ) { static auto rgx = Rgx(); if (obj_type_status["curly_group"] == State.on) { if (line.matchFirst(rgx.block_curly_group_close)) { @@ -2798,11 +2798,11 @@ template docAbstraction() { } return an_object; } - string[string] flow_txt_block_block()( + @safe string[string] flow_txt_block_block()( char[] line, string[string] an_object, return ref int[string] obj_type_status - ) @safe { + ) { static auto rgx = Rgx(); if (obj_type_status["curly_block"] == TriState.on) { if (line.matchFirst(rgx.block_curly_block_close)) { @@ -2837,7 +2837,7 @@ template docAbstraction() { } return an_object; } - string[string] flow_txt_block_poem(CMM)( + @safe string[string] flow_txt_block_poem(CMM)( char[] line, string[string] an_object, return ref int[string] obj_type_status, @@ -2845,7 +2845,7 @@ template docAbstraction() { string[string] object_number_poem, CMM conf_make_meta, string[string] tag_in_seg, - ) @safe { + ) { static auto rgx = Rgx(); if (obj_type_status["curly_poem"] == TriState.on) { if (line.matchFirst(rgx.block_curly_poem_close)) { @@ -3079,11 +3079,11 @@ template docAbstraction() { } return an_object; } - void flow_txt_block_code()( + @safe void flow_txt_block_code()( char[] line, return ref string[string] an_object, return ref int[string] obj_type_status - ) @safe { + ) { static auto rgx = Rgx(); if (obj_type_status["curly_code"] == TriState.on) { if (line.matchFirst(rgx.block_curly_code_close)) { @@ -3121,7 +3121,7 @@ template docAbstraction() { } } } - string[string] flow_txt_block_table(CMM)( + @system string[string] flow_txt_block_table(CMM)( char[] line, string[string] an_object, return ref int[string] obj_type_status, @@ -3179,7 +3179,7 @@ template docAbstraction() { } return an_object; } - final string biblio_tag_map()(string abr) { + @safe final string biblio_tag_map()(string abr) { auto btm = [ "au" : "author_raw", "ed" : "editor_raw", @@ -3198,7 +3198,7 @@ template docAbstraction() { ]; return btm[abr]; } - void flow_txt_block_biblio( + @system void flow_txt_block_biblio( char[] line, return ref int[string] obj_type_status, return ref int bib_entry, @@ -3327,7 +3327,7 @@ template docAbstraction() { header_tag_value=""; } } - void flow_table_closed_make_special_notation_table_(N,CMM)( + @system void flow_table_closed_make_special_notation_table_(N,CMM)( char[] line, return ref string[string] an_object, return ref ObjGenericComposite[] the_document_body_section, @@ -3368,7 +3368,7 @@ template docAbstraction() { processing.remove("verse"); ++cntr; } - string[string] flow_block_flag_line_empty_(B,N,CMM,Ts)( + @system string[string] flow_block_flag_line_empty_(B,N,CMM,Ts)( char[] line, string[string] an_object, B bookindex_extract_hash, @@ -3678,7 +3678,7 @@ template docAbstraction() { } return an_object; } - string[string] flow_book_index_(B)( + @system string[string] flow_book_index_(B)( char[] line, string[string] an_object, return ref string book_idx_tmp, @@ -3728,13 +3728,13 @@ template docAbstraction() { } return an_object; } - string[string] flow_heading_found_()( + @safe string[string] flow_heading_found_()( char[] line, string[string] heading_match_str, string[] _make_unmarked_headings, return ref Regex!(char)[string] heading_match_rgx, return ref int[string] obj_type_status - ) @safe { + ) { static auto rgx = Rgx(); if ((_make_unmarked_headings.length > 2) && (obj_type_status["make_headings"] == State.off)) { /+ headings found +/ @@ -3809,12 +3809,12 @@ template docAbstraction() { } return heading_match_str; } - char[] flow_heading_make_set_()( + @safe char[] flow_heading_make_set_()( char[] line, int[string] line_occur, return ref Regex!(char)[string] heading_match_rgx, return ref int[string] obj_type_status - ) @safe { + ) { if ((obj_type_status["make_headings"] == State.on) && ((line_occur["para"] == State.off) && (line_occur["heading"] == State.off)) @@ -3865,7 +3865,7 @@ template docAbstraction() { } return line; } - string[string] flow_heading_matched_(CMM)( + @safe string[string] flow_heading_matched_(CMM)( char[] line, string[string] an_object, return ref int[string] line_occur, @@ -3874,7 +3874,7 @@ template docAbstraction() { return ref int[string] collapsed_lev, return ref int[string] obj_type_status, return ref CMM conf_make_meta, - ) @safe { + ) { static auto rgx = Rgx(); if (auto m = line.match(rgx.heading)) { /+ heading match +/ ++line_occur["heading"]; @@ -4018,7 +4018,7 @@ template docAbstraction() { } return an_object; } - string[string] flow_para_match_()( + @safe string[string] flow_para_match_()( char[] line, string[string] an_object, return ref string an_object_key, @@ -4026,7 +4026,7 @@ template docAbstraction() { return ref bool bullet, return ref int[string] obj_type_status, return ref int[string] line_occur, - ) @safe { + ) { static auto rgx = Rgx(); if (line_occur["para"] == State.off) { line = font_faces_line(line); @@ -4071,9 +4071,9 @@ template docAbstraction() { } return an_object; } - char[] font_faces_line()( + @safe char[] font_faces_line()( char[] textline, - ) @safe { + ) { static auto rgx = Rgx(); static auto mkup = InlineMarkup(); if (textline.match(rgx.inline_faces_line)) { @@ -4093,10 +4093,10 @@ template docAbstraction() { } return textline; } - ObjGenericComposite flow_table_instructions(H)( + @safe ObjGenericComposite flow_table_instructions(H)( return ref ObjGenericComposite table_object, H table_head, - ) @safe { + ) { static auto rgx = Rgx(); table_object.metainfo.is_of_part = "body"; table_object.metainfo.is_of_section = "body"; @@ -4118,10 +4118,10 @@ template docAbstraction() { } return table_object; } - ObjGenericComposite flow_table_array_munge(T)( + @safe ObjGenericComposite flow_table_array_munge(T)( return ref ObjGenericComposite table_object, return ref T table_array, - ) @safe { + ) { static auto rgx = Rgx(); static auto mng = InlineMarkup(); string _table_substantive; @@ -4242,7 +4242,7 @@ template docAbstraction() { comp_obj_block.text = _table_substantive; return table_object; } - ObjGenericComposite flow_table_substantive_munge(T)( + @system ObjGenericComposite flow_table_substantive_munge(T)( return ref ObjGenericComposite table_object, return ref T table_substantive, ) { @@ -4258,7 +4258,7 @@ template docAbstraction() { table_object = table_object.flow_table_array_munge(_table); return table_object; } - ObjGenericComposite flow_table_substantive_munge_special(T)( + @system ObjGenericComposite flow_table_substantive_munge_special(T)( return ref ObjGenericComposite table_object, return ref T table_substantive, ) { @@ -4276,11 +4276,11 @@ template docAbstraction() { } /+ abstraction functions ↑ +/ /+ ↓ abstraction function emitters +/ - pure struct OCNemitter { + @safe pure struct OCNemitter { int ocn_digit, ocn_object_number, ocn_on_, ocn_off_, ocn_bkidx, ocn_bkidx_; string object_identifier; bool ocn_is_off; - auto ocn_emitter(int ocn_status_flag) @safe { + @safe auto ocn_emitter(int ocn_status_flag) { OCNset ocn; assert(ocn_status_flag <= OCNstatus.reset); ocn_object_number = ocn_bkidx = 0; @@ -4325,7 +4325,7 @@ template docAbstraction() { } } /+ +/ - static struct ObjInlineMarkupMunge { + @safe static struct ObjInlineMarkupMunge { string[string] obj_txt; int n_foot, n_foot_reg, n_foot_sp_asterisk, n_foot_sp_plus; string asterisks_, plus_; @@ -4333,13 +4333,13 @@ template docAbstraction() { static auto rgx = Rgx(); static auto mkup = InlineMarkup(); int stage_reset_note_numbers = true; - private auto initialize_note_numbers() @safe { + private auto initialize_note_numbers() { n_foot = 0; n_foot_reg = 0; n_foot_sp_asterisk = 0; n_foot_sp_plus = 0; } - static auto images()(string obj_txt_in) @safe { + @safe static auto images()(string obj_txt_in) { static auto mng = InlineMarkup(); /+ url matched +/ obj_txt_in = obj_txt_in.replaceAll(rgx.inline_notes_al_special, ""); // TODO reinstate when special footnotes are implemented @@ -4369,7 +4369,7 @@ template docAbstraction() { } return obj_txt_in; } - TxtPlusHasFootnotes footnotes_endnotes_markup_and_number_or_stars()(string obj_txt_in, bool reset_note_numbers) @safe { + @safe TxtPlusHasFootnotes footnotes_endnotes_markup_and_number_or_stars()(string obj_txt_in, bool reset_note_numbers) { /+ endnotes (regular) +/ bool flg_notes_reg = false; bool flg_notes_star = false; @@ -4433,10 +4433,10 @@ template docAbstraction() { ); return t; } - private TxtPlusHasFootnotesUrlsImages object_notes_and_links_()( + @safe private TxtPlusHasFootnotesUrlsImages object_notes_and_links_()( string obj_txt_in, bool reset_note_numbers=false - ) @safe { + ) { obj_txt_out = ""; bool urls = false; bool images_without_dimensions = false; @@ -4496,10 +4496,10 @@ template docAbstraction() { } invariant() { } - auto munge_heading()( + @safe auto munge_heading()( string obj_txt_in, bool reset_note_numbers=false - ) @safe { + ) { obj_txt["munge"] = obj_txt_in .replaceFirst(rgx.heading, "") .replaceFirst(rgx.object_number_off_all, "") @@ -4515,7 +4515,7 @@ template docAbstraction() { } invariant() { } - auto munge_para()(string obj_txt_in) @safe { + @safe auto munge_para()(string obj_txt_in) { obj_txt["munge"]=(obj_txt_in) .replaceFirst(rgx.para_attribs, "") .replaceFirst(rgx.object_number_off_all, ""); @@ -4528,47 +4528,47 @@ template docAbstraction() { } return t; } - string munge_quote()(string obj_txt_in) @safe { + @safe string munge_quote()(string obj_txt_in) { obj_txt["munge"]=obj_txt_in; return obj_txt["munge"]; } invariant() { } - auto munge_group(string obj_txt_in) @safe { + @safe auto munge_group(string obj_txt_in) { obj_txt["munge"]=obj_txt_in; TxtPlusHasFootnotesUrlsImages t = object_notes_and_links_(obj_txt["munge"]); return t; } invariant() { } - auto munge_block()(string obj_txt_in) @safe { + @safe auto munge_block()(string obj_txt_in) { obj_txt["munge"]=obj_txt_in; TxtPlusHasFootnotesUrlsImages t = object_notes_and_links_(obj_txt["munge"]); return t; } invariant() { } - auto munge_verse()(string obj_txt_in) @safe { + @safe auto munge_verse()(string obj_txt_in) { obj_txt["munge"]=obj_txt_in; TxtPlusHasFootnotesUrlsImages t = object_notes_and_links_(obj_txt["munge"]); return t; } invariant() { } - string munge_code()(string obj_txt_in) @safe { + @safe string munge_code()(string obj_txt_in) { obj_txt_in = obj_txt_in.replaceAll(rgx.space, mkup.nbsp); obj_txt["munge"] = obj_txt_in; return obj_txt["munge"]; } invariant() { } - string munge_table()(string obj_txt_in) @safe { + @safe string munge_table()(string obj_txt_in) { obj_txt["munge"]=obj_txt_in; return obj_txt["munge"]; } invariant() { } - string munge_comment()(string obj_txt_in) @safe { + @safe string munge_comment()(string obj_txt_in) { obj_txt["munge"]=obj_txt_in; return obj_txt["munge"]; } @@ -4580,12 +4580,12 @@ template docAbstraction() { static auto munge = ObjInlineMarkupMunge(); string[string] obj_txt; static string anchor_tag = ""; - TxtAndAnchorTagPlusHasFootnotesUrlsImages obj_inline_markup_and_anchor_tags_and_misc(CMM)( + @safe TxtAndAnchorTagPlusHasFootnotesUrlsImages obj_inline_markup_and_anchor_tags_and_misc(CMM)( string[string] obj_, string obj_key_, CMM conf_make_meta, Flag!"_new_doc" _new_doc - ) @safe { + ) { obj_txt["munge"] = obj_[obj_key_].dup; obj_txt["munge"] = (obj_["is"].match(ctRegex!(`verse|code`))) ? obj_txt["munge"] @@ -4673,23 +4673,23 @@ template docAbstraction() { } invariant() { } - auto _clean_heading_toc_()( + @safe auto _clean_heading_toc_()( char[] heading_toc_, - ) @safe { + ) { auto m = (cast(char[]) heading_toc_).matchFirst(rgx.heading); heading_toc_ = (m.post).replaceAll( rgx.inline_notes_curly_gen, ""); return heading_toc_; }; - ObjGenericComposite[] flow_table_of_contents_gather_headings(CMM)( + @safe ObjGenericComposite[] flow_table_of_contents_gather_headings(CMM)( string[string] obj_, CMM conf_make_meta, string[string] tag_in_seg, string _anchor_tag, return ref string[][string] lev4_subtoc, ObjGenericComposite[] the_table_of_contents_section, - ) @safe { + ) { ObjGenericComposite comp_obj_toc; mixin InternalMarkup; static auto mkup = InlineMarkup(); @@ -4773,12 +4773,12 @@ template docAbstraction() { static string heading_number_auto_composite = ""; static string heading_number_auto_composite_segname = ""; static bool[] auto_heading_numbering = [ true, true, true, true]; - static string _configured_auto_heading_numbering_and_segment_anchor_tags(CMM)( + @safe static string _configured_auto_heading_numbering_and_segment_anchor_tags(CMM)( string munge_, string[string] obj_, CMM conf_make_meta, bool _new_doc, - ) @safe { + ) { if (_new_doc) { heading_num = [ 0, 0, 0, 0 ]; heading_number_auto_composite = ""; @@ -4917,11 +4917,11 @@ template docAbstraction() { return munge_; } static int heading_num_lev1 = 0; - static string _make_segment_anchor_tags_if_none_provided()( + @safe static string _make_segment_anchor_tags_if_none_provided()( string munge_, string lev_, bool _new_doc - ) @safe { + ) { if (!(munge_.match(rgx.heading_anchor_tag))) { if (munge_.match(rgx.heading_identify_anchor_tag)) { if (auto m = munge_.match(rgx.heading_extract_named_anchor_tag)) { @@ -4954,11 +4954,11 @@ template docAbstraction() { /+ +/ struct ObjAttributes { string[string] _obj_attrib; - string obj_attributes()( + @safe string obj_attributes()( string obj_is_, string obj_raw, ObjGenericComposite _comp_obj_heading, - ) @safe { + ) { scope(exit) { destroy(obj_is_); destroy(obj_raw); @@ -5017,7 +5017,7 @@ template docAbstraction() { } private: string _obj_attributes; - string txt_para_and_blocks()(string obj_txt_in) { + @safe string txt_para_and_blocks()(string obj_txt_in) { if (obj_txt_in.matchFirst(rgx.para_bullet)) { _obj_attributes =" \"bullet\": \"true\"," ~ " \"indent_hang\": 0," @@ -5041,7 +5041,7 @@ template docAbstraction() { } return _obj_attributes; } - string txt_heading()(string obj_txt_in) @safe { + @safe string txt_heading()(string obj_txt_in) { _obj_attributes = " \"use\": \"content\"," ~ " \"of\": \"para\"," ~ " \"is\": \"heading\""; @@ -5049,7 +5049,7 @@ template docAbstraction() { } invariant() { } - string txt_para()(string obj_txt_in) @safe { + @safe string txt_para()(string obj_txt_in) { _obj_attributes = " \"use\": \"content\"," ~ " \"of\": \"para\"," ~ " \"is\": \"para\""; @@ -5057,7 +5057,7 @@ template docAbstraction() { } invariant() { } - string txt_quote()(string obj_txt_in) @safe { + @safe string txt_quote()(string obj_txt_in) { _obj_attributes = " \"use\": \"content\"," ~ " \"of\": \"block\"," ~ " \"is\": \"quote\""; @@ -5065,7 +5065,7 @@ template docAbstraction() { } invariant() { } - string txt_group()(string obj_txt_in) @safe { + @safe string txt_group()(string obj_txt_in) { _obj_attributes = " \"use\": \"content\"," ~ " \"of\": \"block\"," ~ " \"is\": \"group\""; @@ -5073,7 +5073,7 @@ template docAbstraction() { } invariant() { } - string txt_block()(string obj_txt_in) @safe { + @safe string txt_block()(string obj_txt_in) { _obj_attributes = " \"use\": \"content\"," ~ " \"of\": \"block\"," ~ " \"is\": \"block\""; @@ -5081,7 +5081,7 @@ template docAbstraction() { } invariant() { } - string txt_verse()(string obj_txt_in) @safe { + @safe string txt_verse()(string obj_txt_in) { _obj_attributes = " \"use\": \"content\"," ~ " \"of\": \"block\"," ~ " \"is\": \"verse\""; @@ -5089,7 +5089,7 @@ template docAbstraction() { } invariant() { } - string txt_code()(string obj_txt_in) @safe { + @safe string txt_code()(string obj_txt_in) { _obj_attributes = " \"use\": \"content\"," ~ " \"of\": \"block\"," ~ " \"is\": \"code\""; @@ -5097,7 +5097,7 @@ template docAbstraction() { } invariant() { } - string txt_table()(string obj_txt_in) @safe { + @safe string txt_table()(string obj_txt_in) { _obj_attributes = " \"use\": \"content\"," ~ " \"of\": \"block\"," ~ " \"is\": \"table\""; @@ -5105,7 +5105,7 @@ template docAbstraction() { } invariant() { } - string txt_comment()(string obj_txt_in) @safe { + @safe string txt_comment()(string obj_txt_in) { _obj_attributes = " \"use\": \"comment\"," ~ " \"of\": \"comment\"," ~ " \"is\": \"comment\""; @@ -5113,11 +5113,11 @@ template docAbstraction() { } invariant() { } - string _set_additional_values_parse_as_json()( + @safe string _set_additional_values_parse_as_json()( string _obj_attrib, string obj_is_, ObjGenericComposite _comp_obj_heading, - ) @safe { + ) { JSONValue oa_j = parseJSON(_obj_attrib); assert( (oa_j.type == JSON_TYPE.OBJECT) @@ -5144,11 +5144,11 @@ template docAbstraction() { string[] object_numbers; string[][string][string] bi_hash_nugget; string[] bi_main_terms_split_arr; - string[][string][string] bookindex_nugget_hash(N,S)( + @safe string[][string][string] bookindex_nugget_hash(N,S)( string bookindex_section, N obj_cite_digits, S tag_in_seg, - ) @safe { + ) { debug(asserts) { static assert(is(typeof(obj_cite_digits.object_number) == int)); } @@ -5214,9 +5214,9 @@ template docAbstraction() { } struct BookIndexReportIndent { int mkn, skn; - void bookindex_report_indented()( + @safe void bookindex_report_indented()( string[][string][string] bookindex_unordered_hashes - ) @safe { + ) { auto mainkeys = bookindex_unordered_hashes.byKey.array.sort().release; foreach (mainkey; mainkeys) { @@ -5242,9 +5242,9 @@ template docAbstraction() { int mkn, skn; static auto rgx = Rgx(); static auto munge = ObjInlineMarkupMunge(); - void bookindex_write_section()( + @safe void bookindex_write_section()( string[][string][string] bookindex_unordered_hashes - ) @safe { + ) { auto mainkeys = bookindex_unordered_hashes.byKey.array .sort!("toUpper(a) < toUpper(b)", SwapStrategy.stable).release; @@ -5271,7 +5271,7 @@ template docAbstraction() { ++mkn; } } - auto bookindex_build_abstraction_section(N,B)( + @system auto bookindex_build_abstraction_section(N,B)( string[][string][string] bookindex_unordered_hashes, N obj_cite_digits, B opt_action, @@ -5435,11 +5435,11 @@ template docAbstraction() { int previous_count; int mkn; static auto rgx = Rgx(); - private auto gather_notes_for_endnote_section( + @safe private auto gather_notes_for_endnote_section( ObjGenericComposite[] contents_am, string[string] tag_in_seg, int cntr, - ) @safe { + ) { assert((contents_am[cntr].metainfo.is_a == "para") || (contents_am[cntr].metainfo.is_a == "heading") || (contents_am[cntr].metainfo.is_a == "quote") @@ -5515,7 +5515,7 @@ template docAbstraction() { } return object_notes; } - private auto gathered_notes() @safe { + @safe private auto gathered_notes() { string[][string] endnotes_; if (object_notes.length > 1) { endnotes_["notes"] = (object_notes["notes"].split(rgx.break_string))[0..$-1]; @@ -5526,10 +5526,10 @@ template docAbstraction() { } return endnotes_; } - private auto endnote_objects(N,O)( + @safe private auto endnote_objects(N,O)( N obj_cite_digits, O opt_action, - ) @safe { + ) { mixin spineNode; ObjGenericComposite[] the_endnotes_section; auto endnotes_ = gathered_notes(); @@ -5639,7 +5639,7 @@ template docAbstraction() { } /+ +/ struct Bibliography { - public JSONValue[] flow_bibliography_()( + @system public JSONValue[] flow_bibliography_()( return ref string[] biblio_unsorted_incomplete, return ref JSONValue[] bib_arr_json ) { @@ -5664,7 +5664,7 @@ template docAbstraction() { } return biblio_sorted__; } - final private JSONValue[] biblio_make_unsorted_array_of_json_objects()( + @system final private JSONValue[] biblio_make_unsorted_array_of_json_objects()( string[] biblio_unordered, JSONValue[] bib_arr_json ) { @@ -5692,7 +5692,7 @@ template docAbstraction() { } return bib_arr_json.dup; } - final private JSONValue[] biblio_sort()(JSONValue[] biblio_unordered) { + @system final private JSONValue[] biblio_sort()(JSONValue[] biblio_unordered) { JSONValue[] biblio_sorted_; biblio_sorted_ = sort!((a, b){ @@ -5707,7 +5707,7 @@ template docAbstraction() { } return biblio_sorted_; } - void biblio_debug()(JSONValue[] biblio_sorted) { + @system void biblio_debug()(JSONValue[] biblio_sorted) { debug(biblio0) { foreach (j; biblio_sorted) { if (!empty(j["fulltitle"].str)) { @@ -5723,7 +5723,7 @@ template docAbstraction() { int obj_cite_digit; int[string] p_; // p_ parent_ static auto rgx = Rgx(); - ObjGenericComposite node_location_emitter(La,Ta,N)( + @safe ObjGenericComposite node_location_emitter(La,Ta,N)( string lev_markup_number, string[string] tag_in_seg, La lev_anchor_tag, @@ -5732,7 +5732,7 @@ template docAbstraction() { int cntr_, int ptr_, string is_ - ) @safe { + ) { debug(asserts) { static assert(is(typeof(obj_cite_digits.object_number) == int)); } @@ -5777,7 +5777,7 @@ template docAbstraction() { } invariant() { } - ObjGenericComposite node_emitter_heading(Hd,TaL,TA,N,fNr,fNs,fL)( + @safe ObjGenericComposite node_emitter_heading(Hd,TaL,TA,N,fNr,fNs,fL)( string _text, string lev_markup_number, string lev_collapsed_number, @@ -5794,7 +5794,7 @@ template docAbstraction() { fNr flag_notes_reg, fNs flag_notes_star, fL flag_links, - ) @safe { + ) { debug(asserts) { static assert(is(typeof(lev) == string)); static assert(is(typeof(obj_cite_digits.object_number) == int)); @@ -5976,10 +5976,10 @@ template docAbstraction() { } /+ abstraction functions emitters ↑ +/ /+ ↓ abstraction functions assertions +/ - pure void assertions_doc_structure()( + @safe pure void assertions_doc_structure()( string[string] an_object, int[string] lv - ) @safe { + ) { if (lv["h3"] > State.off) { assert(lv["h0"] > State.off); assert(lv["h1"] > State.off); @@ -6151,7 +6151,7 @@ template docAbstraction() { break; } } - pure void assertions_flag_types_block_status_none_or_closed()(int[string] obj_type_status) @safe { + @safe pure void assertions_flag_types_block_status_none_or_closed()(int[string] obj_type_status) { assert( (obj_type_status["code"] == TriState.off) || (obj_type_status["code"] == TriState.closing), @@ -6176,7 +6176,7 @@ template docAbstraction() { /+ abstraction functions assertions ↑ +/ } /+ ← closed: template docAbstraction +/ template docSectKeysSeq() { - auto docSectKeysSeq(string[][string] document_section_keys_sequenced) @safe { + @safe auto docSectKeysSeq(string[][string] document_section_keys_sequenced) { struct doc_sect_keys_seq { string[] scroll() { return document_section_keys_sequenced["scroll"]; diff --git a/src/doc_reform/meta/metadoc_harvest.d b/src/doc_reform/meta/metadoc_harvest.d index eb050e4..81f0ef4 100644 --- a/src/doc_reform/meta/metadoc_harvest.d +++ b/src/doc_reform/meta/metadoc_harvest.d @@ -1,9 +1,9 @@ module doc_reform.meta.metadoc_harvest; template spineMetaDocHarvest() { - auto spineMetaDocHarvest(T,H)( + @safe auto spineMetaDocHarvest(T,H)( T doc_matters, H hvst, - ) @safe { + ) { import doc_reform.meta.defaults, doc_reform.meta.rgx; diff --git a/src/doc_reform/meta/metadoc_object_setter.d b/src/doc_reform/meta/metadoc_object_setter.d index 908d168..e916a90 100644 --- a/src/doc_reform/meta/metadoc_object_setter.d +++ b/src/doc_reform/meta/metadoc_object_setter.d @@ -24,22 +24,22 @@ template ObjectSetter() { int o_n_bibliography = 0; int o_n_book_index = 0; int o_n_blurb = 0; - string object_number_substantive() const @property { + @safe string object_number_substantive() const @property { return (o_n_substantive==0) ? "" : o_n_substantive.to!string; } - string object_number_non_substantive() const @property { + @safe string object_number_non_substantive() const @property { return (o_n_non_substantive==0) ? "" : o_n_non_substantive.to!string; } - string object_number_glossary() const @property { + @safe string object_number_glossary() const @property { return (o_n_glossary==0) ? "" : o_n_glossary.to!string; } - string object_number_bibliography() const @property { + @safe string object_number_bibliography() const @property { return (o_n_bibliography==0) ? "" : o_n_bibliography.to!string; } - string object_number_book_index() const @property { + @safe string object_number_book_index() const @property { return (o_n_book_index==0) ? "" : o_n_book_index.to!string; } - string object_number_blurb() const @property { + @safe string object_number_blurb() const @property { return (o_n_blurb==0) ? "" : o_n_blurb.to!string; } bool object_number_off = false; @@ -49,13 +49,13 @@ template ObjectSetter() { string[string][string] node; int ocn = 0; string identifier = ""; - string object_number() const @property { + @safe string object_number() const @property { return (ocn==0) ? "" : ocn.to!string; } int o_n_type = 0; int heading_lev_markup = 9; int heading_lev_collapsed = 9; - string marked_up_level() const @property { + @safe string marked_up_level() const @property { string _out; switch (heading_lev_markup) { case 0 : _out = "A"; break; diff --git a/src/doc_reform/meta/metadoc_show_config.d b/src/doc_reform/meta/metadoc_show_config.d index b71fbab..a432c3b 100644 --- a/src/doc_reform/meta/metadoc_show_config.d +++ b/src/doc_reform/meta/metadoc_show_config.d @@ -1,6 +1,6 @@ module doc_reform.meta.metadoc_show_config; template spineShowConfig() { - void spineShowConfig(T)( + @safe void spineShowConfig(T)( T doc_matters, ) { import diff --git a/src/doc_reform/meta/metadoc_show_make.d b/src/doc_reform/meta/metadoc_show_make.d index e656a29..854552a 100644 --- a/src/doc_reform/meta/metadoc_show_make.d +++ b/src/doc_reform/meta/metadoc_show_make.d @@ -1,6 +1,6 @@ module doc_reform.meta.metadoc_show_make; template spineShowMake() { - void spineShowMake(T)( + @safe void spineShowMake(T)( T doc_matters, ) { import diff --git a/src/doc_reform/meta/metadoc_show_metadata.d b/src/doc_reform/meta/metadoc_show_metadata.d index 0bd6854..05758b6 100644 --- a/src/doc_reform/meta/metadoc_show_metadata.d +++ b/src/doc_reform/meta/metadoc_show_metadata.d @@ -1,6 +1,6 @@ module doc_reform.meta.metadoc_show_metadata; template spineShowMetaData() { - void spineShowMetaData(T)( + @safe void spineShowMetaData(T)( T doc_matters, ) { import diff --git a/src/doc_reform/meta/metadoc_show_summary.d b/src/doc_reform/meta/metadoc_show_summary.d index 9f2e34b..f774a6d 100644 --- a/src/doc_reform/meta/metadoc_show_summary.d +++ b/src/doc_reform/meta/metadoc_show_summary.d @@ -1,6 +1,6 @@ module doc_reform.meta.metadoc_show_summary; template spineMetaDocSummary() { - void spineMetaDocSummary(S,T)( + @safe void spineMetaDocSummary(S,T)( const S doc_abstraction, T doc_matters, ) { -- cgit v1.2.3