/++
  output hub<BR>
  check & generate output types requested
+/
template SiSUoutputHub() {
  struct SDPoutput {
    void hub(S)(
      auto ref const S         contents,
      string[][string][string] bookindex_unordered_hashes,
      JSONValue[]              biblio,
      string[string][string]   dochead_make,
      string[string][string]   dochead_meta,
      string                   fn_src,
      bool[string]             opt_action_bool
    ) {
      auto rgx = Rgx();
      if (opt_action_bool["source"]) {
        writeln("sisupod source");
      }
      if (opt_action_bool["sisupod"]) {
        writeln("sisupod source");
      }
      if (opt_action_bool["text"]) {
        writeln("text processing");
        // auto text=SDPoutput_text();
        // text.scroll(contents, bookindex_unordered_hashes, biblio, dochead_make, dochead_meta, fn_src, opt_action_bool);
      }
      if (opt_action_bool["html"]) {
        mixin SiSUoutputHTML;
        auto html=SDPoutputHTML();
        html.css_write;
        html.scroll(contents, bookindex_unordered_hashes, biblio, dochead_make, dochead_meta, fn_src, opt_action_bool);
      }
      if (opt_action_bool["epub"]) {
        writeln("epub processing");
      }
      if (opt_action_bool["pdf"]) {
        writeln("pdf processing");
      }
      if (opt_action_bool["odt"]) {
        writeln("odt processing");
      }
      if (opt_action_bool["sqlite"]) {
        writeln("sqlite processing");
      }
      if (opt_action_bool["postgresql"]) {
        writeln("pgsql processing");
      }
    }
  }
}