diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/sdp/meta/conf_make_meta.d | 38 | ||||
| -rw-r--r-- | src/sdp/meta/conf_make_meta_composite.d | 45 | ||||
| -rw-r--r-- | src/sdp/meta/conf_make_meta_json.d | 369 | ||||
| -rw-r--r-- | src/sdp/meta/conf_make_meta_sdlang.d | 432 | ||||
| -rw-r--r-- | src/sdp/meta/conf_make_meta_structs.d | 305 | ||||
| -rw-r--r-- | src/sdp/meta/conf_make_meta_toml.d | 79 | ||||
| -rw-r--r-- | src/sdp/meta/defaults.d | 269 | ||||
| -rw-r--r-- | src/sdp/meta/doc_debugs.d | 12 | ||||
| -rw-r--r-- | src/sdp/meta/metadoc.d | 39 | ||||
| -rw-r--r-- | src/sdp/meta/metadoc_from_src.d | 29 | ||||
| -rw-r--r-- | src/sdp/meta/read_config_files.d | 271 | ||||
| -rw-r--r-- | src/sdp/meta/read_source_files.d | 6 | ||||
| -rw-r--r-- | src/sdp/meta/rgx.d | 9 | ||||
| -rw-r--r-- | src/sdp/output/paths_output.d | 2 | ||||
| -rw-r--r-- | src/sdp/output/paths_source.d | 49 | ||||
| -rw-r--r-- | src/sdp/output/rgx.d | 6 | ||||
| -rw-r--r-- | src/sdp/output/source_sisupod.d | 58 | ||||
| -rwxr-xr-x | src/sdp/sdp.d | 11 | 
18 files changed, 1475 insertions, 554 deletions
| diff --git a/src/sdp/meta/conf_make_meta.d b/src/sdp/meta/conf_make_meta.d deleted file mode 100644 index 27c03bb..0000000 --- a/src/sdp/meta/conf_make_meta.d +++ /dev/null @@ -1,38 +0,0 @@ -/++ -  extract native/orig header return associative array<BR> - -  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; -static template docHeaderMakeAndMetaTupExtractAndConvertToStruct() { -  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 docHeaderMakeAndMetaTupExtractAndConvertToStruct(CCm, Src)( -    CCm     conf_composite_make, -    Src     header_src, -  ) { -    auto header_sdlang_tag = (!(header_src.match(rgx.native_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; -  } -} diff --git a/src/sdp/meta/conf_make_meta_composite.d b/src/sdp/meta/conf_make_meta_composite.d deleted file mode 100644 index 51e81ec..0000000 --- a/src/sdp/meta/conf_make_meta_composite.d +++ /dev/null @@ -1,45 +0,0 @@ -/++ -  return composite make from config files -+/ -module sdp.meta.conf_make_meta_composite; - -template confFilesSDLtoStruct() { -  import -    std.exception, -    std.regex, -    std.stdio, -    std.string, -    std.traits, -    std.typecons, -    std.utf, -    std.conv : to; -  import -    sdp.meta.defaults, -    sdp.meta.rgx; -  auto confFilesSDLtoStruct(S,L)( -    S sdl_root_config_share, -    L sdl_root_config_local, -  ){ -    mixin SiSUregisters; -    ConfCompositePlus _conf_composite; -    foreach (conf_sdlang; [sdl_root_config_share, sdl_root_config_local]) { -      if ("make" in conf_sdlang.maybe.tags) { -         _conf_composite.make_str.bold              = _conf_composite.make.bold              = extractSDLangTabOrAttrib(conf_sdlang, "make", "bold"); -         _conf_composite.make_str.breaks            = _conf_composite.make.breaks            = extractSDLangTabOrAttrib(conf_sdlang, "make", "breaks"); -         _conf_composite.make_str.cover_image       = _conf_composite.make.cover_image       = extractSDLangTabOrAttrib(conf_sdlang, "make", "cover_image"); -         _conf_composite.make_str.css               = _conf_composite.make.css               = extractSDLangTabOrAttrib(conf_sdlang, "make", "css"); -         _conf_composite.make_str.emphasis          = _conf_composite.make.emphasis          = extractSDLangTabOrAttrib(conf_sdlang, "make", "emphasis"); -         _conf_composite.make_str.footer            = _conf_composite.make.footer            = extractSDLangTabOrAttrib(conf_sdlang, "make", "footer"); -         _conf_composite.make_str.headings          = _conf_composite.make.headings          = extractSDLangTabOrAttrib(conf_sdlang, "make", "headings"); -         _conf_composite.make_str.home_button_image = _conf_composite.make.home_button_image = extractSDLangTabOrAttrib(conf_sdlang, "make", "home_button_image"); -         _conf_composite.make_str.home_button_text  = _conf_composite.make.home_button_text  = extractSDLangTabOrAttrib(conf_sdlang, "make", "home_button_text"); -         _conf_composite.make_str.italics           = _conf_composite.make.italics           = extractSDLangTabOrAttrib(conf_sdlang, "make", "italics"); -         _conf_composite.make_str.num_top           = _conf_composite.make.num_top           = extractSDLangTabOrAttrib(conf_sdlang, "make", "num_top"); -         _conf_composite.make_str.num_depth         = _conf_composite.make.num_depth         = extractSDLangTabOrAttrib(conf_sdlang, "make", "num_depth"); -         _conf_composite.make_str.substitute        = _conf_composite.make.substitute        = extractSDLangTabOrAttrib(conf_sdlang, "make", "substitute"); -         _conf_composite.make_str.texpdf_font       = _conf_composite.make.texpdf_font       = extractSDLangTabOrAttrib(conf_sdlang, "make", "texpdf_font"); -      } -    } -    return _conf_composite; -  } -} diff --git a/src/sdp/meta/conf_make_meta_json.d b/src/sdp/meta/conf_make_meta_json.d new file mode 100644 index 0000000..88e24da --- /dev/null +++ b/src/sdp/meta/conf_make_meta_json.d @@ -0,0 +1,369 @@ +/++ +  json headers<BR> +  extract json header return json ++/ +module sdp.meta.conf_make_meta_json; +static template contentJSONtoSiSUstruct() { +  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.conf_make_meta_json, +    sdp.meta.rgx; +  ConfCompositePlus _struct_composite; +  auto contentJSONtoSiSUstruct(C, J)(C _struct_composite, J _json, string _identifier) { +    mixin SiSUrgxInit; +    static auto _rgx = Rgx(); +    debug (json) { +      writeln(">> --------------------------- >>"); +      foreach (tag0; _json.object.byKeyValue) { +        if (tag0.value.stringof == "string") { +          writeln(tag0.key, ": ", tag0.value); +        } else { +          // writeln(tag0.key, ":"); +          foreach (tag1; tag0.value.object.byKeyValue) { +            writeln(tag0.key, ":", tag1.key, ": ", tag1.value); +          } +        } +      } +      writeln("<< --------------------------- <<"); +    } +    confCompositeMakeBuild _mk; +    /+ make ------------------------------------------------------------------- +/ +    if ("make" in _json.object) { +      if ("bold" in _json.object["make"]) { +        _struct_composite.make_str.bold  = _json.object["make"]["bold"].str; +      } +      if ("breaks" in _json.object["make"]) { +        _struct_composite.make_str.breaks  = _json.object["make"]["breaks"].str; +      } +      if ("cover_image" in _json.object["make"]) { +        _struct_composite.make_str.cover_image  = _json.object["make"]["cover_image"].str; +      } +      if ("css" in _json.object["make"]) { +        _struct_composite.make_str.css  = _json.object["make"]["css"].str; +      } +      if ("emphasis" in _json.object["make"]) { +        _struct_composite.make_str.emphasis  = _json.object["make"]["emphasis"].str; +      } +      if ("footer" in _json.object["make"]) { +        _struct_composite.make_str.footer  = _json.object["make"]["footer"].str; +      } +      if ("headings" in _json.object["make"]) { +        _struct_composite.make_str.headings  = _json.object["make"]["headings"].str; +      } +      if ("home_button_image" in _json.object["make"]) { +        _struct_composite.make_str.home_button_image  = _json.object["make"]["home_button_image"].str; +      } +      if ("home_button_text" in _json.object["make"]) { +        _struct_composite.make_str.home_button_text  = _json.object["make"]["home_button_text"].str; +      } +      if ("italics" in _json.object["make"]) { +        _struct_composite.make_str.italics  = _json.object["make"]["italics"].str; +      } +      if ("num_top" in _json.object["make"]) { +        _struct_composite.make_str.num_top  = _json.object["make"]["num_top"].str; +      } +      if ("num_depth" in _json.object["make"]) { +        _struct_composite.make_str.num_depth  = _json.object["num_depth"][""].str; +      } +      if ("substitute" in _json.object["make"]) { +        _struct_composite.make_str.substitute  = _json.object["make"]["substitute"].str; +      } +      if ("texpdf_font" in _json.object["make"]) { +        _struct_composite.make_str.texpdf_font  = _json.object["make"]["texpdf_font"].str; +      } +      _struct_composite.make.bold_rgxmatch                  = _mk.bold_rgxmatch(_struct_composite.make_str.bold); +      _struct_composite.make.breaks                         = _mk.breaks(_struct_composite.make_str.breaks); +      _struct_composite.make.cover_image                    = _mk.cover_image(_struct_composite.make_str.cover_image); +      _struct_composite.make.css                            = _mk.css(_struct_composite.make_str.css); +      _struct_composite.make.emphasis_rgxmatch              = _mk.emphasis_rgxmatch(_struct_composite.make_str.emphasis); +      _struct_composite.make.footer                         = _mk.footer(_struct_composite.make_str.footer); +      _struct_composite.make.headings                       = _mk.headings(_struct_composite.make_str.headings); +      _struct_composite.make.home_button_image              = _mk.home_button_image(_struct_composite.make_str.home_button_image); +      _struct_composite.make.home_button_text               = _mk.home_button_text(_struct_composite.make_str.home_button_text); +      _struct_composite.make.italics_rgxmatch               = _mk.italics_rgxmatch(_struct_composite.make_str.italics); +      _struct_composite.make.num_top                        = _mk.num_top(_struct_composite.make_str.num_top); +      _struct_composite.make.num_depth                      = _mk.num_depth(_struct_composite.make_str.num_depth); +      _struct_composite.make.substitute                     = _mk.substitute(_struct_composite.make_str.substitute); +      _struct_composite.make.texpdf_font                    = _mk.texpdf_font(_struct_composite.make_str.texpdf_font); +    } +    /+ conf ------------------------------------------------------------------- +/ +    if ("webserv" in _json.object) { +      if ("url_root" in _json.object["webserv"]) { +        _struct_composite.conf.webserv_url_root = _json.object["webserv"]["url_root"].str; +      } +      if ("path" in _json.object["webserv"]) { +        _struct_composite.conf.webserv_path = _json.object["webserv"]["path"].str; +      } +      if ("images" in _json.object["webserv"]) { +        _struct_composite.conf.webserv_images = _json.object["webserv"]["images"].str; +      } +      if ("cgi" in _json.object["webserv"]) { +        _struct_composite.conf.webserv_cgi = _json.object["webserv"]["cgi"].str; +      } +      if ("cgi_host" in _json.object["webserv"]) { +        _struct_composite.conf.webserv_cgi_host = _json.object["webserv"]["cgi_host"].str; +      } +      if ("cgi_host_path" in _json.object["webserv"]) { +        _struct_composite.conf.webserv_cgi_host_path = _json.object["webserv"]["cgi_host_path"].str; +      } +      if ("cgi_port" in _json.object["webserv"]) { +        _struct_composite.conf.webserv_cgi_port = _json.object["webserv"]["cgi_port"].str; +      } +      if ("cgi_user" in _json.object["webserv"]) { +        _struct_composite.conf.webserv_cgi_user = _json.object["webserv"]["cgi_user"].str; +      } +      if ("cgi_file_links" in _json.object["webserv"]) { +        _struct_composite.conf.webserv_cgi_file_links = _json.object["webserv"]["cgi_file_links"].str; +      } +    } +    if ("processing" in _json.object) { // TODO check & match logic with sdlang +      if ("path" in _json.object["processing"]) { +        _struct_composite.conf.processing_path = _json.object["processing"]["path"].str; +      } +      if ("dir" in _json.object["processing"]) { +        _struct_composite.conf.processing_dir = _json.object["processing"]["dir"].str; +      } +      if ("concord_max" in _json.object["processing"]) { +        _struct_composite.conf.processing_concord_max = _json.object["processing"]["concord_max"].str; +      } +    } +    if ("flag" in _json.object) { +      if ("act0" in _json.object["flag"]) { +        _struct_composite.conf.flag_act0 = _json.object["flag"]["act0"].str; +      } +      if ("act1" in _json.object["flag"]) { +        _struct_composite.conf.flag_act1 = _json.object["flag"]["act1"].str; +      } +      if ("act2" in _json.object["flag"]) { +        _struct_composite.conf.flag_act2 = _json.object["flag"]["act2"].str; +      } +      if ("act3" in _json.object["flag"]) { +        _struct_composite.conf.flag_act3 = _json.object["flag"]["act3"].str; +      } +      if ("act4" in _json.object["flag"]) { +        _struct_composite.conf.flag_act4 = _json.object["flag"]["act4"].str; +      } +      if ("act5" in _json.object["flag"]) { +        _struct_composite.conf.flag_act5 = _json.object["flag"]["act5"].str; +      } +      if ("act6" in _json.object["flag"]) { +        _struct_composite.conf.flag_act6 = _json.object["flag"]["act6"].str; +      } +      if ("act7" in _json.object["flag"]) { +        _struct_composite.conf.flag_act7 = _json.object["flag"]["act7"].str; +      } +      if ("act8" in _json.object["flag"]) { +        _struct_composite.conf.flag_act8 = _json.object["flag"]["act8"].str; +      } +      if ("act9" in _json.object["flag"]) { +        _struct_composite.conf.flag_act9 = _json.object["flag"]["act9"].str; +      } +    } +    if ("default" in _json.object) { +      if ("papersize" in _json.object["default"]) { +        _struct_composite.conf.default_papersize = _json.object["default"]["papersize"].str; +      } +      if ("text_wrap" in _json.object["default"]) { +        _struct_composite.conf.default_text_wrap = _json.object["default"]["text_wrap"].str; +      } +      if ("emphasis" in _json.object["default"]) { +        _struct_composite.conf.default_emphasis = _json.object["default"]["emphasis"].str; +      } +      if ("language" in _json.object["default"]) { +        _struct_composite.conf.default_language = _json.object["default"]["language"].str; +      } +      if ("digest" in _json.object["default"]) { +        _struct_composite.conf.default_digest = _json.object["default"]["digest"].str; +      } +    } +    if ("search" in _json.object) { +      if ("flag" in _json.object["search"]) { +        _struct_composite.conf.search_flag = _json.object["search"]["flag"].str; +      } +      if ("action" in _json.object["search"]) { +        _struct_composite.conf.search_action = _json.object["search"]["action"].str; +      } +      if ("db" in _json.object["search"]) { +        _struct_composite.conf.search_db = _json.object["search"]["db"].str; +      } +      if ("title" in _json.object["search"]) { +        _struct_composite.conf.search_title = _json.object["search"]["title"].str; +      } +    } +    /+ meta ------------------------------------------------------------------- +/ +    if ("classify" in _json.object) { +      if ("dewey" in _json.object["classify"]) { +        _struct_composite.meta.classify_dewey = _json.object["classify"]["dewey"].str; +      } +      if ("keywords" in _json.object["classify"]) { +        _struct_composite.meta.classify_keywords = _json.object["classify"]["keywords"].str; +      } +      if ("loc" in _json.object["classify"]) { +        _struct_composite.meta.classify_loc = _json.object["classify"]["loc"].str; +      } +      if ("subject" in _json.object["classify"]) { +        _struct_composite.meta.classify_subject = _json.object["classify"]["subject"].str; +      } +      if ("topic_register" in _json.object["classify"]) { +        _struct_composite.meta.classify_topic_register = _json.object["classify"]["topic_register"].str; +      } +    } +    if ("date" in _json.object) { +      if ("added_to_site" in _json.object["date"]) { +        _struct_composite.meta.date_added_to_site = _json.object["date"]["added_to_site"].str; +      } +      if ("available" in _json.object["date"]) { +        _struct_composite.meta.date_available = _json.object["date"]["available"].str; +      } +      if ("created" in _json.object["date"]) { +        _struct_composite.meta.date_created = _json.object["date"]["created"].str; +      } +      if ("issued" in _json.object["date"]) { +        _struct_composite.meta.date_issued = _json.object["date"]["issued"].str; +      } +      if ("modified" in _json.object["date"]) { +        _struct_composite.meta.date_modified = _json.object["date"]["modified"].str; +      } +      if ("published" in _json.object["date"]) { +        _struct_composite.meta.date_published = _json.object["date"]["published"].str; +      } +      if ("valid" in _json.object["date"]) { +        _struct_composite.meta.date_valid = _json.object["date"]["valid"].str; +      } +    } +    if ("links" in _json.object) { +      // if ("" in _json.object["links"]) { +      //   _struct_composite.meta.links_ = _json.object["links"][""].str; +      // } +    } +    if ("notes" in _json.object) { +      if ("abstract" in _json.object["notes"]) { +        _struct_composite.meta.notes_abstract = _json.object["notes"]["abstract"].str; +      } +      if ("description" in _json.object["notes"]) { +        _struct_composite.meta.notes_description = _json.object["notes"]["description"].str; +      } +    } +    if ("original" in _json.object) { +      if ("language" in _json.object["original"]) { +        _struct_composite.meta.original_language = _json.object["original"]["language"].str; +      } +      if ("language_char" in _json.object["original"]) { +        _struct_composite.meta.original_language_char = _json.object["original"]["language_char"].str; +      } +      if ("source" in _json.object["original"]) { +        _struct_composite.meta.original_source = _json.object["original"]["source"].str; +      } +      if ("title" in _json.object["original"]) { +        _struct_composite.meta.original_title = _json.object["original"]["title"].str; +      } +    } +    if ("publisher" in _json.object) { +      // if ("" in _json.object["publisher"]) { +      //   _struct_composite.meta.publisher = _json.object["publisher"][""].str; +      // } +    } +    if ("rights" in _json.object) { +      if ("copyright" in _json.object["rights"]) { +        _struct_composite.meta.rights_copyright = _json.object["rights"]["copyright"].str; +      } +      if ("copyright_text" in _json.object["rights"]) { +        _struct_composite.meta.rights_copyright_text = _json.object["rights"]["copyright_text"].str; +      } +      if ("copyright_audio" in _json.object["rights"]) { +        _struct_composite.meta.rights_copyright_audio = _json.object["rights"]["copyright_audio"].str; +      } +      if ("copyright_cover" in _json.object["rights"]) { +        _struct_composite.meta.rights_copyright_cover = _json.object["rights"]["copyright_cover"].str; +      } +      if ("copyright_illustrations" in _json.object["rights"]) { +        _struct_composite.meta.rights_copyright_illustrations = _json.object["rights"]["copyright_illustrations"].str; +      } +      if ("copyright_photographs" in _json.object["rights"]) { +        _struct_composite.meta.rights_copyright_photographs = _json.object["rights"]["copyright_photographs"].str; +      } +      if ("copyright_translation" in _json.object["rights"]) { +        _struct_composite.meta.rights_copyright_translation = _json.object["rights"]["copyright_translation"].str; +      } +      if ("copyright_video" in _json.object["rights"]) { +        _struct_composite.meta.rights_copyright_video = _json.object["rights"]["copyright_video"].str; +      } +      if ("license" in _json.object["rights"]) { +        _struct_composite.meta.rights_license = _json.object["rights"]["license"].str; +      } +    } +    if (_struct_composite.meta.creator_author.empty) { +      if ("creator" in _json.object) { +        if ("author" in _json.object["creator"]) { +          _struct_composite.meta.creator_author = _json.object["creator"]["author"].str; +        } +        if ("email" in _json.object["creator"]) { +          _struct_composite.meta.creator_author_email = _json.object["creator"]["email"].str; +        } +        if ("illustrator" in _json.object["creator"]) { +          _struct_composite.meta.creator_illustrator = _json.object["creator"]["illustrator"].str; +        } +        if ("translator" in _json.object["creator"]) { +          _struct_composite.meta.creator_translator = _json.object["creator"]["translator"].str; +        } +      } +      // dochead_meta["creator"]["author_raw"] = dochead_meta["creator"]["author"]; +      string[] authors_arr; +      auto authors_raw_arr = _struct_composite.meta.creator_author.split(_rgx.arr_delimiter); +      foreach (author_raw; authors_raw_arr) { +        authors_arr ~= author_raw.replace(_rgx.raw_author_munge, "$2 $1"); +      } +      _struct_composite.meta.creator_author = join(authors_arr, ", ").chomp.chomp; +    } +    if (_struct_composite.meta.title_main.empty) { +      if ("title" in _json.object) { +        if ((_json.object["title"].type().to!string) == "STRING") { +          _struct_composite.meta.title_main                     = _json.object["title"].str; +        } else { +          if ("edition" in _json.object["title"]) { +            _struct_composite.meta.title_edition                = _json.object["title"]["edition"].str; +          } +          if ("full" in _json.object["title"]) { +            // _struct_composite.meta.title_full                  = _json.object["title"]["full"].str; +          } +          if ("language" in _json.object["title"]) { +            _struct_composite.meta.title_language               = _json.object["title"]["language"].str; +          } +          if ("main" in _json.object["title"]) { +            _struct_composite.meta.title_main                   = _json.object["title"]["main"].str; +          } +          if ("note" in _json.object["title"]) { +            _struct_composite.meta.title_note                   = _json.object["title"]["note"].str; +          } +          if ("sub" in _json.object["title"]) { +            _struct_composite.meta.title_sub                    = _json.object["title"]["sub"].str; +          } +          if ("subtitle" in _json.object["title"]) { +            _struct_composite.meta.title_subtitle               = _json.object["title"]["subtitle"].str; +          } +        } +      } +      if ((!(_struct_composite.meta.title_subtitle.empty)) +      && (_struct_composite.meta.title_sub.empty)) { +        _struct_composite.meta.title_sub = _struct_composite.meta.title_subtitle; +      } +      _struct_composite.meta.title_full = (_struct_composite.meta.title_sub.empty) +      ? _struct_composite.meta.title_main +      : format( +          "%s - %s", +          _struct_composite.meta.title_main, +          _struct_composite.meta.title_sub, +        ); +    } +    return _struct_composite; +  } +} 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<BR> + +  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<BR>    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; +  } +} diff --git a/src/sdp/meta/conf_make_meta_structs.d b/src/sdp/meta/conf_make_meta_structs.d new file mode 100644 index 0000000..211d2c0 --- /dev/null +++ b/src/sdp/meta/conf_make_meta_structs.d @@ -0,0 +1,305 @@ +module sdp.meta.conf_make_meta_structs; +import +  std.exception, +  std.regex, +  std.stdio, +  std.string, +  std.traits, +  std.typecons, +  std.utf, +  std.conv : to; +struct ConfCompositeMakeStr { +  string bold                           = ""; +  string breaks                         = ""; +  string cover_image                    = ""; +  string css                            = ""; +  string emphasis                       = ""; +  string footer                         = ""; +  string headings                       = ""; +  string home_button_image              = ""; +  string home_button_text               = ""; +  string italics                        = ""; +  string num_top                        = ""; +  string num_depth                      = ""; +  string substitute                     = ""; +  string texpdf_font                    = ""; +} +struct confCompositeMakeBuild { +  auto bold_rgxmatch(string _mk) { +    auto _rgxtxt = (_mk.empty) +    ? `=NULL` +    : `(` ~ _mk.dup ~ `)`; +    return (cast(char[]) (_rgxtxt)); +  } +  auto bold_substitute_abstract() { +    return "<b>$1</b>"; +  } +  auto bold_substitute_html() { +    return "<b>$1</b>"; +  } +  auto breaks(string _mk) { +    return _mk; +  } +  auto cover_image(string _mk) { +    return _mk; +  } +  auto css(string _mk) { +    return _mk; +  } +  auto emphasis_rgxmatch(string _mk) { +    auto _rgxtxt = (_mk.empty) +    ? `=NULL` +    : `(` ~ _mk.dup ~ `)`; +    return (cast(char[]) (_rgxtxt)); +  } +  auto emphasis_substitute_abstract() { +    return "<em>$1</em>"; +  } +  auto emphasis_substitute_html() { +    return "<em>$1</em>"; +  } +  auto footer(string _mk) { +    return _mk; +  } +  auto headings(string _mk) { +    return _mk; +  } +  auto home_button_image(string _mk) { +    return _mk; +  } +  auto home_button_text(string _mk) { +    return _mk; +  } +  auto italics_rgxmatch(string _mk) { +    auto _rgxtxt = (_mk.empty) +    ? `=NULL` +    : `(` ~ _mk.dup ~ `)`; +    return (cast(char[]) (_rgxtxt)); +  } +  auto italics_substitute_abstract() { +    return "<i>$1</i>"; +  } +  auto italics_substitute_html() { +    return "<i>$1</i>"; +  } +  auto num_top(string _mk) { +    return _mk; +  } +  auto num_depth(string _mk) { +    return _mk; +  } +  auto substitute(string _mk) { // TODO this is different from others +    return regex(_mk); +  } +  auto texpdf_font(string _mk) { +    return _mk; +  } +} +struct ConfCompositeMakeInit { +  char[] bold_rgxmatch                  = `=NULL`.dup; +  auto bold_substitute_abstract         = "<b>$1</b>"; +  auto bold_substitute_html             = "<b>$1</b>"; +  string breaks                         = ""; +  string cover_image                    = ""; +  string css                            = ""; +  char[] emphasis_rgxmatch              = `=NULL`.dup; +  auto emphasis_substitute_abstract     = "<em>$1</em>"; +  auto emphasis_substitute_html         = "<em>$1</em>"; +  string footer                         = ""; +  string headings                       = ""; +  string home_button_image              = ""; +  string home_button_text               = ""; +  char[] italics_rgxmatch               = `=NULL`.dup; +  auto italics_substitute_abstract      = "<i>$1</i>"; +  auto italics_substitute_html          = "<i>$1</i>"; +  string num_top                        = ""; +  string num_depth                      = ""; +  auto substitute                       = regex(""); // TODO +  string texpdf_font                    = ""; +} +struct ConfCompositeSiteLocal { +  string webserv_url_root               = ""; +  string webserv_path                   = ""; +  string webserv_images                 = ""; +  string webserv_cgi                    = ""; +  string webserv_cgi_host               = ""; +  string webserv_cgi_host_path          = ""; +  string webserv_cgi_port               = ""; +  string webserv_cgi_user               = ""; +  string webserv_cgi_file_links         = ""; +  string processing_path                = ""; +  string processing_dir                 = ""; +  string processing_concord_max         = ""; +  string flag_act0                      = ""; +  string flag_act1                      = ""; +  string flag_act2                      = ""; +  string flag_act3                      = ""; +  string flag_act4                      = ""; +  string flag_act5                      = ""; +  string flag_act6                      = ""; +  string flag_act7                      = ""; +  string flag_act8                      = ""; +  string flag_act9                      = ""; +  string default_papersize              = ""; +  string default_text_wrap              = ""; +  string default_emphasis               = ""; +  string default_language               = ""; +  string default_digest                 = ""; +  string permission_share_source        = ""; +  string search_flag                    = ""; +  string search_action                  = ""; +  string search_db                      = ""; +  string search_title                   = ""; +} +struct MetaComposite { +  string classify_dewey                 = ""; +  string classify_keywords              = ""; +  string classify_loc                   = ""; +  string classify_subject               = ""; +  string classify_topic_register        = ""; +  string creator_author                 = ""; +  string creator_author_email           = ""; +  string creator_illustrator            = ""; +  string creator_translator             = ""; +  string date_added_to_site             = ""; +  string date_available                 = ""; +  string date_created                   = ""; +  string date_issued                    = ""; +  string date_modified                  = ""; +  string date_published                 = ""; +  string date_valid                     = ""; +  string identifier_isbn                = ""; +  string identifier_oclc                = ""; +  string identifier_pg                  = ""; +  string language_document              = ""; +  string language_document_char         = ""; +  string links                          = ""; +  string notes_abstract                 = ""; +  string notes_description              = ""; +  string original_language              = ""; +  string original_language_char         = ""; +  string original_publisher             = ""; +  string original_source                = ""; +  string original_title                 = ""; +  string publisher                      = ""; +  string rights_copyright               = ""; +  string rights_copyright_audio         = ""; +  string rights_copyright_cover         = ""; +  string rights_copyright_illustrations = ""; +  string rights_copyright_photographs   = ""; +  string rights_copyright_text          = ""; +  string rights_copyright_translation   = ""; +  string rights_copyright_video         = ""; +  string rights_license                 = ""; +  string title_edition                  = ""; +  string title_full                     = ""; +  string title_language                 = ""; +  string title_main                     = ""; +  string title_note                     = ""; +  string title_short                    = ""; +  string title_sub                      = ""; +  string title_subtitle                 = ""; +} +struct ConfComposite { +  MetaComposite               meta; +  ConfCompositeMakeInit       make; +  ConfCompositeSiteLocal      conf; +} +struct ConfCompositePlus { +  MetaComposite               meta; +  ConfCompositeMakeInit       make; +  ConfCompositeMakeStr        make_str; +  ConfCompositeSiteLocal      conf; +} +static auto ptr_head_main +  = [ +    "classify", +    "creator", +    "date", +    "identifier", +    "links", +    "make", +    "original", +    "notes", +    "rights", +    "title" +  ]; +static auto ptr_head_sub_classify +  = [ +    "dewey", +    "keywords", +    "loc", +    "subject", +    "topic_register" +  ]; +static auto ptr_head_sub_creator +  = [ +    "author", +    "author_email", +    "cover", +    "illustrator", +    "translator" +  ]; +static auto ptr_head_sub_date +  = [ +    "added_to_site", +    "available", +    "created", +    "issued", +    "modified", +    "published", +    "valid" +  ]; +static auto ptr_head_sub_identifier +  = [ +    "isbn", +    "oclc", +    "pg" +  ]; +/+ make +/ +static auto ptr_head_sub_make +  = [ +    "cover_image", +    "home_button_image", +    "home_button_text", +    "footer", "headings", +    "num_top", "num_depth", +    "breaks", +    "substitute", +    "bold", +    "italics", +    "emphasis", +    "texpdf_font", +    "css" +  ]; +static auto ptr_head_sub_notes +  = [ +    "abstract", +    "description" +  ]; +static auto ptr_head_sub_original +  = [ +    "language", +    "source", +    "title" +  ]; +static auto ptr_head_sub_publisher +  = [ "name" ]; +static auto ptr_head_sub_rights +  = [ +    "copyright", +    "cover", +    "illustrations", +    "license" +  ]; +static auto ptr_head_sub_title +  = [ +    "edition", +    "full", +    "language", +    "main", +    "note", +    "sub" +  ]; +auto config_jsonstr = `{ +}`; diff --git a/src/sdp/meta/conf_make_meta_toml.d b/src/sdp/meta/conf_make_meta_toml.d new file mode 100644 index 0000000..4390c5c --- /dev/null +++ b/src/sdp/meta/conf_make_meta_toml.d @@ -0,0 +1,79 @@ +/++ +  extract native/orig header return associative array<BR> + +  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_toml; +static template configParseTOMLreturnJSON() { +  import +    toml, +    toml.json; +  auto configParseTOMLreturnJSON(T)( +    T _text +  ){ +    TOMLDocument _doc; +    _doc = parseTOML(cast(string)(_text.content)); +    auto _doc_json = toJSON(_doc); +    return _doc_json; +  } +} +static template configParseTOMLreturnSiSUstruct() { +  import +    toml, +    toml.json; +  import +    sdp.meta.conf_make_meta_structs, +    sdp.meta.conf_make_meta_json; +  mixin contentJSONtoSiSUstruct; +  auto configParseTOMLreturnSiSUstruct(CCm, T)( +    CCm     _make_and_meta_struct, +    T       _document_struct +  ){ +    TOMLDocument _doc = parseTOML(cast(string)(_document_struct.content)); +    auto _doc_json = toJSON(_doc); +    _make_and_meta_struct = contentJSONtoSiSUstruct!()(_make_and_meta_struct, _doc_json, _document_struct.filename); // struct from json +    return _make_and_meta_struct; +  } +} +static template docHeaderMakeAndMetaTupTomlExtractAndConvertToStruct() { +  import +    std.exception, +    std.regex, +    std.stdio, +    std.traits, +    std.typecons, +    std.utf, +    std.conv : to; +  import +    toml, +    toml.json; +  import +    sdp.meta.conf_make_meta_structs, +    sdp.meta.conf_make_meta_json, +    sdp.meta.rgx; +  mixin SiSUrgxInit; +  mixin contentJSONtoSiSUstruct; +  static auto rgx = Rgx(); +  auto docHeaderMakeAndMetaTupTomlExtractAndConvertToStruct(CCm, Src)( +    CCm     _make_and_meta_struct, +    Src     header_src, +  ) { +    TOMLDocument _doc; +    if (header_src.match(rgx.sdlang_header_meta_title)) { +      writeln("WARNING >>> document header is sdlang (in wrong location JSON)"); +    } else if (header_src.match(rgx.toml_header_meta_title)) { +      debug (json) { +        writeln(">>> document header is toml, convert to JSON"); +      } +      _doc = parseTOML(cast(string)(header_src)); +    } +    auto _doc_json = toJSON(_doc); +    auto _header_and_make_and_meta_struct = contentJSONtoSiSUstruct!()(_make_and_meta_struct, _doc_json, "header"); +    return _header_and_make_and_meta_struct; +  } +} diff --git a/src/sdp/meta/defaults.d b/src/sdp/meta/defaults.d index 7f0586e..13bf312 100644 --- a/src/sdp/meta/defaults.d +++ b/src/sdp/meta/defaults.d @@ -2,275 +2,6 @@    default settings  +/  module sdp.meta.defaults; -template SiSUregisters() { -  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; -  struct ConfCompositeMake { -    string bold                           = ""; -    string breaks                         = ""; -    string cover_image                    = ""; -    string css                            = ""; -    string emphasis                       = ""; -    string footer                         = ""; -    string headings                       = ""; -    string home_button_image              = ""; -    string home_button_text               = ""; -    string italics                        = ""; -    string num_top                        = ""; -    string num_depth                      = ""; -    string substitute                     = ""; -    string texpdf_font                    = ""; -  } -  struct ConfCompositeMakeStr { -    string bold                           = ""; -    string breaks                         = ""; -    string cover_image                    = ""; -    string css                            = ""; -    string emphasis                       = ""; -    string footer                         = ""; -    string headings                       = ""; -    string home_button_image              = ""; -    string home_button_text               = ""; -    string italics                        = ""; -    string num_top                        = ""; -    string num_depth                      = ""; -    string substitute                     = ""; -    string texpdf_font                    = ""; -  } -  struct ConfCompositeSiteLocal { -    string webserv_url_root               = ""; -    string webserv_path                   = ""; -    string webserv_images                 = ""; -    string webserv_cgi                    = ""; -    string webserv_cgi_host               = ""; -    string webserv_cgi_host_path          = ""; -    string webserv_cgi_port               = ""; -    string webserv_cgi_user               = ""; -    string webserv_cgi_file_links         = ""; -    string processing_path                = ""; -    string processing_dir                 = ""; -    string processing_concord_max         = ""; -    string flag_act0                      = ""; -    string flag_act1                      = ""; -    string flag_act2                      = ""; -    string flag_act3                      = ""; -    string flag_act4                      = ""; -    string flag_act5                      = ""; -    string flag_act6                      = ""; -    string flag_act7                      = ""; -    string flag_act8                      = ""; -    string flag_act9                      = ""; -    string default_papersize              = ""; -    string default_text_wrap              = ""; -    string default_emphasis               = ""; -    string default_language               = ""; -    string default_digest                 = ""; -    string permission_share_source        = ""; -    string search_flag                    = ""; -    string search_action                  = ""; -    string search_db                      = ""; -    string search_title                   = ""; -  } -  struct MetaComposite { -    string classify_dewey                 = ""; -    string classify_keywords              = ""; -    string classify_loc                   = ""; -    string classify_subject               = ""; -    string classify_topic_register        = ""; -    string creator_author                 = ""; -    string creator_author_email           = ""; -    string creator_illustrator            = ""; -    string creator_translator             = ""; -    string date_added_to_site             = ""; -    string date_available                 = ""; -    string date_created                   = ""; -    string date_issued                    = ""; -    string date_modified                  = ""; -    string date_published                 = ""; -    string date_valid                     = ""; -    string identifier_isbn                = ""; -    string identifier_oclc                = ""; -    string identifier_pg                  = ""; -    string language_document              = ""; -    string language_document_char         = ""; -    string links                          = ""; -    string notes_abstract                 = ""; -    string notes_description              = ""; -    string original_language              = ""; -    string original_language_char         = ""; -    string original_publisher             = ""; -    string original_source                = ""; -    string original_title                 = ""; -    string publisher                      = ""; -    string rights_copyright               = ""; -    string rights_copyright_audio         = ""; -    string rights_copyright_cover         = ""; -    string rights_copyright_illustrations = ""; -    string rights_copyright_photographs   = ""; -    string rights_copyright_text          = ""; -    string rights_copyright_translation   = ""; -    string rights_copyright_video         = ""; -    string rights_license                 = ""; -    string title_edition                  = ""; -    string title_full                     = ""; -    string title_language                 = ""; -    string title_main                     = ""; -    string title_note                     = ""; -    string title_short                    = ""; -    string title_sub                      = ""; -    string title_subtitle                 = ""; -  } -  struct ConfComposite { -    MetaComposite          meta; -    ConfCompositeMake      make; -    ConfCompositeSiteLocal conf; -  } -  struct ConfCompositePlus { -    MetaComposite          meta; -    ConfCompositeMake      make; -    ConfCompositeMakeStr   make_str; -    ConfCompositeSiteLocal conf; -  } -  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__, ": make:", 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.maybe.attributes[atab][0].value.length > 0)) { -        debug(configsdlang) { -          writeln(__LINE__, ": make:", atab, ": ", conf_sdlang.tags[maintag][0].attributes[atab][0].value); -        } -        _conf_composite_string = (_maintag.attributes[atab][0].value).to!string; -      } -    } -    return _conf_composite_string; -  } -  static auto ptr_head_main -    = [ -      "classify", -      "creator", -      "date", -      "identifier", -      "links", -      "make", -      "original", -      "notes", -      "rights", -      "title" -    ]; -  static auto ptr_head_sub_classify -    = [ -      "dewey", -      "keywords", -      "loc", -      "subject", -      "topic_register" -    ]; -  static auto ptr_head_sub_creator -    = [ -      "author", -      "author_email", -      "cover", -      "illustrator", -      "translator" -    ]; -  static auto ptr_head_sub_date -    = [ -      "added_to_site", -      "available", -      "created", -      "issued", -      "modified", -      "published", -      "valid" -    ]; -  static auto ptr_head_sub_identifier -    = [ -      "isbn", -      "oclc", -      "pg" -    ]; -  /+ make +/ -  static auto ptr_head_sub_make -    = [ -      "cover_image", -      "home_button_image", -      "home_button_text", -      "footer", "headings", -      "num_top", "num_depth", -      "breaks", -      "substitute", -      "bold", -      "italics", -      "emphasis", -      "texpdf_font", -      "css" -    ]; -  static auto ptr_head_sub_notes -    = [ -      "abstract", -      "description" -    ]; -  static auto ptr_head_sub_original -    = [ -      "language", -      "source", -      "title" -    ]; -  static auto ptr_head_sub_publisher -    = [ "name" ]; -  static auto ptr_head_sub_rights -    = [ -      "copyright", -      "cover", -      "illustrations", -      "license" -    ]; -  static auto ptr_head_sub_title -    = [ -      "edition", -      "full", -      "language", -      "main", -      "note", -      "sub" -    ]; -  auto config_jsonstr = `{ -  }`; -}  template SiSUrgxInitFlags() {    /+ regex flags +/    static int[string] flags_type_init() { diff --git a/src/sdp/meta/doc_debugs.d b/src/sdp/meta/doc_debugs.d index 255ea92..18f50ad 100644 --- a/src/sdp/meta/doc_debugs.d +++ b/src/sdp/meta/doc_debugs.d @@ -55,8 +55,7 @@ template SiSUdebugs() {      }      debug(dumpdoc) {        writefln( -        "%s\n%s:%s", -        "-------------------------------", +        "> %s:%s",          __FILE__,          __LINE__,        ); @@ -232,8 +231,7 @@ template SiSUdebugs() {      }      debug(objects) {        writefln( -        "%s\n%s:%s", -        "-------------------------------", +        "> %s:%s",          __FILE__,          __LINE__,        ); @@ -398,8 +396,7 @@ template SiSUdebugs() {      }      debug(anchor) {        writefln( -        "%s\n%s:%s", -        "-------------------------------", +        "> %s:%s",          __FILE__,          __LINE__,        ); @@ -435,8 +432,7 @@ template SiSUdebugs() {      }      debug(headings) {        writefln( -        "%s\n%s:%s", -        "-------------------------------", +        "> %s:%s",          __FILE__,          __LINE__,        ); diff --git a/src/sdp/meta/metadoc.d b/src/sdp/meta/metadoc.d index cbc5d51..8223029 100644 --- a/src/sdp/meta/metadoc.d +++ b/src/sdp/meta/metadoc.d @@ -9,10 +9,10 @@ template SiSUabstraction() {      sdp.meta,      sdp.meta.metadoc_summary,      sdp.meta.metadoc_from_src, -    sdp.meta.conf_make_meta, -    // sdp.meta.conf_make_meta_native, +    sdp.meta.conf_make_meta_structs,      sdp.meta.conf_make_meta_sdlang, -    sdp.meta.conf_make_meta_composite, +    sdp.meta.conf_make_meta_toml, +    sdp.meta.conf_make_meta_json,      sdp.meta.defaults,      sdp.meta.doc_debugs,      sdp.meta.read_config_files, @@ -21,8 +21,9 @@ template SiSUabstraction() {      sdp.output.hub,      sdp.output.paths_source;    mixin SiSUrgxInit; -  mixin SiSUregisters; +  mixin SiSUmakeMetaStructsSDLang;    mixin SiSUextractSDLang; +  mixin contentJSONtoSiSUstruct;    mixin SiSUnode;    mixin SiSUbiblio;    mixin SiSUrgxInitFlags; @@ -36,9 +37,22 @@ template SiSUabstraction() {      O _opt_action,      M _manifest,    ){ -    auto sdl_root_config_document = configReadDoc!()(_manifest, _env); // document config file -    auto sdl_root_config_local_site = configReadSite!()(_manifest, _env); // local site config -    auto conf_files_composite_make = confFilesSDLtoStruct!()(sdl_root_config_document, sdl_root_config_local_site); +    auto _config_document_struct = readConfigDoc!()(_manifest, _env); // document config file +    auto _config_local_site_struct = readConfigSite!()(_manifest, _env); // local site config +    ConfCompositePlus _make_and_meta_struct; +    switch (_config_local_site_struct.filetype) { +    case "toml" : +      _make_and_meta_struct = configParseTOMLreturnSiSUstruct!()(_make_and_meta_struct, _config_document_struct); +      _make_and_meta_struct = configParseTOMLreturnSiSUstruct!()(_make_and_meta_struct, _config_local_site_struct); +      break; +    case "sdl" : +      auto sdl_root_config_document = parseSDLangConfig!()(_config_document_struct.content, _config_document_struct.filename); +      auto sdl_root_config_local_site = parseSDLangConfig!()(_config_local_site_struct.content, _config_local_site_struct.filename); +      _make_and_meta_struct = confFilesSDLtoStruct!()(sdl_root_config_document, sdl_root_config_local_site); +      break; +    default : +      break; +    }      /+ ↓ read file (filename with path) +/      /+ ↓ file tuple of header and content +/      debug(steps) { @@ -61,9 +75,14 @@ template SiSUabstraction() {      debug(steps) {        writeln("step2 commence → (read document header - toml or sdlang, return struct)");      } -    auto _make_and_meta_struct -      = docHeaderMakeAndMetaTupExtractAndConvertToStruct!()( -        conf_files_composite_make, +    _make_and_meta_struct = +    ((_header_body_insertfilelist_imagelist[headBody.header]).match(rgx.toml_header_meta_title)) +    ? docHeaderMakeAndMetaTupTomlExtractAndConvertToStruct!()( +        _make_and_meta_struct, +        _header_body_insertfilelist_imagelist[headBody.header] +      ) +    : docHeaderMakeAndMetaTupSDLangExtractAndConvertToStruct!()( +        _make_and_meta_struct,          _header_body_insertfilelist_imagelist[headBody.header]        );      debug(steps) { diff --git a/src/sdp/meta/metadoc_from_src.d b/src/sdp/meta/metadoc_from_src.d index a8014e3..d0ee599 100644 --- a/src/sdp/meta/metadoc_from_src.d +++ b/src/sdp/meta/metadoc_from_src.d @@ -1396,7 +1396,8 @@ template SiSUdocAbstraction() {              segnames_0_4 ~= obj.segment_anchor_tag;              if (obj.heading_lev_markup == 4) {                obj.segname_next = html_segnames[obj.ptr_html_segnames + 1]; -              assert(obj.segment_anchor_tag == html_segnames[obj.ptr_html_segnames]); +              assert(obj.segment_anchor_tag == html_segnames[obj.ptr_html_segnames], +              obj.segment_anchor_tag ~ "!=" ~ html_segnames[obj.ptr_html_segnames]);              }            }            /+ dom structure (marked up & collapsed) +/ @@ -1425,7 +1426,8 @@ template SiSUdocAbstraction() {              segnames_0_4 ~= obj.segment_anchor_tag;              if (obj.heading_lev_markup == 4) {                obj.segname_next = html_segnames[obj.ptr_html_segnames + 1]; -              assert(obj.segment_anchor_tag == html_segnames[obj.ptr_html_segnames]); +              assert(obj.segment_anchor_tag == html_segnames[obj.ptr_html_segnames], +              obj.segment_anchor_tag ~ "!=" ~ html_segnames[obj.ptr_html_segnames]);              }            }            if ((opt_action.html) @@ -1454,7 +1456,8 @@ template SiSUdocAbstraction() {                if (html_segnames.length > obj.ptr_html_segnames + 1) {                  obj.segname_next = html_segnames[obj.ptr_html_segnames + 1];                } -              assert(obj.segment_anchor_tag == html_segnames[obj.ptr_html_segnames]); +              assert(obj.segment_anchor_tag == html_segnames[obj.ptr_html_segnames], +              obj.segment_anchor_tag ~ "!=" ~ html_segnames[obj.ptr_html_segnames]);              }            }            /+ dom structure (marked up & collapsed) +/ @@ -1496,7 +1499,8 @@ template SiSUdocAbstraction() {                if (html_segnames.length > obj.ptr_html_segnames + 1) {                  obj.segname_next = html_segnames[obj.ptr_html_segnames + 1];                } -              assert(obj.segment_anchor_tag == html_segnames[obj.ptr_html_segnames]); +              assert(obj.segment_anchor_tag == html_segnames[obj.ptr_html_segnames], +              obj.segment_anchor_tag ~ "!=" ~ html_segnames[obj.ptr_html_segnames]);              }            }            /+ dom structure (marked up & collapsed) +/ @@ -1531,7 +1535,8 @@ template SiSUdocAbstraction() {                if (html_segnames.length > obj.ptr_html_segnames + 1) {                  obj.segname_next = html_segnames[obj.ptr_html_segnames + 1];                } -              assert(obj.segment_anchor_tag == html_segnames[obj.ptr_html_segnames]); +              assert(obj.segment_anchor_tag == html_segnames[obj.ptr_html_segnames], +              obj.segment_anchor_tag ~ "!=" ~ html_segnames[obj.ptr_html_segnames]);              }            }            /+ dom structure (marked up & collapsed) +/ @@ -1570,7 +1575,8 @@ template SiSUdocAbstraction() {                if (html_segnames.length > obj.ptr_html_segnames + 1) {                  obj.segname_next = html_segnames[obj.ptr_html_segnames + 1];                } -              assert(obj.segment_anchor_tag == html_segnames[obj.ptr_html_segnames]); +              assert(obj.segment_anchor_tag == html_segnames[obj.ptr_html_segnames], +              obj.segment_anchor_tag ~ "!=" ~ html_segnames[obj.ptr_html_segnames]);              }            }            /+ dom structure (marked up & collapsed) +/ @@ -1614,7 +1620,8 @@ template SiSUdocAbstraction() {                if (html_segnames.length > obj.ptr_html_segnames + 1) {                  obj.segname_next = html_segnames[obj.ptr_html_segnames + 1];                } -              assert(obj.segment_anchor_tag == html_segnames[obj.ptr_html_segnames]); +              assert(obj.segment_anchor_tag == html_segnames[obj.ptr_html_segnames], +              obj.segment_anchor_tag ~ "!=" ~ html_segnames[obj.ptr_html_segnames]);              }            }            /+ dom structure (marked up & collapsed) +/ @@ -1653,7 +1660,8 @@ template SiSUdocAbstraction() {                if (html_segnames.length > obj.ptr_html_segnames + 1) {                  obj.segname_next = html_segnames[obj.ptr_html_segnames + 1];                } -              assert(obj.segment_anchor_tag == html_segnames[obj.ptr_html_segnames]); +              assert(obj.segment_anchor_tag == html_segnames[obj.ptr_html_segnames], +              obj.segment_anchor_tag ~ "!=" ~ html_segnames[obj.ptr_html_segnames]);              }            }            /+ dom structure (marked up & collapsed) +/ @@ -1696,7 +1704,8 @@ template SiSUdocAbstraction() {                if (html_segnames.length > obj.ptr_html_segnames + 1) {                  obj.segname_next = html_segnames[obj.ptr_html_segnames + 1];                } -              assert(obj.segment_anchor_tag == html_segnames[obj.ptr_html_segnames]); +              assert(obj.segment_anchor_tag == html_segnames[obj.ptr_html_segnames], +              obj.segment_anchor_tag ~ "!=" ~ html_segnames[obj.ptr_html_segnames]);              }            }            /+ dom structure (marked up & collapsed) +/ @@ -2963,7 +2972,7 @@ template SiSUdocAbstraction() {        comp_obj_block = comp_obj_block.init;        obj_cite_digits = ocn_emit(OCNstatus.on);        an_object["bookindex_nugget"] -        =("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : ""; +        = ("bookindex_nugget" in an_object) ? an_object["bookindex_nugget"] : "";        bookindex_unordered_hashes          = bookindex_extract_hash.bookindex_nugget_hash(            an_object["bookindex_nugget"], diff --git a/src/sdp/meta/read_config_files.d b/src/sdp/meta/read_config_files.d index 15a7a67..554f740 100644 --- a/src/sdp/meta/read_config_files.d +++ b/src/sdp/meta/read_config_files.d @@ -4,16 +4,16 @@    meta_config_files.d  +/  module sdp.meta.read_config_files; -static template configInSite() { +static template configReadInSiteSDL() {    import      sdp.meta,      sdp.output.paths_source,      std.file,      std.path; -  final string configInSite(M,E)(M manifest, E env) { +  final string configReadInSiteSDL(M,E)(M manifest, E env) {      auto conf_file_details = ConfigFilePaths!()(manifest, env); -    string conf_sdl = conf_file_details.possible_config_path_locations.config_filename_site; -    auto possible_config_path_locations = conf_file_details.possible_config_path_locations.local_site; +    string conf_sdl = conf_file_details.config_filename_site_sdl; +    auto possible_config_path_locations = conf_file_details.possible_config_path_locations.config_local_site;      string config_file_str;      debug(io) {        writeln("WARNING (io debug) in config filename: ", conf_sdl); @@ -41,16 +41,16 @@ static template configInSite() {      return config_file_str;    }  } -static template configInDoc() { +static template configReadInDocSDL() {    import      sdp.meta,      sdp.output.paths_source,      std.file,      std.path; -  final string configInDoc(M,E)(M manifest, E env) { +  final string configReadInDocSDL(M,E)(M manifest, E env) {      auto conf_file_details = ConfigFilePaths!()(manifest, env); -    string conf_sdl = conf_file_details.config_filename_document; -    auto possible_config_path_locations = conf_file_details.possible_config_path_locations.document; +    string conf_sdl = conf_file_details.config_filename_document_sdl; +    auto possible_config_path_locations = conf_file_details.possible_config_path_locations.sisu_document_make;      string config_file_str;      debug(io) {        writeln("WARNING (io debug) in config filename: ", conf_sdl); @@ -78,17 +78,88 @@ static template configInDoc() {      return config_file_str;    }  } -/+ - -+/ -static template ConfigSDLang() { +static template configReadInSiteTOML() { +  import +    sdp.meta, +    sdp.output.paths_source, +    std.file, +    std.path; +  final string configReadInSiteTOML(M,E)(M manifest, E env) { +    auto conf_file_details = ConfigFilePaths!()(manifest, env); +    string conf_toml = conf_file_details.config_filename_site_toml; +    auto possible_config_path_locations = conf_file_details.possible_config_path_locations.config_local_site; +    string config_file_str; +    debug(io) { +      writeln("WARNING (io debug) in config filename: ", conf_toml); +      writeln("WARNING (io debug) in config possible path locations: ", possible_config_path_locations); +    } +    foreach(pth; possible_config_path_locations) { +      auto conf_file = asNormalizedPath(chainPath(to!string(pth), conf_toml)).array; +      if (config_file_str.length > 0) { +        break; +      } +      try { +        if (exists(conf_file)) { +          debug(io) { +            writeln("WARNING (io debug) in config file found: ", conf_file); +          } +          config_file_str = conf_file.readText; +          break; +        } +      } +      catch (ErrnoException ex) { +      } +      catch (FileException ex) { +      } +    } +    return config_file_str; +  } +} +static template configReadInDocTOML() { +  import +    sdp.meta, +    sdp.output.paths_source, +    std.file, +    std.path; +  final string configReadInDocTOML(M,E)(M manifest, E env) { +    auto conf_file_details = ConfigFilePaths!()(manifest, env); +    string conf_toml = conf_file_details.config_filename_document_toml; +    auto possible_config_path_locations = conf_file_details.possible_config_path_locations.sisu_document_make; +    string config_file_str; +    debug(io) { +      writeln("WARNING (io debug) in config filename: ", conf_toml); +      writeln("WARNING (io debug) in config possible path locations: ", possible_config_path_locations); +    } +    foreach(pth; possible_config_path_locations) { +      auto conf_file = asNormalizedPath(chainPath(to!string(pth), conf_toml)).array; +      if (config_file_str.length > 0) { +        break; +      } +      try { +        if (exists(conf_file)) { +          debug(io) { +            writeln("WARNING (io debug) in config file found: ", conf_file); +          } +          config_file_str = conf_file.readText; +          break; +        } +      } +      catch (ErrnoException ex) { +      } +      catch (FileException ex) { +      } +    } +    return config_file_str; +  } +} +static template configSDLang() {    import sdlang;    import      sdp.meta,      sdp.output.paths_source,      std.file,      std.path; -  auto ConfigSDLang(string configuration, string conf_sdl_filename) { +  auto configSDLang(string configuration, string conf_sdl_filename) {      Tag sdl_root_conf;      try {        sdl_root_conf = parseSource(configuration); @@ -100,35 +171,181 @@ static template ConfigSDLang() {      return sdl_root_conf;    }  } -/+ -+/ -static template configReadSite() { +static template configTOML() { +  import toml; //    import      sdp.meta,      sdp.output.paths_source,      std.file,      std.path; -   -  final auto configReadSite(M,E)(M manifest, E env) { -    auto configuration = configInSite!()(manifest, env); +  auto configTOML(string configuration, string conf_toml_filename) { +    TOMLDocument _toml_conf; +    try { +      _toml_conf = parseTOML(configuration); // parseTOML(cast(string)(configuration)); +    } +    catch(ErrnoException e) { +      stderr.writeln("Toml problem with content for ", conf_toml_filename); +      stderr.writeln(e.msg); +    } +    return _toml_conf; +  } +} +static template readConfigSite() { +  import +    sdp.meta, +    sdp.output.paths_source, +    std.file, +    std.path; +  final auto readConfigSite(M,E)(M _manifest, E _env) { +    string config_file_str; +    string conf_filename = "NONE"; +    auto _conf_file_details = ConfigFilePaths!()(_manifest, _env); +    auto possible_config_path_locations = _conf_file_details.possible_config_path_locations.config_local_site; +    foreach(conf_fn; [_conf_file_details.config_filename_site_toml, _conf_file_details.config_filename_site_sdl]) { +      foreach(pth; possible_config_path_locations) { +        auto conf_file = asNormalizedPath(chainPath(to!string(pth), conf_fn)).array; +        conf_filename = conf_fn; +        if (config_file_str.length > 0) { +          // conf_filename = conf_fn; +          break; +        } +        try { +          if (exists(conf_file)) { +            debug(io) { +              writeln("WARNING (io debug) in config file found: ", conf_file); +              // writeln(__LINE__, ": found: ", conf_file, " in ", pth); +            } +            config_file_str = conf_file.readText; +            break; +          } +        } +        catch (ErrnoException ex) { +        } +        catch (FileException ex) { +        } +      } +      if (config_file_str.length > 0) { break; } +    } +    struct _ConfContent { +      string filename() { +        return conf_filename; +      } +      string filetype() { +        return conf_filename.extension.chompPrefix("."); +      } +      auto content() { +        return config_file_str; +      } +    } +    return _ConfContent(); +  } +} +static template readConfigDoc() { +  import +    sdp.meta, +    sdp.output.paths_source, +    std.file, +    std.path; +  final auto readConfigDoc(M,E)(M _manifest, E _env) { +    string config_file_str; +    string conf_filename = "NONE"; +    auto _conf_file_details = ConfigFilePaths!()(_manifest, _env); +    auto possible_config_path_locations = _conf_file_details.possible_config_path_locations.sisu_document_make; +    foreach(conf_fn; [_conf_file_details.config_filename_document_toml, _conf_file_details.config_filename_document_sdl]) { +      foreach(pth; possible_config_path_locations) { +        auto conf_file = asNormalizedPath(chainPath(to!string(pth), conf_fn)).array; +        conf_filename = conf_fn; +        if (config_file_str.length > 0) { +          // conf_filename = conf_fn; +          break; +        } +        try { +          if (exists(conf_file)) { +            debug(io) { +              writeln("WARNING (io debug) in config file found: ", conf_file); +            } +            config_file_str = conf_file.readText; +            break; +          } +        } +        catch (ErrnoException ex) { +        } +        catch (FileException ex) { +        } +      } +      if (config_file_str.length > 0) { break; } +    } +    struct _ConfContent { +      string filename() { +        return conf_filename; +      } +      string filetype() { +        return conf_filename.extension.chompPrefix("."); +      } +      auto content() { +        return config_file_str; +      } +    } +    return _ConfContent(); +  } +} +static template configReadSiteSDLang() { +  import +    sdp.meta, +    sdp.output.paths_source, +    std.file, +    std.path; +  import sdlang; +  final auto configReadSiteSDLang(M,E)(M manifest, E env) { +    auto configuration = configReadInSiteSDL!()(manifest, env);      auto conf_file_details = ConfigFilePaths!()(manifest, env); -    string conf_sdl = conf_file_details.possible_config_path_locations.config_filename_site; -    auto sdl_root = ConfigSDLang!()(configuration, conf_sdl); +    string conf_sdl = conf_file_details.config_filename_site_sdl; +    auto sdl_root = configSDLang!()(configuration, conf_sdl);      return sdl_root;    }  } -static template configReadDoc() { +static template configReadDocSDLang() {    import      sdp.meta,      sdp.output.paths_source,      std.file,      std.path; -   -  final auto configReadDoc(M,E)(M manifest, E env) { -    auto configuration = configInDoc!()(manifest, env); +  import sdlang; +  final auto configReadDocSDLang(M,E)(M manifest, E env) { +    auto configuration = configReadInDocSDL!()(manifest, env);      auto conf_file_details = ConfigFilePaths!()(manifest, env); -    string conf_sdl = conf_file_details.config_filename_document; -    auto sdl_root = ConfigSDLang!()(configuration, conf_sdl); +    string conf_sdl = conf_file_details.config_filename_document_sdl; +    auto sdl_root = configSDLang!()(configuration, conf_sdl);      return sdl_root;    }  } +static template configReadSiteTOML() { +  import +    sdp.meta, +    sdp.output.paths_source, +    std.file, +    std.path; +  import toml; +  final auto configReadSiteTOML(M,E)(M _manifest, E _env) { +    auto _configuration = configReadInSiteTOML!()(_manifest, _env); +    auto _conf_file_details = ConfigFilePaths!()(_manifest, _env); +    string _conf_toml = _conf_file_details.config_filename_site_toml; +    auto _toml_conf = configTOML!()(_configuration, _conf_toml); +    return _toml_conf; +  } +} +static template configReadDocTOML() { +  import +    sdp.meta, +    sdp.output.paths_source, +    std.file, +    std.path; +  import toml; +  final auto configReadDocTOML(M,E)(M _manifest, E _env) { +    auto _configuration = configReadInDocTOML!()(_manifest, _env); +    auto _conf_file_details = ConfigFilePaths!()(_manifest, _env); +    string _conf_toml = _conf_file_details.config_filename_document_toml; +    auto _toml_conf = configTOML!()(_configuration, _conf_toml); +    return _toml_conf; +  } +} diff --git a/src/sdp/meta/read_source_files.d b/src/sdp/meta/read_source_files.d index 0e53e73..cd4a253 100644 --- a/src/sdp/meta/read_source_files.d +++ b/src/sdp/meta/read_source_files.d @@ -155,7 +155,7 @@ static template SiSUrawMarkupContent() {      }    }    struct Inserts { -    import sdp.meta.defaults; +    import sdp.meta.conf_make_meta_sdlang;      auto scan_subdoc_source(O)(        O        _opt_action,        char[][] markup_sourcefile_insert_content, @@ -293,10 +293,6 @@ static template SiSUrawMarkupContent() {              insert_file_list ~= to!string(fn_src_insert);            auto raw = MarkupRawUnit();            /+ TODO +/ -          if (auto ma = line.match(rgx.src_fn_text)) { -            /+ .sst when inserted, not used: headers and heading level ^:?A~ so remove +/ -            writeln(__LINE__); writeln(ma); -          }            auto markup_sourcefile_insert_content              = raw.getInsertMarkupSourceContentRawLineArray(fn_src_insert, rgx.src_fn_find_inserts);            debug(insert_file) { diff --git a/src/sdp/meta/rgx.d b/src/sdp/meta/rgx.d index fe9e36d..35d6970 100644 --- a/src/sdp/meta/rgx.d +++ b/src/sdp/meta/rgx.d @@ -53,6 +53,8 @@ static template SiSUrgxInit() {      static variable_doc_title                             = ctRegex!(`@title`);      static variable_doc_author                            = ctRegex!(`@author|@creator`);      static raw_author_munge                               = ctRegex!(`(\S.+?),\s+(.+)`,"i"); +    static sdlang_header_meta_title                       = ctRegex!(`^\s*title\s+["\\]`, "m"); +    static toml_header_meta_title                         = ctRegex!(`^\s*(title\s*=\s*"|\[title\])`, "m");      /+ head +/      static native_subhead_creator                         = ctRegex!(`^(?:author|translator|illustrator)$`, "m");      static native_subhead_title                           = ctRegex!(`^(?:main|sub(?:title)?|full|language|edition|note)$`, "m"); @@ -171,6 +173,7 @@ static template SiSUrgxInit() {      static break_page_line_across                         = ctRegex!(`^=[.]{2}=$`);      static break_string                                   = ctRegex!(`』`);      static parent                                         = ctRegex!(`([0-7]):([0-9]+)`); +    static header_regex_content                           = ctRegex!(`([0-7]):([0-9]+)`);      /+ json +/      static tailing_comma                                  = ctRegex!(`,$`, "m");      /+ biblio tags +/ @@ -197,7 +200,9 @@ static template SiSUrgxInit() {      static nbsp_and_space                                 = ctRegex!(` [ ]`, "mg");      static nbsp_char_and_space                            = ctRegex!(`░[ ]`, "mg");      static src_pth_sst_or_ssm                             = ctRegex!(`^(?P<path>[/]?(?:[a-zA-Z0-9._-]+/)*)(?P<filename>[a-zA-Z0-9._-]+[.]ss[tm])$`); +    static src_pth_pod_sst_or_ssm                         = ctRegex!(`^(?P<podpath>[/]?(?:[a-zA-Z0-9._-]+/)*)media/text/[a-z]{2}/(?P<filename>[a-zA-Z0-9._-]+[.]ss[tm])$`);      static src_pth_contents                               = ctRegex!(`^(?P<path>[/]?(?:[a-zA-Z0-9._-]+/)*)(?P<filename>[a-zA-Z0-9._-]+)/sisupod[.]manifest$`); +    static src_pth_pod_root                               = ctRegex!(`^(?P<podroot>(?:[/]?(?:[a-zA-Z0-9._-]+/)*)(sisupod))$`);      static src_pth_zip                                    = ctRegex!(`^(?P<path>[/]?(?:[a-zA-Z0-9._-]+/)*)(?P<filename>[a-zA-Z0-9._-]+[.]zip)$`);      static src_pth_unzip_pod                              = ctRegex!(`^(?P<path>media/text/[a-z]{2}/)*(?P<filename>[a-zA-Z0-9._-]+[.]ss[im])$`);      static src_pth_types                                  = @@ -212,7 +217,8 @@ static template SiSUrgxInit() {      static src_fn_find_inserts                            = ctRegex!(`^(?P<path>[a-zA-Z0-9._-]+/)*(?P<filename>[a-zA-Z0-9._-]+[.]ss[im])$`);      static insert_src_fn_ssi_or_sst                       = ctRegex!(`^<<\s*(?P<path>[a-zA-Z0-9._-]+/)*(?P<filename>[a-zA-Z0-9._-]+[.]ss[ti])$`);      static src_base_parent_dir_name                       = ctRegex!(`[/](?P<dir>(?:[a-zA-Z0-9._-]+))(?:/media/text/[a-z]{2})$`); // formalizes dir structure -    static src_formalised_file_path_parts                 = ctRegex!(`(?P<pth>(?:[/a-zA-Z0-9._-]+?)(?P<dir>[a-zA-Z0-9._-]+))(?:/media/text/[a-z]{2})$`); // formalized dir structure +    static src_base_parent_path                           = ctRegex!(`(?P<dir>(?:[/a-zA-Z0-9._-]+))(?:/media/text/[a-z]{2})$`); // formalizes dir structure +    static src_formalised_file_path_parts                 = ctRegex!(`(?P<pth>(?:[/a-zA-Z0-9._-]+?)(?P<dir>[a-zA-Z0-9._-]+))(?:/media/text/[a-z]{2})$`); // formalizes dir structure      /+ inline markup footnotes endnotes +/      static inline_notes_al                                = ctRegex!(`【(?:[*+]\s+|\s*)(.+?)】`, "mg");      static inline_notes_al_gen                            = ctRegex!(`【.+?】`, "m"); @@ -258,6 +264,7 @@ static template SiSUrgxInit() {      static inline_italics_line                            = ctRegex!(`^/_ (?P<text>.+?)((?: [\\]{2}|[~]#){0,2}$)`);      static inline_underscore_line                         = ctRegex!(`^__ (?P<text>.+?)((?: [\\]{2}|[~]#){0,2}$)`);      static inline_fontface_clean                          = ctRegex!(`[*!_/^,+#■"-]\{|\}[*!_/^,+#■"-]`, "mg"); +    static no_header_rgx                                  = ctRegex!(`^=NULL$`);      /+ table delimiters +/      static table_delimiter_col                           = ctRegex!("[ ]*[┊][ ]*", "mg");      static table_delimiter_row                           = ctRegex!("[ ]*\n", "mg"); diff --git a/src/sdp/output/paths_output.d b/src/sdp/output/paths_output.d index 537de45..1db74d9 100644 --- a/src/sdp/output/paths_output.d +++ b/src/sdp/output/paths_output.d @@ -185,7 +185,7 @@ template SiSUpathsSQLiteDiscrete() {          return fn_src.baseName.stripExtension;        }        string base() { -        return asNormalizedPath((out_pth.output_base).chainPath(base_dir)).array; +        return asNormalizedPath((out_pth.output_root).chainPath(base_dir)).array;        }        string seg(string fn_src) {          return asNormalizedPath(base.chainPath(base_filename(fn_src))).array; diff --git a/src/sdp/output/paths_source.d b/src/sdp/output/paths_source.d index 731fff3..3292e6f 100644 --- a/src/sdp/output/paths_source.d +++ b/src/sdp/output/paths_source.d @@ -29,9 +29,15 @@ template PodManifest() {          && (_pth.chainPath(pod_manifest_filename).array).isFile)) {            _manifest_path = _pth;          } else if (_pth.match(rgx.src_pth_contents) -        && exists(_pth)!=0 && _pth.isDir && (_pth.isFile)) { +        && exists(_pth)!=0 && _pth.isDir) {            _manifest_path = dirName(_pth); +        } else if (_pth.match(rgx.src_pth_pod_sst_or_ssm) +        && exists(_pth)!=0 && (_pth.isFile)) { +          if (auto m = _pth.match(rgx.src_pth_pod_sst_or_ssm)) { +            _manifest_path = m.captures["podpath"]; +          }          } else  { +          writeln("WARNING, issue with manifest_path: ", _pth);            _manifest_path = _pth; // _manifest_path = null;          }          return _manifest_path; @@ -94,6 +100,15 @@ template PathMatters() {              auto _src_is_pod = (_manifest.pod_manifest_path.length > 0) ? true : false;              return _src_is_pod;            } +          auto collection_root() { +            auto _collection_root = asNormalizedPath(chainPath(_manifest.pod_manifest_path, "..")).array; +            if (auto m = (_collection_root).match(rgx.src_pth_pod_root)) { +            // consider testing for last dir in path name being sisupod, and giving warning if not +            } else { +              writeln("WARNING, collection_root not named \"sisupod\""); +            } +            return _collection_root; +          }            auto manifest_filename() {              return _manifest.pod_manifest_filename;            } @@ -103,7 +118,11 @@ template PathMatters() {            auto manifest_file_with_path() {              return _manifest.pod_manifest_file_with_path;            } -          auto config_dirs() {                              // TODO +          auto config_sisu_document_make_dirs() {                              // TODO sisu_document_make +            string[] _config_dirs; +            return _config_dirs; +          } +          auto config_local_site_dirs() {                   // TODO sisu_document_make              string[] _config_dirs;              return _config_dirs;            } @@ -292,12 +311,21 @@ template ConfigFilePaths() {      E   _env,    ) {      struct ConfFilePaths { -      auto config_filename_document() { -        return "config_document"; +      auto config_filename_document_sdl() { +        return "sisu_document_make.sdl"; +      } +      auto config_filename_site_sdl() { +        return "config_local_site.sdl"; +      } +      auto config_filename_document_toml() { +        return "sisu_document_make.toml"; +      } +      auto config_filename_site_toml() { +        return "config_local_site.toml";        }        auto possible_config_path_locations() {          struct _ConfFilePaths { -          auto document() { +          auto sisu_document_make() {              /+ FIX clean up conf paths ↓ +/              /+ config local site (file system only, not in pod) +/              /+ return paths +/ @@ -340,10 +368,7 @@ template ConfigFilePaths() {              +/              return _possible_config_path_locations;            } -          auto config_filename_site() { -            return "config_local_site"; -          } -          auto local_site() { +          auto config_local_site() {              /+ FIX clean up conf paths ↓ +/              /+ config local site (file system only, not in pod) +/              string _dot_pwd        = asNormalizedPath(chainPath(to!string(_env["pwd"]), ".sisu")).array; @@ -352,11 +377,15 @@ template ConfigFilePaths() {              /+ return paths +/              string[] _possible_config_path_locations;              if (_manifest.src.is_pod) { +              string _collection_root_a = asNormalizedPath(chainPath(to!string(_manifest.pod.collection_root.to!string), ".sisu")).array; +              string _collection_root_b = asNormalizedPath(chainPath(to!string(_manifest.pod.collection_root.to!string), "_sisu")).array;                _possible_config_path_locations = [                  _dot_pwd,                  _underscore_pwd,                  _dot_home, -                "/etc/sisu" +                "/etc/sisu", +                _collection_root_a, // set priority higher? +                _collection_root_b // set priority higher?                ];              } else {                /+ config document (& or local site) on filesystem +/ diff --git a/src/sdp/output/rgx.d b/src/sdp/output/rgx.d index c962937..c125b7e 100644 --- a/src/sdp/output/rgx.d +++ b/src/sdp/output/rgx.d @@ -16,7 +16,9 @@ static template SiSUoutputRgxInit() {      static nbsp_and_space                                 = ctRegex!(` [ ]`, "mg");      static nbsp_char_and_space                            = ctRegex!(`░[ ]`, "mg");      static src_pth_sst_or_ssm                             = ctRegex!(`^(?P<path>[/]?(?:[a-zA-Z0-9._-]+/)*)(?P<filename>[a-zA-Z0-9._-]+[.]ss[tm])$`); +    static src_pth_pod_sst_or_ssm                         = ctRegex!(`^(?P<podpath>[/]?(?:[a-zA-Z0-9._-]+/)*)media/text/[a-z]{2}/(?P<filename>[a-zA-Z0-9._-]+[.]ss[tm])$`);      static src_pth_contents                               = ctRegex!(`^(?P<path>[/]?(?:[a-zA-Z0-9._-]+/)*)(?P<filename>[a-zA-Z0-9._-]+)/sisupod[.]manifest$`); +    static src_pth_pod_root                               = ctRegex!(`^(?P<podroot>(?:[/]?(?:[a-zA-Z0-9._-]+/)*)(sisupod))$`);      static src_pth_zip                                    = ctRegex!(`^(?P<path>[/]?(?:[a-zA-Z0-9._-]+/)*)(?P<filename>[a-zA-Z0-9._-]+[.]zip)$`);      static src_pth_unzip_pod                              = ctRegex!(`^(?P<path>media/text/[a-z]{2}/)*(?P<filename>[a-zA-Z0-9._-]+[.]ss[im])$`);      static src_pth_types                                  = @@ -31,7 +33,8 @@ static template SiSUoutputRgxInit() {      static src_fn_find_inserts                            = ctRegex!(`^(?P<path>[a-zA-Z0-9._-]+/)*(?P<filename>[a-zA-Z0-9._-]+[.]ss[im])$`);      static insert_src_fn_ssi_or_sst                       = ctRegex!(`^<<\s*(?P<path>[a-zA-Z0-9._-]+/)*(?P<filename>[a-zA-Z0-9._-]+[.]ss[ti])$`);      static src_base_parent_dir_name                       = ctRegex!(`[/](?P<dir>(?:[a-zA-Z0-9._-]+))(?:/media/text/[a-z]{2})$`); // formalizes dir structure -    static src_formalised_file_path_parts                 = ctRegex!(`(?P<pth>(?:[/a-zA-Z0-9._-]+?)(?P<dir>[a-zA-Z0-9._-]+))(?:/media/text/[a-z]{2})$`); // formalized dir structure +    static src_base_parent_path                           = ctRegex!(`(?P<dir>(?:[/a-zA-Z0-9._-]+))(?:/media/text/[a-z]{2})$`); // formalizes dir structure +    static src_formalised_file_path_parts                 = ctRegex!(`(?P<pth>(?:[/a-zA-Z0-9._-]+?)(?P<dir>[a-zA-Z0-9._-]+))(?:/media/text/[a-z]{2})$`); // formalizes dir structure      /+ inline markup footnotes endnotes +/      static inline_notes_al                                = ctRegex!(`【(?:[*+]\s+|\s*)(.+?)】`, "mg");      static inline_notes_al_gen                            = ctRegex!(`【.+?】`, "m"); @@ -77,6 +80,7 @@ static template SiSUoutputRgxInit() {      static inline_italics_line                            = ctRegex!(`^/_ (?P<text>.+?)((?: [\\]{2}|[~]#){0,2}$)`);      static inline_underscore_line                         = ctRegex!(`^__ (?P<text>.+?)((?: [\\]{2}|[~]#){0,2}$)`);      static inline_fontface_clean                          = ctRegex!(`[*!_/^,+#■"-]\{|\}[*!_/^,+#■"-]`, "mg"); +    static no_header_rgx                                  = ctRegex!(`^=NULL$`);      /+ table delimiters +/      static table_delimiter_col                           = ctRegex!("[ ]*[┊][ ]*", "mg");      static table_delimiter_row                           = ctRegex!("[ ]*\n", "mg"); diff --git a/src/sdp/output/source_sisupod.d b/src/sdp/output/source_sisupod.d index 4e3bfc1..3f95b62 100644 --- a/src/sdp/output/source_sisupod.d +++ b/src/sdp/output/source_sisupod.d @@ -97,34 +97,36 @@ template SiSUpod() {            }          }        } { /+ bundle sisu_document_make +/ -        auto fn_src_in = ((doc_matters.src.is_pod) -          ? doc_matters.src.conf_dir_path -          : pth_sisudoc_src.conf_root).to!string -          ~ "/" ~ "sisu_document_make"; -        auto fn_src_out_sisupod_zip_base -          = pths_sisupod.conf_root(doc_matters.src.filename).zpod.to!string ~ "/" ~ "sisu_document_make"; -        auto fn_src_out_filesystem -          = pths_sisupod.conf_root(doc_matters.src.filename).filesystem_open_zpod.to!string -          ~ "/" ~ "sisu_document_make"; // TODO -        if (exists(fn_src_in)) { -          debug(io) { -            writeln("WARNING (io debug) src out found: ", fn_src_in); -          } -          if (doc_matters.opt.action.source) { -            fn_src_in.copy(fn_src_out_filesystem); -          } -          if (doc_matters.opt.action.sisupod) { -            auto zip_arc_member_file = new ArchiveMember(); -            zip_arc_member_file.name = fn_src_out_sisupod_zip_base; -            auto zip_data = new OutBuffer(); -            zip_data.write((fn_src_in).readText); -            zip_arc_member_file.expandedData = zip_data.toBytes(); -            zip.addMember(zip_arc_member_file); -          } -        } else { -          if (doc_matters.opt.action.verbose -          || doc_matters.opt.action.debug_do) { -            writeln("WARNING (io) src out NOT found (document make): ", fn_src_in); +        foreach (extension; [".sdl", ".toml"]) { +          auto fn_src_in = ((doc_matters.src.is_pod) +            ? doc_matters.src.conf_dir_path +            : pth_sisudoc_src.conf_root).to!string +            ~ "/" ~ "sisu_document_make" ~ extension; +          auto fn_src_out_sisupod_zip_base +            = pths_sisupod.conf_root(doc_matters.src.filename).zpod.to!string ~ "/" ~ "sisu_document_make"; +          auto fn_src_out_filesystem +            = pths_sisupod.conf_root(doc_matters.src.filename).filesystem_open_zpod.to!string +            ~ "/" ~ "sisu_document_make" ~ extension; // TODO +          if (exists(fn_src_in)) { +            debug(io) { +              writeln("WARNING (io debug) src out found: ", fn_src_in); +            } +            if (doc_matters.opt.action.source) { +              fn_src_in.copy(fn_src_out_filesystem); +            } +            if (doc_matters.opt.action.sisupod) { +              auto zip_arc_member_file = new ArchiveMember(); +              zip_arc_member_file.name = fn_src_out_sisupod_zip_base; +              auto zip_data = new OutBuffer(); +              zip_data.write((fn_src_in).readText); +              zip_arc_member_file.expandedData = zip_data.toBytes(); +              zip.addMember(zip_arc_member_file); +            } +          } else { +            if (doc_matters.opt.action.verbose +            || doc_matters.opt.action.debug_do) { +              writeln("WARNING (io) src out NOT found (document make): ", fn_src_in); +            }            }          }        } { /+ TODO bundle primary file +/ diff --git a/src/sdp/sdp.d b/src/sdp/sdp.d index b0e75e6..e4bf4a9 100755 --- a/src/sdp/sdp.d +++ b/src/sdp/sdp.d @@ -12,10 +12,10 @@ import    sdp.meta,    sdp.meta.metadoc_summary,    sdp.meta.metadoc_from_src, -  sdp.meta.conf_make_meta, -  // sdp.meta.conf_make_meta_native, +  sdp.meta.conf_make_meta_structs,    sdp.meta.conf_make_meta_sdlang, -  sdp.meta.conf_make_meta_composite, +  sdp.meta.conf_make_meta_toml, +  sdp.meta.conf_make_meta_json,    sdp.meta.defaults,    sdp.meta.doc_debugs,    sdp.meta.read_config_files, @@ -32,8 +32,9 @@ homepage    "http://sisudoc.org"  +/  void main(string[] args) {    mixin SiSUrgxInit; -  mixin SiSUregisters; +  mixin SiSUmakeMetaStructsSDLang;    mixin SiSUextractSDLang; +  mixin contentJSONtoSiSUstruct;    mixin SiSUnode;    mixin SiSUbiblio;    mixin SiSUrgxInitFlags; @@ -98,6 +99,7 @@ void main(string[] args) {    ];    string[string] settings = [      "output-dir"         : "", +    "site-config-dir"    : "",      "lang"               : "all",    ];    auto helpInfo = getopt(args, @@ -141,6 +143,7 @@ void main(string[] args) {      "backmatter",         "--section-backmatter process document backmatter (default)", &opts["backmatter"],      "skip-output",        "--skip-output",                                              &opts["skip-output"],      "output-dir",         "--output-dir=[dir path]",                                    &settings["output-dir"], +    "site-config-dir",    "--site-config-dir=[dir path]",                               &settings["site-config-dir"],      "lang",               "--lang=[lang code e.g. =en or =en,es]",                      &settings["lang"],    );    if (helpInfo.helpWanted) { | 
