aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--org/ao_conf_make_meta.org304
-rw-r--r--org/default_regex.org9
-rw-r--r--org/sdp.org69
-rw-r--r--src/sdp/ao/abstraction.d49
-rw-r--r--src/sdp/ao/composite_make.d109
-rw-r--r--src/sdp/ao/conf_make_meta.d14
-rw-r--r--src/sdp/ao/conf_make_meta_sdlang.d122
-rw-r--r--src/sdp/ao/rgx.d3
-rwxr-xr-xsrc/sdp/sdp.d12
9 files changed, 451 insertions, 240 deletions
diff --git a/org/ao_conf_make_meta.org b/org/ao_conf_make_meta.org
index 8cd73d9..25bcd4d 100644
--- a/org/ao_conf_make_meta.org
+++ b/org/ao_conf_make_meta.org
@@ -15,7 +15,7 @@
#+TAGS: assert(a) class(c) debug(d) mixin(m) sdp(s) tangle(T) template(t) WEB(W) noexport(n)
[[./sdp.org][sdp]] [[./][org/]]
-* 0. Header Hub :module:sdp:ao_conf_make_meta:
+* 0. header extract (native & sdlang) to AA :module:sdp:ao_conf_make_meta:
** module template
#+BEGIN_SRC d :tangle ../src/sdp/ao/conf_make_meta.d
@@ -30,7 +30,7 @@
program internally. Moved to associative array.
+/
module sdp.ao.conf_make_meta;
-template SiSUheaderExtractHub() {
+template docHeaderMakeAndMetaTupExtractAndConvertToAA() {
import
std.exception,
std.regex,
@@ -46,21 +46,23 @@ template SiSUheaderExtractHub() {
sdp.ao.rgx;
mixin SiSUrgxInit;
mixin SiSUheaderExtractNative;
- mixin SiSUheaderExtractSDLang;
+ mixin SiSUextractSDLang;
auto rgx = Rgx();
- auto SiSUheaderExtractHub(Src, DocMake)(
+ auto docHeaderMakeAndMetaTupExtractAndConvertToAA(DocMake, Src)(
+ DocMake conf_doc_make_aa,
Src header_src,
- DocMake conf_doc_make_aa
) {
debug(asserts){
static assert(is(typeof(header_src) == char[]));
static assert(is(typeof(conf_doc_make_aa) == string[string][string]));
}
auto head_native = HeaderDocMetadataAndMakeNativeToAA();
- auto head_sdlang = HeaderExtractSDL();
+ auto header_sdlang_tag = (!(header_src.match(rgx.native_header_meta_title)))
+ ? extractSDL().docHeaderSDLtagGet(header_src) // sdlang.ast.Tag
+ : null;
auto header_make_and_meta_tuple = (header_src.match(rgx.native_header_meta_title))
? (head_native.headerNativeToAA(header_src))
- : (head_sdlang.headerSDLangToAA(header_src, conf_doc_make_aa));
+ : (extractSDL().docHeaderSDLtoAA(conf_doc_make_aa, header_sdlang_tag));
static assert(!isTypeTuple!(header_make_and_meta_tuple));
static assert(header_make_and_meta_tuple.length==2);
return header_make_and_meta_tuple;
@@ -68,8 +70,8 @@ template SiSUheaderExtractHub() {
}
#+END_SRC
-* A. header sdlang (extract) :module:sdp:ao_conf_make_meta_sdlang:
-** module template
+* A. module sdlang :module:sdp:ao_conf_make_meta_sdlang:
+** 0. module template
#+BEGIN_SRC d :tangle ../src/sdp/ao/conf_make_meta_sdlang.d
/++
@@ -77,7 +79,7 @@ template SiSUheaderExtractHub() {
extract sdlang header return sdlang
+/
module sdp.ao.conf_make_meta_sdlang;
-template SiSUheaderExtractSDLang() {
+template SiSUextractSDLang() {
import
std.exception,
std.regex,
@@ -90,7 +92,7 @@ template SiSUheaderExtractSDLang() {
import
sdp.ao.defaults,
sdp.ao.rgx;
- struct HeaderExtractSDL {
+ struct extractSDL {
mixin SiSUregisters;
mixin SiSUrgxInit;
auto rgx = Rgx();
@@ -99,92 +101,37 @@ template SiSUheaderExtractSDLang() {
}
#+END_SRC
-** entry points
-*** _sdlang to associative array_
+** 1. sdlang header _extract root Tag_ :sdlang:root:tag:
#+name: ao_conf_make_meta_sdl
#+BEGIN_SRC d
-private auto sdlangToAAheaderMakeMeta(C,Tag)(C conf, Tag conf_sdlang) {
+private auto docHeaderSDLtagGet(Hs)(Hs src_header) {
debug(asserts){
- static assert(is(typeof(conf) == string[string][string]));
+ static assert(is(typeof(src_header) == char[]));
}
- foreach (maintag, subtags; conf) {
- foreach (subtag, content; subtags) {
- if (maintag in conf_sdlang.maybe.tags) {
- Tag _maintag = conf_sdlang.getTag(maintag);
- if ((subtag in _maintag.maybe.tags)
- && (_maintag.getTagValues(subtag).length > 0)) {
- debug(headersdlang) {
- writeln(__LINE__, ": ", maintag, ":", subtag, ": ", _maintag.getTagValues(subtag)[0]);
- }
- if (_maintag.getTagValues(subtag).length == 1) {
- conf[maintag][subtag] =
- (_maintag.getTagValues(subtag)[0]).to!string;
- } else if (_maintag.getTagValues(subtag).length > 1) {
- foreach (st; _maintag.getTagValues(subtag)) {
- conf[maintag][subtag] ~=
- st.to!string ~ ";";
- }
- }
- } else if ((subtag in _maintag.maybe.attributes)
- && (_maintag.maybe.attributes[subtag][0].value.length > 0)) {
- debug(headersdlang) {
- writeln(__LINE__, ": ", maintag, ":", subtag, ": ", conf_sdlang.tags[maintag][0].attributes[subtag][0].value);
- }
- conf[maintag][subtag] =
- (conf_sdlang.tags[maintag][0].attributes[subtag][0].value).to!string;
- }
- }
+ char[][] source_header_arr =
+ (cast(char[]) src_header).split(rgx.newline_eol_delimiter);
+ char[] _src_header;
+ foreach(header_line; source_header_arr) {
+ if (!match(header_line, rgx.comments)) {
+ _src_header ~= header_line ~ "\n";
}
}
- return conf;
-}
-#+END_SRC
-
-*** _conf settings_ sdlang
-
-#+name: ao_conf_make_meta_sdl
-#+BEGIN_SRC d
-private auto configSettingsSDLangToAAmake(Tag)(Tag conf_sdlang) {
- auto conf = sdlangToAAheaderMakeMeta(conf_aa_empty, conf_sdlang);
- return conf;
-}
-#+END_SRC
-
-*** _conf make_ sdlang
-
-#+name: ao_conf_make_meta_sdl
-#+BEGIN_SRC d
-private auto documentMakeSDLangToAAmake(Tag)(Tag document_make_sdlang) {
- auto dochead_make = sdlangToAAheaderMakeMeta(conf_aa_empty, document_make_sdlang);
- return dochead_make;
-}
-#+END_SRC
-
-** header :header:sdl:
-*** sdlang header parse and _extract root Tag_ :sdlang:root:tag:
-
-#+name: ao_conf_make_meta_sdl
-#+BEGIN_SRC d
-final private auto headerMakeSDLang(Hs)(Hs src_header) {
- debug(asserts){
- static assert(is(typeof(src_header) == string));
- }
scope(failure) {
stderr.writefln(
- "%s\n%s\n%s:%s failed here:\n src_header: %s",
+ "%s\n%s\n%s:%s failed here:\n _src_header: %s",
__MODULE__, __FUNCTION__,
__FILE__, __LINE__,
- src_header,
+ _src_header,
);
}
Tag sdl_root_header;
try {
- sdl_root_header = parseSource(src_header);
+ sdl_root_header = parseSource(_src_header.to!string);
}
catch(ParseException e) {
stderr.writeln("SDLang problem with this document header:");
- stderr.writeln(src_header);
+ stderr.writeln(_src_header);
// Error messages of the form:
// myFile.sdl(5:28): Error: Invalid integer suffix.
stderr.writeln(e.msg);
@@ -205,42 +152,62 @@ final private auto headerMakeSDLang(Hs)(Hs src_header) {
}
}
}
- return sdl_root_header;
+ return sdl_root_header; // sdlang.ast.Tag
}
#+END_SRC
-*** sdlang header _src text get_ :sdlang:get:src:
+** 2a. _sdlang to associative array_
#+name: ao_conf_make_meta_sdl
#+BEGIN_SRC d
-private auto headerSDLangGet(Hs)(Hs src_header) {
+private auto sdlangToAA(C,Tag)(C conf, Tag conf_sdlang) {
debug(asserts){
- static assert(is(typeof(src_header) == char[]));
+ static assert(is(typeof(conf) == string[string][string]));
}
- char[][] source_header_arr =
- (cast(char[]) src_header).split(rgx.newline_eol_delimiter);
- char[] header_clean;
- foreach(header_line; source_header_arr) {
- if (!match(header_line, rgx.comments)) {
- header_clean ~= header_line ~ "\n";
+ foreach (maintag, subtags; conf) {
+ /+ writeln(__LINE__, ": ", maintag, ":- ", subtags); +/
+ foreach (subtag, content; subtags) {
+ if (maintag in conf_sdlang.maybe.tags) {
+ Tag _maintag = conf_sdlang.getTag(maintag);
+ if ((subtag in _maintag.maybe.tags)
+ && (_maintag.getTagValues(subtag).length > 0)) {
+ debug(headersdlang) {
+ writeln(__LINE__, ": ", maintag, ":", subtag, ": ", _maintag.getTagValues(subtag)[0]);
+ }
+ if (_maintag.getTagValues(subtag).length == 1) {
+ conf[maintag][subtag] =
+ (_maintag.getTagValues(subtag)[0]).to!string;
+ } else if (_maintag.getTagValues(subtag).length > 1) {
+ foreach (st; _maintag.getTagValues(subtag)) {
+ conf[maintag][subtag] ~=
+ st.to!string ~ ";";
+ }
+ }
+ } else if ((subtag in _maintag.maybe.attributes)
+ && (_maintag.maybe.attributes[subtag][0].value.length > 0)) {
+ debug(headersdlang) {
+ writeln(__LINE__, ": ", maintag, ":", subtag, ": ", conf_sdlang.tags[maintag][0].attributes[subtag][0].value);
+ }
+ conf[maintag][subtag] =
+ (conf_sdlang.tags[maintag][0].attributes[subtag][0].value).to!string;
+ }
+ }
}
}
- /+ get sdlang tags +/
- auto header_sdlang=headerMakeSDLang(to!string(header_clean));
- return header_sdlang; // sdlang.ast.Tag
+ return conf;
}
#+END_SRC
-*** sdlang header to _associative array_ make sdlTag in :sdlang:aa:
+** 2b. sdlang header to _associative array_ make sdlTag in :sdlang:aa:
#+name: ao_conf_make_meta_sdl
#+BEGIN_SRC d
-private auto headerSDLangToAAmake(Tag,Ma)(Tag header_sdlang, Ma dochead_make) {
+private auto docHeaderSDLtoAA(Ma, Tag)(Ma dochead_make, Tag header_sdlang) {
debug(asserts){
static assert(is(typeof(dochead_make) == string[string][string]));
}
- dochead_make = sdlangToAAheaderMakeMeta(dochead_make, header_sdlang);
- auto dochead_meta = sdlangToAAheaderMakeMeta(meta_aa_empty, header_sdlang);
+ dochead_make = sdlangToAA(dochead_make, header_sdlang);
+ auto dochead_meta = sdlangToAA(meta_aa_empty, header_sdlang);
if (dochead_meta["title"]["main"].empty) {
{
Tag _maintag = header_sdlang.getTag("title");
@@ -283,23 +250,8 @@ private auto headerSDLangToAAmake(Tag,Ma)(Tag header_sdlang, Ma dochead_make) {
}
#+END_SRC
-*** hub: get sdlang header and convert to associative array :hub:sdlang:aa:
-
-#+name: ao_conf_make_meta_sdl
-#+BEGIN_SRC d
-private auto headerSDLangToAA(Hs,Ma)(Hs header_sdlang_src, Ma conf_doc_make_aa) {
- debug(asserts){
- static assert(is(typeof(header_sdlang_src) == char[]));
- static assert(is(typeof(conf_doc_make_aa) == string[string][string]));
- }
- auto header_sdlang_tag = headerSDLangGet(header_sdlang_src);
- auto header_aa_tuple = headerSDLangToAAmake(header_sdlang_tag, conf_doc_make_aa);
- return header_aa_tuple;
-}
-#+END_SRC
-
-* B. header native :module:sdp:ao_conf_make_meta_native:
-** Header Native :header:native:markup_header_extract_native:
+* B. module native document header :module:sdp:ao_conf_make_meta_native:
+** module template
#+BEGIN_SRC d :tangle ../src/sdp/ao/conf_make_meta_native.d
/++
@@ -658,3 +610,129 @@ private auto headerNativeToAA(Hn)(Hn src_header) {
return t;
}
#+END_SRC
+
+* 0. composite make :module:sdp:ao_composite_make:
+** TODO 0. template
+*** composite make
+
+#+BEGIN_SRC d :tangle ../src/sdp/ao/composite_make.d
+/++
+ output hub<BR>
+ check & generate output types requested
++/
+module sdp.ao.composite_make;
+template compositeMkCnf() {
+ <<imports>>
+ mixin SiSUrgxInit;
+ string[] _substitutions;
+ string[string][] _sub;
+ string _bold;
+ string _italics;
+ string _emphasis;
+ auto compositeMkCnf(Mks...)(Mks makes) {
+ foreach (make; makes) {
+ auto rgx = Rgx();
+ if (auto z = "make" in make) {
+ if (auto x = "substitute" in *z) {
+ foreach (m; (*x).matchAll(rgx.make_simple_substitutions_d)) {
+ _sub ~= ["match": (m["match"]), "replace": (m["replace"])];
+ _substitutions ~= format("`%s`,\"%s\"",
+ m["match"],
+ m["replace"],
+ );
+ }
+ foreach (m; (*x).matchAll(rgx.make_simple_substitutions_rb)) {
+ _sub ~= ["match": (m["match"]), "replace": (m["replace"])];
+ _substitutions ~= format("`%s`,\"%s\"",
+ m["match"],
+ m["replace"],
+ );
+ }
+ }
+ if (auto x = "bold" in *z) {
+ _bold = (*x).to!string;
+ }
+ if (auto x = "italics" in *z) {
+ _italics = (*x).to!string;
+ }
+ if (auto x = "emphasis" in *z) {
+ _emphasis = (*x).to!string;
+ }
+ }
+ }
+ struct _composite_make {
+ auto substitutions() {
+ auto _k = _sub;
+ return _k;
+ }
+ auto substitute() {
+ auto _k = _substitutions;
+ return _k;
+ }
+ auto italics() {
+ auto _k = _italics;
+ return _k;
+ }
+ auto bold() {
+ auto _k = _bold;
+ return _k;
+ }
+ auto emphasis() {
+ auto _k = _emphasis;
+ return _k;
+ }
+ }
+ return _composite_make();
+ }
+}
+#+END_SRC
+
+*** composite make aa
+#+BEGIN_SRC d :tangle ../src/sdp/ao/composite_make.d
+/++
+ output hub<BR>
+ check & generate output types requested
++/
+template compositeMkCnfAA() {
+ <<imports>>
+ mixin SiSUrgxInit;
+ string[] _substitutions;
+ string[string][] _sub;
+ auto rgx = Rgx();
+ auto compositeMkCnfAA(Mks...)(Mks makes) {
+ /+
+ - skip.first_make which is the "composite make output"
+ - pass config files as associative arrays,
+ - skip.last_make which is getopt, treat separately
+ +/
+ auto _composite_make = makes[0];
+ auto _opts = makes[$-1];
+ foreach (make; makes[1..$-1]) {
+ if (auto z = "make" in make) { // document head: make (part of individual document)
+ if (auto x = "substitute" in *z) {
+ _composite_make["make"]["substitute"] = *x;
+ }
+ if (auto x = "italics" in *z) {
+ _composite_make["make"]["italics"] = *x;
+ }
+ if (auto x = "bold" in *z) {
+ _composite_make["make"]["bold"] = *x;
+ }
+ if (auto x = "emphasis" in *z) {
+ _composite_make["make"]["emphasis"] = *x;
+ }
+ }
+ }
+ /+ logic for adding _opts make instructions to _composite make +/
+ return _composite_make;
+ }
+}
+#+END_SRC
+
+** initialize / imports
+
+#+name: imports
+#+BEGIN_SRC d
+import sdp.ao;
+import std.array;
+#+END_SRC
diff --git a/org/default_regex.org b/org/default_regex.org
index 04abbad..e1f8d26 100644
--- a/org/default_regex.org
+++ b/org/default_regex.org
@@ -83,6 +83,15 @@ static comment = ctRegex!(`^%+ `);
static comments = ctRegex!(`^%+ |^%+$`);
#+END_SRC
+** config
+
+#+name: ao_rgx
+#+BEGIN_SRC d
+/+ header +/
+static make_simple_substitutions_rb = ctRegex!(`(?P<substitution>/(?P<match>.+?)/,[ ]*['"](?P<replace>.+?)['"])`);
+static make_simple_substitutions_d = ctRegex!(`(?P<substitution>``(?P<match>.+?)``,[ ]*['"](?P<replace>.+?)['"])`);
+#+END_SRC
+
** native headers
*** native header :native:header:
diff --git a/org/sdp.org b/org/sdp.org
index f813c5d..d4e40b4 100644
--- a/org/sdp.org
+++ b/org/sdp.org
@@ -99,6 +99,7 @@ import
import
sdp.ao.abstraction_summary,
sdp.ao.abstract_doc_source,
+ sdp.ao.composite_make,
sdp.ao.conf_make_meta,
// sdp.ao.conf_make_meta_native,
sdp.ao.conf_make_meta_sdlang,
@@ -161,7 +162,7 @@ mixin CompileTimeInfo;
#+BEGIN_SRC d
mixin SiSUrgxInit;
mixin SiSUregisters;
-mixin SiSUheaderExtractSDLang;
+mixin SiSUextractSDLang;
mixin SiSUnode;
mixin SiSUbiblio;
mixin SiSUrgxInitFlags;
@@ -315,11 +316,10 @@ auto env = [
#+NAME: sdp_conf_files
#+BEGIN_SRC d
-auto sdl_root_configuration = configRead!()("conf.sdl", env);
-auto sdl_root_doc_make = configRead!()("sisu_document_make", env);
-auto confsdl = HeaderExtractSDL();
-auto conf_settings_aa = confsdl.configSettingsSDLangToAAmake(sdl_root_configuration);
-auto conf_doc_make_aa = confsdl.documentMakeSDLangToAAmake(sdl_root_doc_make);
+auto sdl_root_config_share = configRead!()("config_local", env);
+auto sdl_root_config_local = configRead!()("config_share", env);
+auto conf_composite_static_aa = extractSDL().sdlangToAA(conf_aa_empty, sdl_root_config_share);
+conf_composite_static_aa = extractSDL().sdlangToAA(conf_composite_static_aa, sdl_root_config_local);
#+END_SRC
** 2a. actions independed of processing files
@@ -432,7 +432,7 @@ writeln("no recognized filename");
break; // terminate, stop
#+END_SRC
-* 2. _document abstraction functions_ :module:sdp:abstraction:
+* 2. _document abstraction functions_ :module:sdp:abstraction:
** 0. module template
#+BEGIN_SRC d :tangle ../src/sdp/ao/abstraction.d
@@ -502,12 +502,35 @@ debug(header_and_body) {
#+BEGIN_SRC d
/+ ↓ split header into make and meta +/
auto _make_and_meta_tup =
- SiSUheaderExtractHub!()(_header_body_inserts[headBody.header], conf_doc_make_aa);
+ docHeaderMakeAndMetaTupExtractAndConvertToAA!()(conf_composite_static_aa, _header_body_inserts[headBody.header]);
static assert(!isTypeTuple!(_make_and_meta_tup));
static assert(_make_and_meta_tup.length==2);
#+END_SRC
-** 3. _document abstraction, tuple_ (pre-output-processing) :processing:
+** 3. composite make & settings?
+
+#+NAME: sdp_each_file_do_document_abstraction
+#+BEGIN_SRC d
+auto _make_config = compositeMkCnf!()(
+ conf_composite_static_aa,
+ _make_and_meta_tup[makeMeta.make],
+ // opts,
+);
+#+END_SRC
+
+** composite config & make (files & doc header) aa
+
+#+NAME: sdp_each_file_do_document_abstraction
+#+BEGIN_SRC d
+auto _make_and_conf_composite_static_plus_docheader_aa = compositeMkCnfAA!()(
+ conf_aa_empty,
+ conf_composite_static_aa,
+ _make_and_meta_tup[makeMeta.make],
+ opts,
+);
+#+END_SRC
+
+** 4. _document abstraction, tuple_ (pre-output-processing) :processing:
- [[./ao_doc_abstraction.org][ao_doc_abstraction]]
- prepare the document abstraction used in downstream processing
@@ -539,7 +562,7 @@ string[] _doc_epub_segnames_0_4 = da[docAbst.segnames_0_4];
auto _images = da[docAbst.images];
#+END_SRC
-** 4. _document matters_ (doc info gathered, various sources)
+** 5. _document matters_ (doc info gathered, various sources)
- prepare document_matters, miscellany about processing and the document of use
in downstream processing
@@ -560,12 +583,16 @@ struct DocumentMatters {
string[] _k = _doc_epub_segnames_0_4;
return _k;
}
+ auto dochead_meta() {
+ string[string][string] _k = _make_and_meta_tup[makeMeta.meta];
+ return _k;
+ }
auto dochead_make() {
string[string][string] _k = _make_and_meta_tup[makeMeta.make];
return _k;
}
- auto dochead_meta() {
- string[string][string] _k = _make_and_meta_tup[makeMeta.meta];
+ auto source_filename() {
+ string _k = fn_src;
return _k;
}
auto src_path_info() {
@@ -573,8 +600,12 @@ struct DocumentMatters {
auto _k = SiSUpathsSRC!()(_pwd, fn_src);
return _k;
}
- auto source_filename() {
- string _k = fn_src;
+ auto opt_action() {
+ bool[string] _k = opts;
+ return _k;
+ }
+ auto environment() {
+ auto _k = env;
return _k;
}
auto language() {
@@ -594,19 +625,11 @@ struct DocumentMatters {
auto _k = _images;
return _k;
}
- auto opt_action() {
- bool[string] _k = opts;
- return _k;
- }
- auto environment() {
- auto _k = env;
- return _k;
- }
}
auto doc_matters = DocumentMatters();
#+END_SRC
-* 3. document abstraction _summary_ :module:sdp:abstraction_summary:
+* 3. document abstraction _summary_ :module:sdp:abstraction_summary:
** 0. module template
#+BEGIN_SRC d :tangle ../src/sdp/ao/abstraction_summary.d
diff --git a/src/sdp/ao/abstraction.d b/src/sdp/ao/abstraction.d
index 317f841..b25f354 100644
--- a/src/sdp/ao/abstraction.d
+++ b/src/sdp/ao/abstraction.d
@@ -8,6 +8,7 @@ template SiSUabstraction() {
import
sdp.ao.abstraction_summary,
sdp.ao.abstract_doc_source,
+ sdp.ao.composite_make,
sdp.ao.conf_make_meta,
// sdp.ao.conf_make_meta_native,
sdp.ao.conf_make_meta_sdlang,
@@ -20,7 +21,7 @@ template SiSUabstraction() {
sdp.output.paths_source;
mixin SiSUrgxInit;
mixin SiSUregisters;
- mixin SiSUheaderExtractSDLang;
+ mixin SiSUextractSDLang;
mixin SiSUnode;
mixin SiSUbiblio;
mixin SiSUrgxInitFlags;
@@ -30,11 +31,10 @@ template SiSUabstraction() {
enum docAbst { doc_abstraction, section_keys, segnames, segnames_0_4, images }
auto rgx = Rgx();
auto SiSUabstraction(Fn,O,E)(Fn fn_src, O opts, E env){
- auto sdl_root_configuration = configRead!()("conf.sdl", env);
- auto sdl_root_doc_make = configRead!()("sisu_document_make", env);
- auto confsdl = HeaderExtractSDL();
- auto conf_settings_aa = confsdl.configSettingsSDLangToAAmake(sdl_root_configuration);
- auto conf_doc_make_aa = confsdl.documentMakeSDLangToAAmake(sdl_root_doc_make);
+ auto sdl_root_config_share = configRead!()("config_local", env);
+ auto sdl_root_config_local = configRead!()("config_share", env);
+ auto conf_composite_static_aa = extractSDL().sdlangToAA(conf_aa_empty, sdl_root_config_share);
+ conf_composite_static_aa = extractSDL().sdlangToAA(conf_composite_static_aa, sdl_root_config_local);
/+ ↓ read file (filename with path) +/
/+ ↓ file tuple of header and content +/
auto _header_body_inserts =
@@ -48,9 +48,20 @@ template SiSUabstraction() {
}
/+ ↓ split header into make and meta +/
auto _make_and_meta_tup =
- SiSUheaderExtractHub!()(_header_body_inserts[headBody.header], conf_doc_make_aa);
+ docHeaderMakeAndMetaTupExtractAndConvertToAA!()(conf_composite_static_aa, _header_body_inserts[headBody.header]);
static assert(!isTypeTuple!(_make_and_meta_tup));
static assert(_make_and_meta_tup.length==2);
+ auto _make_config = compositeMkCnf!()(
+ conf_composite_static_aa,
+ _make_and_meta_tup[makeMeta.make],
+ // opts,
+ );
+ auto _make_and_conf_composite_static_plus_docheader_aa = compositeMkCnfAA!()(
+ conf_aa_empty,
+ conf_composite_static_aa,
+ _make_and_meta_tup[makeMeta.make],
+ opts,
+ );
/+ ↓ document abstraction: process document, return abstraction as tuple +/
auto da = SiSUdocAbstraction!()(
_header_body_inserts[headBody.body_content],
@@ -79,12 +90,16 @@ template SiSUabstraction() {
string[] _k = _doc_epub_segnames_0_4;
return _k;
}
+ auto dochead_meta() {
+ string[string][string] _k = _make_and_meta_tup[makeMeta.meta];
+ return _k;
+ }
auto dochead_make() {
string[string][string] _k = _make_and_meta_tup[makeMeta.make];
return _k;
}
- auto dochead_meta() {
- string[string][string] _k = _make_and_meta_tup[makeMeta.meta];
+ auto source_filename() {
+ string _k = fn_src;
return _k;
}
auto src_path_info() {
@@ -92,8 +107,12 @@ template SiSUabstraction() {
auto _k = SiSUpathsSRC!()(_pwd, fn_src);
return _k;
}
- auto source_filename() {
- string _k = fn_src;
+ auto opt_action() {
+ bool[string] _k = opts;
+ return _k;
+ }
+ auto environment() {
+ auto _k = env;
return _k;
}
auto language() {
@@ -113,14 +132,6 @@ template SiSUabstraction() {
auto _k = _images;
return _k;
}
- auto opt_action() {
- bool[string] _k = opts;
- return _k;
- }
- auto environment() {
- auto _k = env;
- return _k;
- }
}
auto doc_matters = DocumentMatters();
auto t = tuple(doc_abstraction, doc_matters);
diff --git a/src/sdp/ao/composite_make.d b/src/sdp/ao/composite_make.d
new file mode 100644
index 0000000..c9df4a8
--- /dev/null
+++ b/src/sdp/ao/composite_make.d
@@ -0,0 +1,109 @@
+/++
+ output hub<BR>
+ check & generate output types requested
++/
+module sdp.ao.composite_make;
+template compositeMkCnf() {
+ import sdp.ao;
+ import std.array;
+ mixin SiSUrgxInit;
+ string[] _substitutions;
+ string[string][] _sub;
+ string _bold;
+ string _italics;
+ string _emphasis;
+ auto compositeMkCnf(Mks...)(Mks makes) {
+ foreach (make; makes) {
+ auto rgx = Rgx();
+ if (auto z = "make" in make) {
+ if (auto x = "substitute" in *z) {
+ foreach (m; (*x).matchAll(rgx.make_simple_substitutions_d)) {
+ _sub ~= ["match": (m["match"]), "replace": (m["replace"])];
+ _substitutions ~= format("`%s`,\"%s\"",
+ m["match"],
+ m["replace"],
+ );
+ }
+ foreach (m; (*x).matchAll(rgx.make_simple_substitutions_rb)) {
+ _sub ~= ["match": (m["match"]), "replace": (m["replace"])];
+ _substitutions ~= format("`%s`,\"%s\"",
+ m["match"],
+ m["replace"],
+ );
+ }
+ }
+ if (auto x = "bold" in *z) {
+ _bold = (*x).to!string;
+ }
+ if (auto x = "italics" in *z) {
+ _italics = (*x).to!string;
+ }
+ if (auto x = "emphasis" in *z) {
+ _emphasis = (*x).to!string;
+ }
+ }
+ }
+ struct _composite_make {
+ auto substitutions() {
+ auto _k = _sub;
+ return _k;
+ }
+ auto substitute() {
+ auto _k = _substitutions;
+ return _k;
+ }
+ auto italics() {
+ auto _k = _italics;
+ return _k;
+ }
+ auto bold() {
+ auto _k = _bold;
+ return _k;
+ }
+ auto emphasis() {
+ auto _k = _emphasis;
+ return _k;
+ }
+ }
+ return _composite_make();
+ }
+}
+/++
+ output hub<BR>
+ check & generate output types requested
++/
+template compositeMkCnfAA() {
+ import sdp.ao;
+ import std.array;
+ mixin SiSUrgxInit;
+ string[] _substitutions;
+ string[string][] _sub;
+ auto rgx = Rgx();
+ auto compositeMkCnfAA(Mks...)(Mks makes) {
+ /+
+ - skip.first_make which is the "composite make output"
+ - pass config files as associative arrays,
+ - skip.last_make which is getopt, treat separately
+ +/
+ auto _composite_make = makes[0];
+ auto _opts = makes[$-1];
+ foreach (make; makes[1..$-1]) {
+ if (auto z = "make" in make) { // document head: make (part of individual document)
+ if (auto x = "substitute" in *z) {
+ _composite_make["make"]["substitute"] = *x;
+ }
+ if (auto x = "italics" in *z) {
+ _composite_make["make"]["italics"] = *x;
+ }
+ if (auto x = "bold" in *z) {
+ _composite_make["make"]["bold"] = *x;
+ }
+ if (auto x = "emphasis" in *z) {
+ _composite_make["make"]["emphasis"] = *x;
+ }
+ }
+ }
+ /+ logic for adding _opts make instructions to _composite make +/
+ return _composite_make;
+ }
+}
diff --git a/src/sdp/ao/conf_make_meta.d b/src/sdp/ao/conf_make_meta.d
index 0f6d27d..1d7d86d 100644
--- a/src/sdp/ao/conf_make_meta.d
+++ b/src/sdp/ao/conf_make_meta.d
@@ -9,7 +9,7 @@
program internally. Moved to associative array.
+/
module sdp.ao.conf_make_meta;
-template SiSUheaderExtractHub() {
+template docHeaderMakeAndMetaTupExtractAndConvertToAA() {
import
std.exception,
std.regex,
@@ -25,21 +25,23 @@ template SiSUheaderExtractHub() {
sdp.ao.rgx;
mixin SiSUrgxInit;
mixin SiSUheaderExtractNative;
- mixin SiSUheaderExtractSDLang;
+ mixin SiSUextractSDLang;
auto rgx = Rgx();
- auto SiSUheaderExtractHub(Src, DocMake)(
+ auto docHeaderMakeAndMetaTupExtractAndConvertToAA(DocMake, Src)(
+ DocMake conf_doc_make_aa,
Src header_src,
- DocMake conf_doc_make_aa
) {
debug(asserts){
static assert(is(typeof(header_src) == char[]));
static assert(is(typeof(conf_doc_make_aa) == string[string][string]));
}
auto head_native = HeaderDocMetadataAndMakeNativeToAA();
- auto head_sdlang = HeaderExtractSDL();
+ auto header_sdlang_tag = (!(header_src.match(rgx.native_header_meta_title)))
+ ? extractSDL().docHeaderSDLtagGet(header_src) // sdlang.ast.Tag
+ : null;
auto header_make_and_meta_tuple = (header_src.match(rgx.native_header_meta_title))
? (head_native.headerNativeToAA(header_src))
- : (head_sdlang.headerSDLangToAA(header_src, conf_doc_make_aa));
+ : (extractSDL().docHeaderSDLtoAA(conf_doc_make_aa, header_sdlang_tag));
static assert(!isTypeTuple!(header_make_and_meta_tuple));
static assert(header_make_and_meta_tuple.length==2);
return header_make_and_meta_tuple;
diff --git a/src/sdp/ao/conf_make_meta_sdlang.d b/src/sdp/ao/conf_make_meta_sdlang.d
index 7e7dd62..f9fb17d 100644
--- a/src/sdp/ao/conf_make_meta_sdlang.d
+++ b/src/sdp/ao/conf_make_meta_sdlang.d
@@ -3,7 +3,7 @@
extract sdlang header return sdlang
+/
module sdp.ao.conf_make_meta_sdlang;
-template SiSUheaderExtractSDLang() {
+template SiSUextractSDLang() {
import
std.exception,
std.regex,
@@ -16,72 +16,37 @@ template SiSUheaderExtractSDLang() {
import
sdp.ao.defaults,
sdp.ao.rgx;
- struct HeaderExtractSDL {
+ struct extractSDL {
mixin SiSUregisters;
mixin SiSUrgxInit;
auto rgx = Rgx();
- private auto sdlangToAAheaderMakeMeta(C,Tag)(C conf, Tag conf_sdlang) {
+ private auto docHeaderSDLtagGet(Hs)(Hs src_header) {
debug(asserts){
- static assert(is(typeof(conf) == string[string][string]));
+ static assert(is(typeof(src_header) == char[]));
}
- foreach (maintag, subtags; conf) {
- foreach (subtag, content; subtags) {
- if (maintag in conf_sdlang.maybe.tags) {
- Tag _maintag = conf_sdlang.getTag(maintag);
- if ((subtag in _maintag.maybe.tags)
- && (_maintag.getTagValues(subtag).length > 0)) {
- debug(headersdlang) {
- writeln(__LINE__, ": ", maintag, ":", subtag, ": ", _maintag.getTagValues(subtag)[0]);
- }
- if (_maintag.getTagValues(subtag).length == 1) {
- conf[maintag][subtag] =
- (_maintag.getTagValues(subtag)[0]).to!string;
- } else if (_maintag.getTagValues(subtag).length > 1) {
- foreach (st; _maintag.getTagValues(subtag)) {
- conf[maintag][subtag] ~=
- st.to!string ~ ";";
- }
- }
- } else if ((subtag in _maintag.maybe.attributes)
- && (_maintag.maybe.attributes[subtag][0].value.length > 0)) {
- debug(headersdlang) {
- writeln(__LINE__, ": ", maintag, ":", subtag, ": ", conf_sdlang.tags[maintag][0].attributes[subtag][0].value);
- }
- conf[maintag][subtag] =
- (conf_sdlang.tags[maintag][0].attributes[subtag][0].value).to!string;
- }
- }
+ char[][] source_header_arr =
+ (cast(char[]) src_header).split(rgx.newline_eol_delimiter);
+ char[] _src_header;
+ foreach(header_line; source_header_arr) {
+ if (!match(header_line, rgx.comments)) {
+ _src_header ~= header_line ~ "\n";
}
}
- return conf;
- }
- private auto configSettingsSDLangToAAmake(Tag)(Tag conf_sdlang) {
- auto conf = sdlangToAAheaderMakeMeta(conf_aa_empty, conf_sdlang);
- return conf;
- }
- private auto documentMakeSDLangToAAmake(Tag)(Tag document_make_sdlang) {
- auto dochead_make = sdlangToAAheaderMakeMeta(conf_aa_empty, document_make_sdlang);
- return dochead_make;
- }
- final private auto headerMakeSDLang(Hs)(Hs src_header) {
- debug(asserts){
- static assert(is(typeof(src_header) == string));
- }
scope(failure) {
stderr.writefln(
- "%s\n%s\n%s:%s failed here:\n src_header: %s",
+ "%s\n%s\n%s:%s failed here:\n _src_header: %s",
__MODULE__, __FUNCTION__,
__FILE__, __LINE__,
- src_header,
+ _src_header,
);
}
Tag sdl_root_header;
try {
- sdl_root_header = parseSource(src_header);
+ sdl_root_header = parseSource(_src_header.to!string);
}
catch(ParseException e) {
stderr.writeln("SDLang problem with this document header:");
- stderr.writeln(src_header);
+ stderr.writeln(_src_header);
// Error messages of the form:
// myFile.sdl(5:28): Error: Invalid integer suffix.
stderr.writeln(e.msg);
@@ -102,30 +67,50 @@ template SiSUheaderExtractSDLang() {
}
}
}
- return sdl_root_header;
+ return sdl_root_header; // sdlang.ast.Tag
}
- private auto headerSDLangGet(Hs)(Hs src_header) {
+ private auto sdlangToAA(C,Tag)(C conf, Tag conf_sdlang) {
debug(asserts){
- static assert(is(typeof(src_header) == char[]));
+ static assert(is(typeof(conf) == string[string][string]));
}
- char[][] source_header_arr =
- (cast(char[]) src_header).split(rgx.newline_eol_delimiter);
- char[] header_clean;
- foreach(header_line; source_header_arr) {
- if (!match(header_line, rgx.comments)) {
- header_clean ~= header_line ~ "\n";
+ foreach (maintag, subtags; conf) {
+ /+ writeln(__LINE__, ": ", maintag, ":- ", subtags); +/
+ foreach (subtag, content; subtags) {
+ if (maintag in conf_sdlang.maybe.tags) {
+ Tag _maintag = conf_sdlang.getTag(maintag);
+ if ((subtag in _maintag.maybe.tags)
+ && (_maintag.getTagValues(subtag).length > 0)) {
+ debug(headersdlang) {
+ writeln(__LINE__, ": ", maintag, ":", subtag, ": ", _maintag.getTagValues(subtag)[0]);
+ }
+ if (_maintag.getTagValues(subtag).length == 1) {
+ conf[maintag][subtag] =
+ (_maintag.getTagValues(subtag)[0]).to!string;
+ } else if (_maintag.getTagValues(subtag).length > 1) {
+ foreach (st; _maintag.getTagValues(subtag)) {
+ conf[maintag][subtag] ~=
+ st.to!string ~ ";";
+ }
+ }
+ } else if ((subtag in _maintag.maybe.attributes)
+ && (_maintag.maybe.attributes[subtag][0].value.length > 0)) {
+ debug(headersdlang) {
+ writeln(__LINE__, ": ", maintag, ":", subtag, ": ", conf_sdlang.tags[maintag][0].attributes[subtag][0].value);
+ }
+ conf[maintag][subtag] =
+ (conf_sdlang.tags[maintag][0].attributes[subtag][0].value).to!string;
+ }
+ }
}
}
- /+ get sdlang tags +/
- auto header_sdlang=headerMakeSDLang(to!string(header_clean));
- return header_sdlang; // sdlang.ast.Tag
+ return conf;
}
- private auto headerSDLangToAAmake(Tag,Ma)(Tag header_sdlang, Ma dochead_make) {
+ private auto docHeaderSDLtoAA(Ma, Tag)(Ma dochead_make, Tag header_sdlang) {
debug(asserts){
static assert(is(typeof(dochead_make) == string[string][string]));
}
- dochead_make = sdlangToAAheaderMakeMeta(dochead_make, header_sdlang);
- auto dochead_meta = sdlangToAAheaderMakeMeta(meta_aa_empty, header_sdlang);
+ dochead_make = sdlangToAA(dochead_make, header_sdlang);
+ auto dochead_meta = sdlangToAA(meta_aa_empty, header_sdlang);
if (dochead_meta["title"]["main"].empty) {
{
Tag _maintag = header_sdlang.getTag("title");
@@ -166,14 +151,5 @@ template SiSUheaderExtractSDLang() {
static assert(t.length==2);
return t;
}
- private auto headerSDLangToAA(Hs,Ma)(Hs header_sdlang_src, Ma conf_doc_make_aa) {
- debug(asserts){
- static assert(is(typeof(header_sdlang_src) == char[]));
- static assert(is(typeof(conf_doc_make_aa) == string[string][string]));
- }
- auto header_sdlang_tag = headerSDLangGet(header_sdlang_src);
- auto header_aa_tuple = headerSDLangToAAmake(header_sdlang_tag, conf_doc_make_aa);
- return header_aa_tuple;
- }
}
}
diff --git a/src/sdp/ao/rgx.d b/src/sdp/ao/rgx.d
index a5e7a9c..595087d 100644
--- a/src/sdp/ao/rgx.d
+++ b/src/sdp/ao/rgx.d
@@ -38,6 +38,9 @@ template SiSUrgxInit() {
static comment = ctRegex!(`^%+ `);
static comments = ctRegex!(`^%+ |^%+$`);
/+ header +/
+ static make_simple_substitutions_rb = ctRegex!(`(?P<substitution>/(?P<match>.+?)/,[ ]*['"](?P<replace>.+?)['"])`);
+ static make_simple_substitutions_d = ctRegex!(`(?P<substitution>``(?P<match>.+?)``,[ ]*['"](?P<replace>.+?)['"])`);
+ /+ header +/
static main_headers =
ctRegex!(`^(?:creator|title|rights|date|original|classify|identifier|notes|publisher|make|links)$`, "m");
static native_header = ctRegex!(`^@([a-z_]+):(?:\s|$)`);
diff --git a/src/sdp/sdp.d b/src/sdp/sdp.d
index 891c23f..0b90096 100755
--- a/src/sdp/sdp.d
+++ b/src/sdp/sdp.d
@@ -16,6 +16,7 @@ import
import
sdp.ao.abstraction_summary,
sdp.ao.abstract_doc_source,
+ sdp.ao.composite_make,
sdp.ao.conf_make_meta,
// sdp.ao.conf_make_meta_native,
sdp.ao.conf_make_meta_sdlang,
@@ -32,7 +33,7 @@ mixin CompileTimeInfo;
void main(string[] args) {
mixin SiSUrgxInit;
mixin SiSUregisters;
- mixin SiSUheaderExtractSDLang;
+ mixin SiSUextractSDLang;
mixin SiSUnode;
mixin SiSUbiblio;
mixin SiSUrgxInitFlags;
@@ -151,11 +152,10 @@ void main(string[] args) {
"pwd" : environment["PWD"],
"home" : environment["HOME"],
];
- auto sdl_root_configuration = configRead!()("conf.sdl", env);
- auto sdl_root_doc_make = configRead!()("sisu_document_make", env);
- auto confsdl = HeaderExtractSDL();
- auto conf_settings_aa = confsdl.configSettingsSDLangToAAmake(sdl_root_configuration);
- auto conf_doc_make_aa = confsdl.documentMakeSDLangToAAmake(sdl_root_doc_make);
+ auto sdl_root_config_share = configRead!()("config_local", env);
+ auto sdl_root_config_local = configRead!()("config_share", env);
+ auto conf_composite_static_aa = extractSDL().sdlangToAA(conf_aa_empty, sdl_root_config_share);
+ conf_composite_static_aa = extractSDL().sdlangToAA(conf_composite_static_aa, sdl_root_config_local);
if (!(opts["skip-output"])) {
outputHubOp!()(opts);
}