/+ 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() { 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; 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; } } }