diff options
Diffstat (limited to 'lib/sdp/sdp.d')
-rw-r--r-- | lib/sdp/sdp.d | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/lib/sdp/sdp.d b/lib/sdp/sdp.d new file mode 100644 index 0000000..3bfbc5b --- /dev/null +++ b/lib/sdp/sdp.d @@ -0,0 +1,161 @@ +#!/usr/bin/env rdmd +/* +#+OPTIONS: ^:nil _:nil#+OPTIONS: ^:nil _:nil +* sdp.d :sdp: +*/ +import + std.stdio, + std.file, + std.regex, + std.utf, + std.string, + std.array, + std.json, + std.process, + std.exception, + std.typecons, + std.algorithm, + std.range, + std.container, + std.traits, + lib.sdp.ao_output_debugs, // ao_output_debugs.d + lib.sdp.ao_defaults, // ao_defaults.d + lib.sdp.ao_rgx, // ao_rgx.d + lib.sdp.ao_interface, // ao_interface.d + lib.sdp.ao_emitter, // ao_emitter.d + lib.sdp.ao_scan_inserts, // ao_scan_inserts.d + lib.sdp.ao_markup_source_raw, // ao_markup_source_raw.d + lib.sdp.ao_abstract_doc_source, // ao_abstract_doc_source.d + lib.sdp.ao_assertions, // ao_assertions.d + lib.sdp.ao_object_setter, // ao_object_setter.d + lib.sdp.ao_utils; // ao_utils.d +import std.conv : to; +mixin RgxInit; mixin Interfaces; mixin Emitters; +void main(string argv[]) { + mixin SiSUheader; + mixin SiSUbiblio; + mixin SiSUrgxInitFlags; + mixin SiSUmarkupRaw; + mixin SiSUdocInserts; + mixin SiSUdocAbstraction; + mixin SiSUoutputDebugs; + mixin ScreenTxtColors; + auto cli = new CLI(); + auto raw = new MarkupRaw(); + auto abs = new Abstraction(); + auto dbg = new SDPoutputDebugs(); + char[][] msc; + string[1000] fns_src; + string flag_action; + string[string] actions; + int file_count; + actions = [ + "assert" : "yes", + ]; + auto rgx = new Rgx(); + scope(success) { + debug(checkdoc) { + writeln( + scr_txt_color["cyan"], + "~ run complete, ok ~ ", + scr_txt_color["off"], + ); + } + } + scope(failure) { + debug(checkdoc) { + writeln( + scr_txt_color["fucshia"], + "~ run failure ~", + scr_txt_color["off"], + ); + } + } + foreach(cmdlnins; argv) { + if (match(cmdlnins, rgx.flag_action)) { + flag_action ~= " " ~ cmdlnins; + actions = cli.extract_actions(cmdlnins, actions); + } else if (match(cmdlnins, rgx.src_pth)) { + fns_src[file_count] = cmdlnins; + file_count++; + } + } + foreach(fn_src; fns_src) { + if (!empty(fn_src)) { + scope(success) { + debug(checkdoc) { + writeln( + scr_txt_color["green"], + "~ document complete, ok ~ ", + scr_txt_color["off"], + fn_src + ); + } + } + scope(failure) { + debug(checkdoc) { + writeln( + scr_txt_color["red"], + "~ document run failure ~", + scr_txt_color["off"], + fn_src + ); + } + } + auto markup_sourcefile_content = + raw.markupSourceContentRawLineArray(fn_src); // alternative call + debug(insert) { + string[string] sysenv; + sysenv["pwd"] = shell("pwd"); + writeln(sysenv["pwd"]); + auto m = match(fn_src, rgx.src_pth); + auto markup_src_file_path = m.captures[1]; + writeln("markup source file path: ", markup_src_file_path); // writeln(m.captures[1]); + writeln(m.captures[2]); + } + if (match(fn_src, rgx.src_fn_master)) { + auto ins = new Inserts(); + auto markup_master_sourcefile_content = + ins.scan_doc_source(markup_sourcefile_content, fn_src); + msc = markup_master_sourcefile_content; + } else { + msc = markup_sourcefile_content; + } + debug(raw) { + foreach (line; msc) { + writeln(line); + } + } + auto t = + abs.abstract_doc_source(msc); + static assert(!isTypeTuple!(t)); + auto contents = t[0]; + auto metadata_json = t[1]; + auto make_json = t[2]; + auto bookindex_unordered_hashes = t[3]; + auto biblio = t[4]; + debug(checkdoc) { + dbg.abstract_doc_source_debugs( + contents, + make_json, + metadata_json, + bookindex_unordered_hashes, + biblio, + fn_src, + actions + ); + } + scope(exit) { + destroy(msc); + destroy(t); + destroy(contents); + destroy(make_json); + destroy(metadata_json); + destroy(bookindex_unordered_hashes); + destroy(fn_src); + destroy(biblio); + } + } else { // terminate, stop + } + } +} |