diff options
Diffstat (limited to 'org/sdp.org')
-rw-r--r-- | org/sdp.org | 254 |
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 |