aboutsummaryrefslogtreecommitdiffhomepage
path: root/lib/sdp.d
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sdp.d')
-rwxr-xr-xlib/sdp.d218
1 files changed, 87 insertions, 131 deletions
diff --git a/lib/sdp.d b/lib/sdp.d
index 0835623..4903be3 100755
--- a/lib/sdp.d
+++ b/lib/sdp.d
@@ -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 +/