aboutsummaryrefslogtreecommitdiffhomepage
path: root/org/ao_conf_make_meta.org
diff options
context:
space:
mode:
authorRalph Amissah <ralph@amissah.com>2016-07-02 00:22:17 -0400
committerRalph Amissah <ralph@amissah.com>2019-04-04 14:48:18 -0400
commit951d136957c14bed5581a11fe41bdebd174d5ce8 (patch)
treea1e89be8661bc35a53104a2428dbd95de9a970e2 /org/ao_conf_make_meta.org
parentrename files ao_conf_make_meta.d from ao_header_extract.d (org/ output) (diff)
file renaming, whitespace cleaning
Diffstat (limited to 'org/ao_conf_make_meta.org')
-rw-r--r--org/ao_conf_make_meta.org665
1 files changed, 665 insertions, 0 deletions
diff --git a/org/ao_conf_make_meta.org b/org/ao_conf_make_meta.org
new file mode 100644
index 0000000..f660147
--- /dev/null
+++ b/org/ao_conf_make_meta.org
@@ -0,0 +1,665 @@
+#+TITLE: sdp header extract
+#+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 _: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
+#+PROPERTY: header-args :padline no :exports code :noweb yes
+#+EXPORT_SELECT_TAGS: export
+#+EXPORT_EXCLUDE_TAGS: noexport
+#+FILETAGS: :sdp:rel:ao:
+#+TAGS: assert(a) class(c) debug(d) mixin(m) sdp(s) tangle(T) template(t) WEB(W) noexport(n)
+
+[[./sdp.org][sdp]] [[./][org/]]
+* 0. sdlang to AA
+
+#+name: ao_conf_make_meta_sdl
+#+BEGIN_SRC d
+private auto sdlangToAAmake(string[string][string] conf, Tag conf_sdlang) {
+ foreach (maintag, subtags; conf) {
+ foreach (subtag, content; subtags) {
+ if (!(conf_sdlang.maybe.tags[maintag].empty)) {
+ if (!(conf_sdlang.tags[maintag][0].maybe.attributes[subtag].empty)
+ && (conf_sdlang.tags[maintag][0].attributes[subtag][0].value.length > 1)) {
+ writeln(conf_sdlang.tags[maintag][0].attributes[subtag][0].value);
+ conf[maintag][subtag] =
+ to!string(conf_sdlang.tags[maintag][0].attributes[subtag][0].value);
+ }
+ }
+ }
+ }
+ return conf;
+}
+#+END_SRC
+
+* A. conf settings sdlang
+
+#+name: ao_conf_make_meta_sdl
+#+BEGIN_SRC d
+private auto configSettingsSDLangToAAmake(Tag conf_sdlang) {
+ auto conf = sdlangToAAmake(conf_aa, conf_sdlang);
+ return conf;
+}
+#+END_SRC
+
+* B. conf make sdlang
+
+#+name: ao_conf_make_meta_sdl
+#+BEGIN_SRC d
+private auto documentMakeSDLangToAAmake(Tag document_make_sdlang) {
+ auto dochead_make = sdlangToAAmake(make_aa, document_make_sdlang);
+ /+
+ hm = "links";
+ if (!(document_make_sdlang.maybe.tags[hm].empty)) {
+ /+ TODO
+ stuff to fix
+ +/
+ // hs = "link";
+ // if (!(document_make_sdlang.tags[hm][0].maybe.attributes[hs].empty)
+ // && (document_make_sdlang.tags[hm][0].attributes[hs][0].value.length > 1)) {
+ // writeln(document_make_sdlang.tags[hm][0].attributes[hs][0].value);
+ // dochead_meta[hm][hs] =
+ // to!string(document_make_sdlang.tags[hm][0].attributes[hs][0].value);
+ // }
+ }
+ +/
+ // writeln(dochead_make);
+ return dochead_make;
+}
+#+END_SRC
+
+* C.a. header native :header:native:
+
+// mixin SiSUheader;
+// auto set_header = HeaderDocMetadataAndMakeNativeToAA(); // reintroduce
+
+** native header document metadata in associative array :aa:
+
+#+name: ao_markup_header_extract_native
+#+BEGIN_SRC d
+auto header_metadata_and_make_aa(
+ string header,
+ string[string][string] dochead_meta,
+ string[string][string] dochead_make
+)
+in { }
+body {
+ scope(exit) {
+ destroy(header);
+ destroy(dochead_meta);
+ destroy(dochead_make);
+ }
+ if (auto t = match(header, rgx.native_header_main)) {
+ char[][] header_obj_spl = split(
+ cast(char[]) header,
+ rgx.line_delimiter_ws_strip
+ );
+ auto hm = to!string(t.captures[1]);
+ if (match(hm, rgx.main_headers)) {
+ foreach (line; header_obj_spl) {
+ if (auto m = match(line, rgx.native_header_main)) {
+ if (!empty(m.captures[2])) {
+ if (hm == "creator") {
+ dochead_meta[hm]["author"] =
+ to!string(m.captures[2]);
+ } else if (hm == "title") {
+ dochead_meta[hm]["main"] =
+ to!string(m.captures[2]);
+ } else if (hm == "publisher") {
+ dochead_meta[hm]["name"] =
+ to!string(m.captures[2]);
+ }
+ }
+ } else if (auto s = match(line, rgx.native_header_sub)) {
+ if (!empty(s.captures[2])) {
+ auto hs = to!string(s.captures[1]);
+ if ((hm == "make" )
+ && (dochead_make[hm])) {
+ switch (hm) {
+ case "make":
+ if (match(hs, rgx.native_subhead_make)) {
+ if (dochead_make[hm][hs]) {
+ dochead_make[hm][hs] = to!string(s.captures[2]);
+ }
+ } else {
+ writeln("not a valid header type:", hm, ":", hs);
+ destroy(hm);
+ destroy(hs);
+ }
+ break;
+ default:
+ break;
+ }
+ } else if (dochead_meta[hm]) {
+ switch (hm) {
+ case "creator":
+ if (match(hs, rgx.native_subhead_creator)) {
+ if (dochead_meta[hm][hs]) {
+ dochead_meta[hm][hs] =
+ to!string(s.captures[2]);
+ }
+ } else {
+ writeln("not a valid header type:", hm, ":", hs);
+ destroy(hm);
+ destroy(hs);
+ }
+ break;
+ case "title":
+ if (match(hs, rgx.native_subhead_title)) {
+ if ((hs == "subtitle")
+ && (dochead_meta[hm]["sub"])) {
+ dochead_meta[hm]["sub"] =
+ to!string(s.captures[2]);
+ } else if (dochead_meta[hm][hs]) {
+ dochead_meta[hm][hs] =
+ to!string(s.captures[2]);
+ }
+ } else {
+ writeln("not a valid header type:", hm, ":", hs);
+ destroy(hm);
+ destroy(hs);
+ }
+ break;
+ case "rights":
+ if (match(hs, rgx.native_subhead_rights)) {
+ if (dochead_meta[hm][hs]) {
+ dochead_meta[hm][hs] =
+ to!string(s.captures[2]);
+ }
+ } else {
+ writeln("not a valid header type:", hm, ":", hs);
+ destroy(hm);
+ destroy(hs);
+ }
+ break;
+ case "date":
+ if (match(hs, rgx.native_subhead_date)) {
+ if (dochead_meta[hm][hs]) {
+ dochead_meta[hm][hs] =
+ to!string(s.captures[2]);
+ }
+ } else {
+ writeln("not a valid header type:", hm, ":", hs);
+ destroy(hm);
+ destroy(hs);
+ }
+ break;
+ case "original":
+ if (match(hs, rgx.native_subhead_original)) {
+ if (dochead_meta[hm][hs]) {
+ dochead_meta[hm][hs] =
+ to!string(s.captures[2]);
+ }
+ } else {
+ writeln("not a valid header type:", hm, ":", hs);
+ destroy(hm);
+ destroy(hs);
+ }
+ break;
+ case "classify":
+ if (match(hs, rgx.native_subhead_classify)) {
+ if (dochead_meta[hm][hs]) {
+ dochead_meta[hm][hs] =
+ to!string(s.captures[2]);
+ }
+ } else {
+ writeln("not a valid header type:", hm, ":", hs);
+ destroy(hm);
+ destroy(hs);
+ }
+ break;
+ case "identifier":
+ if (match(hs, rgx.native_subhead_identifier)) {
+ if (dochead_meta[hm][hs]) {
+ dochead_meta[hm][hs] =
+ to!string(s.captures[2]);
+ }
+ } else {
+ writeln("not a valid header type:", hm, ":", hs);
+ destroy(hm);
+ destroy(hs);
+ }
+ break;
+ case "notes":
+ if (match(hs, rgx.native_subhead_notes)) {
+ if (dochead_meta[hm][hs]) {
+ dochead_meta[hm][hs] =
+ to!string(s.captures[2]);
+ }
+ } else {
+ writeln("not a valid header type:", hm, ":", hs);
+ destroy(hm);
+ destroy(hs);
+ }
+ break;
+ case "publisher":
+ if (match(hs, rgx.native_subhead_publisher)) {
+ if (dochead_meta[hm][hs]) {
+ dochead_meta[hm][hs] =
+ to!string(s.captures[2]);
+ }
+ } else {
+ writeln("not a valid header type:", hm, ":", hs);
+ destroy(hm);
+ destroy(hs);
+ }
+ break;
+ case "links":
+ destroy(hm);
+ destroy(hs);
+ // if (match(hs, rgx.native_subhead_links)) {
+ // if (dochead_meta[hm][hs]) {
+ // dochead_meta[hm][hs] = to!string(s.captures[2]);
+ // }
+ // } else {
+ // writeln("not a valid header type:", hm, ":", hs);
+ // destroy(hm);
+ // destroy(hs);
+ // }
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ }
+ }
+ } else {
+ writeln("not a valid header type:", hm);
+ }
+ }
+ auto t = tuple(dochead_meta, dochead_make);
+ static assert(!isTypeTuple!(t));
+ return t;
+}
+#+END_SRC
+
+** native header extract to string object :string:
+
+#+name: ao_markup_header_extract_native
+#+BEGIN_SRC d
+private auto native_header_extract(
+ char[] line,
+ ref int[string] line_occur,
+ ref string[string] an_object,
+ ref int[string] type
+) {
+ if (matchFirst(line, rgx.native_header_make)) { /+ matched header_make +/
+ debug(header1) { /+ writeln(line); +/ }
+ type["header"] = State.on;
+ type["header_make"] = State.on;
+ type["header_meta"] = State.off;
+ ++line_occur["header_make"];
+ an_object["obj"] ~= line ~= "\n";
+ } else if (matchFirst(line, rgx.native_header)) { /+ matched header_metadata +/
+ /+ (generic header match and not previously caught by header_make) +/
+ debug(header1) { /+ writeln(line); +/ }
+ type["header"] = State.on;
+ type["header_make"] = State.off;
+ type["header_meta"] = State.on;
+ ++line_occur["header_meta"];
+ an_object["obj"] ~= line ~= "\n";
+ } else if (type["header_make"] == State.on
+ && (line_occur["header_make"] > State.off)) { /+ header_make flag set +/
+ if (matchFirst(line, rgx.native_header_sub)) { /+ sub-header +/
+ debug(header1) { /+ writeln(line); +/ }
+ ++line_occur["header_make"];
+ an_object["obj"] ~= line ~= "\n";
+ }
+ } else if (type["header_meta"] == State.on
+ && (line_occur["header_meta"] > State.off)) { /+ header_metadata flag set +/
+ if (matchFirst(line, rgx.native_header_sub)) { /+ sub-header +/
+ debug(header1) { /+ writeln(line); +/ }
+ ++line_occur["header_meta"];
+ an_object["obj"] ~= line ~= "\n";
+ }
+ }
+ return an_object;
+}
+#+END_SRC
+
+** native header reset states :reset:
+
+#+name: ao_markup_header_extract_native
+#+BEGIN_SRC d
+auto header_reset_states_common(
+ ref int[string] line_occur,
+ ref string[string] an_object,
+ ref int[string] type
+) {
+ // line_occur["header"] = State.off;
+ line_occur["header_make"] = State.off;
+ line_occur["header_meta"] = State.off;
+ type["header"] = State.off;
+ // type["header_make"] = State.off;
+ // type["header_meta"] = State.off;
+ an_object.remove("obj");
+ an_object.remove("is");
+ an_object.remove("attrib");
+}
+#+END_SRC
+
+** hub: native header start :hub:
+
+#+name: ao_markup_header_extract_native
+#+BEGIN_SRC d
+private auto headerNativeToAA(in char[] src_header) {
+ auto type = flags_type_init;
+ type = [
+ "header" : State.off,
+ "header_make" : State.off,
+ "header_meta" : State.off,
+ ];
+ string[string] an_object;
+ int[string] line_occur;
+ auto dochead_make = make_aa;
+ auto dochead_meta = meta_aa;
+ auto set_header = HeaderDocMetadataAndMakeNativeToAA();
+ char[][] source_header_arr =
+ split(cast(char[]) src_header, rgx.line_delimiter);
+ foreach(header_line; source_header_arr) {
+ if (auto m = matchFirst(header_line, rgx.comment)) {
+ /+ matched comment +/
+ debug(comment) {
+ // tell_l("blue", header_line);
+ }
+ header_reset_states_common(line_occur, an_object, type);
+ // type["header_make"] = State.off;
+ // type["header_meta"] = State.off;
+ } else if ((matchFirst(header_line, rgx.native_header))
+ || (type["header_make"] == State.on
+ && (line_occur["header_make"] > State.off))
+ || (type["header_meta"] == State.on
+ && (line_occur["header_meta"] > State.off))) {
+ if (header_line.length == 0) {
+ /+ header_make instructions (current line empty) +/
+ auto dochead_metadata_and_make =
+ set_header.header_metadata_and_make_aa(strip(an_object["obj"]), dochead_meta, dochead_make);
+ static assert(!isTypeTuple!(dochead_metadata_and_make));
+ dochead_meta = dochead_metadata_and_make[0];
+ dochead_make = dochead_metadata_and_make[1];
+ header_reset_states_common(line_occur, an_object, type);
+ type["header_make"] = State.off;
+ type["header_meta"] = State.off;
+ writeln(dochead_metadata_and_make);
+ } else {
+ an_object = native_header_extract(header_line, line_occur, an_object, type);
+ }
+ } else {
+ // writeln(__LINE__);
+ }
+ }
+ auto t = tuple(
+ dochead_make,
+ dochead_meta,
+ );
+ return t;
+}
+#+END_SRC
+
+* C.b. header sdlang :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(in string src_header) {
+ scope(failure) {
+ stderr.writefln(
+ "%s\n%s\n%s:%s failed here:\n src_header: %s",
+ __MODULE__, __FUNCTION__,
+ __FILE__, __LINE__,
+ src_header,
+ );
+ }
+ Tag sdl_root_header;
+ try {
+ sdl_root_header = parseSource(src_header);
+ }
+ catch(SDLangParseException e) {
+ stderr.writeln("SDLang problem with this document header:");
+ stderr.writeln(src_header);
+ // Error messages of the form:
+ // myFile.sdl(5:28): Error: Invalid integer suffix.
+ stderr.writeln(e.msg);
+ }
+ debug(sdlang) {
+ writeln("header SDL:");
+ writeln(sdl_root_header.toSDLDocument());
+ }
+ return sdl_root_header;
+}
+#+END_SRC
+
+** sdlang header get :sdlang:get:src:
+
+#+name: ao_conf_make_meta_sdl
+#+BEGIN_SRC d
+private auto headerSDLangGet(in char[] src_header) {
+ char[][] source_header_arr =
+ split(cast(char[]) src_header, rgx.line_delimiter);
+ char[] header_clean;
+ // TODO
+ foreach(header_line; source_header_arr) {
+ if (!match(header_line, rgx.comments)) {
+ header_clean ~= header_line ~ "\n";
+ // writeln(header_line);
+ }
+ }
+ /+ get sdlang tags +/
+ auto header_sdlang=headerMakeSDLang(to!string(header_clean));
+ debug(sdlang) {
+ writeln("--------------");
+ stdout.rawWrite( header_sdlang.toSDLDocument() );
+ writeln("--------------");
+ Value test = header_sdlang.tags["title"][0].values[0];
+ assert(test == typeid(string));
+ writeln(header_sdlang.maybe.tags["title"]);
+ writeln(header_sdlang.maybe.tags["title"][0].maybe.attributes["subtitle"]);
+ }
+ return header_sdlang; // sdlang.ast.Tag
+}
+#+END_SRC
+
+** sdlang header to associative array make sdlTag in :sdlang:aa:
+
+#+name: ao_conf_make_meta_sdl
+#+BEGIN_SRC d
+private auto headerSDLangToAAmake(Tag header_sdlang, string[string][string] dochead_make) {
+ dochead_make = sdlangToAAmake(dochead_make, header_sdlang);
+ auto dochead_meta = sdlangToAAmake(meta_aa, header_sdlang);
+ /+
+ /+ dochead +/
+ string hm;
+ string hs;
+ /+ meta +/
+ auto dochead_meta = meta_aa;
+ hm = "title";
+ if (!(header_sdlang.maybe.tags[hm].empty)) {
+ /+ TODO Title REQUIRED +/
+ hs = "main";
+ if (!(header_sdlang.tags[hm].empty)
+ && (header_sdlang.tags[hm][0].values[0].length > 1)) {
+ writeln(header_sdlang.tags[hm][0].values[0]);
+ dochead_meta[hm][hs] =
+ to!string(header_sdlang.tags[hm][0].values[0]);
+ // to!string(header_sdlang.tags[hm][0].attributes[hs][0].value);
+ } else if (!(header_sdlang.tags[hm][0].maybe.attributes[hs].empty)
+ && (header_sdlang.tags[hm][0].attributes[hs][0].value.length > 1)) {
+ writeln(header_sdlang.tags[hm][0].attributes[hs][0].value);
+ dochead_meta[hm][hs] =
+ to!string(header_sdlang.tags[hm][0].attributes[hs][0].value);
+ } else {
+ writeln("Required header metadata Title, missing");
+ }
+ hs = "sub";
+ if (!(header_sdlang.tags[hm][0].maybe.attributes[hs].empty)
+ && (header_sdlang.tags[hm][0].attributes[hs][0].value.length > 1)) {
+ writeln(header_sdlang.tags[hm][0].attributes[hs][0].value);
+ dochead_meta[hm][hs] =
+ to!string(header_sdlang.tags[hm][0].attributes[hs][0].value);
+ } else if (!(header_sdlang.tags[hm][0].maybe.attributes["subtitle"].empty)
+ && (header_sdlang.tags[hm][0].attributes["subtitle"][0].value.length > 1)) {
+ writeln(header_sdlang.tags[hm][0].attributes["subtitle"][0].value);
+ dochead_meta[hm][hs] =
+ to!string(header_sdlang.tags[hm][0].attributes["subtitle"][0].value);
+ }
+ // full title composite (main + sub)
+ // hs = "full";
+ // dochead_meta[hm][hs] = dochead_meta[hm]["main"] ~ dochead_meta[hm]["sub"];
+ hs = "language";
+ if (!(header_sdlang.tags[hm][0].maybe.attributes["lang"].empty)
+ && (header_sdlang.tags[hm][0].attributes["lang"][0].value.length > 1)) {
+ writeln(header_sdlang.tags[hm][0].attributes["lang"][0].value);
+ dochead_meta[hm][hs] =
+ to!string(header_sdlang.tags[hm][0].attributes["lang"][0].value);
+ } else if (!(header_sdlang.tags[hm][0].maybe.attributes[hs].empty)
+ && (header_sdlang.tags[hm][0].attributes[hs][0].value.length > 1)) {
+ writeln(header_sdlang.tags[hm][0].attributes[hs][0].value);
+ dochead_meta[hm][hs] =
+ to!string(header_sdlang.tags[hm][0].attributes[hs][0].value);
+ }
+ }
+ hm = "creator";
+ if (!(header_sdlang.maybe.tags[hm].empty)) {
+ /+ Creator / Author REQUIRED +/
+ /+ TODO
+ - decide on representation for & deal with multiple authors;
+ - author(s) full name;
+ - author(s) surname & other parts
+ +/
+ hs = "author";
+ if (!(header_sdlang.tags[hm][0].maybe.attributes[hs].empty)
+ && (header_sdlang.tags[hm][0].attributes[hs][0].value.length > 1)) {
+ writeln(header_sdlang.tags[hm][0].attributes[hs][0].value);
+ dochead_meta[hm][hs] =
+ to!string(header_sdlang.tags[hm][0].attributes[hs][0].value);
+ }
+ }
+ hm = "links";
+ if (!(header_sdlang.maybe.tags[hm].empty)) {
+ /+ TODO
+ stuff to fix
+ +/
+ // hs = "link";
+ // if (!(header_sdlang.tags[hm][0].maybe.attributes[hs].empty)
+ // && (header_sdlang.tags[hm][0].attributes[hs][0].value.length > 1)) {
+ // writeln(header_sdlang.tags[hm][0].attributes[hs][0].value);
+ // dochead_meta[hm][hs] =
+ // to!string(header_sdlang.tags[hm][0].attributes[hs][0].value);
+ // }
+ }
+ hm = "publisher";
+ if (!(header_sdlang.maybe.tags[hm].empty)) {
+ hs = "name";
+ if (!(header_sdlang.tags[hm][0].maybe.attributes[hs].empty)
+ && (header_sdlang.tags[hm][0].attributes[hs][0].value.length > 1)) {
+ writeln(header_sdlang.tags[hm][0].attributes[hs][0].value);
+ dochead_meta[hm][hs] =
+ to!string(header_sdlang.tags[hm][0].attributes[hs][0].value);
+ }
+ }
+ }
+ +/
+ auto t = tuple(dochead_make, dochead_meta);
+ static assert(!isTypeTuple!(t));
+ return t;
+}
+#+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(char[] header_sdlang_src, string[string][string] conf_doc_make_aa) {
+ auto header_sdlang_tag = headerSDLangGet(header_sdlang_src); // sdlang.ast.Tag
+ auto header_aa_tuple = headerSDLangToAAmake(header_sdlang_tag, conf_doc_make_aa);
+ return header_aa_tuple;
+}
+#+END_SRC
+
+* tangles (code structure) :tangle:
+** 1. Header Hub :ao_markup_header_extract:
+
+the header is passed as text (lopped off top of a sisu markup file until the
+required first heading ^A~), determine whether is a native header or sdlang one
+with a regex check if whether it contains the "native header" required tag/field
+@title: then process accordingly as a "native header" or "sdlang header"
+converting the metadata and make instructions to a common json format used by
+program internally. Moved to associative array.
+
+#+BEGIN_SRC d :tangle ../src/sdp/ao_conf_make_meta.d
+/+
+ extract native/orig header return associative array
++/
+template SiSUheaderExtractHub() {
+ private import
+ std.regex;
+ private import
+ ao_rgx;
+ struct HeaderDocMetadataAndMake {
+ mixin SiSUheaderExtractNative;
+ mixin SiSUheaderExtractSDLang;
+ auto rgx = Rgx();
+ private auto headerContentAA(char[] header_src, string[string][string] conf_doc_make_aa) {
+ auto head_native = HeaderDocMetadataAndMakeNativeToAA();
+ auto head_sdlang = HeaderExtractSDL();
+ writeln(__LINE__);
+ auto header_make_and_meta_tuple = (match(header_src, rgx.native_header_meta_title))
+ ? (head_native.headerNativeToAA(header_src))
+ : (head_sdlang.headerSDLangToAA(header_src, conf_doc_make_aa));
+ writeln(__LINE__);
+ static assert(!isTypeTuple!(header_make_and_meta_tuple));
+ return header_make_and_meta_tuple;
+ }
+ }
+}
+#+END_SRC
+
+** 2a. Header Native :ao_markup_header_extract_native:
+
+#+BEGIN_SRC d :tangle ../src/sdp/ao_conf_make_meta_native.d
+/+
+ extract native/orig header return associative array
++/
+template SiSUheaderExtractNative() {
+ private import
+ std.exception,
+ std.regex,
+ std.utf,
+ std.conv : to;
+ private import
+ ao_rgx;
+ struct HeaderDocMetadataAndMakeNativeToAA {
+ mixin SiSUregisters;
+ mixin SiSUrgxInitFlags;
+ mixin RgxInit;
+ auto rgx = Rgx();
+ enum State { off, on }
+ string hm, hs;
+ <<ao_markup_header_extract_native>>
+ }
+}
+#+END_SRC
+
+** 2b. Header SDLang :ao_markup_header_extract_sdlang:
+
+#+BEGIN_SRC d :tangle ../src/sdp/ao_conf_make_meta_sdlang.d
+/+
+ extract sdl header return sdl
++/
+template SiSUheaderExtractSDLang() {
+ private import
+ std.regex;
+ private import
+ ao_rgx;
+ struct HeaderExtractSDL {
+ mixin SiSUregisters;
+ mixin RgxInit;
+ auto rgx = Rgx();
+ <<ao_conf_make_meta_sdl>>
+ <<ao_conf_make_meta_sdl_to_aa>>
+ }
+}
+#+END_SRC