#!/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 } } }