aboutsummaryrefslogtreecommitdiffhomepage
path: root/org/sdp.org
diff options
context:
space:
mode:
Diffstat (limited to 'org/sdp.org')
-rw-r--r--org/sdp.org254
1 files changed, 254 insertions, 0 deletions
diff --git a/org/sdp.org b/org/sdp.org
new file mode 100644
index 0000000..b9c9f85
--- /dev/null
+++ b/org/sdp.org
@@ -0,0 +1,254 @@
+#+TITLE: Emacs config file written in org-mode
+#+AUTHOR: Ralph Amissah
+#+EMAIL: ralph.amissah@gmail.com
+#+STARTUP: indent
+#+LANGUAGE: en
+#+OPTIONS: H:3 num:nil toc:t \n:nil @:t ::t |:t ^:nil -:t f:t *:t <:t
+#+OPTIONS: TeX:t LaTeX:t skip:nil d:nil todo:t pri:nil tags:not-in-toc
+#+OPTIONS: author:nil email:nil creator:nil timestamp:nil
+#+OPTIONS: ^:nil _:nil#+OPTIONS: ^:nil _:nil
+#+EXPORT_SELECT_TAGS: export
+#+EXPORT_EXCLUDE_TAGS: noexport
+#+TAGS: Amissah(A) Class(c) WEB(W) noexport(n)
+
+* sdp.d
+Deal with imports.
+Take command line instructions and process files as instructed.
+** imports
+#+name: sdp_imports
+#+BEGIN_SRC d :exports none
+import
+ std.stdio,
+ std.file,
+ std.exception,
+ // std.path,
+ std.regex,
+ std.utf,
+ std.string,
+ std.array,
+ std.json,
+ std.process,
+ std.typecons,
+ std.algorithm,
+ std.range,
+ std.container,
+ std.traits,
+ // std.variant,
+ lib.sdp.ao_output_debugs, // ao_output_debugs.d ao_output_debugs.org
+ lib.sdp.ao_defaults, // ao_defaults.d ao_defaults.arg
+ lib.sdp.ao_rgx, // ao_rgx.d ao_rgx.org
+ lib.sdp.ao_interface, // ao_interface.d ao_interface.arg
+ lib.sdp.ao_emitter, // ao_emitter.d ao_emitter.org
+ lib.sdp.ao_scan_inserts, // ao_scan_inserts.d ao_scan_inserts.org
+ lib.sdp.ao_markup_source_raw, // ao_markup_source_raw.d ao_markup_source_raw.org
+ lib.sdp.ao_abstract_doc_source, // ao_abstract_doc_source.d ao_abstract_doc_source.org
+ lib.sdp.ao_assertions, // ao_assertions.d ao_assertions.org
+ lib.sdp.ao_object_setter, // ao_object_setter.d ao_object_setter.org
+ lib.sdp.ao_utils; // ao_utils.d ao_utils.org
+ // std.conv;
+import std.conv : to;
+#+end_src
+** argv [+3]
+*** argv mixins
+#+name: sdp_argv
+#+BEGIN_SRC d :exports none
+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["fucshia"],
+ "~ run failure ~",
+ scr_txt_color["off"],
+ );
+ }
+ // writeln("1");
+}
+#+end_src
+*** argv loop
+#+name: sdp_argv
+#+BEGIN_SRC d :exports none
+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++;
+ }
+}
+#+end_src
+*** each file [+2]
+**** filename provided [+1]
+***** scope
+#+name: sdp_each_file_do
+#+BEGIN_SRC d :exports none
+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"
+);
+#+end_src
+***** send for processing
+#+name: sdp_each_file_do
+#+BEGIN_SRC d :exports none
+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);
+#+end_src
+***** debug document parts (checkdoc)
+#+name: sdp_each_file_do
+#+BEGIN_SRC d :exports none
+// 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
+#+end_src
+***** on exit
+#+name: sdp_each_file_do
+#+BEGIN_SRC d :exports none
+scope(exit) {
+ destroy(msc);
+ destroy(t);
+ destroy(contents);
+ destroy(make_json);
+ destroy(metadata_json);
+ destroy(bookindex_unordered_hashes);
+ destroy(fn_src);
+ destroy(biblio);
+}
+#+end_src
+**** no filename provided
+#+name: sdp_no_filename_provided
+#+BEGIN_SRC d :exports none
+/* no recognized filename provided */
+writeln("no recognized filename");
+break;
+// terminate, stop
+#+end_src
+* tangles
+** code structure :sdp.d:
+#+name: tangle_sdp
+#+BEGIN_SRC d :tangle ../lib/sdp/sdp.d :exports none :noweb yes
+#!/usr/bin/env rdmd
+/*
+ sdp
+ sdp.d
+*/
+<<sdp_imports>>
+mixin RgxInit; mixin Interfaces; mixin Emitters;
+void main(string[] argv) {
+ <<sdp_argv>>
+ foreach(fn_src; fns_src) {
+ if (!empty(fn_src)) {
+ <<sdp_each_file_do>>
+ } else {
+ <<sdp_no_filename_provided>>
+ }
+ }
+}
+#+end_src