From 1c73ddf3894085c646b55d63e61a2483e03a3b4d Mon Sep 17 00:00:00 2001 From: Ralph Amissah Date: Fri, 9 Feb 2018 22:03:10 -0500 Subject: 0.24.0 toml or sdlang for configuration --- src/sdp/meta/conf_make_meta_sdlang.d | 432 +++++++++++++++++++++++++++-------- 1 file changed, 335 insertions(+), 97 deletions(-) (limited to 'src/sdp/meta/conf_make_meta_sdlang.d') diff --git a/src/sdp/meta/conf_make_meta_sdlang.d b/src/sdp/meta/conf_make_meta_sdlang.d index ef395d0..4ebe960 100644 --- a/src/sdp/meta/conf_make_meta_sdlang.d +++ b/src/sdp/meta/conf_make_meta_sdlang.d @@ -1,8 +1,45 @@ +/++ + extract native/orig header return associative array
+ + the header is passed as text (lopped off top of a sisu markup file until the + required first heading ^A~), determine whether is a native header or sdlang one + with a regex check if whether it contains the "native header" required tag/field + @title: then process accordingly as a "native header" or "sdlang header" + converting the metadata and make instructions to a common json format used by + program internally. Moved to associative array. ++/ +module sdp.meta.conf_make_meta_sdlang; +static template docHeaderMakeAndMetaTupSDLangExtractAndConvertToStruct() { + import + std.exception, + std.regex, + std.stdio, + std.traits, + std.typecons, + std.utf, + std.conv : to; + import sdlang; + import + sdp.meta.conf_make_meta_sdlang, + sdp.meta.rgx; + mixin SiSUrgxInit; + mixin SiSUextractSDLang; + static auto rgx = Rgx(); + auto docHeaderMakeAndMetaTupSDLangExtractAndConvertToStruct(CCm, Src)( + CCm conf_composite_make, + Src header_src, + ) { + auto header_sdlang_tag = (header_src.match(rgx.sdlang_header_meta_title)) + ? extractSDL().docHeaderSDLtagGet(header_src) // sdlang.ast.Tag + : null; + auto header_make_and_meta_struct = extractSDL().docSDLtoStruct(conf_composite_make, header_sdlang_tag); + return header_make_and_meta_struct; + } +} /++ sdlang headers
extract sdlang header return sdlang +/ -module sdp.meta.conf_make_meta_sdlang; static template SiSUextractSDLang() { import std.exception, @@ -14,10 +51,10 @@ static template SiSUextractSDLang() { std.utf, std.conv : to; import - sdp.meta.defaults, + sdp.meta.conf_make_meta_structs, sdp.meta.rgx; struct extractSDL { - mixin SiSUregisters; + mixin SiSUmakeMetaStructsSDLang; mixin SiSUrgxInit; static auto rgx = Rgx(); private auto docHeaderSDLtagGet(Hs)(Hs src_header) { @@ -69,104 +106,118 @@ static template SiSUextractSDLang() { } return sdl_root_header; // sdlang.ast.Tag } - private auto docSDLtoStruct(C,Tag)(C _conf_composite, Tag header_sdlang) { - mixin SiSUregisters; - /+ make +/ + private auto docSDLtoStruct(C,Tag)(C _conf_composite, Tag header_sdlang) { // work on + /+ make ------------------------------------------------------------------- +/ if ("make" in header_sdlang.maybe.tags) { - _conf_composite.make_str.bold = _conf_composite.make.bold = extractSDLangTabOrAttrib(header_sdlang, "make", "bold"); - _conf_composite.make_str.breaks = _conf_composite.make.breaks = extractSDLangTabOrAttrib(header_sdlang, "make", "breaks"); - _conf_composite.make_str.cover_image = _conf_composite.make.cover_image = extractSDLangTabOrAttrib(header_sdlang, "make", "cover_image"); - _conf_composite.make_str.css = _conf_composite.make.css = extractSDLangTabOrAttrib(header_sdlang, "make", "css"); - _conf_composite.make_str.emphasis = _conf_composite.make.emphasis = extractSDLangTabOrAttrib(header_sdlang, "make", "emphasis"); - _conf_composite.make_str.footer = _conf_composite.make.footer = extractSDLangTabOrAttrib(header_sdlang, "make", "footer"); - _conf_composite.make_str.headings = _conf_composite.make.headings = extractSDLangTabOrAttrib(header_sdlang, "make", "headings"); - _conf_composite.make_str.home_button_image = _conf_composite.make.home_button_image = extractSDLangTabOrAttrib(header_sdlang, "make", "home_button_image"); - _conf_composite.make_str.home_button_text = _conf_composite.make.home_button_text = extractSDLangTabOrAttrib(header_sdlang, "make", "home_button_text"); - _conf_composite.make_str.italics = _conf_composite.make.italics = extractSDLangTabOrAttrib(header_sdlang, "make", "italics"); - _conf_composite.make_str.num_top = _conf_composite.make.num_top = extractSDLangTabOrAttrib(header_sdlang, "make", "num_top"); - _conf_composite.make_str.num_depth = _conf_composite.make.num_depth = extractSDLangTabOrAttrib(header_sdlang, "make", "num_depth"); - _conf_composite.make_str.substitute = _conf_composite.make.substitute = extractSDLangTabOrAttrib(header_sdlang, "make", "substitute"); - _conf_composite.make_str.texpdf_font = _conf_composite.make.texpdf_font = extractSDLangTabOrAttrib(header_sdlang, "make", "texpdf_font"); - } - /+ conf +/ + confCompositeMakeBuild _mk; + _conf_composite.make_str.bold = extractSDLangTabOrAttrib(header_sdlang, "make", "bold"); // TODO + _conf_composite.make_str.breaks = extractSDLangTabOrAttrib(header_sdlang, "make", "breaks"); + _conf_composite.make_str.cover_image = extractSDLangTabOrAttrib(header_sdlang, "make", "cover_image"); + _conf_composite.make_str.css = extractSDLangTabOrAttrib(header_sdlang, "make", "css"); + _conf_composite.make_str.emphasis = extractSDLangTabOrAttrib(header_sdlang, "make", "emphasis"); // TODO + _conf_composite.make_str.footer = extractSDLangTabOrAttrib(header_sdlang, "make", "footer"); + _conf_composite.make_str.headings = extractSDLangTabOrAttrib(header_sdlang, "make", "headings"); + _conf_composite.make_str.home_button_image = extractSDLangTabOrAttrib(header_sdlang, "make", "home_button_image"); + _conf_composite.make_str.home_button_text = extractSDLangTabOrAttrib(header_sdlang, "make", "home_button_text"); + _conf_composite.make_str.italics = extractSDLangTabOrAttrib(header_sdlang, "make", "italics"); // TODO + _conf_composite.make_str.num_top = extractSDLangTabOrAttrib(header_sdlang, "make", "num_top"); + _conf_composite.make_str.num_depth = extractSDLangTabOrAttrib(header_sdlang, "make", "num_depth"); + _conf_composite.make_str.substitute = extractSDLangTabOrAttrib(header_sdlang, "make", "substitute"); // TODO + _conf_composite.make_str.texpdf_font = extractSDLangTabOrAttrib(header_sdlang, "make", "texpdf_font"); + _conf_composite.make.bold_rgxmatch = _mk.bold_rgxmatch(_conf_composite.make_str.bold); + _conf_composite.make.breaks = _mk.breaks(_conf_composite.make_str.breaks); + _conf_composite.make.cover_image = _mk.cover_image(_conf_composite.make_str.cover_image); + _conf_composite.make.css = _mk.css(_conf_composite.make_str.css); + _conf_composite.make.emphasis_rgxmatch = _mk.emphasis_rgxmatch(_conf_composite.make_str.emphasis); + _conf_composite.make.footer = _mk.footer(_conf_composite.make_str.footer); + _conf_composite.make.headings = _mk.headings(_conf_composite.make_str.headings); + _conf_composite.make.home_button_image = _mk.home_button_image(_conf_composite.make_str.home_button_image); + _conf_composite.make.home_button_text = _mk.home_button_text(_conf_composite.make_str.home_button_text); + _conf_composite.make.italics_rgxmatch = _mk.italics_rgxmatch(_conf_composite.make_str.italics); + _conf_composite.make.num_top = _mk.num_top(_conf_composite.make_str.num_top); + _conf_composite.make.num_depth = _mk.num_depth(_conf_composite.make_str.num_depth); + _conf_composite.make.substitute = _mk.substitute(_conf_composite.make_str.substitute); + _conf_composite.make.texpdf_font = _mk.texpdf_font(_conf_composite.make_str.texpdf_font); + } + /+ conf ------------------------------------------------------------------- +/ if ("webserv" in header_sdlang.maybe.tags) { - _conf_composite.conf.webserv_url_root = extractSDLangTabOrAttrib(header_sdlang, "webserv", "url_root"); - _conf_composite.conf.webserv_path = extractSDLangTabOrAttrib(header_sdlang, "webserv", "path"); - _conf_composite.conf.webserv_images = extractSDLangTabOrAttrib(header_sdlang, "webserv", "images"); - _conf_composite.conf.webserv_cgi = extractSDLangTabOrAttrib(header_sdlang, "webserv", "cgi"); - _conf_composite.conf.webserv_cgi_host = extractSDLangTabOrAttrib(header_sdlang, "webserv", "cgi_host"); - _conf_composite.conf.webserv_cgi_host_path = extractSDLangTabOrAttrib(header_sdlang, "webserv", "cgi_host_path"); - _conf_composite.conf.webserv_cgi_port = extractSDLangTabOrAttrib(header_sdlang, "webserv", "cgi_port"); - _conf_composite.conf.webserv_cgi_user = extractSDLangTabOrAttrib(header_sdlang, "webserv", "cgi_user"); - _conf_composite.conf.webserv_cgi_file_links = extractSDLangTabOrAttrib(header_sdlang, "webserv", "cgi_file_links"); + _conf_composite.conf.webserv_url_root = extractSDLangTabOrAttrib(header_sdlang, "webserv", "url_root"); + _conf_composite.conf.webserv_path = extractSDLangTabOrAttrib(header_sdlang, "webserv", "path"); + _conf_composite.conf.webserv_images = extractSDLangTabOrAttrib(header_sdlang, "webserv", "images"); + _conf_composite.conf.webserv_cgi = extractSDLangTabOrAttrib(header_sdlang, "webserv", "cgi"); + _conf_composite.conf.webserv_cgi_host = extractSDLangTabOrAttrib(header_sdlang, "webserv", "cgi_host"); + _conf_composite.conf.webserv_cgi_host_path = extractSDLangTabOrAttrib(header_sdlang, "webserv", "cgi_host_path"); + _conf_composite.conf.webserv_cgi_port = extractSDLangTabOrAttrib(header_sdlang, "webserv", "cgi_port"); + _conf_composite.conf.webserv_cgi_user = extractSDLangTabOrAttrib(header_sdlang, "webserv", "cgi_user"); + _conf_composite.conf.webserv_cgi_file_links = extractSDLangTabOrAttrib(header_sdlang, "webserv", "cgi_file_links"); } if ("processing" in header_sdlang.maybe.tags) { - _conf_composite.conf.processing_path = extractSDLangTabOrAttrib(header_sdlang, "webserv", "processing_path"); - _conf_composite.conf.processing_dir = extractSDLangTabOrAttrib(header_sdlang, "webserv", "processing_dir"); - _conf_composite.conf.processing_concord_max = extractSDLangTabOrAttrib(header_sdlang, "webserv", "processing_concord_max"); - } - if("flag" in header_sdlang.maybe.tags) { - _conf_composite.conf.flag_act0 = extractSDLangTabOrAttrib(header_sdlang, "flag", "act0"); - _conf_composite.conf.flag_act1 = extractSDLangTabOrAttrib(header_sdlang, "flag", "act1"); - _conf_composite.conf.flag_act2 = extractSDLangTabOrAttrib(header_sdlang, "flag", "act2"); - _conf_composite.conf.flag_act3 = extractSDLangTabOrAttrib(header_sdlang, "flag", "act3"); - _conf_composite.conf.flag_act4 = extractSDLangTabOrAttrib(header_sdlang, "flag", "act4"); - _conf_composite.conf.flag_act5 = extractSDLangTabOrAttrib(header_sdlang, "flag", "act5"); - _conf_composite.conf.flag_act6 = extractSDLangTabOrAttrib(header_sdlang, "flag", "act6"); - _conf_composite.conf.flag_act7 = extractSDLangTabOrAttrib(header_sdlang, "flag", "act7"); - _conf_composite.conf.flag_act8 = extractSDLangTabOrAttrib(header_sdlang, "flag", "act8"); - _conf_composite.conf.flag_act9 = extractSDLangTabOrAttrib(header_sdlang, "flag", "act9"); + _conf_composite.conf.processing_path = extractSDLangTabOrAttrib(header_sdlang, "webserv", "processing_path"); + _conf_composite.conf.processing_dir = extractSDLangTabOrAttrib(header_sdlang, "webserv", "processing_dir"); + _conf_composite.conf.processing_concord_max = extractSDLangTabOrAttrib(header_sdlang, "webserv", "processing_concord_max"); + } + if ("flag" in header_sdlang.maybe.tags) { + _conf_composite.conf.flag_act0 = extractSDLangTabOrAttrib(header_sdlang, "flag", "act0"); + _conf_composite.conf.flag_act1 = extractSDLangTabOrAttrib(header_sdlang, "flag", "act1"); + _conf_composite.conf.flag_act2 = extractSDLangTabOrAttrib(header_sdlang, "flag", "act2"); + _conf_composite.conf.flag_act3 = extractSDLangTabOrAttrib(header_sdlang, "flag", "act3"); + _conf_composite.conf.flag_act4 = extractSDLangTabOrAttrib(header_sdlang, "flag", "act4"); + _conf_composite.conf.flag_act5 = extractSDLangTabOrAttrib(header_sdlang, "flag", "act5"); + _conf_composite.conf.flag_act6 = extractSDLangTabOrAttrib(header_sdlang, "flag", "act6"); + _conf_composite.conf.flag_act7 = extractSDLangTabOrAttrib(header_sdlang, "flag", "act7"); + _conf_composite.conf.flag_act8 = extractSDLangTabOrAttrib(header_sdlang, "flag", "act8"); + _conf_composite.conf.flag_act9 = extractSDLangTabOrAttrib(header_sdlang, "flag", "act9"); } if ("default" in header_sdlang.maybe.tags) { - _conf_composite.conf.default_papersize = extractSDLangTabOrAttrib(header_sdlang, "default", "papersize"); - _conf_composite.conf.default_text_wrap = extractSDLangTabOrAttrib(header_sdlang, "default", "text_wrap"); - _conf_composite.conf.default_emphasis = extractSDLangTabOrAttrib(header_sdlang, "default", "emphasis"); - _conf_composite.conf.default_language = extractSDLangTabOrAttrib(header_sdlang, "default", "language"); - _conf_composite.conf.default_digest = extractSDLangTabOrAttrib(header_sdlang, "default", "digest"); + _conf_composite.conf.default_papersize = extractSDLangTabOrAttrib(header_sdlang, "default", "papersize"); + _conf_composite.conf.default_text_wrap = extractSDLangTabOrAttrib(header_sdlang, "default", "text_wrap"); + _conf_composite.conf.default_emphasis = extractSDLangTabOrAttrib(header_sdlang, "default", "emphasis"); + _conf_composite.conf.default_language = extractSDLangTabOrAttrib(header_sdlang, "default", "language"); + _conf_composite.conf.default_digest = extractSDLangTabOrAttrib(header_sdlang, "default", "digest"); } if ("search" in header_sdlang.maybe.tags) { - _conf_composite.conf.search_flag = extractSDLangTabOrAttrib(header_sdlang, "search", "flag"); - _conf_composite.conf.search_action = extractSDLangTabOrAttrib(header_sdlang, "search", "action"); - _conf_composite.conf.search_db = extractSDLangTabOrAttrib(header_sdlang, "search", "db"); - _conf_composite.conf.search_title = extractSDLangTabOrAttrib(header_sdlang, "search", "title"); + _conf_composite.conf.search_flag = extractSDLangTabOrAttrib(header_sdlang, "search", "flag"); + _conf_composite.conf.search_action = extractSDLangTabOrAttrib(header_sdlang, "search", "action"); + _conf_composite.conf.search_db = extractSDLangTabOrAttrib(header_sdlang, "search", "db"); + _conf_composite.conf.search_title = extractSDLangTabOrAttrib(header_sdlang, "search", "title"); } - /+ meta +/ + /+ meta ------------------------------------------------------------------- +/ if ("classify" in header_sdlang.maybe.tags) { - _conf_composite.meta.classify_dewey = extractSDLangTabOrAttrib(header_sdlang, "classify", "dewey"); - _conf_composite.meta.classify_keywords = extractSDLangTabOrAttrib(header_sdlang, "classify", "keywords"); - _conf_composite.meta.classify_loc = extractSDLangTabOrAttrib(header_sdlang, "classify", "loc"); - _conf_composite.meta.classify_subject = extractSDLangTabOrAttrib(header_sdlang, "classify", "subject"); - _conf_composite.meta.classify_topic_register = extractSDLangTabOrAttrib(header_sdlang, "classify", "topic_register"); + _conf_composite.meta.classify_dewey = extractSDLangTabOrAttrib(header_sdlang, "classify", "dewey"); + _conf_composite.meta.classify_keywords = extractSDLangTabOrAttrib(header_sdlang, "classify", "keywords"); + _conf_composite.meta.classify_loc = extractSDLangTabOrAttrib(header_sdlang, "classify", "loc"); + _conf_composite.meta.classify_subject = extractSDLangTabOrAttrib(header_sdlang, "classify", "subject"); + _conf_composite.meta.classify_topic_register = extractSDLangTabOrAttrib(header_sdlang, "classify", "topic_register"); } if ("date" in header_sdlang.maybe.tags) { - _conf_composite.meta.date_added_to_site = extractSDLangTabOrAttrib(header_sdlang, "date", "added_to_site"); - _conf_composite.meta.date_available = extractSDLangTabOrAttrib(header_sdlang, "date", "available"); - _conf_composite.meta.date_created = extractSDLangTabOrAttrib(header_sdlang, "date", "created"); - _conf_composite.meta.date_issued = extractSDLangTabOrAttrib(header_sdlang, "date", "issued"); - _conf_composite.meta.date_modified = extractSDLangTabOrAttrib(header_sdlang, "date", "modified"); - _conf_composite.meta.date_published = extractSDLangTabOrAttrib(header_sdlang, "date", "published"); - _conf_composite.meta.date_valid = extractSDLangTabOrAttrib(header_sdlang, "date", "valid"); - } - if("identifier" in header_sdlang.maybe.tags) { - _conf_composite.meta.identifier_isbn = extractSDLangTabOrAttrib(header_sdlang, "identifier", "isbn"); - _conf_composite.meta.identifier_oclc = extractSDLangTabOrAttrib(header_sdlang, "identifier", "oclc"); - _conf_composite.meta.identifier_pg = extractSDLangTabOrAttrib(header_sdlang, "identifier", "pg"); + _conf_composite.meta.date_added_to_site = extractSDLangTabOrAttrib(header_sdlang, "date", "added_to_site"); + _conf_composite.meta.date_available = extractSDLangTabOrAttrib(header_sdlang, "date", "available"); + _conf_composite.meta.date_created = extractSDLangTabOrAttrib(header_sdlang, "date", "created"); + _conf_composite.meta.date_issued = extractSDLangTabOrAttrib(header_sdlang, "date", "issued"); + _conf_composite.meta.date_modified = extractSDLangTabOrAttrib(header_sdlang, "date", "modified"); + _conf_composite.meta.date_published = extractSDLangTabOrAttrib(header_sdlang, "date", "published"); + _conf_composite.meta.date_valid = extractSDLangTabOrAttrib(header_sdlang, "date", "valid"); + } + if ("identifier" in header_sdlang.maybe.tags) { + _conf_composite.meta.identifier_isbn = extractSDLangTabOrAttrib(header_sdlang, "identifier", "isbn"); + _conf_composite.meta.identifier_oclc = extractSDLangTabOrAttrib(header_sdlang, "identifier", "oclc"); + _conf_composite.meta.identifier_pg = extractSDLangTabOrAttrib(header_sdlang, "identifier", "pg"); } if ("links" in header_sdlang.maybe.tags) { - // _conf_composite.meta.links = extractSDLangTabOrAttrib(header_sdlang, "links", ""); + // _conf_composite.meta.links = extractSDLangTabOrAttrib(header_sdlang, "links", ""); } if ("notes" in header_sdlang.maybe.tags) { - _conf_composite.meta.notes_abstract = extractSDLangTabOrAttrib(header_sdlang, "notes", "abstract"); - _conf_composite.meta.notes_description = extractSDLangTabOrAttrib(header_sdlang, "notes", "description"); + _conf_composite.meta.notes_abstract = extractSDLangTabOrAttrib(header_sdlang, "notes", "abstract"); + _conf_composite.meta.notes_description = extractSDLangTabOrAttrib(header_sdlang, "notes", "description"); } if ("original" in header_sdlang.maybe.tags) { - _conf_composite.meta.original_language = extractSDLangTabOrAttrib(header_sdlang, "original", "language"); - _conf_composite.meta.original_language_char = extractSDLangTabOrAttrib(header_sdlang, "original", "language_char"); - _conf_composite.meta.original_source = extractSDLangTabOrAttrib(header_sdlang, "original", "source"); - _conf_composite.meta.original_title = extractSDLangTabOrAttrib(header_sdlang, "original", "title"); + _conf_composite.meta.original_language = extractSDLangTabOrAttrib(header_sdlang, "original", "language"); + _conf_composite.meta.original_language_char = extractSDLangTabOrAttrib(header_sdlang, "original", "language_char"); + _conf_composite.meta.original_source = extractSDLangTabOrAttrib(header_sdlang, "original", "source"); + _conf_composite.meta.original_title = extractSDLangTabOrAttrib(header_sdlang, "original", "title"); } if ("publisher" in header_sdlang.maybe.tags) { - // _conf_composite.meta.publisher = extractSDLangTabOrAttrib(header_sdlang, "publisher", ""); + // _conf_composite.meta.publisher = extractSDLangTabOrAttrib(header_sdlang, "publisher", ""); } if ("rights" in header_sdlang.maybe.tags) { _conf_composite.meta.rights_copyright = extractSDLangTabOrAttrib(header_sdlang, "rights", "copyright"); @@ -181,10 +232,10 @@ static template SiSUextractSDLang() { } if (_conf_composite.meta.creator_author.empty) { if ("creator" in header_sdlang.maybe.tags) { - _conf_composite.meta.creator_author = extractSDLangTabOrAttrib(header_sdlang, "creator", "author"); - _conf_composite.meta.creator_author_email = extractSDLangTabOrAttrib(header_sdlang, "creator", "author_email"); - _conf_composite.meta.creator_illustrator = extractSDLangTabOrAttrib(header_sdlang, "creator", "illustrator"); - _conf_composite.meta.creator_translator = extractSDLangTabOrAttrib(header_sdlang, "creator", "translator"); + _conf_composite.meta.creator_author = extractSDLangTabOrAttrib(header_sdlang, "creator", "author"); + _conf_composite.meta.creator_author_email = extractSDLangTabOrAttrib(header_sdlang, "creator", "author_email"); + _conf_composite.meta.creator_illustrator = extractSDLangTabOrAttrib(header_sdlang, "creator", "illustrator"); + _conf_composite.meta.creator_translator = extractSDLangTabOrAttrib(header_sdlang, "creator", "translator"); } // dochead_meta["creator"]["author_raw"] = dochead_meta["creator"]["author"]; string[] authors_arr; @@ -196,12 +247,13 @@ static template SiSUextractSDLang() { } if (_conf_composite.meta.title_main.empty) { if ("title" in header_sdlang.maybe.tags) { - _conf_composite.meta.title_edition = extractSDLangTabOrAttrib(header_sdlang, "title", "edition"); - _conf_composite.meta.title_language = extractSDLangTabOrAttrib(header_sdlang, "title", "language"); - _conf_composite.meta.title_main = extractSDLangTabOrAttrib(header_sdlang, "title", "main"); - _conf_composite.meta.title_note = extractSDLangTabOrAttrib(header_sdlang, "title", "note"); - _conf_composite.meta.title_sub = extractSDLangTabOrAttrib(header_sdlang, "title", "sub"); - _conf_composite.meta.title_subtitle = extractSDLangTabOrAttrib(header_sdlang, "title", "subtitle"); + _conf_composite.meta.title_edition = extractSDLangTabOrAttrib(header_sdlang, "title", "edition"); + // _conf_composite.meta.title_full = extractSDLangTabOrAttrib(header_sdlang, "title", "full"); + _conf_composite.meta.title_language = extractSDLangTabOrAttrib(header_sdlang, "title", "language"); + _conf_composite.meta.title_main = extractSDLangTabOrAttrib(header_sdlang, "title", "main"); + _conf_composite.meta.title_note = extractSDLangTabOrAttrib(header_sdlang, "title", "note"); + _conf_composite.meta.title_sub = extractSDLangTabOrAttrib(header_sdlang, "title", "sub"); + _conf_composite.meta.title_subtitle = extractSDLangTabOrAttrib(header_sdlang, "title", "subtitle"); } if (_conf_composite.meta.title_main.empty) { Tag _maintag = header_sdlang.getTag("title"); @@ -210,7 +262,6 @@ static template SiSUextractSDLang() { _conf_composite.meta.title_main = to!string(_maintag.getTagValues("main")); } else if ("main" !in _maintag.maybe.attributes) { - writeln(_maintag.values[0]); // document title _conf_composite.meta.title_main = (_maintag.values[0]).to!string; // test that this exists } @@ -220,17 +271,204 @@ static template SiSUextractSDLang() { && (_conf_composite.meta.title_sub.empty)) { _conf_composite.meta.title_sub = _conf_composite.meta.title_subtitle; } - if (_conf_composite.meta.title_sub.empty) { - _conf_composite.meta.title_full = _conf_composite.meta.title_main; - } else { - _conf_composite.meta.title_full = format( + _conf_composite.meta.title_full = (_conf_composite.meta.title_sub.empty) + ? _conf_composite.meta.title_main + : format( "%s - %s", _conf_composite.meta.title_main, _conf_composite.meta.title_sub, ); - } } return _conf_composite; } } } +static template parseSDLangConfig() { + import + std.exception, + std.regex, + std.stdio, + std.string, + std.traits, + std.typecons, + std.utf, + std.conv : to; + import sdlang; + auto parseSDLangConfig(string configuration, string conf_sdl_filename) { + Tag sdl_root_conf; + try { + sdl_root_conf = parseSource(configuration); + } + catch(ParseException e) { + stderr.writeln("SDLang problem with content for ", conf_sdl_filename); + stderr.writeln(e.msg); + } + return sdl_root_conf; + } +} +/++ + return composite make from config files ++/ + +template confFilesSDLtoStruct() { + import + std.exception, + std.regex, + std.stdio, + std.string, + std.traits, + std.typecons, + std.utf, + std.conv : to; + import + sdp.meta.conf_make_meta_structs, + sdp.meta.rgx; + auto configParseSDL(T)( + T _text + ){ + Tag sdl_root; + try { + sdl_root = parseSource(_text.to!string); + } + catch(ParseException 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(__LINE__, ": ", sdl_root.toSDLDocument()); + writeln(__LINE__, ": ", sdl_root.maybe.namespaces); + writeln("header make sdlang: ", sdl_root.toSDLDocument()); + writeln(__LINE__, ": ", sdl_root.getTagValues("title")); + writeln(__LINE__, ": ", sdl_root.getTagValues("creator")); + Tag creator = sdl_root.getTag("creator"); + if (creator !is null) { + if ("author" in creator.maybe.tags) { + writeln(__LINE__, ": ", creator.getTagValues("author")); + } else if ("author" in creator.maybe.attributes) { + writeln(__LINE__, ": ", creator.maybe.attributes["author"][0].value); + } + } + } + return sdl_root; // sdlang.ast.Tag + } + auto confFilesSDLtoStruct(S,L)( + S sdl_root_config_share, + L sdl_root_config_local, + ){ + mixin SiSUmakeMetaStructsSDLang; + ConfCompositePlus _conf_composite; + foreach (conf_sdlang; [sdl_root_config_share, sdl_root_config_local]) { + if ("make" in conf_sdlang.maybe.tags) { + confCompositeMakeBuild _mk; + _conf_composite.make_str.bold = extractSDLangTabOrAttrib(conf_sdlang, "make", "bold"); // TODO + _conf_composite.make_str.breaks = extractSDLangTabOrAttrib(conf_sdlang, "make", "breaks"); + _conf_composite.make_str.cover_image = extractSDLangTabOrAttrib(conf_sdlang, "make", "cover_image"); + _conf_composite.make_str.css = extractSDLangTabOrAttrib(conf_sdlang, "make", "css"); + _conf_composite.make_str.emphasis = extractSDLangTabOrAttrib(conf_sdlang, "make", "emphasis"); // TODO + _conf_composite.make_str.footer = extractSDLangTabOrAttrib(conf_sdlang, "make", "footer"); + _conf_composite.make_str.headings = extractSDLangTabOrAttrib(conf_sdlang, "make", "headings"); + _conf_composite.make_str.home_button_image = extractSDLangTabOrAttrib(conf_sdlang, "make", "home_button_image"); + _conf_composite.make_str.home_button_text = extractSDLangTabOrAttrib(conf_sdlang, "make", "home_button_text"); + _conf_composite.make_str.italics = extractSDLangTabOrAttrib(conf_sdlang, "make", "italics"); // TODO + _conf_composite.make_str.num_top = extractSDLangTabOrAttrib(conf_sdlang, "make", "num_top"); + _conf_composite.make_str.num_depth = extractSDLangTabOrAttrib(conf_sdlang, "make", "num_depth"); + _conf_composite.make_str.substitute = extractSDLangTabOrAttrib(conf_sdlang, "make", "substitute"); // TODO + _conf_composite.make_str.texpdf_font = extractSDLangTabOrAttrib(conf_sdlang, "make", "texpdf_font"); + _conf_composite.make.bold_rgxmatch = _mk.bold_rgxmatch(_conf_composite.make_str.bold); // + _conf_composite.make.breaks = _mk.breaks(_conf_composite.make_str.breaks); + _conf_composite.make.cover_image = _mk.cover_image(_conf_composite.make_str.cover_image); + _conf_composite.make.css = _mk.css(_conf_composite.make_str.css); + _conf_composite.make.emphasis_rgxmatch = _mk.emphasis_rgxmatch(_conf_composite.make_str.emphasis); + _conf_composite.make.footer = _mk.footer(_conf_composite.make_str.footer); + _conf_composite.make.headings = _mk.headings(_conf_composite.make_str.headings); + _conf_composite.make.home_button_image = _mk.home_button_image(_conf_composite.make_str.home_button_image); + _conf_composite.make.home_button_text = _mk.home_button_text(_conf_composite.make_str.home_button_text); + _conf_composite.make.italics_rgxmatch = _mk.italics_rgxmatch(_conf_composite.make_str.italics); + _conf_composite.make.num_top = _mk.num_top(_conf_composite.make_str.num_top); + _conf_composite.make.num_depth = _mk.num_depth(_conf_composite.make_str.num_depth); + _conf_composite.make.substitute = _mk.substitute(_conf_composite.make_str.substitute); // TODO + _conf_composite.make.texpdf_font = _mk.texpdf_font(_conf_composite.make_str.texpdf_font); + } + } + return _conf_composite; + } +} +/++ + default settings ++/ +template SiSUmakeMetaStructsSDLang() { + import + std.algorithm, + std.array, + std.container, + std.exception, + std.file, + std.getopt, + std.json, + std.path, + std.process, + std.range, + std.regex, + std.stdio, + std.string, + std.traits, + std.typecons, + std.uni, + std.utf, + std.conv : to; + import sdp.meta.conf_make_meta_structs; + string extractSDLangTabOrAttrib(S)( + S conf_sdlang, + string maintab, + string atab + ) { + string _conf_composite_string = ""; + if (maintab in conf_sdlang.maybe.tags) { + auto _maintag = conf_sdlang.getTag(maintab); + if ( + (atab in _maintag.maybe.tags) + && (_maintag.getTagValues(atab).length > 0) + ) { + debug(configsdlang) { + writeln( + " ", __LINE__, + ": sdl tag, ", + maintab, ":", atab, ": ", + _maintag.getTagValues(atab)[0] + ); + } + if (_maintag.getTagValues(atab).length == 1) { + writeln((_maintag.getTagValues(atab)[0]).to!string); + _conf_composite_string + = (_maintag.getTagValues(atab)[0]).to!string; + } else if (_maintag.getTagValues(atab).length > 1) { + string _tmp = ""; + foreach (st; _maintag.getTagValues(atab)) { + writeln(st.to!string, ";"); + _tmp ~= st.to!string ~ ";"; + } + _conf_composite_string = _tmp; + } + } else if ( + (atab in _maintag.maybe.attributes) + && (_maintag.attributes[atab][0].value.length > 0) + ) { + debug(configsdlang) { + writeln( + " ", __LINE__, + ": sdl attrib, ", + maintab, ":", atab, ": ", + _maintag.attributes[atab][0].value + ); + } + _conf_composite_string + = (_maintag.attributes[atab][0].value).to!string; + } + } + return _conf_composite_string; + } +} -- cgit v1.2.3