From 9cb8937a92539d4cb40441396fc52e55e7a26f1b Mon Sep 17 00:00:00 2001
From: Ralph Amissah <ralph@amissah.com>
Date: Fri, 17 Feb 2017 08:50:43 -0500
Subject: 0.13.1 defaults renamed & reorganized

---
 src/sdp/ao_defaults.d    | 119 ++------------------------
 src/sdp/ao_rgx.d         |  50 ++++++++---
 src/sdp/defaults.d       | 217 +++++++++++++++++++++++++++++++++++++++++++++++
 src/sdp/output_epub.d    |   2 +-
 src/sdp/output_html.d    |   2 +-
 src/sdp/output_hub.d     |   2 +-
 src/sdp/source_sisupod.d |   2 +-
 7 files changed, 264 insertions(+), 130 deletions(-)
 create mode 100644 src/sdp/defaults.d

(limited to 'src')

diff --git a/src/sdp/ao_defaults.d b/src/sdp/ao_defaults.d
index 269b8c0..a5fda94 100644
--- a/src/sdp/ao_defaults.d
+++ b/src/sdp/ao_defaults.d
@@ -374,125 +374,21 @@ template SiSUbiblio() {
     }
   }
 }
-template SiSUpaths() {
-  string _base_filename(string fn_src) {
-    string _fn_base = "";
-    if (extension(fn_src) == ".sst") {
-      _fn_base = baseName(fn_src, ".sst");
-    } else if (extension(fn_src) == ".ssm") {
-      _fn_base = baseName(fn_src, ".ssm");
-    }
-    return _fn_base;
-  }
-  struct DirPaths {
-    string base_filename(string fn_src) {
-      return _base_filename(fn_src);
-    }
-  }
-  struct SiSUpodPaths {
-    string base_filename(string fn_src) {
-      return _base_filename(fn_src);
-    }
-    string base(string fn_src) {
-      return chainPath("sisupod", _base_filename(fn_src)).array;
-    }
-    string doc(string fn_src) {
-      return chainPath(base(fn_src), "doc").array;
-    }
-    string doc_lng(string fn_src, string lng) {
-      return chainPath(doc(fn_src), lng).array;
-    }
-    string conf(string fn_src) {
-      return chainPath(doc(fn_src), "_sisu").array;
-    }
-    string image(string fn_src) {
-      return chainPath(conf(fn_src), "image").array;
-    }
-    string css(string fn_src) {
-      return chainPath(conf(fn_src), "css").array;
-    }
-    string fn_doc(string fn_src, string lng) {
-      return chainPath((doc_lng(fn_src, lng)), baseName(fn_src)).array;
-    }
-    string fn_doc_insert(string fn_src, string fn_insert, string lng) {
-      return chainPath((doc_lng(fn_src, lng)), baseName(fn_insert)).array;
-    }
-  }
-  struct HtmlPaths {
-    string base_filename(string fn_src) {
-      return _base_filename(fn_src);
-    }
-    string base() {
-      return chainPath("en", "html").array;
-    }
-    string seg(string fn_src) {
-      return chainPath(base, _base_filename(fn_src)).array;
-    }
-    string fn_scroll(string fn_src) {
-      return chainPath(base, _base_filename(fn_src) ~ ".html").array;
-    }
-    string fn_seg(string fn_src, string seg_filename) {
-      return chainPath(seg(fn_src), seg_filename ~ ".html").array;
-    }
-    // string fn_css(string fn_src) {
-    //   return chainPath(seg(fn_src), "html.css").array;
-    // }
-  }
-  struct EpubPaths {
-    string base_filename(string fn_src) {
-      return _base_filename(fn_src);
-    }
-    string base() {
-      return chainPath("en", "epub").array;
-    }
-    string doc(string fn_src) {
-      return chainPath(base, _base_filename(fn_src)).array;
-      // return chainPath(base, base_fn).array;
-    }
-    string doc_meta_inf(string fn_src) {
-      return chainPath(doc(fn_src), "META-INF").array;
-    }
-    string doc_oebps(string fn_src) {
-      return chainPath(doc(fn_src), "OEBPS").array;
-    }
-    string doc_oebps_css(string fn_src) {
-      return chainPath(doc_oebps(fn_src), "css").array;
-    }
-    string doc_oebps_image(string fn_src) {
-      return chainPath(doc_oebps(fn_src), "image").array;
-    }
-    string fn_mimetypes(string fn_src) {
-      return chainPath(doc(fn_src), "mimetypes").array;
-    }
-    string fn_dmi_container_xml(string fn_src) {
-      return chainPath(doc_meta_inf(fn_src), "container.xml").array;
-    }
-    string fn_oebps_toc_ncx(string fn_src) {
-      return chainPath(doc_oebps(fn_src), "toc.ncx").array;
-    }
-    string fn_oebps_content_opf(string fn_src) {
-      return chainPath(doc_oebps(fn_src), "content.opf").array;
-    }
-    string fn_oebps_content_xhtml(string fn_src, string seg_filename) {
-      return chainPath(doc_oebps(fn_src), seg_filename ~ ".xhtml").array;
-    }
-  }
-}
 template InternalMarkup() {
   struct InlineMarkup {
     auto en_a_o = "【";      auto en_a_c = "】";   // endnote en_a_o: '~{'; en_a_c: '}~';
     auto en_b_o = "〖";      auto en_b_c = "〗";   // endnote en_b_o: '~['; en_b_c: ']~';
-    auto lnk_o = "┥";        auto lnk_c = "┝";
+    auto lnk_o = "┥";        auto lnk_c = "┝"; // auto lnk_o = "⌠";        auto lnk_c = "⌡";     // '⌈' '⌋' '⌠' '⌡' #Mx[:lnk_o= '◁'; Mx[:lnk_c= '▷' #‹ ›
     auto url_o = "┤";        auto url_c = "├";
     auto mark_internal_site_lnk = "¤";
     auto nbsp = "░";
-    auto br_line = "┘";
-    auto br_nl = "┙";
-    auto br_paragraph = "┚";
+    auto br_line = "┘";                                                    // "╱"; // lB ▌  9612 ┘ ¶
+    auto br_nl = "┙";                                                      // "╲"; // lB ▌ 』  ┘
+    auto br_paragraph = "┚";                                               // "█"; // FB █  9608 # PP ∥  8741 #▐  #'┘' #'¶' #FB █  9608  lB ▌  9612   RB ▐  9616
     auto br_obj = "break_obj";
-    auto br_page_line = "┼";
-    auto br_page = "┿";
-    auto br_page_new = "╂";
+    auto br_page_line = "┼";                                              // "▭";
+    auto br_page = "┿";                                                   // "┼";
+    auto br_page_new = "╂";                                               // "╋";
     string indent_by_spaces_provided(int indent) {
       auto _indent_spaces ="░░";   // auto nbsp = "░";
       _indent_spaces = replicate(_indent_spaces, indent);
@@ -583,7 +479,6 @@ template SiSUlanguageCodes() {
       return _lang_codes;
     }
     auto codes_() {
-      // return join(code_arr,"|");
       return "(" ~ join(code_arr,"|") ~ ")";
     }
     auto codes_regex() {
diff --git a/src/sdp/ao_rgx.d b/src/sdp/ao_rgx.d
index 91f5af5..0b9f57a 100644
--- a/src/sdp/ao_rgx.d
+++ b/src/sdp/ao_rgx.d
@@ -135,20 +135,6 @@ template SiSUrgxInit() {
     static inline_curly_delimiter_close_regular           = ctRegex!(`\s*\}~`, "m");
     static inline_text_and_note_curly                     = ctRegex!(`(?P<text>.+?)(?:(?:[~])[{][*+ ]*)(?P<note>.+?)(?:[}][~])`, "mg");
     static note_ref                                       = ctRegex!(`^\S+?noteref_([0-9]+)`, "mg");     // {^{73.}^}#noteref_73
-    /+ inline markup footnotes endnotes +/
-    static inline_notes_al                                = ctRegex!(`【(?:[*+]\s+|\s*)(.+?)】`, "mg");
-    static inline_notes_al_gen                            = ctRegex!(`【.+?】`, "m");
-    static inline_al_delimiter_open_regular               = ctRegex!(`【\s`, "m");
-    static inline_al_delimiter_open_symbol_star           = ctRegex!(`【[*]\s`, "m");
-    static inline_al_delimiter_open_symbol_plus           = ctRegex!(`【[+]\s`, "m");
-    static inline_al_delimiter_close_regular              = ctRegex!(`】`, "m");
-    static inline_al_delimiter_open_and_close_regular     = ctRegex!(`【|】`, "m");
-    static inline_notes_delimiter_al_regular              = ctRegex!(`【(.+?)】`, "mg");
-    static inline_notes_delimiter_al_regular_number_note  = ctRegex!(`【(\d+)\s+(.+?)】`, "mg");
-    static inline_al_delimiter_open_asterisk              = ctRegex!(`【\*`, "m");
-    static inline_al_delimiter_open_plus                  = ctRegex!(`【\+`, "m");
-    static inline_text_and_note_al                        = ctRegex!(`(?P<text>.+?)【(?:[*+ ]*)(?P<note>.+?)】`, "mg");
-    static inline_text_and_note_al_                       = ctRegex!(`(.+?(?:【[*+]*\s+.+?】|$))`, "mg");
     static inline_url                                      = ctRegex!(`((?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|#)\S+)`, "mg");
     static inline_link_naked_url                           = ctRegex!(`(^|[ ])((?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|#)\S+?)([.,;:?!]?(?:[ ]|$))`, "mg");
     static inline_link_markup_regular                      = ctRegex!(`(^|[ ])\{\s*(.+?)\s*\}((?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|#)\S+?)([.,;:?!]?(?:[ ]|$))`, "mg");
@@ -193,5 +179,41 @@ template SiSUrgxInit() {
        ctRegex!("(am|bg|bn|br|ca|cs|cy|da|de|el|en|eo|es|et|eu|fi|fr|ga|gl|he|hi|hr|hy|ia|is|it|ja|ko|la|lo|lt|lv|ml|mr|nl|no|nn|oc|pl|pt|pt_BR|ro|ru|sa|se|sk|sl|sq|sr|sv|ta|te|th|tk|tr|uk|ur|vi|zh)");
     auto language_code_and_filename                                    =
        ctRegex!("(am|bg|bn|br|ca|cs|cy|da|de|el|en|eo|es|et|eu|fi|fr|ga|gl|he|hi|hr|hy|ia|is|it|ja|ko|la|lo|lt|lv|ml|mr|nl|no|nn|oc|pl|pt|pt_BR|ro|ru|sa|se|sk|sl|sq|sr|sv|ta|te|th|tk|tr|uk|ur|vi|zh)/[A-Za-z0-9._-].+?[.](?:sst|ssm)$");
+    /+ inline markup footnotes endnotes +/
+    static inline_notes_al                                = ctRegex!(`【(?:[*+]\s+|\s*)(.+?)】`, "mg");
+    static inline_notes_al_gen                            = ctRegex!(`【.+?】`, "m");
+    static inline_al_delimiter_open_regular               = ctRegex!(`【\s`, "m");
+    static inline_al_delimiter_open_symbol_star           = ctRegex!(`【[*]\s`, "m");
+    static inline_al_delimiter_open_symbol_plus           = ctRegex!(`【[+]\s`, "m");
+    static inline_al_delimiter_close_regular              = ctRegex!(`】`, "m");
+    static inline_al_delimiter_open_and_close_regular     = ctRegex!(`【|】`, "m");
+    static inline_notes_delimiter_al_regular              = ctRegex!(`【(.+?)】`, "mg");
+    static inline_notes_delimiter_al_regular_number_note  = ctRegex!(`【(\d+)\s+(.+?)】`, "mg");
+    static inline_al_delimiter_open_asterisk              = ctRegex!(`【\*`, "m");
+    static inline_al_delimiter_open_plus                  = ctRegex!(`【\+`, "m");
+    static inline_text_and_note_al                        = ctRegex!(`(?P<text>.+?)【(?:[*+ ]*)(?P<note>.+?)】`, "mg");
+    static inline_text_and_note_al_                       = ctRegex!(`(.+?(?:【[*+]*\s+.+?】|$))`, "mg");
+  }
+}
+/++
+  regex: regular expressions used in sisu document parser
++/
+template SiSUoutputRgxInit() {
+  private import output_defaults;
+  struct Rgx {
+    /+ inline markup footnotes endnotes +/
+    static inline_notes_al                                = ctRegex!(`【(?:[*+]\s+|\s*)(.+?)】`, "mg");
+    static inline_notes_al_gen                            = ctRegex!(`【.+?】`, "m");
+    static inline_al_delimiter_open_regular               = ctRegex!(`【\s`, "m");
+    static inline_al_delimiter_open_symbol_star           = ctRegex!(`【[*]\s`, "m");
+    static inline_al_delimiter_open_symbol_plus           = ctRegex!(`【[+]\s`, "m");
+    static inline_al_delimiter_close_regular              = ctRegex!(`】`, "m");
+    static inline_al_delimiter_open_and_close_regular     = ctRegex!(`【|】`, "m");
+    static inline_notes_delimiter_al_regular              = ctRegex!(`【(.+?)】`, "mg");
+    static inline_notes_delimiter_al_regular_number_note  = ctRegex!(`【(\d+)\s+(.+?)】`, "mg");
+    static inline_al_delimiter_open_asterisk              = ctRegex!(`【\*`, "m");
+    static inline_al_delimiter_open_plus                  = ctRegex!(`【\+`, "m");
+    static inline_text_and_note_al                        = ctRegex!(`(?P<text>.+?)【(?:[*+ ]*)(?P<note>.+?)】`, "mg");
+    static inline_text_and_note_al_                       = ctRegex!(`(.+?(?:【[*+]*\s+.+?】|$))`, "mg");
   }
 }
diff --git a/src/sdp/defaults.d b/src/sdp/defaults.d
new file mode 100644
index 0000000..7fac739
--- /dev/null
+++ b/src/sdp/defaults.d
@@ -0,0 +1,217 @@
+/++
+  default settings
++/
+
+template SiSUpaths() {
+  string _base_filename(string fn_src) {
+    string _fn_base = "";
+    if (extension(fn_src) == ".sst") {
+      _fn_base = baseName(fn_src, ".sst");
+    } else if (extension(fn_src) == ".ssm") {
+      _fn_base = baseName(fn_src, ".ssm");
+    }
+    return _fn_base;
+  }
+  struct DirPaths {
+    string base_filename(string fn_src) {
+      return _base_filename(fn_src);
+    }
+  }
+  struct SiSUpodPaths {
+    string base_filename(string fn_src) {
+      return _base_filename(fn_src);
+    }
+    string base(string fn_src) {
+      return chainPath("sisupod", _base_filename(fn_src)).array;
+    }
+    string doc(string fn_src) {
+      return chainPath(base(fn_src), "doc").array;
+      // return chainPath(base(fn_src), "text").array;
+    }
+    string doc_lng(string fn_src, string lng) {
+      return chainPath(doc(fn_src), lng).array;
+    }
+    string conf(string fn_src) {
+      return chainPath(doc(fn_src), "_sisu").array;
+    }
+    string image(string fn_src) {
+      return chainPath(conf(fn_src), "image").array;
+    }
+    string css(string fn_src) {
+      return chainPath(conf(fn_src), "css").array;
+    }
+    string fn_doc(string fn_src, string lng) {
+      return chainPath((doc_lng(fn_src, lng)), baseName(fn_src)).array;
+    }
+    string fn_doc_insert(string fn_src, string fn_insert, string lng) {
+      return chainPath((doc_lng(fn_src, lng)), baseName(fn_insert)).array;
+    }
+  }
+  struct HtmlPaths {
+    string base_filename(string fn_src) {
+      return _base_filename(fn_src);
+    }
+    string base() {
+      return chainPath("en", "html").array;
+    }
+    string seg(string fn_src) {
+      return chainPath(base, _base_filename(fn_src)).array;
+    }
+    string fn_scroll(string fn_src) {
+      return chainPath(base, _base_filename(fn_src) ~ ".html").array;
+    }
+    string fn_seg(string fn_src, string seg_filename) {
+      return chainPath(seg(fn_src), seg_filename ~ ".html").array;
+    }
+  }
+  struct EpubPaths {
+    string base_filename(string fn_src) {
+      return _base_filename(fn_src);
+    }
+    string base() {
+      return chainPath("en", "epub").array;
+    }
+    string doc(string fn_src) {
+      return chainPath(base, _base_filename(fn_src)).array;
+    }
+    string doc_meta_inf(string fn_src) {
+      return chainPath(doc(fn_src), "META-INF").array;
+    }
+    string doc_oebps(string fn_src) {
+      return chainPath(doc(fn_src), "OEBPS").array;
+    }
+    string doc_oebps_css(string fn_src) {
+      return chainPath(doc_oebps(fn_src), "css").array;
+    }
+    string doc_oebps_image(string fn_src) {
+      return chainPath(doc_oebps(fn_src), "image").array;
+    }
+    string fn_mimetypes(string fn_src) {
+      return chainPath(doc(fn_src), "mimetypes").array;
+    }
+    string fn_dmi_container_xml(string fn_src) {
+      return chainPath(doc_meta_inf(fn_src), "container.xml").array;
+    }
+    string fn_oebps_toc_ncx(string fn_src) {
+      return chainPath(doc_oebps(fn_src), "toc.ncx").array;
+    }
+    string fn_oebps_content_opf(string fn_src) {
+      return chainPath(doc_oebps(fn_src), "content.opf").array;
+    }
+    string fn_oebps_content_xhtml(string fn_src, string seg_filename) {
+      return chainPath(doc_oebps(fn_src), seg_filename ~ ".xhtml").array;
+    }
+  }
+}
+template InternalMarkup() {
+  struct InlineMarkup {
+    auto en_a_o = "【";      auto en_a_c = "】";   // endnote en_a_o: '~{'; en_a_c: '}~';
+    auto en_b_o = "〖";      auto en_b_c = "〗";   // endnote en_b_o: '~['; en_b_c: ']~';
+    auto lnk_o = "┥";        auto lnk_c = "┝"; // auto lnk_o = "⌠";        auto lnk_c = "⌡";     // '⌈' '⌋' '⌠' '⌡' #Mx[:lnk_o= '◁'; Mx[:lnk_c= '▷' #‹ ›
+    auto url_o = "┤";        auto url_c = "├";
+    auto mark_internal_site_lnk = "¤";
+    auto nbsp = "░";
+    auto br_line = "┘";                                                    // "╱"; // lB ▌  9612 ┘ ¶
+    auto br_nl = "┙";                                                      // "╲"; // lB ▌ 』  ┘
+    auto br_paragraph = "┚";                                               // "█"; // FB █  9608 # PP ∥  8741 #▐  #'┘' #'¶' #FB █  9608  lB ▌  9612   RB ▐  9616
+    auto br_obj = "break_obj";
+    auto br_page_line = "┼";                                              // "▭";
+    auto br_page = "┿";                                                   // "┼";
+    auto br_page_new = "╂";                                               // "╋";
+    string indent_by_spaces_provided(int indent) {
+      auto _indent_spaces ="░░";   // auto nbsp = "░";
+      _indent_spaces = replicate(_indent_spaces, indent);
+      return _indent_spaces;
+    }
+    string repeat_character_by_number_provided(C,N)(C _character ="-", N number=10) {
+      _character = replicate(_character, number);
+      return _character;
+    }
+  }
+}
+template SiSUlanguageCodes() {
+  /+ language codes +/
+  struct Lang {
+    string[string][string] codes() {
+      auto _lang_codes = [
+        "am":    [ "c": "am",    "n": "Amharic",           "t": "Amharic",                   "xlp": "amharic"      ],
+        "bg":    [ "c": "bg",    "n": "Bulgarian",         "t": "Български (Bəlgarski)",     "xlp": "bulgarian"    ],
+        "bn":    [ "c": "bn",    "n": "Bengali",           "t": "Bengali",                   "xlp": "bengali"      ],
+        "br":    [ "c": "br",    "n": "Breton",            "t": "Breton",                    "xlp": "breton"       ],
+        "ca":    [ "c": "ca",    "n": "Catalan",           "t": "catalan",                   "xlp": "catalan"      ],
+        "cs":    [ "c": "cs",    "n": "Czech",             "t": "česky",                     "xlp": "czech"        ],
+        "cy":    [ "c": "cy",    "n": "Welsh",             "t": "Welsh",                     "xlp": "welsh"        ],
+        "da":    [ "c": "da",    "n": "Danish",            "t": "dansk",                     "xlp": "danish"       ],
+        "de":    [ "c": "de",    "n": "German",            "t": "Deutsch",                   "xlp": "german"       ],
+        "el":    [ "c": "el",    "n": "Greek",             "t": "Ελληνικά (Ellinika)",       "xlp": "greek"        ],
+        "en":    [ "c": "en",    "n": "English",           "t": "English",                   "xlp": "english"      ],
+        "eo":    [ "c": "eo",    "n": "Esperanto",         "t": "Esperanto",                 "xlp": "esperanto"    ],
+        "es":    [ "c": "es",    "n": "Spanish",           "t": "español",                   "xlp": "spanish"      ],
+        "et":    [ "c": "et",    "n": "Estonian",          "t": "Estonian",                  "xlp": "estonian"     ],
+        "eu":    [ "c": "eu",    "n": "Basque",            "t": "basque",                    "xlp": "basque"       ],
+        "fi":    [ "c": "fi",    "n": "Finnish",           "t": "suomi",                     "xlp": "finnish"      ],
+        "fr":    [ "c": "fr",    "n": "French",            "t": "français",                  "xlp": "french"       ],
+        "ga":    [ "c": "ga",    "n": "Irish",             "t": "Irish",                     "xlp": "irish"        ],
+        "gl":    [ "c": "gl",    "n": "Galician",          "t": "Galician",                  "xlp": "galician"     ],
+        "he":    [ "c": "he",    "n": "Hebrew",            "t": "Hebrew",                    "xlp": "hebrew"       ],
+        "hi":    [ "c": "hi",    "n": "Hindi",             "t": "Hindi",                     "xlp": "hindi"        ],
+        "hr":    [ "c": "hr",    "n": "Croatian",          "t": "Croatian",                  "xlp": "croatian"     ],
+        "hy":    [ "c": "hy",    "n": "Armenian",          "t": "Armenian",                  "xlp": "armenian"     ],
+        "ia":    [ "c": "ia",    "n": "Interlingua",       "t": "Interlingua",               "xlp": "interlingua"  ],
+        "is":    [ "c": "is",    "n": "Icelandic",         "t": "Icelandic",                 "xlp": "icelandic"    ],
+        "it":    [ "c": "it",    "n": "Italian",           "t": "Italiano",                  "xlp": "italian"      ],
+        "ja":    [ "c": "ja",    "n": "Japanese",          "t": "日本語 (Nihongo)",         "xlp": "japanese"      ],
+        "ko":    [ "c": "ko",    "n": "Korean",            "t": "Korean",                    "xlp": "korean"       ],
+        "la":    [ "c": "la",    "n": "Latin",             "t": "Latin",                     "xlp": "latin"        ],
+        "lo":    [ "c": "lo",    "n": "Lao",               "t": "Lao",                       "xlp": "lao"          ],
+        "lt":    [ "c": "lt",    "n": "Lithuanian",        "t": "Lithuanian",                "xlp": "lithuanian"   ],
+        "lv":    [ "c": "lv",    "n": "Latvian",           "t": "Latvian",                   "xlp": "latvian"      ],
+        "ml":    [ "c": "ml",    "n": "Malayalam",         "t": "Malayalam",                 "xlp": "malayalam"    ],
+        "mr":    [ "c": "mr",    "n": "Marathi",           "t": "Marathi",                   "xlp": "marathi"      ],
+        "nl":    [ "c": "nl",    "n": "Dutch",             "t": "Nederlands",                "xlp": "dutch"        ],
+        "no":    [ "c": "no",    "n": "Norwegian",         "t": "norsk",                     "xlp": "norsk"        ],
+        "nn":    [ "c": "nn",    "n": "Norwegian Nynorsk", "t": "nynorsk",                   "xlp": "nynorsk"      ],
+        "oc":    [ "c": "oc",    "n": "Occitan",           "t": "Occitan",                   "xlp": "occitan"      ],
+        "pl":    [ "c": "pl",    "n": "Polish",            "t": "polski",                    "xlp": "polish"       ],
+        "pt":    [ "c": "pt",    "n": "Portuguese",        "t": "Português",                 "xlp": "portuges"     ],
+        "pt_BR": [ "c": "pt_BR", "n": "Portuguese Brazil", "t": "Brazilian Português",       "xlp": "brazilian"    ],
+        "ro":    [ "c": "ro",    "n": "Romanian",          "t": "română",                    "xlp": "romanian"     ],
+        "ru":    [ "c": "ru",    "n": "Russian",           "t": "Русский (Russkij)",         "xlp": "russian"      ],
+        "sa":    [ "c": "sa",    "n": "Sanskrit",          "t": "Sanskrit",                  "xlp": "sanskrit"     ],
+        "se":    [ "c": "se",    "n": "Sami",              "t": "Samin",                     "xlp": "samin"        ],
+        "sk":    [ "c": "sk",    "n": "Slovak",            "t": "slovensky",                 "xlp": "slovak"       ],
+        "sl":    [ "c": "sl",    "n": "Slovenian",         "t": "Slovenian",                 "xlp": "slovenian"    ],
+        "sq":    [ "c": "sq",    "n": "Albanian",          "t": "Albanian",                  "xlp": "albanian"     ],
+        "sr":    [ "c": "sr",    "n": "Serbian",           "t": "Serbian",                   "xlp": "serbian"      ],
+        "sv":    [ "c": "sv",    "n": "Swedish",           "t": "svenska",                   "xlp": "swedish"      ],
+        "ta":    [ "c": "ta",    "n": "Tamil",             "t": "Tamil",                     "xlp": "tamil"        ],
+        "te":    [ "c": "te",    "n": "Telugu",            "t": "Telugu",                    "xlp": "telugu"       ],
+        "th":    [ "c": "th",    "n": "Thai",              "t": "Thai",                      "xlp": "thai"         ],
+        "tk":    [ "c": "tk",    "n": "Turkmen",           "t": "Turkmen",                   "xlp": "turkmen"      ],
+        "tr":    [ "c": "tr",    "n": "Turkish",           "t": "Türkçe",                    "xlp": "turkish"      ],
+        "uk":    [ "c": "uk",    "n": "Ukranian",          "t": "українська (ukrajins\"ka)", "xlp": "ukrainian"    ],
+        "ur":    [ "c": "ur",    "n": "Urdu",              "t": "Urdu",                      "xlp": "urdu"         ],
+        "us":    [ "c": "en",    "n": "English (American)","t": "English",                   "xlp": "english"      ],
+        "vi":    [ "c": "vi",    "n": "Vietnamese",        "t": "Vietnamese",                "xlp": "vietnamese"   ],
+        "zh":    [ "c": "zh",    "n": "Chinese",           "t": "中文",                     "xlp": "chinese"       ],
+        "en":    [ "c": "en",    "n": "English",           "t": "English",                   "xlp": "english"      ],
+        "xx":    [ "c": "xx",    "n": "Default",           "t": "English",                   "xlp": "english"      ],
+      ];
+      return _lang_codes;
+    }
+    string[] code_arr_ptr() {
+      auto _lang_codes = ["am", "bg", "bn", "br", "ca", "cs", "cy", "da", "de", "el", "en", "eo", "es", "et", "eu", "fi", "fr", "ga", "gl", "he", "hi", "hr", "hy", "ia", "is", "it", "ja", "ko", "la", "lo", "lt", "lv", "ml", "mr", "nl", "no", "nn", "oc", "pl", "pt", "pt_BR", "ro", "ru", "sa", "se", "sk", "sl", "sq", "sr", "sv", "ta", "te", "th", "tk", "tr", "uk", "ur", "us", "vi", "zh", "en", "xx",];
+      return _lang_codes;
+    }
+    string[] code_arr() {
+      auto _lang_codes = ["am", "bg", "bn", "br", "ca", "cs", "cy", "da", "de", "el", "en", "eo", "es", "et", "eu", "fi", "fr", "ga", "gl", "he", "hi", "hr", "hy", "ia", "is", "it", "ja", "ko", "la", "lo", "lt", "lv", "ml", "mr", "nl", "no", "nn", "oc", "pl", "pt", "pt_BR", "ro", "ru", "sa", "se", "sk", "sl", "sq", "sr", "sv", "ta", "te", "th", "tk", "tr", "uk", "ur", "vi", "zh"];
+      return _lang_codes;
+    }
+    auto codes_() {
+      return "(" ~ join(code_arr,"|") ~ ")";
+    }
+    auto codes_regex() {
+      return regex(codes_);
+    }
+  }
+}
diff --git a/src/sdp/output_epub.d b/src/sdp/output_epub.d
index f052d97..bc28776 100644
--- a/src/sdp/output_epub.d
+++ b/src/sdp/output_epub.d
@@ -17,7 +17,7 @@ template outputEPub() {
     std.typecons,
     std.uni,
     std.utf,
-    ao_defaults;
+    defaults;
   import
     ao_rgx,
     output_xhtmls;
diff --git a/src/sdp/output_html.d b/src/sdp/output_html.d
index 3af61ba..b98be41 100644
--- a/src/sdp/output_html.d
+++ b/src/sdp/output_html.d
@@ -17,7 +17,7 @@ template outputHTML() {
     std.typecons,
     std.uni,
     std.utf,
-    ao_defaults;
+    defaults;
   import
     ao_rgx,
     output_xhtmls;
diff --git a/src/sdp/output_hub.d b/src/sdp/output_hub.d
index f0df06c..a1182a6 100644
--- a/src/sdp/output_hub.d
+++ b/src/sdp/output_hub.d
@@ -21,7 +21,7 @@ template outputHub() {
     std.typecons,
     std.uni,
     std.utf,
-    ao_defaults,
+    defaults,
     output_epub,
     output_html,
     output_xhtmls,
diff --git a/src/sdp/source_sisupod.d b/src/sdp/source_sisupod.d
index 8a24d55..aa91b6d 100644
--- a/src/sdp/source_sisupod.d
+++ b/src/sdp/source_sisupod.d
@@ -17,7 +17,7 @@ template SiSUpod() {
     std.typecons,
     std.uni,
     std.utf,
-    ao_defaults;
+    defaults;
   import
     ao_rgx,
     output_xhtmls;
-- 
cgit v1.2.3