aboutsummaryrefslogtreecommitdiffhomepage
path: root/lib/sdp.d
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sdp.d')
-rwxr-xr-xlib/sdp.d196
1 files changed, 196 insertions, 0 deletions
diff --git a/lib/sdp.d b/lib/sdp.d
new file mode 100755
index 0000000..7f94128
--- /dev/null
+++ b/lib/sdp.d
@@ -0,0 +1,196 @@
+#!/usr/bin/env rdmd
+
+/*
+ sdp
+ sdp.d
+*/
+/+ sdp sisu document parser +/
+import
+ std.algorithm,
+ std.array,
+ std.container,
+ std.file,
+ std.exception,
+ std.json,
+ // std.path,
+ std.process,
+ std.range,
+ std.regex,
+ std.stdio,
+ std.string,
+ std.traits,
+ std.typecons,
+ std.utf,
+ // std.variant,
+ 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_interface, // sdp/ao_interface.d
+ lib.sdp.ao_markup_source_raw, // sdp/ao_markup_source_raw.d
+ lib.sdp.ao_object_setter, // sdp/ao_object_setter.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_utils; // sdp/ao_utils.d
+ // std.conv;
+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();
+ // struct DocumentParts {
+ // string[string][] contents;
+ // JSONValue[string] metadata_json;
+ // JSONValue[string] make_json;
+ // string[][string][string] bookindex_unordered_hashes;
+ // JSONValue[] biblio;
+ // }
+ 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"],
+ );
+ }
+ // writeln("0");
+ }
+ scope(failure) {
+ debug(checkdoc) {
+ writeln(
+ scr_txt_color["fuchsia"],
+ "~ run failure ~",
+ scr_txt_color["off"],
+ );
+ }
+ // writeln("1");
+ }
+ 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
+ );
+ }
+ // writeln("0");
+ }
+ scope(failure) {
+ debug(checkdoc) {
+ writeln(
+ scr_txt_color["red"],
+ "~ document run failure ~",
+ scr_txt_color["off"],
+ fn_src
+ );
+ }
+ // writeln("1");
+ }
+ 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];
+ 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)) {
+ /+ if master file scan document source for document imports (inserted sub-documents) +/
+ auto ins = new Inserts();
+ auto markup_master_sourcefile_content =
+ ins.scan_doc_source(markup_sourcefile_content, fn_src);
+ msc = markup_master_sourcefile_content;
+ } else if (match(fn_src, rgx.src_fn)) {
+ msc = markup_sourcefile_content;
+ } else {
+ writeln("not a recognized filename");
+ }
+ debug(raw) {
+ foreach (line; msc) {
+ writeln(line);
+ }
+ }
+ /+ process document ao_abstract_doc_source SiSUdocAbstraction::Abstraction return abstraction as tuple +/
+ auto t =
+ abs.abstract_doc_source(msc);
+ 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];
+ // destroy(t);
+ // DocumentParts
+ debug(checkdoc) {
+ dbg.abstract_doc_source_debugs(
+ contents,
+ make_json,
+ metadata_json,
+ bookindex_unordered_hashes,
+ biblio,
+ fn_src,
+ actions
+ );
+ }
+ // compose abstract document markup state
+ // append book index
+ scope(exit) {
+ destroy(msc);
+ destroy(t);
+ destroy(contents);
+ destroy(make_json);
+ destroy(metadata_json);
+ destroy(bookindex_unordered_hashes);
+ destroy(fn_src);
+ destroy(biblio);
+ }
+ } else {
+ /* no recognized filename provided */
+ writeln("no recognized filename");
+ break;
+ // terminate, stop
+ }
+ }
+}