aboutsummaryrefslogtreecommitdiffhomepage
path: root/org/ao_header_extract.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_header_extract.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_header_extract.org')
-rw-r--r--org/ao_header_extract.org665
1 files changed, 0 insertions, 665 deletions
diff --git a/org/ao_header_extract.org b/org/ao_header_extract.org
deleted file mode 100644
index f660147..0000000
--- a/org/ao_header_extract.org
+++ /dev/null
@@ -1,665 +0,0 @@
-#+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