From 32f216a6a32b16e499e15b1b9d95237ac45f1d5e Mon Sep 17 00:00:00 2001
From: Ralph Amissah <ralph@amissah.com>
Date: Fri, 27 Jan 2017 20:53:45 -0500
Subject: header body insert_file_list, template

---
 org/ao_conf_make_meta.org |   75 +--
 org/ao_defaults.org       | 1154 +++++++++++++++++++++++----------------------
 org/sdp.org               |    4 +-
 3 files changed, 642 insertions(+), 591 deletions(-)

(limited to 'org')

diff --git a/org/ao_conf_make_meta.org b/org/ao_conf_make_meta.org
index 4205af7..12dfbbe 100644
--- a/org/ao_conf_make_meta.org
+++ b/org/ao_conf_make_meta.org
@@ -29,30 +29,38 @@
 +/
 template SiSUheaderExtractHub() {
   private import
-    std.regex;
+    std.exception,
+    std.regex,
+    std.stdio,
+    std.traits,
+    std.typecons,
+    std.utf,
+    std.conv : to;
+  private import sdlang;
   private import
-    ao_rgx;
-  struct SiSUheaderExtractHub {
-    mixin SiSUheaderExtractNative;
-    mixin SiSUheaderExtractSDLang;
-    auto rgx = Rgx();
-    private auto SiSUheaderExtractHub(Src, DocMake)(
-      Src     header_src,
-      DocMake conf_doc_make_aa
-    ) {
-      debug(asserts){
-        static assert(is(typeof(header_src)       == char[]));
-        static assert(is(typeof(conf_doc_make_aa) == string[string][string]));
-      }
-      auto head_native = HeaderDocMetadataAndMakeNativeToAA();
-      auto head_sdlang = HeaderExtractSDL();
-      auto header_make_and_meta_tuple = (match(header_src, rgx.native_header_meta_title))
-      ? (head_native.headerNativeToAA(header_src))
-      : (head_sdlang.headerSDLangToAA(header_src, conf_doc_make_aa));
-      static assert(!isTypeTuple!(header_make_and_meta_tuple));
-      static assert(header_make_and_meta_tuple.length==2);
-      return header_make_and_meta_tuple;
+    ao_rgx,
+    ao_conf_make_meta_native,
+    ao_conf_make_meta_sdlang;
+  mixin SiSUrgxInit;
+  mixin SiSUheaderExtractNative;
+  mixin SiSUheaderExtractSDLang;
+  auto rgx = Rgx();
+  auto SiSUheaderExtractHub(Src, DocMake)(
+    Src     header_src,
+    DocMake conf_doc_make_aa
+  ) {
+    debug(asserts){
+      static assert(is(typeof(header_src)       == char[]));
+      static assert(is(typeof(conf_doc_make_aa) == string[string][string]));
     }
+    auto head_native = HeaderDocMetadataAndMakeNativeToAA();
+    auto head_sdlang = HeaderExtractSDL();
+    auto header_make_and_meta_tuple = (match(header_src, rgx.native_header_meta_title))
+    ? (head_native.headerNativeToAA(header_src))
+    : (head_sdlang.headerSDLangToAA(header_src, conf_doc_make_aa));
+    static assert(!isTypeTuple!(header_make_and_meta_tuple));
+    static assert(header_make_and_meta_tuple.length==2);
+    return header_make_and_meta_tuple;
   }
 }
 #+END_SRC
@@ -68,10 +76,15 @@ template SiSUheaderExtractNative() {
   private import
     std.exception,
     std.regex,
+    std.stdio,
+    std.string,
+    std.traits,
+    std.typecons,
     std.utf,
     std.conv : to;
   private import
-    ao_rgx;
+    ao_rgx,
+    ao_defaults;
   struct HeaderDocMetadataAndMakeNativeToAA {
     mixin SiSUregisters;
     mixin SiSUrgxInitFlags;
@@ -93,9 +106,17 @@ template SiSUheaderExtractNative() {
 +/
 template SiSUheaderExtractSDLang() {
   private import
-    std.regex;
+    std.exception,
+    std.regex,
+    std.stdio,
+    std.string,
+    std.traits,
+    std.typecons,
+    std.utf,
+    std.conv : to;
   private import
-    ao_rgx;
+    ao_rgx,
+    ao_defaults;
   struct HeaderExtractSDL {
     mixin SiSUregisters;
     mixin SiSUrgxInit;
@@ -679,8 +700,8 @@ private auto headerSDLangGet(Hs)(Hs src_header) {
     writeln("--------------");
     Value test = header_sdlang.tags["title"][0].values[0];
     assert(test == typeid(string));
-    writeln(header_sdlang.maybe.tags["title"]);
-    writeln(header_sdlang.maybe.tags["title"][0].maybe.attributes["subtitle"]);
+    // writeln(header_sdlang.maybe.tags["title"]);
+    // writeln(header_sdlang.maybe.tags["title"][0].maybe.attributes["subtitle"]);
   }
   return header_sdlang; // sdlang.ast.Tag
 }
diff --git a/org/ao_defaults.org b/org/ao_defaults.org
index db9709a..cdf8734 100644
--- a/org/ao_defaults.org
+++ b/org/ao_defaults.org
@@ -21,7 +21,28 @@
 /++
   default settings
 +/
-<<ao_defaults_templates>>
+template SiSUregisters() {
+  <<ao_defaults_imports>>
+  <<ao_defaults_template_registers>>
+}
+template SiSUrgxInitFlags() {
+  <<ao_defaults_template_init_flags>>
+}
+template SiSUnode() {
+  <<ao_defaults_template_node>>
+}
+template SiSUbiblio() {
+  <<ao_defaults_template_biblio>>
+}
+template SiSUpaths() {
+  <<ao_defaults_template_paths>>
+}
+template InternalMarkup() {
+  <<ao_defaults_template_markup>>
+}
+template SiSUlanguageCodes() {
+  <<ao_defaults_template_language_codes>>
+}
 #+END_SRC
 
 ** 2. rgx:                                                          :ao_rgx:
@@ -32,8 +53,8 @@
   regex: regular expressions used in sisu document parser
 +/
 template SiSUrgxInit() {
+  private import ao_defaults;
   struct Rgx {
-    mixin SiSUlanguageCodes;
     <<ao_rgx>>
   }
 }
@@ -41,257 +62,280 @@ template SiSUrgxInit() {
 
 * 1. default templates                                    :template:defaults:
 [[./sdp.org][sdp]] [[./][org/]]
+** template: imports
+
+#+name: ao_defaults_template_imports
+#+BEGIN_SRC d
+private 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;
+#+END_SRC
+
 ** template: settings metadata associative array indexes          :settings:
 
-#+name: ao_defaults_templates
+#+name: ao_defaults_template_registers
 #+BEGIN_SRC d
-template SiSUregisters() {
-  string[string][string] conf_aa() {
-    auto conf_ = [
-      "webserv": [
-         "url_root"         : "",
-         "path"             : "~/sdp_www" ,
-         "images"           : "" ,
-         "cgi"              : "/usr/local/lib/sdp-cgi"
-      ],
-      "webserv_cgi": [
-         "host"             : "localhost",
-         "base_path"        : "",
-         "port"             : "8081",
-         "user"             : "",
-         "file_links"       : "www.sisudoc.org"
-      ],
-      "processing": [
-         "path"             : "~",
-         "dir"              : "_sisu_processing",
-         "concord_max"      : "400000"
-      ],
-      "flag": [
-         "act0"             : "--digest --qrcode --text --html --epub --concordance --pdf --odf --docbook --xhtml --xml-sax --xml-dom --sqlite --manifest --verbose",
-         "act1"             : "--digest --text --html --manifest",
-         "act2"             : "--digest --text --html --epub --pdf --manifest",
-         "act3"             : "--digest --qrcode --text --html --epub --concordance --pdf --manifest",
-         "act4"             : "--digest --qrcode --text --html --epub --concordance --pdf --odf --docbook --manifest",
-         "act5"             : "--digest --qrcode --text --html --epub --concordance --pdf --odf --docbook --sqlite --manifest",
-         "act6"             : "--digest --qrcode --text --html --epub --concordance --pdf --odf --docbook --xhtml --xml-sax --xml-dom --sqlite --manifest",
-         "act7"             : "--digest --qrcode --text --html --epub --concordance --pdf --odf --docbook --xhtml --xml-sax --xml-dom --sqlite --source --sisupod --manifest",
-         "act8"             : "--digest --qrcode --text --html --epub --concordance --pdf --odf --docbook --xhtml --xml-sax --xml-dom --pg --update --manifest",
-         "act9"             : "--digest --qrcode --text --html --epub --concordance --pdf --odf --docbook --xhtml --xml-sax --xml-dom --pg --update --source --sisupod --manifest"
-      ],
-      "default": [
-         "papersize"        : "a4,letter",
-         "text_wrap"        : "78",
-         "emphasis"         : "bold",
-         "language"         : "en",
-         "digest"           : "sha256"
-      ],
-      "permission": [
-         "share_source"     : ""
-       ],
-      "program_select": [
-         "editor"           : "vim",
-         "epub_viewer"      : "ebook-viewer",
-         "html_viewer"      : "xombrero",
-         "odf_viewer"       : "lowriter",
-         "pdf_viewer"       : "evince",
-         "xml_viewer"       : "xml-viewer"
-      ],
-      "search": [
-         "flag"             : "",
-         "action"           : "",
-         "db"               : "",
-         "title"            : ""
-      ]
-    ];
-    return conf_;
-  }
-  string[string][string] make_aa() {
-    auto make_ = [
-      "make": [
-        "bold"              : "",
-        "breaks"            : "",
-        "cover_image"       : "",
-        "css"               : "",
-        "emphasis"          : "",
-        "footer"            : "",
-        "headings"          : "",
-        "home_button_image" : "",
-        "home_button_text"  : "",
-        "italics"           : "",
-        "num_top"           : "",
-        "num_depth"         : "",
-        "substitute"        : "",
-        "texpdf_font"       : ""
-      ]
-    ];
-    return make_;
-  }
-  string[string][string] meta_aa() {
-    auto meta_ = [
-      "classify": [
-        "dewey"             : "",
-        "keywords"          : "",
-        "loc"               : "",
-        "subject"           : "",
-        "topic_register"    : ""
-      ],
-      "creator": [
-        "author"            : "",
-        "author_email"      : "",
-        "illustrator"       : "",
-        "translator"        : ""
-      ],
-      "date": [
-        "added_to_site"     : "",
-        "available"         : "",
-        "created"           : "",
-        "issued"            : "",
-        "modified"          : "",
-        "published"         : "",
-        "valid"             : ""
-      ],
-      "identifier": [
-        "isbn"              : "",
-        "oclc"              : "",
-        "pg"                : ""
-      ],
-      "links": [
-        "link"              : ""
-      ],
-      "notes": [
-        "abstract"          : "",
-        "description"       : ""
-      ],
-      "original": [
-        "language"          : "",
-        "source"            : "",
-        "title"             : ""
-      ],
-      "publisher": [
-        "name"              : ""
-      ],
-      "rights": [
-        "copyright"         : "",
-        "cover"             : "",
-        "illustrations"     : "",
-        "license"           : ""
-      ],
-      "title": [
-        "edition"           : "",
-        "full"              : "",
-        "language"          : "",
-        "main"              : "",
-        "note"              : "",
-        "sub"               : "",
-        "subtitle"          : ""
-      ]
-    ];
-    return meta_;
-  }
+string[string][string] conf_aa() {
+  auto conf_ = [
+    "webserv": [
+       "url_root"         : "",
+       "path"             : "~/sdp_www" ,
+       "images"           : "" ,
+       "cgi"              : "/usr/local/lib/sdp-cgi"
+    ],
+    "webserv_cgi": [
+       "host"             : "localhost",
+       "base_path"        : "",
+       "port"             : "8081",
+       "user"             : "",
+       "file_links"       : "www.sisudoc.org"
+    ],
+    "processing": [
+       "path"             : "~",
+       "dir"              : "_sisu_processing",
+       "concord_max"      : "400000"
+    ],
+    "flag": [
+       "act0"             : "--digest --qrcode --text --html --epub --concordance --pdf --odf --docbook --xhtml --xml-sax --xml-dom --sqlite --manifest --verbose",
+       "act1"             : "--digest --text --html --manifest",
+       "act2"             : "--digest --text --html --epub --pdf --manifest",
+       "act3"             : "--digest --qrcode --text --html --epub --concordance --pdf --manifest",
+       "act4"             : "--digest --qrcode --text --html --epub --concordance --pdf --odf --docbook --manifest",
+       "act5"             : "--digest --qrcode --text --html --epub --concordance --pdf --odf --docbook --sqlite --manifest",
+       "act6"             : "--digest --qrcode --text --html --epub --concordance --pdf --odf --docbook --xhtml --xml-sax --xml-dom --sqlite --manifest",
+       "act7"             : "--digest --qrcode --text --html --epub --concordance --pdf --odf --docbook --xhtml --xml-sax --xml-dom --sqlite --source --sisupod --manifest",
+       "act8"             : "--digest --qrcode --text --html --epub --concordance --pdf --odf --docbook --xhtml --xml-sax --xml-dom --pg --update --manifest",
+       "act9"             : "--digest --qrcode --text --html --epub --concordance --pdf --odf --docbook --xhtml --xml-sax --xml-dom --pg --update --source --sisupod --manifest"
+    ],
+    "default": [
+       "papersize"        : "a4,letter",
+       "text_wrap"        : "78",
+       "emphasis"         : "bold",
+       "language"         : "en",
+       "digest"           : "sha256"
+    ],
+    "permission": [
+       "share_source"     : ""
+     ],
+    "program_select": [
+       "editor"           : "vim",
+       "epub_viewer"      : "ebook-viewer",
+       "html_viewer"      : "xombrero",
+       "odf_viewer"       : "lowriter",
+       "pdf_viewer"       : "evince",
+       "xml_viewer"       : "xml-viewer"
+    ],
+    "search": [
+       "flag"             : "",
+       "action"           : "",
+       "db"               : "",
+       "title"            : ""
+    ]
+  ];
+  return conf_;
+}
+string[string][string] make_aa() {
+  auto make_ = [
+    "make": [
+      "bold"              : "",
+      "breaks"            : "",
+      "cover_image"       : "",
+      "css"               : "",
+      "emphasis"          : "",
+      "footer"            : "",
+      "headings"          : "",
+      "home_button_image" : "",
+      "home_button_text"  : "",
+      "italics"           : "",
+      "num_top"           : "",
+      "num_depth"         : "",
+      "substitute"        : "",
+      "texpdf_font"       : ""
+    ]
+  ];
+  return make_;
+}
+string[string][string] meta_aa() {
+  auto meta_ = [
+    "classify": [
+      "dewey"             : "",
+      "keywords"          : "",
+      "loc"               : "",
+      "subject"           : "",
+      "topic_register"    : ""
+    ],
+    "creator": [
+      "author"            : "",
+      "author_email"      : "",
+      "illustrator"       : "",
+      "translator"        : ""
+    ],
+    "date": [
+      "added_to_site"     : "",
+      "available"         : "",
+      "created"           : "",
+      "issued"            : "",
+      "modified"          : "",
+      "published"         : "",
+      "valid"             : ""
+    ],
+    "identifier": [
+      "isbn"              : "",
+      "oclc"              : "",
+      "pg"                : ""
+    ],
+    "links": [
+      "link"              : ""
+    ],
+    "notes": [
+      "abstract"          : "",
+      "description"       : ""
+    ],
+    "original": [
+      "language"          : "",
+      "source"            : "",
+      "title"             : ""
+    ],
+    "publisher": [
+      "name"              : ""
+    ],
+    "rights": [
+      "copyright"         : "",
+      "cover"             : "",
+      "illustrations"     : "",
+      "license"           : ""
+    ],
+    "title": [
+      "edition"           : "",
+      "full"              : "",
+      "language"          : "",
+      "main"              : "",
+      "note"              : "",
+      "sub"               : "",
+      "subtitle"          : ""
+    ]
+  ];
+  return meta_;
+}
 #+END_SRC
 
 ** template: metadata associative array indexes                     :header:
 
-#+name: ao_defaults_templates
+#+name: ao_defaults_template_registers
 #+BEGIN_SRC d
-  auto ptr_head_main =
-    [
-      "classify",
-      "creator",
-      "date",
-      "identifier",
-      "links",
-      "make",             /+ make +/
-      "original",
-      "notes",
-      "rights",
-      "title"
-    ];
-  auto ptr_head_sub_classify =
-    [
-      "dewey",
-      "keywords",
-      "loc",
-      "subject",
-      "topic_register"
-    ];
-  auto ptr_head_sub_creator =
-    [
-      "author",
-      "author_email",
-      "cover",
-      "illustrator",
-      "translator"
-    ];
-  auto ptr_head_sub_date =
-    [
-      "added_to_site",
-      "available",
-      "created",
-      "issued",
-      "modified",
-      "published",
-      "valid"
-    ];
-  auto ptr_head_sub_identifier =
-    [
-      "isbn",
-      "oclc",
-      "pg"
-    ];
-  /+ make +/
-  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"
-    ];
-  auto ptr_head_sub_notes =
-    [
-      "abstract",
-      "description"
-    ];
-  auto ptr_head_sub_original =
-    [
-      "language",
-      "source",
-      "title"
-    ];
-  auto ptr_head_sub_publisher =
-    [ "name" ];
-  auto ptr_head_sub_rights =
-    [
-      "copyright",
-      "cover",
-      "illustrations",
-      "license"
-    ];
-  auto ptr_head_sub_title =
-    [
-      "edition",
-      "full",
-      "language",
-      "main",
-      "note",
-      "sub"
-    ];
-  auto config_jsonstr = `{
-  }`;
-}
+auto ptr_head_main =
+  [
+    "classify",
+    "creator",
+    "date",
+    "identifier",
+    "links",
+    "make",             /+ make +/
+    "original",
+    "notes",
+    "rights",
+    "title"
+  ];
+auto ptr_head_sub_classify =
+  [
+    "dewey",
+    "keywords",
+    "loc",
+    "subject",
+    "topic_register"
+  ];
+auto ptr_head_sub_creator =
+  [
+    "author",
+    "author_email",
+    "cover",
+    "illustrator",
+    "translator"
+  ];
+auto ptr_head_sub_date =
+  [
+    "added_to_site",
+    "available",
+    "created",
+    "issued",
+    "modified",
+    "published",
+    "valid"
+  ];
+auto ptr_head_sub_identifier =
+  [
+    "isbn",
+    "oclc",
+    "pg"
+  ];
+/+ make +/
+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"
+  ];
+auto ptr_head_sub_notes =
+  [
+    "abstract",
+    "description"
+  ];
+auto ptr_head_sub_original =
+  [
+    "language",
+    "source",
+    "title"
+  ];
+auto ptr_head_sub_publisher =
+  [ "name" ];
+auto ptr_head_sub_rights =
+  [
+    "copyright",
+    "cover",
+    "illustrations",
+    "license"
+  ];
+auto ptr_head_sub_title =
+  [
+    "edition",
+    "full",
+    "language",
+    "main",
+    "note",
+    "sub"
+  ];
+auto config_jsonstr = `{
+}`;
 #+END_SRC
 
 *** notes headers
 
-#+name: ao_defaults_templates
+#+name: ao_defaults_template
 #+BEGIN_SRC d
 /+
   /+
@@ -371,363 +415,351 @@ header.
 
 ** template: language codes
 
-#+name: ao_defaults_templates
+#+name: ao_defaults_template_language_codes
 #+BEGIN_SRC d
-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,"|");
-      return "(" ~ join(code_arr,"|") ~ ")";
-    }
-    auto codes_regex() {
-      return regex(codes_);
-    }
+/+ 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,"|");
+    return "(" ~ join(code_arr,"|") ~ ")";
+  }
+  auto codes_regex() {
+    return regex(codes_);
   }
 }
 #+END_SRC
 
 ** template: flags regex initialize                            :regex_flags:
 
-#+name: ao_defaults_templates
+#+name: ao_defaults_template_init_flags
 #+BEGIN_SRC d
 /+ regex flags +/
-template SiSUrgxInitFlags() {
-  int[string] flags_type_init() {
-    int[string] flags_type_init = [
-      "make_headings"        : 0,
-      "header_make"          : 0,
-      "header_meta"          : 0,
-      "heading"              : 0,
-      "biblio_section"       : 0,
-      "glossary_section"     : 0,
-      "blurb_section"        : 0,
-      "para"                 : 0,
-      "blocks"               : 0, // 0..2 generic
-      "code"                 : 0, // 0..2
-      "poem"                 : 0, // 0..2
-      "table"                : 0, // 0..2
-      "group"                : 0, // 0..2
-      "block"                : 0, // 0..2
-      "quote"                : 0, // 0..2
-      "verse_new"            : 0,
-      "curly_code"           : 0,
-      "curly_poem"           : 0,
-      "curly_table"          : 0,
-      "curly_group"          : 0,
-      "curly_block"          : 0,
-      "curly_quote"          : 0,
-      "tic_code"             : 0,
-      "tic_poem"             : 0,
-      "tic_table"            : 0,
-      "tic_group"            : 0,
-      "tic_block"            : 0,
-      "tic_quote"            : 0,
-      "ocn_status"           : 0, // 0 obj_cite_number; 1 no obj_cite_number; 2 no obj_cite_number & dummy headings
-      "ocn_status_multi_obj" : 0, // 0 obj_cite_number; 1 no obj_cite_number; 2 no obj_cite_number & dummy headings
-      "book_index"           : 0,
-    ];
-    return flags_type_init;
-  }
+int[string] flags_type_init() {
+  int[string] flags_type_init = [
+    "make_headings"        : 0,
+    "header_make"          : 0,
+    "header_meta"          : 0,
+    "heading"              : 0,
+    "biblio_section"       : 0,
+    "glossary_section"     : 0,
+    "blurb_section"        : 0,
+    "para"                 : 0,
+    "blocks"               : 0, // 0..2 generic
+    "code"                 : 0, // 0..2
+    "poem"                 : 0, // 0..2
+    "table"                : 0, // 0..2
+    "group"                : 0, // 0..2
+    "block"                : 0, // 0..2
+    "quote"                : 0, // 0..2
+    "verse_new"            : 0,
+    "curly_code"           : 0,
+    "curly_poem"           : 0,
+    "curly_table"          : 0,
+    "curly_group"          : 0,
+    "curly_block"          : 0,
+    "curly_quote"          : 0,
+    "tic_code"             : 0,
+    "tic_poem"             : 0,
+    "tic_table"            : 0,
+    "tic_group"            : 0,
+    "tic_block"            : 0,
+    "tic_quote"            : 0,
+    "ocn_status"           : 0, // 0 obj_cite_number; 1 no obj_cite_number; 2 no obj_cite_number & dummy headings
+    "ocn_status_multi_obj" : 0, // 0 obj_cite_number; 1 no obj_cite_number; 2 no obj_cite_number & dummy headings
+    "book_index"           : 0,
+  ];
+  return flags_type_init;
 }
 #+END_SRC
 
-#+name: ao_defaults_templates
+#+name: ao_defaults_template_node
 #+BEGIN_SRC d
-template SiSUnode() {
-  string[string] node_metadata_heading_str() {
-    auto _node = [
-        "is"                            : "",
-        "ocn"                           : "",
-        "marked_up_lev"                 : "",
-        "segment_anchor_tag"            : "",
-        "attrib"                        : "",
-    ];
-    return _node;
-  }
-  int[string] node_metadata_heading_int() {
-    auto _node = [
-        "ocn"                           : 0, // decide whether to use or keep?
-        "ptr_doc_object"                : 0,
-        "ptr_html_segnames"             : 0,
-        "ptr_heading"                   : 0,
-        "heading_lev_markup"            : 9,
-        "heading_lev_collapsed"         : 9,
-        "parent_ocn"                    : 0,
-        "parent_lev_markup"             : 9,
-    ];
-    return _node;
-  }
-  string[string] node_metadata_para_str() {
-    auto _node = [
-        "is"                            : "",
-        "ocn"                           : "",
-        "attrib"                        : "",
-        // "segment_anchor_tag"            : "",
-    ];
-    return _node;
-  }
-  int[string] node_metadata_para_int() {
-    auto _node = [
-        "ocn"                           : 0,
-        "indent_base"                   : 0,
-        "indent_hang"                   : 0,
-        "bullet"                        : 0, // bool (0|1)
-    ];
-    return _node;
-  }
+string[string] node_metadata_heading_str() {
+  auto _node = [
+      "is"                            : "",
+      "ocn"                           : "",
+      "marked_up_lev"                 : "",
+      "segment_anchor_tag"            : "",
+      "attrib"                        : "",
+  ];
+  return _node;
+}
+int[string] node_metadata_heading_int() {
+  auto _node = [
+      "ocn"                           : 0, // decide whether to use or keep?
+      "ptr_doc_object"                : 0,
+      "ptr_html_segnames"             : 0,
+      "ptr_heading"                   : 0,
+      "heading_lev_markup"            : 9,
+      "heading_lev_collapsed"         : 9,
+      "parent_ocn"                    : 0,
+      "parent_lev_markup"             : 9,
+  ];
+  return _node;
+}
+string[string] node_metadata_para_str() {
+  auto _node = [
+      "is"                            : "",
+      "ocn"                           : "",
+      "attrib"                        : "",
+      // "segment_anchor_tag"            : "",
+  ];
+  return _node;
+}
+int[string] node_metadata_para_int() {
+  auto _node = [
+      "ocn"                           : 0,
+      "indent_base"                   : 0,
+      "indent_hang"                   : 0,
+      "bullet"                        : 0, // bool (0|1)
+  ];
+  return _node;
 }
 #+END_SRC
 
 ** template: bibliography                                           :biblio:
 
-#+name: ao_defaults_templates
+#+name: ao_defaults_template_biblio
 #+BEGIN_SRC d
-template SiSUbiblio() {
-  // required: deemed_author (author || editor); year; fulltitle;
-  struct BibJsnStr {
-    auto biblio_entry_tags_jsonstr() {
-      string x =  `{
-        "is"                               : "",
-        "sortby_deemed_author_year_title"  : "",
-        "deemed_author"                    : "",
-        "author_raw"                       : "",
-        "author"                           : "",
-        "author_arr"                       : [ "" ],
-        "editor_raw"                       : "",
-        "editor"                           : "",
-        "editor_arr"                       : [ "" ],
-        "title"                            : "",
-        "subtitle"                         : "",
-        "fulltitle"                        : "",
-        "language"                         : "",
-        "trans"                            : "",
-        "src"                              : "",
-        "journal"                          : "",
-        "in"                               : "",
-        "volume"                           : "",
-        "edition"                          : "",
-        "year"                             : "",
-        "place"                            : "",
-        "publisher"                        : "",
-        "url"                              : "",
-        "pages"                            : "",
-        "note"                             : "",
-        "short_name"                       : "",
-        "id"                               : ""
-      }`; // is: book, article, magazine, newspaper, blog, other
-      return x;
-    }
+// required: deemed_author (author || editor); year; fulltitle;
+struct BibJsnStr {
+  auto biblio_entry_tags_jsonstr() {
+    string x =  `{
+      "is"                               : "",
+      "sortby_deemed_author_year_title"  : "",
+      "deemed_author"                    : "",
+      "author_raw"                       : "",
+      "author"                           : "",
+      "author_arr"                       : [ "" ],
+      "editor_raw"                       : "",
+      "editor"                           : "",
+      "editor_arr"                       : [ "" ],
+      "title"                            : "",
+      "subtitle"                         : "",
+      "fulltitle"                        : "",
+      "language"                         : "",
+      "trans"                            : "",
+      "src"                              : "",
+      "journal"                          : "",
+      "in"                               : "",
+      "volume"                           : "",
+      "edition"                          : "",
+      "year"                             : "",
+      "place"                            : "",
+      "publisher"                        : "",
+      "url"                              : "",
+      "pages"                            : "",
+      "note"                             : "",
+      "short_name"                       : "",
+      "id"                               : ""
+    }`; // is: book, article, magazine, newspaper, blog, other
+    return x;
   }
 }
 #+END_SRC
 
 ** TODO template: dir paths                                       :dir:path:
 
-#+name: ao_defaults_templates
+#+name: ao_defaults_template_paths
 #+BEGIN_SRC d
-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;
+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;
   }
-  struct DirPaths {
-    string base_filename(string fn_src) {
-      return _base_filename(fn_src);
-    }
+  string doc(string fn_src) {
+    return chainPath(base(fn_src), "doc").array;
   }
-  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 image(string fn_src) {
-      return chainPath(base(fn_src), "image").array;
-    }
-    string conf(string fn_src) {
-      return chainPath(base(fn_src), "conf").array;
-    }
-    string css(string fn_src) {
-      return chainPath(base(fn_src), "css").array;
-    }
-    string fn_doc(string fn_src, string lng) {
-      return chainPath((doc_lng(fn_src, lng)), baseName(fn_src)).array;
-    }
+  string doc_lng(string fn_src, string lng) {
+    return chainPath(doc(fn_src), lng).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;
-    // }
+  string image(string fn_src) {
+    return chainPath(base(fn_src), "image").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;
-    }
+  string conf(string fn_src) {
+    return chainPath(base(fn_src), "conf").array;
+  }
+  string css(string fn_src) {
+    return chainPath(base(fn_src), "css").array;
+  }
+  string fn_doc(string fn_src, string lng) {
+    return chainPath((doc_lng(fn_src, lng)), baseName(fn_src)).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;
   }
 }
 #+END_SRC
 
 ** template: internal markup                                        :markup:
 
-#+name: ao_defaults_templates
+#+name: ao_defaults_template_markup
 #+BEGIN_SRC d
-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 url_o = "┤";        auto url_c = "├";
-    auto mark_internal_site_lnk = "¤";
-    auto nbsp = "░";
-    auto br_line = "┘";
-    auto br_nl = "┙";
-    auto br_paragraph = "┚";
-    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;
-    }
+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 url_o = "┤";        auto url_c = "├";
+  auto mark_internal_site_lnk = "¤";
+  auto nbsp = "░";
+  auto br_line = "┘";
+  auto br_nl = "┙";
+  auto br_paragraph = "┚";
+  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;
   }
 }
 #+END_SRC
diff --git a/org/sdp.org b/org/sdp.org
index bd1005c..48a4e12 100644
--- a/org/sdp.org
+++ b/org/sdp.org
@@ -185,7 +185,6 @@ mixin CompileTimeInfo;
 #+BEGIN_SRC d
 mixin SiSUrgxInit;
 mixin SiSUregisters;
-mixin SiSUheaderExtractHub;
 mixin SiSUheaderExtractSDLang;
 mixin SiSUnode;
 mixin SiSUbiblio;
@@ -200,7 +199,6 @@ mixin outputHub;
 #+NAME: sdp_args
 #+BEGIN_SRC d
 auto raw = MarkupRaw();
-auto head = SiSUheaderExtractHub();
 /+
 struct DocumentParts {
   string[string][] contents;
@@ -400,7 +398,7 @@ debug(header_and_body) {
 #+BEGIN_SRC d
 /+ ↓ split header into make and meta +/
 auto _0_make_1_dochead_meta_tuple =
-  head.SiSUheaderExtractHub(_0_header_1_body_content_2_insert_filelist_tuple[0], conf_doc_make_aa);
+  SiSUheaderExtractHub!()(_0_header_1_body_content_2_insert_filelist_tuple[0], conf_doc_make_aa);
 static assert(!isTypeTuple!(_0_make_1_dochead_meta_tuple));
 static assert(_0_make_1_dochead_meta_tuple.length==2);
 #+END_SRC
-- 
cgit v1.2.3