aboutsummaryrefslogtreecommitdiffhomepage
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rwxr-xr-xlib/sdp.d196
-rw-r--r--lib/sdp/ao_abstract_doc_source.d4
-rw-r--r--lib/sdp/ao_defaults.d4
-rw-r--r--lib/sdp/ao_rgx.d4
-rw-r--r--lib/sdp/ao_scan_inserts.d32
5 files changed, 219 insertions, 21 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
+ }
+ }
+}
diff --git a/lib/sdp/ao_abstract_doc_source.d b/lib/sdp/ao_abstract_doc_source.d
index 303011b..941c3f0 100644
--- a/lib/sdp/ao_abstract_doc_source.d
+++ b/lib/sdp/ao_abstract_doc_source.d
@@ -6,7 +6,7 @@ mixin template SiSUdocAbstraction() {
class Abstraction {
/* abstract marked up document */
auto abstract_doc_source(char[][] markup_sourcefile_content) {
- /* initialize */
+ /+ initialize +/
mixin ObjectSetters;
mixin AssertionsOnMarkupDocumentStructure;
mixin AssertionsOnBlocks;
@@ -23,7 +23,7 @@ mixin template SiSUdocAbstraction() {
string[1024] biblio_arr_json = biblio_entry_tags_jsonstr;
JSONValue[1024] bib_arr_json;
uint[string] line_occur;
- int counter, previous_count, count_biblio_entry, ocn, ocn_, verse_line, bib_entry, heading_pointer, notepoint;
+ uint counter, previous_count, count_biblio_entry, ocn, ocn_, verse_line, bib_entry, heading_pointer, notepoint;
string indent_first, indent_second;
string[][string][string] bookindex_unordered_hashes;
bool bullet = true;
diff --git a/lib/sdp/ao_defaults.d b/lib/sdp/ao_defaults.d
index 6599e69..50c1b09 100644
--- a/lib/sdp/ao_defaults.d
+++ b/lib/sdp/ao_defaults.d
@@ -75,7 +75,7 @@ template SiSUheader() {
},
"links": {
}
- }`;
+ }`; // links
auto pointer_head_main =
[
"creator",
@@ -228,7 +228,7 @@ template SiSUbiblio() {
"note" : "",
"short_name" : "",
"id" : ""
- }`;
+ }`; // is: book, article, magazine, newspaper, blog, other
auto biblio_tag_map = [
"au" : "author_raw",
"ed" : "editor_raw",
diff --git a/lib/sdp/ao_rgx.d b/lib/sdp/ao_rgx.d
index 21101b5..7050d25 100644
--- a/lib/sdp/ao_rgx.d
+++ b/lib/sdp/ao_rgx.d
@@ -27,8 +27,10 @@ mixin template RgxInit() {
static levels_numbered_headings = ctRegex!(`^[0-7]$`);
/* insert markup file */
static insert_src_fn_ssi_or_sst = ctRegex!(`^<<\s*(?P<path>[a-zA-Z0-9._-]+/)*(?P<filename>[a-zA-Z0-9._-]+[.]ss[ti])$`);
- /* header & comments */
+ // static insert_ssi_or_sst_fn = ctRegex!(`^<<\s*[a-zA-Z0-9._-]+[.]ss[ti]`);
+ /* comments */
static comment = ctRegex!(`^%+ `);
+ /* header */
static header = ctRegex!(`^@([a-z_]+):(?:\s|$)`);
static header_make = ctRegex!(`^@(make):(?:\s|$)`);
static header_metadata = ctRegex!(`^@([a-z_]+):(?:\s|$)`);
diff --git a/lib/sdp/ao_scan_inserts.d b/lib/sdp/ao_scan_inserts.d
index ab705eb..54abb8f 100644
--- a/lib/sdp/ao_scan_inserts.d
+++ b/lib/sdp/ao_scan_inserts.d
@@ -1,7 +1,7 @@
-/*
+/+
inserts
ao_inserts.d
-*/
++/
mixin template SiSUdocInserts() {
class Inserts {
auto scan_subdoc_source(
@@ -87,8 +87,8 @@ mixin template SiSUdocInserts() {
markup_sourcesubfile_insert_content.length
);
}
- auto ins = new Inserts();
- /*
+ auto ins = new Inserts();
+ /+
1. load file,
2. read lines;
3. scan lines,
@@ -96,7 +96,7 @@ mixin template SiSUdocInserts() {
5. repeat 1
6. else
7. add line to new array;
- */
+ +/
} else {
ft1["header_make"] = 0;
ft1["header_metadata"] = 0;
@@ -192,16 +192,16 @@ mixin template SiSUdocInserts() {
markup_sourcefile_insert_content.length
);
}
- auto ins = new Inserts();
- auto t = ins.scan_subdoc_source(
- markup_sourcefile_insert_content, to!string(fn_src_insert), add
- );
- static assert(!isTypeTuple!(t));
- auto tmparr = t[0];
- auto addsub = t[1];
- cont_arbitrary_max_length_set[add .. addsub-1] = tmparr[0 .. $-1];
- add=addsub;
- /*
+ auto ins = new Inserts();
+ auto t = ins.scan_subdoc_source(
+ markup_sourcefile_insert_content, to!string(fn_src_insert), add
+ );
+ static assert(!isTypeTuple!(t));
+ auto tmparr = t[0];
+ auto addsub = t[1];
+ cont_arbitrary_max_length_set[add .. addsub-1] = tmparr[0 .. $-1];
+ add=addsub;
+ /+
1. load file,
2. read lines;
3. scan lines,
@@ -209,7 +209,7 @@ mixin template SiSUdocInserts() {
5. repeat 1
6. else
7. add line to new array;
- */
+ +/
} else {
ft["header_make"] = 0;
ft["header_metadata"] = 0;