diff options
Diffstat (limited to 'org/ao_header_extract.org')
-rw-r--r-- | org/ao_header_extract.org | 1450 |
1 files changed, 1450 insertions, 0 deletions
diff --git a/org/ao_header_extract.org b/org/ao_header_extract.org new file mode 100644 index 0000000..3e06358 --- /dev/null +++ b/org/ao_header_extract.org @@ -0,0 +1,1450 @@ +#+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:niu:ao: +#+TAGS: assert(a) class(c) debug(d) mixin(m) sdp(s) tangle(T) template(t) WEB(W) noexport(n) + +[[./sdp.org][sdp]] [[./][org/]] +* header sdlang :header:sdlang: +** sdlang header parse and extract root Tag :root:tag: + +#+name: ao_header_extract_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 to json :header: +#+name: ao_header_extract_sdl +#+BEGIN_SRC d +private auto headerSDLangToJSON(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"]); + } + /+ TODO separate modules? sdlang then json + return header_sdlang; + // then do json module? + +/ + /+ TODO json next +/ + /+ TODO + auto dochead_make = parseJSON(header_make_jsonstr).object; + auto dochead_meta = parseJSON(header_meta_jsonstr).object; + auto hm = to!string(t.captures[1]); + auto hs = to!string(s.captures[1]); + if (dochead_make[hm][hs].type() == JSON_TYPE.STRING) { + dochead_make[hm][hs].str = to!string(s.captures[2]); + } + if (dochead_meta[hm][hs].type() == JSON_TYPE.STRING) { + dochead_meta[hm][hs].str = to!string(s.captures[2]); + } + +/ + /+ dochead +/ + string hm; + string hs; + /+ make +/ + auto dochead_make = parseJSON(header_make_jsonstr).object; + if (!(header_sdlang.maybe.tags["make"].empty)) { + hm = "make"; + hs = "bold"; + 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_make[hm][hs].str = + to!string(header_sdlang.tags[hm][0].attributes[hs][0].value); + } + hs = "breaks"; + 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_make[hm][hs].str = + to!string(header_sdlang.tags[hm][0].attributes[hs][0].value); + } + hs = "cover_image"; + 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_make[hm][hs].str = + to!string(header_sdlang.tags[hm][0].attributes[hs][0].value); + } + hs = "css"; + 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_make[hm][hs].str = + to!string(header_sdlang.tags[hm][0].attributes[hs][0].value); + } + hs = "emphasis"; + 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_make[hm][hs].str = + to!string(header_sdlang.tags[hm][0].attributes[hs][0].value); + } + hs = "footer"; + 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_make[hm][hs].str = + to!string(header_sdlang.tags[hm][0].attributes[hs][0].value); + } + hs = "headings"; + 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_make[hm][hs].str = + to!string(header_sdlang.tags[hm][0].attributes[hs][0].value); + } + hs = "home_button_image"; + 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_make[hm][hs].str = + to!string(header_sdlang.tags[hm][0].attributes[hs][0].value); + } + hs = "home_button_text"; + 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_make[hm][hs].str = + to!string(header_sdlang.tags[hm][0].attributes[hs][0].value); + } + hs = "italics"; + 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_make[hm][hs].str = + to!string(header_sdlang.tags[hm][0].attributes[hs][0].value); + } + hs = "num_top"; + 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_make[hm][hs].str = + to!string(header_sdlang.tags[hm][0].attributes[hs][0].value); + } + hs = "substitute"; + 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_make[hm][hs].str = + to!string(header_sdlang.tags[hm][0].attributes[hs][0].value); + } + hs = "texpdf_font"; + 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_make[hm][hs].str = + to!string(header_sdlang.tags[hm][0].attributes[hs][0].value); + } + } + /+ meta +/ + auto dochead_meta = parseJSON(header_meta_jsonstr).object; + 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].str = + 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].str = + 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].str = + 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].str = + 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].str = + 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].str = + to!string(header_sdlang.tags[hm][0].attributes[hs][0].value); + } + hs = "edition"; + 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].str = + to!string(header_sdlang.tags[hm][0].attributes[hs][0].value); + } + hs = "note"; + 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].str = + 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].str = + to!string(header_sdlang.tags[hm][0].attributes[hs][0].value); + } + hs = "author_email"; + 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].str = + to!string(header_sdlang.tags[hm][0].attributes[hs][0].value); + } + hs = "illustrator"; + 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].str = + to!string(header_sdlang.tags[hm][0].attributes[hs][0].value); + } + hs = "translator"; + 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].str = + to!string(header_sdlang.tags[hm][0].attributes[hs][0].value); + } + } + hm = "classify"; + if (!(header_sdlang.maybe.tags[hm].empty)) { + hs = "dewey"; + 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].str = + to!string(header_sdlang.tags[hm][0].attributes[hs][0].value); + } + hs = "keywords"; + 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].str = + to!string(header_sdlang.tags[hm][0].attributes[hs][0].value); + } + hs = "loc"; + 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].str = + to!string(header_sdlang.tags[hm][0].attributes[hs][0].value); + } + hs = "subject"; + 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].str = + to!string(header_sdlang.tags[hm][0].attributes[hs][0].value); + } + hs = "topic_register"; + 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].str = + to!string(header_sdlang.tags[hm][0].attributes[hs][0].value); + } + } + hm = "date"; + if (!(header_sdlang.maybe.tags[hm].empty)) { + hs = "added_to_site"; + 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].str = + to!string(header_sdlang.tags[hm][0].attributes[hs][0].value); + } + hs = "available"; + 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].str = + to!string(header_sdlang.tags[hm][0].attributes[hs][0].value); + } + hs = "created"; + 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].str = + to!string(header_sdlang.tags[hm][0].attributes[hs][0].value); + } + hs = "issued"; + 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].str = + to!string(header_sdlang.tags[hm][0].attributes[hs][0].value); + } + hs = "modified"; + 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].str = + to!string(header_sdlang.tags[hm][0].attributes[hs][0].value); + } + hs = "published"; + 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].str = + to!string(header_sdlang.tags[hm][0].attributes[hs][0].value); + } + hs = "valid"; + 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].str = + to!string(header_sdlang.tags[hm][0].attributes[hs][0].value); + } + } + hm = "identifier"; + if (!(header_sdlang.maybe.tags[hm].empty)) { + hs = "isbn"; + 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].str = + to!string(header_sdlang.tags[hm][0].attributes[hs][0].value); + } + hs = "oclc"; + 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].str = + to!string(header_sdlang.tags[hm][0].attributes[hs][0].value); + } + hs = "pg"; + 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].str = + 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].str = + // to!string(header_sdlang.tags[hm][0].attributes[hs][0].value); + // } + } + hm = "notes"; + if (!(header_sdlang.maybe.tags[hm].empty)) { + hs = "abstract"; + 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].str = + to!string(header_sdlang.tags[hm][0].attributes[hs][0].value); + } + hs = "description"; + 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].str = + to!string(header_sdlang.tags[hm][0].attributes[hs][0].value); + } + } + hm = "original"; + if (!(header_sdlang.maybe.tags[hm].empty)) { + hs = "language"; + 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].str = + to!string(header_sdlang.tags[hm][0].attributes[hs][0].value); + } + hs = "source"; + 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].str = + to!string(header_sdlang.tags[hm][0].attributes[hs][0].value); + } + hs = "title"; + 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].str = + 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].str = + to!string(header_sdlang.tags[hm][0].attributes[hs][0].value); + } + } + hm = "rights"; + if (!(header_sdlang.maybe.tags[hm].empty)) { + hs = "copyright"; + 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].str = + to!string(header_sdlang.tags[hm][0].attributes[hs][0].value); + } + hs = "cover"; + 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].str = + to!string(header_sdlang.tags[hm][0].attributes[hs][0].value); + } + hs = "illustrations"; + 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].str = + to!string(header_sdlang.tags[hm][0].attributes[hs][0].value); + } + hs = "license"; + 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].str = + to!string(header_sdlang.tags[hm][0].attributes[hs][0].value); + } + } + // writeln(dochead_make); + // writeln(dochead_meta); + auto t = tuple(dochead_make, dochead_meta); + static assert(!isTypeTuple!(t)); + return t; +} +#+END_SRC + +/+ +namespace:name values attributes { + children +} ++/ + +** +sdlang header to associative array+ :header: +#+name: ao_header_extract_sdl +#+BEGIN_SRC d +private auto headerSDLangToHash(in char[] src_header) { + char[][] source_header_arr = + split(cast(char[]) src_header, rgx.line_delimiter); + char[] header_clean; + string[string] header_make; + string[string][string] header_metadata; + 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)); + 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].attributes["subtitle"]); + if (!(header_sdlang.maybe.tags["make"].empty)) { + if (!(header_sdlang.tags["make"][0].maybe.attributes["bold"].empty) + && (header_sdlang.tags["make"][0].attributes["bold"][0].value.length > 1)) { + writeln(header_sdlang.tags["make"][0].attributes["bold"][0].value); + header_make["bold"] = + to!string(header_sdlang.tags["make"][0].attributes["bold"][0].value); + } else { + header_make["bold"] = ""; + } + if (!(header_sdlang.tags["make"][0].maybe.attributes["breaks"].empty) + && (header_sdlang.tags["make"][0].attributes["breaks"][0].value.length > 1)) { + writeln(header_sdlang.tags["make"][0].attributes["breaks"][0].value); + header_make["breaks"] = + to!string(header_sdlang.tags["make"][0].attributes["breaks"][0].value); + } else { + header_make["breaks"] = ""; + } + if (!(header_sdlang.tags["make"][0].maybe.attributes["cover_image"].empty) + && (header_sdlang.tags["make"][0].attributes["cover_image"][0].value.length > 1)) { + writeln(header_sdlang.tags["make"][0].attributes["cover_image"][0].value); + header_make["cover_image"] = + to!string(header_sdlang.tags["make"][0].attributes["cover_image"][0].value); + } else { + header_make["cover_image"] = ""; + } + if (!(header_sdlang.tags["make"][0].maybe.attributes["css"].empty) + && (header_sdlang.tags["make"][0].attributes["css"][0].value.length > 1)) { + writeln(header_sdlang.tags["make"][0].attributes["css"][0].value); + header_make["css"] = + to!string(header_sdlang.tags["make"][0].attributes["css"][0].value); + } else { + header_make["css"] = ""; + } + if (!(header_sdlang.tags["make"][0].maybe.attributes["emphasis"].empty) + && (header_sdlang.tags["make"][0].attributes["emphasis"][0].value.length > 1)) { + writeln(header_sdlang.tags["make"][0].attributes["emphasis"][0].value); + header_make["emphasis"] = + to!string(header_sdlang.tags["make"][0].attributes["emphasis"][0].value); + } else { + header_make["emphasis"] = ""; + } + if (!(header_sdlang.tags["make"][0].maybe.attributes["footer"].empty) + && (header_sdlang.tags["make"][0].attributes["footer"][0].value.length > 1)) { + writeln(header_sdlang.tags["make"][0].attributes["footer"][0].value); + header_make["footer"] = + to!string(header_sdlang.tags["make"][0].attributes["footer"][0].value); + } else { + header_make["footer"] = ""; + } + if (!(header_sdlang.tags["make"][0].maybe.attributes["headings"].empty) + && (header_sdlang.tags["make"][0].attributes["headings"][0].value.length > 1)) { + writeln(header_sdlang.tags["make"][0].attributes["headings"][0].value); + header_make["headings"] = + to!string(header_sdlang.tags["make"][0].attributes["headings"][0].value); + } else { + header_make["headings"] = ""; + } + if (!(header_sdlang.tags["make"][0].maybe.attributes["home_button_image"].empty) + && (header_sdlang.tags["make"][0].attributes["home_button_image"][0].value.length > 1)) { + writeln(header_sdlang.tags["make"][0].attributes["home_button_image"][0].value); + header_make["home_button_image"] = + to!string(header_sdlang.tags["make"][0].attributes["home_button_image"][0].value); + } else { + header_make["home_button_image"] = ""; + } + if (!(header_sdlang.tags["make"][0].maybe.attributes["home_button_text"].empty) + && (header_sdlang.tags["make"][0].attributes["home_button_text"][0].value.length > 1)) { + writeln(header_sdlang.tags["make"][0].attributes["home_button_text"][0].value); + header_make["home_button_text"] = + to!string(header_sdlang.tags["make"][0].attributes["home_button_text"][0].value); + } else { + header_make["home_button_text"] = ""; + } + if (!(header_sdlang.tags["make"][0].maybe.attributes["italics"].empty) + && (header_sdlang.tags["make"][0].attributes["italics"][0].value.length > 1)) { + writeln(header_sdlang.tags["make"][0].attributes["italics"][0].value); + header_make["italics"] = + to!string(header_sdlang.tags["make"][0].attributes["italics"][0].value); + } else { + header_make["italics"] = ""; + } + if (!(header_sdlang.tags["make"][0].maybe.attributes["num_top"].empty) + && (header_sdlang.tags["make"][0].attributes["num_top"][0].value.length > 1)) { + writeln(header_sdlang.tags["make"][0].attributes["num_top"][0].value); + header_make["num_top"] = + to!string(header_sdlang.tags["make"][0].attributes["num_top"][0].value); + } else { + header_make["num_top"] = ""; + } + if (!(header_sdlang.tags["make"][0].maybe.attributes["substitute"].empty) + && (header_sdlang.tags["make"][0].attributes["substitute"][0].value.length > 1)) { + writeln(header_sdlang.tags["make"][0].attributes["substitute"][0].value); + header_make["substitute"] = + to!string(header_sdlang.tags["make"][0].attributes["substitute"][0].value); + } else { + header_make["substitute"] = ""; + } + if (!(header_sdlang.tags["make"][0].maybe.attributes["texpdf_font"].empty) + && (header_sdlang.tags["make"][0].attributes["texpdf_font"][0].value.length > 1)) { + writeln(header_sdlang.tags["make"][0].attributes["texpdf_font"][0].value); + header_make["texpdf_font"] = + to!string(header_sdlang.tags["make"][0].attributes["texpdf_font"][0].value); + } else { + header_make["texpdf_font"] = ""; + } + } + if (!(header_sdlang.maybe.tags["title"].empty)) { + /+ Title REQUIRED +/ + if (!(header_sdlang.tags["title"].empty) + && (header_sdlang.tags["title"][0].values[0].length > 1)) { + writeln(header_sdlang.tags["title"][0].values[0]); + header_metadata["title"]["main"] = + to!string(header_sdlang.tags["title"][0].values[0]); + } else if (!(header_sdlang.tags["title"][0].maybe.attributes["main"].empty) + && (header_sdlang.tags["title"][0].attributes["main"][0].value.length > 1)) { + writeln(header_sdlang.tags["title"][0].attributes["main"][0].value); + header_metadata["title"]["main"] = + to!string(header_sdlang.tags["title"][0].attributes["main"][0].value); + } else { + writeln("Required header metadata Title, missing"); + header_metadata["title"]["main"] = ""; + } + if (!(header_sdlang.tags["title"][0].maybe.attributes["sub"].empty) + && (header_sdlang.tags["title"][0].attributes["sub"][0].value.length > 1)) { + writeln(header_sdlang.tags["title"][0].attributes["sub"][0].value); + header_metadata["title"]["sub"] = + to!string(header_sdlang.tags["title"][0].attributes["sub"][0].value); + } else if (!(header_sdlang.tags["title"][0].maybe.attributes["subtitle"].empty) + && (header_sdlang.tags["title"][0].attributes["subtitle"][0].value.length > 1)) { + writeln(header_sdlang.tags["title"][0].attributes["subtitle"][0].value); + header_metadata["title"]["sub"] = + to!string(header_sdlang.tags["title"][0].attributes["subtitle"][0].value); + } else { + header_metadata["title"]["sub"] = ""; + } + // full title composite (main + sub) + header_metadata["title"]["full"] = header_metadata["title"]["main"] ~ header_metadata["title"]["sub"]; + if (!(header_sdlang.tags["title"][0].maybe.attributes["lang"].empty) + && (header_sdlang.tags["title"][0].attributes["lang"][0].value.length > 1)) { + writeln(header_sdlang.tags["title"][0].attributes["lang"][0].value); + header_metadata["title"]["language"] = + to!string(header_sdlang.tags["title"][0].attributes["lang"][0].value); + } else if (!(header_sdlang.tags["title"][0].maybe.attributes["language"].empty) + && (header_sdlang.tags["title"][0].attributes["language"][0].value.length > 1)) { + writeln(header_sdlang.tags["title"][0].attributes["language"][0].value); + header_metadata["title"]["language"] = + to!string(header_sdlang.tags["title"][0].attributes["language"][0].value); + } else { + header_metadata["title"]["language"] = ""; + } + if (!(header_sdlang.tags["title"][0].maybe.attributes["edition"].empty) + && (header_sdlang.tags["title"][0].attributes["edition"][0].value.length > 1)) { + writeln(header_sdlang.tags["title"][0].attributes["edition"][0].value); + header_metadata["title"]["edition"] = + to!string(header_sdlang.tags["title"][0].attributes["edition"][0].value); + } else { + header_metadata["title"]["edition"] = ""; + } + if (!(header_sdlang.tags["title"][0].maybe.attributes["note"].empty) + && (header_sdlang.tags["title"][0].attributes["note"][0].value.length > 1)) { + writeln(header_sdlang.tags["title"][0].attributes["note"][0].value); + header_metadata["title"]["note"] = + to!string(header_sdlang.tags["title"][0].attributes["note"][0].value); + } else { + header_metadata["title"]["note"] = ""; + } + } + if (!(header_sdlang.maybe.tags["creator"].empty)) { + /+ Creator / Author REQUIRED +/ + /+ TODO + - decide on representation for & deal with multiple authors; + - author(s) full name; + - author(s) surname & other parts + +/ + if (!(header_sdlang.tags["creator"][0].maybe.attributes["author"].empty) + && (header_sdlang.tags["creator"][0].attributes["author"][0].value.length > 1)) { + writeln(header_sdlang.tags["creator"][0].attributes["author"][0].value); + header_metadata["creator"]["author"] = + to!string(header_sdlang.tags["creator"][0].attributes["author"][0].value); + } else { + header_metadata["creator"]["author"] = ""; + } + if (!(header_sdlang.tags["creator"][0].maybe.attributes["author_email"].empty) + && (header_sdlang.tags["creator"][0].attributes["author_email"][0].value.length > 1)) { + writeln(header_sdlang.tags["creator"][0].attributes["author_email"][0].value); + header_metadata["creator"]["author_email"] = + to!string(header_sdlang.tags["creator"][0].attributes["author_email"][0].value); + } else { + header_metadata["creator"]["author_email"] = ""; + } + if (!(header_sdlang.tags["creator"][0].maybe.attributes["illustrator"].empty) + && (header_sdlang.tags["creator"][0].attributes["illustrator"][0].value.length > 1)) { + writeln(header_sdlang.tags["creator"][0].attributes["illustrator"][0].value); + header_metadata["creator"][""] = + to!string(header_sdlang.tags["creator"][0].attributes["illustrator"][0].value); + } else { + header_metadata["creator"]["illustrator"] = ""; + } + if (!(header_sdlang.tags["creator"][0].maybe.attributes["translator"].empty) + && (header_sdlang.tags["creator"][0].attributes["translator"][0].value.length > 1)) { + writeln(header_sdlang.tags["creator"][0].attributes["translator"][0].value); + header_metadata["creator"]["translator"] = + to!string(header_sdlang.tags["creator"][0].attributes["translator"][0].value); + } else { + header_metadata["creator"][""] = ""; + } + } + if (!(header_sdlang.maybe.tags["classify"].empty)) { + if (!(header_sdlang.tags["classify"][0].maybe.attributes["dewey"].empty) + && (header_sdlang.tags["classify"][0].attributes["dewey"][0].value.length > 1)) { + writeln(header_sdlang.tags["classify"][0].attributes["dewey"][0].value); + header_metadata["classify"]["dewey"] = + to!string(header_sdlang.tags["classify"][0].attributes["dewey"][0].value); + } else { + header_metadata["classify"]["dewey"] = ""; + } + if (!(header_sdlang.tags["classify"][0].maybe.attributes["keyword"].empty) + && (header_sdlang.tags["classify"][0].attributes["keyword"][0].value.length > 1)) { + writeln(header_sdlang.tags["classify"][0].attributes["keyword"][0].value); + header_metadata["classify"]["keyword"] = + to!string(header_sdlang.tags["classify"][0].attributes["keyword"][0].value); + } else { + header_metadata["classify"]["keyword"] = ""; + } + if (!(header_sdlang.tags["classify"][0].maybe.attributes["loc"].empty) + && (header_sdlang.tags["classify"][0].attributes["loc"][0].value.length > 1)) { + writeln(header_sdlang.tags["classify"][0].attributes["loc"][0].value); + header_metadata["classify"]["loc"] = + to!string(header_sdlang.tags["classify"][0].attributes["loc"][0].value); + } else { + header_metadata["classify"]["loc"] = ""; + } + if (!(header_sdlang.tags["classify"][0].maybe.attributes["subject"].empty) + && (header_sdlang.tags["classify"][0].attributes["subject"][0].value.length > 1)) { + writeln(header_sdlang.tags["classify"][0].attributes["subject"][0].value); + header_metadata["classify"]["subject"] = + to!string(header_sdlang.tags["classify"][0].attributes["subject"][0].value); + } else { + header_metadata["classify"]["subject"] = ""; + } + if (!(header_sdlang.tags["classify"][0].maybe.attributes["topic_register"].empty) + && (header_sdlang.tags["classify"][0].attributes["topic_register"][0].value.length > 1)) { + writeln(header_sdlang.tags["classify"][0].attributes["topic_register"][0].value); + header_metadata["classify"]["topic_register"] = + to!string(header_sdlang.tags["classify"][0].attributes["topic_register"][0].value); + } else { + header_metadata["classify"]["topic_register"] = ""; + } + } + if (!(header_sdlang.maybe.tags["date"].empty)) { + if (!(header_sdlang.tags["date"][0].maybe.attributes["added_to_site"].empty) + && (header_sdlang.tags["date"][0].attributes["added_to_site"][0].value.length > 1)) { + writeln(header_sdlang.tags["date"][0].attributes["added_to_site"][0].value); + header_metadata["date"]["added_to_site"] = + to!string(header_sdlang.tags["date"][0].attributes["added_to_site"][0].value); + } else { + header_metadata["date"]["added_to_site"] = ""; + } + if (!(header_sdlang.tags["date"][0].maybe.attributes["available"].empty) + && (header_sdlang.tags["date"][0].attributes["available"][0].value.length > 1)) { + writeln(header_sdlang.tags["date"][0].attributes["available"][0].value); + header_metadata["date"]["available"] = + to!string(header_sdlang.tags["date"][0].attributes["available"][0].value); + } else { + header_metadata["date"]["available"] = ""; + } + if (!(header_sdlang.tags["date"][0].maybe.attributes["created"].empty) + && (header_sdlang.tags["date"][0].attributes["created"][0].value.length > 1)) { + writeln(header_sdlang.tags["date"][0].attributes["created"][0].value); + header_metadata["date"]["created"] = + to!string(header_sdlang.tags["date"][0].attributes["created"][0].value); + } else { + header_metadata["date"]["created"] = ""; + } + if (!(header_sdlang.tags["date"][0].maybe.attributes["issued"].empty) + && (header_sdlang.tags["date"][0].attributes["issued"][0].value.length > 1)) { + writeln(header_sdlang.tags["date"][0].attributes["issued"][0].value); + header_metadata["date"]["issued"] = + to!string(header_sdlang.tags["date"][0].attributes["issued"][0].value); + } else { + header_metadata["date"]["issued"] = ""; + } + if (!(header_sdlang.tags["date"][0].maybe.attributes["modified"].empty) + && (header_sdlang.tags["date"][0].attributes["modified"][0].value.length > 1)) { + writeln(header_sdlang.tags["date"][0].attributes["modified"][0].value); + header_metadata["date"]["modified"] = + to!string(header_sdlang.tags["date"][0].attributes["modified"][0].value); + } else { + header_metadata["date"]["modified"] = ""; + } + if (!(header_sdlang.tags["date"][0].maybe.attributes["published"].empty) + && (header_sdlang.tags["date"][0].attributes["published"][0].value.length > 1)) { + writeln(header_sdlang.tags["date"][0].attributes["published"][0].value); + header_metadata["date"]["published"] = + to!string(header_sdlang.tags["date"][0].attributes["published"][0].value); + } else { + header_metadata["date"]["published"] = ""; + } + if (!(header_sdlang.tags["date"][0].maybe.attributes["valid"].empty) + && (header_sdlang.tags["date"][0].attributes["valid"][0].value.length > 1)) { + writeln(header_sdlang.tags["date"][0].attributes["valid"][0].value); + header_metadata["date"]["valid"] = + to!string(header_sdlang.tags["date"][0].attributes["valid"][0].value); + } else { + header_metadata["date"]["valid"] = ""; + } + } + if (!(header_sdlang.maybe.tags["identifier"].empty)) { + if (!(header_sdlang.tags["identifier"][0].maybe.attributes["isbn"].empty) + && (header_sdlang.tags["identifier"][0].attributes["isbn"][0].value.length > 1)) { + writeln(header_sdlang.tags["identifier"][0].attributes["isbn"][0].value); + header_metadata["identifier"]["isbn"] = + to!string(header_sdlang.tags["identifier"][0].attributes["isbn"][0].value); + } else { + header_metadata["identifier"]["isbn"] = ""; + } + if (!(header_sdlang.tags["identifier"][0].maybe.attributes["oclc"].empty) + && (header_sdlang.tags["identifier"][0].attributes["oclc"][0].value.length > 1)) { + writeln(header_sdlang.tags["identifier"][0].attributes["oclc"][0].value); + header_metadata["identifier"]["oclc"] = + to!string(header_sdlang.tags["identifier"][0].attributes["oclc"][0].value); + } else { + header_metadata["identifier"]["oclc"] = ""; + } + if (!(header_sdlang.tags["identifier"][0].maybe.attributes["pg"].empty) + && (header_sdlang.tags["identifier"][0].attributes["pg"][0].value.length > 1)) { + writeln(header_sdlang.tags["identifier"][0].attributes["pg"][0].value); + header_metadata["identifier"]["pg"] = + to!string(header_sdlang.tags["identifier"][0].attributes["pg"][0].value); + } else { + header_metadata["identifier"]["pg"] = ""; + } + } + if (!(header_sdlang.maybe.tags["links"].empty)) { + /+ TODO + stuff to fix + +/ + if (!(header_sdlang.tags["links"][0].maybe.attributes["link"].empty) + && (header_sdlang.tags["links"][0].attributes["link"][0].value.length > 1)) { + writeln(header_sdlang.tags["links"][0].attributes["link"][0].value); + // header_metadata["links"]["list"] = + // to!string(header_sdlang.tags["links"][0].attributes["link"][0].value); + header_metadata["links"]["list"] = ""; + } else { + header_metadata["links"]["list"] = ""; + } + } + if (!(header_sdlang.maybe.tags["notes"].empty)) { + if (!(header_sdlang.tags["notes"][0].maybe.attributes["abstract"].empty) + && (header_sdlang.tags["notes"][0].attributes["abstract"][0].value.length > 1)) { + writeln(header_sdlang.tags["notes"][0].attributes["abstract"][0].value); + header_metadata["notes"]["abstract"] = + to!string(header_sdlang.tags["notes"][0].attributes["abstract"][0].value); + } else { + header_metadata["notes"]["abstract"] = ""; + } + if (!(header_sdlang.tags["notes"][0].maybe.attributes["description"].empty) + && (header_sdlang.tags["notes"][0].attributes["description"][0].value.length > 1)) { + writeln(header_sdlang.tags["notes"][0].attributes["description"][0].value); + header_metadata["notes"]["description"] = + to!string(header_sdlang.tags["notes"][0].attributes["description"][0].value); + } else { + header_metadata["notes"]["description"] = ""; + } + } + if (!(header_sdlang.maybe.tags["original"].empty)) { + if (!(header_sdlang.tags["original"][0].maybe.attributes["language"].empty) + && (header_sdlang.tags["original"][0].attributes["language"][0].value.length > 1)) { + writeln(header_sdlang.tags["original"][0].attributes["language"][0].value); + header_metadata["original"]["language"] = + to!string(header_sdlang.tags["original"][0].attributes["language"][0].value); + } else { + header_metadata["original"]["language"] = ""; + } + if (!(header_sdlang.tags["original"][0].maybe.attributes["source"].empty) + && (header_sdlang.tags["original"][0].attributes["source"][0].value.length > 1)) { + writeln(header_sdlang.tags["original"][0].attributes["source"][0].value); + header_metadata["original"]["source"] = + to!string(header_sdlang.tags["original"][0].attributes["source"][0].value); + } else { + header_metadata["original"]["source"] = ""; + } + if (!(header_sdlang.tags["original"][0].maybe.attributes["title"].empty) + && (header_sdlang.tags["original"][0].attributes["title"][0].value.length > 1)) { + writeln(header_sdlang.tags["original"][0].attributes["title"][0].value); + header_metadata["original"]["title"] = + to!string(header_sdlang.tags["original"][0].attributes["title"][0].value); + } else { + header_metadata["original"]["title"] = ""; + } + } + if (!(header_sdlang.maybe.tags["publisher"].empty)) { + if (!(header_sdlang.tags["publisher"][0].maybe.attributes["name"].empty) + && (header_sdlang.tags["publisher"][0].attributes["name"][0].value.length > 1)) { + writeln(header_sdlang.tags["publisher"][0].attributes["name"][0].value); + header_metadata["publisher"]["name"] = + to!string(header_sdlang.tags["publisher"][0].attributes["name"][0].value); + } else { + header_metadata["publisher"]["name"] = ""; + } + } + if (!(header_sdlang.maybe.tags["rights"].empty)) { + if (!(header_sdlang.tags["rights"][0].maybe.attributes["copyright"].empty) + && (header_sdlang.tags["rights"][0].attributes["copyright"][0].value.length > 1)) { + writeln(header_sdlang.tags["rights"][0].attributes["copyright"][0].value); + header_metadata["rights"]["copyright"] = + to!string(header_sdlang.tags["rights"][0].attributes["copyright"][0].value); + } else { + header_metadata["rights"]["copyright"] = ""; + } + if (!(header_sdlang.tags["rights"][0].maybe.attributes["cover"].empty) + && (header_sdlang.tags["rights"][0].attributes["cover"][0].value.length > 1)) { + writeln(header_sdlang.tags["rights"][0].attributes["cover"][0].value); + header_metadata["rights"]["cover"] = + to!string(header_sdlang.tags["rights"][0].attributes["cover"][0].value); + } else { + header_metadata["rights"]["cover"] = ""; + } + if (!(header_sdlang.tags["rights"][0].maybe.attributes["illustrations"].empty) + && (header_sdlang.tags["rights"][0].attributes["illustrations"][0].value.length > 1)) { + writeln(header_sdlang.tags["rights"][0].attributes["illustrations"][0].value); + header_metadata["rights"]["illustrations"] = + to!string(header_sdlang.tags["rights"][0].attributes["illustrations"][0].value); + } else { + header_metadata["rights"]["illustrations"] = ""; + } + if (!(header_sdlang.tags["rights"][0].maybe.attributes["license"].empty) + && (header_sdlang.tags["rights"][0].attributes["license"][0].value.length > 1)) { + writeln(header_sdlang.tags["rights"][0].attributes["license"][0].value); + header_metadata["rights"]["license"] = + to!string(header_sdlang.tags["rights"][0].attributes["license"][0].value); + } else { + header_metadata["rights"]["license"] = ""; + } + } + writeln("--------------"); + stdout.rawWrite( header_sdlang.toSDLDocument() ); + writeln("--------------"); + /+ + namespace:name values attributes { + children + } + +/ + return header_sdlang; +} +#+END_SRC + +** +sdlang header+ :header: +KEEP not used because have problems passing the root sdl Tag to other structs + +#+name: ao_header_extract_sdl +#+BEGIN_SRC d +private auto headerSDLang(in char[] src_header) { + char[][] source_header_arr = + split(cast(char[]) src_header, rgx.line_delimiter); + char[] header_clean; + foreach(header_line; source_header_arr) { + if (!match(header_line, rgx.comments)) { + header_clean ~= header_line ~ "\n"; + // writeln(header_line); + } + } + // writeln(header_clean); // consider + auto header_sdlang=headerMakeSDLang(to!string(header_clean)); + return header_sdlang; +} +#+END_SRC + +* header native :header:native: + +// mixin SiSUheader; +// auto set_header = HeaderDocMetadataAndMakeNativeToJson(); // reintroduce + +** native header document metadata in json :json: + +#+name: ao_markup_header_extract_native +#+BEGIN_SRC d +auto header_metadata_and_make_jsonstr( + string header, + JSONValue[string] dochead_meta, + JSONValue[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"].str = + to!string(m.captures[2]); + } else if (hm == "title") { + dochead_meta[hm]["main"].str = + to!string(m.captures[2]); + } else if (hm == "publisher") { + dochead_meta[hm]["name"].str = + 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].type() == JSON_TYPE.OBJECT)) { + switch (hm) { + case "make": + if (match(hs, rgx.native_subhead_make)) { + if (dochead_make[hm][hs].type() == JSON_TYPE.STRING) { + dochead_make[hm][hs].str = 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].type() == JSON_TYPE.OBJECT) { + switch (hm) { + case "creator": + if (match(hs, rgx.native_subhead_creator)) { + if (dochead_meta[hm][hs].type() == JSON_TYPE.STRING) { + dochead_meta[hm][hs].str = + 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"].type() == JSON_TYPE.STRING)) { + dochead_meta[hm]["sub"].str = + to!string(s.captures[2]); + } else if (dochead_meta[hm][hs].type() == JSON_TYPE.STRING) { + dochead_meta[hm][hs].str = + 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].type() == JSON_TYPE.STRING) { + dochead_meta[hm][hs].str = + 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].type() == JSON_TYPE.STRING) { + dochead_meta[hm][hs].str = + 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].type() == JSON_TYPE.STRING) { + dochead_meta[hm][hs].str = + 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].type() == JSON_TYPE.STRING) { + dochead_meta[hm][hs].str = + 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].type() == JSON_TYPE.STRING) { + dochead_meta[hm][hs].str = + 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].type() == JSON_TYPE.STRING) { + dochead_meta[hm][hs].str = + 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].type() == JSON_TYPE.STRING) { + dochead_meta[hm][hs].str = + 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].type() == JSON_TYPE.STRING) { + // dochead_meta[hm][hs].str = 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 + +** native header start :start: +#+name: ao_markup_header_extract_native +#+BEGIN_SRC d +private auto headerContentJSON(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 = parseJSON(header_make_jsonstr).object; + auto dochead_meta = parseJSON(header_meta_jsonstr).object; + auto set_header = HeaderDocMetadataAndMakeNativeToJson(); + 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_jsonstr(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 + +** +header document metadata+ :document:metadata: +*** +within abstraction loop+ + +**** +line exist: header make+ :header:make: +# #+name: abs_in_loop_body_not_block_obj +# #+BEGIN_SRC d +# } else if (line_occur["header_make"] > State.off) { +# /+ header_make +/ +# // should be caught by sub-header +# debug(header) { +# tell_l("red", line); +# } +# an_object["obj"] ~= line ~= "\n"; +# ++line_occur["header_make"]; +# #+END_SRC + +**** +line exist: header metadata+ :header:metadata: +# #+name: abs_in_loop_body_not_block_obj +# #+BEGIN_SRC d +# } else if (line_occur["header_meta"] > State.off) { +# /+ header_metadata +/ +# // should be caught by sub-header +# debug(header) { // para +# tell_l("red", line); +# } +# an_object["obj"] ~= line ~= "\n"; +# ++line_occur["header_meta"]; +# #+END_SRC + +**** +header_make instructions+ :header:make:instructions: + +# #+name: abs_in_loop_body_not_block_obj_line_empty +# #+BEGIN_SRC d +# if ((type["header_make"] == State.on) +# && (line_occur["header_make"] > State.off)) { +# /+ header_make instructions (current line empty) +/ +# auto dochead_metadata_and_make = +# set_header.header_metadata_and_make_jsonstr(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); +# processing.remove("verse"); +# #+END_SRC + +**** +header_metadata+ :header:metadata: + +# #+name: abs_in_loop_body_not_block_obj_line_empty +# #+BEGIN_SRC d +# } else if ((type["header_meta"] == State.on) +# && (line_occur["header_meta"] > State.off)) { +# /+ header_meta (current line empty) +/ +# auto dochead_metadata_and_make = +# set_header.header_metadata_and_make_jsonstr(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; +# processing.remove("verse"); +# #+END_SRC + +* tangles (code structure) :tangle: +** SDLang ao_markup_header_extract.d: :ao_markup_header_extract.d: +#+BEGIN_SRC d :tangle ../src/sdp/ao_header_extract.d +/+ + extract sdl header return sdl ++/ +template SiSUheaderExtractSDLang() { + private import + std.regex; + private import + ao_rgx; + struct HeaderExtractSDL { + mixin RgxInit; + auto rgx = Rgx(); + <<ao_header_extract_sdl>> + <<ao_header_extract_sdl_to_json>> + } + struct HeaderUseSDL { + mixin RgxInit; + auto rgx = Rgx(); + // Tag = sdl_header; + auto headerUseSDLang(T)(auto T sdl_root_header) { + // T sdl_root_header; + // auto headerUseSDLang(Tag sdl_root_header) { + // private auto headerUseSDLang(Tag sdl_root_header) { + // private auto headerUseSDLang(in Tag sdl_root_header) { + // auto sdl_root_header = T; + + // Value is a std.variant.Algebraic + Value test = sdl_root_header.tags["title"][0].values[0]; + // assert(test == typeid(string)); + writeln(test); + + return sdl_root_header; + } + } +} +#+END_SRC +** Native ao_markup_header_extract.d: :ao_markup_header_extract.d: +#+BEGIN_SRC d :tangle ../src/sdp/ao_header_extract.d +/+ + extract native/orig header return json ++/ +template SiSUheaderExtractNative() { + private import + std.exception, + std.regex, + std.utf, + std.conv : to; + private import + ao_rgx; + struct HeaderDocMetadataAndMakeNativeToJson { + mixin SiSUrgxInitFlags; + mixin RgxInit; + auto rgx = Rgx(); + enum State { off, on } + string hm, hs; + <<ao_markup_header_extract_native>> + } +} +#+END_SRC |