diff options
Diffstat (limited to 'lib/sdp.d')
-rwxr-xr-x | lib/sdp.d | 218 |
1 files changed, 87 insertions, 131 deletions
@@ -4,18 +4,19 @@ sdp.d +/ /+ sdp sisu document parser +/ -import +private import + std.getopt, + std.process, + std.stdio, std.algorithm, std.array, std.container, - std.file, std.exception, std.json, // std.path, - std.process, std.range, std.regex, - std.stdio, + // std.stdio, std.string, std.traits, std.typecons, @@ -26,199 +27,154 @@ import import lib.sdp.compile_time_info, // sdp/compile_time_info.d lib.sdp.ao_abstract_doc_source, // sdp/ao_abstract_doc_source.d - lib.sdp.ao_assertions, // sdp/ao_assertions.d lib.sdp.ao_defaults, // sdp/ao_defaults.d - lib.sdp.ao_emitter, // sdp/ao_emitter.d - lib.sdp.ao_read_markup_source, // sdp/ao_read_markup_source.d - lib.sdp.ao_object_setter, // sdp/ao_object_setter.d + lib.sdp.ao_read_source_files, // sdp/ao_read_source_files.d lib.sdp.ao_output_debugs, // sdp/ao_output_debugs.d lib.sdp.ao_rgx, // sdp/ao_rgx.d - lib.sdp.ao_scan_inserts, // sdp/ao_scan_inserts.d - lib.sdp.ao_structs, // sdp/ao_structs.d - lib.sdp.ao_utils; // sdp/ao_utils.d + lib.sdp.ao_ansi_colors; // sdp/ao_ansi_colors.d // std.conv; -// import std.stdio; mixin(import("version.txt")); mixin CompileTimeInfo; -mixin RgxInit; mixin Emitters; -void main(string[] argv) { +mixin RgxInit; +void main(string[] args) { mixin SiSUheader; mixin SiSUbiblio; mixin SiSUrgxInitFlags; mixin SiSUmarkupRaw; - mixin SiSUdocInserts; mixin SiSUdocAbstraction; mixin SiSUoutputDebugs; mixin ScreenTxtColors; - auto cli = CLI(); auto raw = MarkupRaw(); auto abs = Abstraction(); auto dbg = SDPoutputDebugs(); - // struct DocumentParts { - // string[string][] contents; - // JSONValue[string] metadata_json; - // JSONValue[string] make_json; - // string[][string][string] bookindex_unordered_hashes; - // JSONValue[] biblio; - // } + /+ + struct DocumentParts { + string[string][] contents; + JSONValue[string] metadata_json; + JSONValue[string] make_json; + string[][string][string] bookindex_unordered_hashes; + JSONValue[] biblio; + } + +/ string[] fns_src; string flag_action; - string[string] actions; - actions = [ - "assert" : "yes", - ]; + string arg_unrecognized; auto rgx = Rgx(); scope(success) { debug(checkdoc) { writefln( "%s~ run complete, ok ~ %s (sdp-%s.%s.%s, %s v%s, %s %s)", - scr_txt_color["cyan"], - scr_txt_color["off"], - ver.major, - ver.minor, - ver.patch, - __VENDOR__, - __VERSION__, - bits, - os, + scr_txt_color["cyan"], scr_txt_color["off"], + ver.major, ver.minor, ver.patch, + __VENDOR__, __VERSION__, + bits, os, ); } // stderr.writeln("0"); } scope(failure) { - debug(checkdoc) { - writefln( - "%s~ run failure ~%s", - scr_txt_color["fuchsia"], - scr_txt_color["off"], - ); - } - // stderr.writeln("1"); - } - scope(exit) { debug(checkdoc) { - writefln( - "(%s v%s)", - __VENDOR__, - __VERSION__, + stderr.writefln( + "%s~ run failure ~%s", + scr_txt_color["fuchsia"], 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 ~= cmdlnins; + + bool[string] opt_action_bool = [ + "assertions" : false, + "html" : false, + "no_obj_cite_number" : false, + "verbose" : false, + ]; + auto helpInfo = getopt(args, + std.getopt.config.passThrough, + "assert", "--assert set optional assertions on", &opt_action_bool["assertions"], + "html", "--html process html output", &opt_action_bool["html"], + "no-ocn", "--no-ocn suppress object cite number output", &opt_action_bool["no_obj_cite_number"], + "verbose|v", "--verbose output to terminal", &opt_action_bool["verbose"], + ); + if (helpInfo.helpWanted) { + defaultGetoptPrinter("Some information about the program.", helpInfo.options); + } + foreach(arg; args) { + if (match(arg, rgx.flag_action)) { + flag_action ~= " " ~ arg; // flags not taken by getopt + } else if (match(arg, rgx.src_pth)) { + fns_src ~= arg; // gather input markup source file names for processing + } else { // anything remaining, unused + arg_unrecognized ~= " " ~ arg; } } foreach(fn_src; fns_src) { + // foreach(fn_src; fns_src) { if (!empty(fn_src)) { scope(success) { debug(checkdoc) { writefln( - "%s~ document complete, ok ~%s %s", - scr_txt_color["green"], - scr_txt_color["off"], - fn_src + "%s~ document complete, ok ~%s", + scr_txt_color["green"], scr_txt_color["off"], ); } // stderr.writeln("0"); } scope(failure) { debug(checkdoc) { - writefln( + stderr.writefln( "%s~ document run failure ~%s (%s v%s)\n\t%s", - scr_txt_color["red"], - scr_txt_color["off"], - __VENDOR__, - __VERSION__, + scr_txt_color["red"], scr_txt_color["off"], + __VENDOR__, __VERSION__, fn_src ); } // stderr.writeln("1"); } - scope(exit) { - debug(checkdoc) { - writeln( - fn_src - ); - } - } enforce( match(fn_src, rgx.src_pth), "not a sisu markup filename" ); - auto markup_sourcefile_content = - raw.markupSourceContentRawLineArray(fn_src); // alternative call - // raw.markupSourceLineArray(raw.markupSourceString(fn_src)); // alternative calls (milliseconds faster?) - debug(insert) { - string[string] sysenv; - sysenv["pwd"] = shell("pwd"); - writeln(sysenv["pwd"]); - auto m = match(fn_src, rgx.src_pth); - // auto m = match(fn_src, rgx.src_pth); - auto markup_src_file_path = m.captures[1]; - writefln( - "markup source file path: %s", - markup_src_file_path - ); // writeln(m.captures[1]); - writeln(m.captures[2]); - } - if (match(fn_src, rgx.src_fn_master)) { - /+ if master file .ssm - scan document source for document imports - (inserted sub-documents) - +/ - auto ins = Inserts(); - markup_sourcefile_content = - ins.scan_doc_source(markup_sourcefile_content, fn_src); - } else if (!match(fn_src, rgx.src_fn)) { - writeln("not a recognized filename"); - } - debug(raw) { - foreach (line; markup_sourcefile_content) { - writeln(line); - } - } - /+ process document ao_abstract_doc_source - SiSUdocAbstraction::Abstraction - return abstraction as tuple - +/ + /+ ↓ read file +/ + auto sourcefile_content = + raw.sourceContent(fn_src); + /+ ↓ porcess document, return abstraction as tuple +/ auto t = - abs.abstract_doc_source(markup_sourcefile_content); + abs.abstract_doc_source(sourcefile_content); static assert(!isTypeTuple!(t)); - auto contents = t[0]; - // static assert(!isIterable!(contents)); - auto metadata_json = t[1]; - auto make_json = t[2]; - auto bookindex_unordered_hashes = t[3]; - auto biblio = t[4]; + auto doc_ao_contents = t[0]; // contents ~ endnotes ~ bookindex; + // static assert(!isIterable!(doc_ao_contents)); + auto doc_ao_metadata_json = t[1]; + auto doc_ao_make_json = t[2]; + auto doc_ao_bookindex_unordered_hashes = t[3]; + auto doc_ao_biblio = t[4]; // destroy(t); - // DocumentParts - debug(checkdoc) { + /+ ↓ document parts +/ + debug(checkdoc) { // checkbook & dumpdoc dbg.abstract_doc_source_debugs( - contents, - make_json, - metadata_json, - bookindex_unordered_hashes, - biblio, + doc_ao_contents, + doc_ao_make_json, + doc_ao_metadata_json, + doc_ao_bookindex_unordered_hashes, + doc_ao_biblio, fn_src, - actions + opt_action_bool ); } - // compose abstract document markup state - // append book index scope(exit) { - destroy(markup_sourcefile_content); + debug(checkdoc) { + writefln( + "processed file: %s", + fn_src + ); + } + destroy(sourcefile_content); destroy(t); - destroy(contents); - destroy(make_json); - destroy(metadata_json); - destroy(bookindex_unordered_hashes); + destroy(doc_ao_contents); + destroy(doc_ao_make_json); + destroy(doc_ao_metadata_json); + destroy(doc_ao_bookindex_unordered_hashes); + destroy(doc_ao_biblio); destroy(fn_src); - destroy(biblio); } } else { /+ no recognized filename provided +/ |