aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/sdp/ao_header_extract.d
diff options
context:
space:
mode:
Diffstat (limited to 'src/sdp/ao_header_extract.d')
-rw-r--r--src/sdp/ao_header_extract.d1312
1 files changed, 15 insertions, 1297 deletions
diff --git a/src/sdp/ao_header_extract.d b/src/sdp/ao_header_extract.d
index c02bc7c..76c5a7d 100644
--- a/src/sdp/ao_header_extract.d
+++ b/src/sdp/ao_header_extract.d
@@ -1,1307 +1,25 @@
/+
- extract sdl header return sdl
-+/
-template SiSUheaderExtractSDLang() {
- private import
- std.regex;
- private import
- ao_rgx;
- struct HeaderExtractSDL {
- mixin RgxInit;
- auto rgx = Rgx();
- 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;
- }
- 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;
- }
- 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;
- }
- 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;
- }
-
- }
- 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;
- }
- }
-}
-/+
extract native/orig header return json
+/
-template SiSUheaderExtractNative() {
+template SiSUheaderExtractHub() {
private import
- std.exception,
- std.regex,
- std.utf,
- std.conv : to;
+ std.regex;
private import
ao_rgx;
- struct HeaderDocMetadataAndMakeNativeToJson {
- mixin SiSUrgxInitFlags;
- mixin RgxInit;
+ struct HeaderDocMetadataAndMake {
+ mixin SiSUheaderExtractNative;
+ mixin SiSUheaderExtractSDLang;
auto rgx = Rgx();
- enum State { off, on }
- string hm, hs;
- 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;
- }
- 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;
- }
- 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");
- }
- 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;
+ private auto headerContentJSON(char[] header_src) {
+ auto head_native = HeaderDocMetadataAndMakeNativeToJson();
+ auto head_sdlang = HeaderExtractSDL();
+ writeln(__LINE__);
+ auto header_make_and_meta_tuple = (match(header_src, rgx.native_header_meta_title))
+ ? (head_native.headerNativeToJSON(header_src))
+ : (head_sdlang.headerSDLangToJSON(header_src));
+ writeln(__LINE__);
+ static assert(!isTypeTuple!(header_make_and_meta_tuple));
+ return header_make_and_meta_tuple;
}
}
}