template SiSUoutputHTML() {
  struct SDPoutputHTML {
    mixin SiSUoutputXHTMLs;
    
    void scroll_write_output_file(
      string fn_src,
      string[] doc,
    ) {
      mixin SiSUpaths;
      auto pth_html = HtmlPaths();
      try {
        mkdirRecurse(pth_html.base);
        auto f = File(pth_html.fn_scroll(fn_src), "w");
        foreach (o; doc) {
          f.writeln(o);
        }
      }
      catch (ErrnoException ex) {
        // Handle error
      }
    }
    void scroll(C,T)(
      auto ref const C         contents,
      auto ref T               doc_matters,
    ) {
      auto xhtml_format = SDPoutputXHTMLs();
      auto rgx = Rgx();
      string[] doc_html;
      string[] doc;
      foreach (part; doc_matters.keys_seq_scroll) {
        foreach (obj; contents[part]) {
          if (obj.use == "frontmatter") {
            switch (obj.is_of) {
            case "para":
              switch (obj.is_a) {
              case "heading":
                doc_html ~= xhtml_format.heading(obj);
                break;
              case "toc":
                doc_html ~= xhtml_format.toc(obj);
                break;
              default:
                writeln(__FILE__, ":", __LINE__, ": ", obj.is_a);
                break;
              }
              break;
            default:
              writeln(__FILE__, ":", __LINE__, ": ", obj.is_a);
              break;
            }
          } else if (obj.use == "body") {
            switch (obj.is_of) {
            case "para":
              switch (obj.is_a) {
              case "heading":
                doc_html ~= xhtml_format.heading(obj);
                break;
              case "para":
                doc_html ~= xhtml_format.para(obj);
                break;
              default:
                writeln(__FILE__, ":", __LINE__, ": ", obj.is_a);
                break;
              }
              break;
            case "block":
              switch (obj.is_a) {
              case "poem":
                break;
              case "verse":
                doc_html ~= xhtml_format.nugget(obj);
                break;
              case "group":
                doc_html ~= xhtml_format.nugget(obj);
                break;
              case "block":
                doc_html ~= xhtml_format.nugget(obj);
                break;
              case "quote":
                doc_html ~= xhtml_format.nugget(obj);
                break;
              case "table":
                doc_html ~= xhtml_format.para(obj); //
                break;
              case "code":
                doc_html ~= xhtml_format.code(obj);
                break;
              default:
                writeln(__FILE__, ":", __LINE__, ": ", obj.is_a);
                break;
              }
              break;
            default:
              writeln(__FILE__, ":", __LINE__, ": ", obj.is_of);
              break;
            }
          } else if (obj.use == "backmatter") {
            switch (obj.is_of) {
            case "para":
              switch (obj.is_a) {
              case "heading":
                doc_html ~= xhtml_format.heading(obj);
                break;
              case "endnote":
                doc_html ~= xhtml_format.endnote(obj);
                break;
              case "glossary":
                doc_html ~= xhtml_format.para(obj);
                break;
              case "bibliography":
                doc_html ~= xhtml_format.para(obj);
                break;
              case "bookindex":
                doc_html ~= xhtml_format.para(obj);
                break;
              case "blurb":
                doc_html ~= xhtml_format.para(obj);
                break;
              default:
                writeln(__FILE__, ":", __LINE__, ": ", obj.is_a);
                break;
              }
              break;
            default:
              writeln(__FILE__, ":", __LINE__, ": ", obj.is_a);
              break;
            }
          }
        }
      }
      doc = xhtml_format.scroll_head(doc_matters.dochead_meta) ~ doc_html ~ xhtml_format.tail;
      scroll_write_output_file(doc_matters.source_filename, doc);
    }
    void seg_write_output_files(
      string fn_src,
      string[] seg_filenames,
      string[][string] doc_html,
    ) {
      mixin SiSUpaths;
      auto pth_html = HtmlPaths();
      auto xhtml_format = SDPoutputXHTMLs();
      auto m = matchFirst(fn_src, rgx.src_fn);
      try {
        mkdirRecurse(pth_html.seg(fn_src));
        foreach (seg_filename; seg_filenames) {
          // writeln(__LINE__, ": ", fn);
          auto f = File(pth_html.fn_seg(fn_src, seg_filename), "w");
          /+ // f.writeln(seg_head); // not needed built and inserted earlier +/
          foreach (docseg; doc_html[seg_filename]) {
            f.writeln(docseg);
          }
          f.writeln(xhtml_format.tail); // needed for each lev4
        }
      }
      catch (ErrnoException ex) {
        // Handle error
      }
    }
    void seg(C,T)(
      auto ref const C         contents,
      auto ref T               doc_matters,
    ) {
      auto xhtml_format = SDPoutputXHTMLs();
      auto rgx = Rgx();
      string[][string] doc_html;
      string[] doc;
      string segment_filename;
      string[] seg_filenames;
      string[] top_level_headings = ["","","",""];
      foreach (part; doc_matters.keys_seq_seg) {
        foreach (obj; contents[part]) {
          if (obj.is_a == "heading") {                            // all headings: frontmatter, body & backmatter
            switch (obj.heading_lev_markup) {
            case 0: .. case 3:
              /+ fill buffer, and replace with new levels from 1 to 3 +/
              switch (obj.heading_lev_markup) {
              case 0:
                top_level_headings[0] = "";
                top_level_headings[1] = "";
                top_level_headings[2] = "";
                top_level_headings[3] = "";
                goto default;
              case 1:
                top_level_headings[1] = "";
                top_level_headings[2] = "";
                top_level_headings[3] = "";
                goto default;
              case 2:
                top_level_headings[2] = "";
                top_level_headings[3] = "";
                goto default;
              case 3:
                top_level_headings[3] = "";
                goto default;
              default:
                top_level_headings[obj.heading_lev_markup] = xhtml_format.heading(obj); // should probably have different css tagging (fontsize etc)
                break;
              }
              break;
            case 4:
              seg_filenames ~= obj.segment_anchor_tag;
              segment_filename = obj.segment_anchor_tag;
              doc_html[segment_filename] ~= xhtml_format.seg_head(doc_matters.dochead_meta); // consider placing seg_head here as can more easily populate it with lev4 info
              foreach (top_level_heading; top_level_headings) {
                // writeln(top_level_heading);
                doc_html[segment_filename] ~= top_level_heading;
              }
              doc_html[segment_filename] ~= xhtml_format.heading(obj);
              break;
            case 5: .. case 7:
              doc_html[segment_filename] ~= xhtml_format.heading(obj);
              break;
            default:
              writeln(__FILE__, ":", __LINE__, ": ", obj.is_a);
              break;
            }
          } else if (obj.use == "frontmatter") {
            switch (obj.is_of) {
            case "para":
              switch (obj.is_a) {
              case "toc":
                  doc_html[segment_filename] ~= xhtml_format.toc(obj);
              break;
              default:
                // writeln(__FILE__, ":", __LINE__, ": ", obj.is_a);
                break;
              }
              break;
            default:
              // writeln(__FILE__, ":", __LINE__, ": ", obj.is_a);
              break;
            }
          } else if (obj.use == "body") {
            switch (obj.is_of) {
            case "para":
              switch (obj.is_a) {
              case "para":
                doc_html[segment_filename] ~= xhtml_format.para(obj);
                break;
              default:
                // writeln(__FILE__, ":", __LINE__, ": ", obj.is_a);
                break;
              }
              break;
            case "block":
              switch (obj.is_a) {
              case "poem":                        // double check why both poem & verse
                break;
              case "verse":
                doc_html[segment_filename] ~= xhtml_format.nugget(obj);
                break;
              case "group":
                doc_html[segment_filename] ~= xhtml_format.nugget(obj);
                break;
              case "block":
                doc_html[segment_filename] ~= xhtml_format.nugget(obj);
                break;
              case "quote":
                doc_html[segment_filename] ~= xhtml_format.nugget(obj);
                break;
              case "table":
                doc_html[segment_filename] ~= xhtml_format.para(obj); //
                break;
              case "code":
                doc_html[segment_filename] ~= xhtml_format.code(obj);
                break;
              default:
                writeln(__FILE__, ":", __LINE__, ": ", obj.is_a);
                break;
              }
              break;
            default:
              // writeln(__FILE__, ":", __LINE__, ": ", obj.is_of);
              break;
            }
          } else if (obj.use == "backmatter") {
            switch (obj.is_of) {
            case "para":
              switch (obj.is_a) {
              case "endnote":
                doc_html[segment_filename] ~= xhtml_format.endnote(obj);
                break;
              case "glossary":
                doc_html[segment_filename] ~= xhtml_format.para(obj);
                break;
              case "bibliography":
                doc_html[segment_filename] ~= xhtml_format.para(obj);
                break;
              case "bookindex":
                doc_html[segment_filename] ~= xhtml_format.para(obj);
                break;
              case "blurb":
                doc_html[segment_filename] ~= xhtml_format.para(obj);
                break;
              default:
                // writeln(__FILE__, ":", __LINE__, ": ", obj.is_a);
                break;
              }
              break;
            default:
              writeln(__FILE__, ":", __LINE__, ": ", obj.is_a);
              break;
            }
          }
        }
      }
      writeln(doc_matters.keys_seq_seg);
      seg_write_output_files(doc_matters.source_filename, seg_filenames, doc_html);
    }
    auto html_css() {
      string css;
      css="/* SiSU css default stylesheet */
      body {
        color: black;
        background: #ffffff;
        background-color: #ffffff;
      }
      a:link {
        color: #003399;
        text-decoration: none;
      }
      a:visited {
        color: #003399;
        text-decoration: none;
      }
      a:hover {
        color: #000000;
        background-color: #f9f9aa;
      }
      a.lnkocn:link {
        color: #777777;
        text-decoration: none;
      }
      a:hover img {
        background-color: #ffffff;
      }
      a:active {
        color: #003399;
        text-decoration: underline;
      }
      div {
        margin-left: 0;
        margin-right: 0;
      }
      div.p {
        margin-left: 5%;
        margin-right: 1%;
      }
      #top_band {
        position: absolute;
        top: 0;
        bottom: 80px;
        width: 100%;
      }
      #top_band_search {
        position: absolute;
        top: 0px;
        right: 0px;
        margin-left: 75%;
        width: 20%;
      }
      #column_left {
        position: absolute;
        top: 80px;
        left: 0;
        margin-left: 1%;
        width: 20%;
      }
      #column_center {
        position: absolute;
        top: 80px;
        margin-left: 20%;
        width: 55%;
      }
      #column_right {
        position: absolute;
        top: 80px;
        right: 0px;
        margin-left: 75%;
        width: 25%;
      }
      #pane_major {
        position: absolute;
        top: 0px;
        left: 0;
        margin-left: 0;
        width: 80%;
      }
      #pane_minor {
        position: absolute;
        top: 0px;
        right: 0px;
        margin-left: 75%;
        width: 20%;
        background-color: #aaaaaa;
      }
      .norm, .bold, .verse, .group, .block, .alt {
        line-height: 133%;
        margin-left: 0em;
        margin-right: 2em;
        margin-top: 12px;
        margin-bottom: 0px;
        padding-left: 0em;
        text-indent: 0em;
      }
      p, h0, h1, h2, h3, h4, h5, h6, h7 {
        display: block;
        font-family: verdana, arial, georgia, tahoma, sans-serif, helvetica, times, roman;
        font-size: 100%;
        font-weight: normal;
        line-height: 133%;
        text-align: justify;
        margin-left: 0em;
        margin-right: 2em;
        text-indent: 0mm;
        margin-top: 0.8em;
        margin-bottom: 0.8em;
      }
      /* indent */
      p.norm { }
      p.i1 {padding-left: 1em;}
      p.i2 {padding-left: 2em;}
      p.i3 {padding-left: 3em;}
      p.i4 {padding-left: 4em;}
      p.i5 {padding-left: 5em;}
      p.i6 {padding-left: 6em;}
      p.i7 {padding-left: 7em;}
      p.i8 {padding-left: 8em;}
      p.i9 {padding-left: 9em;}
      /* hanging indent */
      p.h0i0 {
        padding-left: 0em;
        text-indent:  0em;
      }
      p.h0i1 {
        padding-left: 1em;
        text-indent: -1em;
      }
      p.h0i2 {
        padding-left: 2em;
        text-indent: -2em;
      }
      p.h0i3 {
        padding-left: 3em;
        text-indent: -3em;
      }
      p.h0i4 {
        padding-left: 4em;
        text-indent: -4em;
      }
      p.h0i5 {
        padding-left: 5em;
        text-indent: -5em;
      }
      p.h0i6 {
        padding-left: 6em;
        text-indent: -6em;
      }
      p.h0i7 {
        padding-left: 7em;
        text-indent: -7em;
      }
      p.h0i8 {
        padding-left: 8em;
        text-indent: -8em;
      }
      p.h0i9 {
        padding-left: 9em;
        text-indent: -9em;
      }
      p.h1i0 {
        padding-left: 0em;
        text-indent:  1em;
      }
      p.h1i1 {
        padding-left: 1em;
        text-indent:  0em;
      }
      p.h1i2 {
        padding-left: 2em;
        text-indent: -1em;
      }
      p.h1i3 {
        padding-left: 3em;
        text-indent: -2em;
      }
      p.h1i4 {
        padding-left: 4em;
        text-indent: -3em;
      }
      p.h1i5 {
        padding-left: 5em;
        text-indent: -4em;
      }
      p.h1i6 {
        padding-left: 6em;
        text-indent: -5em;
      }
      p.h1i7 {
        padding-left: 7em;
        text-indent: -6em;
      }
      p.h1i8 {
        padding-left: 8em;
        text-indent: -7em;
      }
      p.h1i9 {
        padding-left: 9em;
        text-indent: -8em;
      }
      p.h2i0 {
        padding-left: 0em;
        text-indent:  2em;
      }
      p.h2i1 {
        padding-left: 1em;
        text-indent:  1em;
      }
      p.h2i2 {
        padding-left: 2em;
        text-indent:  0em;
      }
      p.h2i3 {
        padding-left: 3em;
        text-indent: -1em;
      }
      p.h2i4 {
        padding-left: 4em;
        text-indent: -2em;
      }
      p.h2i5 {
        padding-left: 5em;
        text-indent: -3em;
      }
      p.h2i6 {
        padding-left: 6em;
        text-indent: -4em;
      }
      p.h2i7 {
        padding-left: 7em;
        text-indent: -5em;
      }
      p.h2i8 {
        padding-left: 8em;
        text-indent: -6em;
      }
      p.h2i9 {
        padding-left: 9em;
        text-indent: -7em;
      }
      p.h3i0 {
        padding-left: 0em;
        text-indent:  3em;
      }
      p.h3i1 {
        padding-left: 1em;
        text-indent:  2em;
      }
      p.h3i2 {
        padding-left: 2em;
        text-indent:  1em;
      }
      p.h3i3 {
        padding-left: 3em;
        text-indent:  0em;
      }
      p.h3i4 {
        padding-left: 4em;
        text-indent: -1em;
      }
      p.h3i5 {
        padding-left: 5em;
        text-indent: -2em;
      }
      p.h3i6 {
        padding-left: 6em;
        text-indent: -3em;
      }
      p.h3i7 {
        padding-left: 7em;
        text-indent: -4em;
      }
      p.h3i8 {
        padding-left: 8em;
        text-indent: -5em;
      }
      p.h3i9 {
        padding-left: 9em;
        text-indent: -6em;
      }
      p.h4i0 {
        padding-left: 0em;
        text-indent:  4em;
      }
      p.h4i1 {
        padding-left: 1em;
        text-indent:  3em;
      }
      p.h4i2 {
        padding-left: 2em;
        text-indent:  2em;
      }
      p.h4i3 {
        padding-left: 3em;
        text-indent:  1em;
      }
      p.h4i4 {
        padding-left: 4em;
        text-indent:  0em;
      }
      p.h4i5 {
        padding-left: 5em;
        text-indent: -1em;
      }
      p.h4i6 {
        padding-left: 6em;
        text-indent: -2em;
      }
      p.h4i7 {
        padding-left: 7em;
        text-indent: -3em;
      }
      p.h4i8 {
        padding-left: 8em;
        text-indent: -4em;
      }
      p.h4i9 {
        padding-left: 9em;
        text-indent: -5em;
      }
      p.h5i0 {
        padding-left: 0em;
        text-indent:  5em;
      }
      p.h5i1 {
        padding-left: 1em;
        text-indent:  4em;
      }
      p.h5i2 {
        padding-left: 2em;
        text-indent:  3em;
      }
      p.h5i3 {
        padding-left: 3em;
        text-indent:  2em;
      }
      p.h5i4 {
        padding-left: 4em;
        text-indent:  1em;
      }
      p.h5i5 {
        padding-left: 5em;
        text-indent:  0em;
      }
      p.h5i6 {
        padding-left: 6em;
        text-indent: -1em;
      }
      p.h5i7 {
        padding-left: 7em;
        text-indent: -2em;
      }
      p.h5i8 {
        padding-left: 8em;
        text-indent: -3em;
      }
      p.h5i9 {
        padding-left: 9em;
        text-indent: -4em;
      }
      p.h6i0 {
        padding-left: 0em;
        text-indent:  6em;
      }
      p.h6i1 {
        padding-left: 1em;
        text-indent:  5em;
      }
      p.h6i2 {
        padding-left: 2em;
        text-indent:  4em;
      }
      p.h6i3 {
        padding-left: 3em;
        text-indent:  3em;
      }
      p.h6i4 {
        padding-left: 4em;
        text-indent:  2em;
      }
      p.h6i5 {
        padding-left: 5em;
        text-indent:  1em;
      }
      p.h6i6 {
        padding-left: 6em;
        text-indent:  0em;
      }
      p.h6i7 {
        padding-left: 7em;
        text-indent: -1em;
      }
      p.h6i8 {
        padding-left: 8em;
        text-indent: -2em;
      }
      p.h6i9 {
        padding-left: 9em;
        text-indent: -3em;
      }
      p.h7i0 {
        padding-left: 0em;
        text-indent:  7em;
      }
      p.h7i1 {
        padding-left: 1em;
        text-indent:  6em;
      }
      p.h7i2 {
        padding-left: 2em;
        text-indent:  5em;
      }
      p.h7i3 {
        padding-left: 3em;
        text-indent:  4em;
      }
      p.h7i4 {
        padding-left: 4em;
        text-indent:  3em;
      }
      p.h7i5 {
        padding-left: 5em;
        text-indent:  2em;
      }
      p.h7i6 {
        padding-left: 6em;
        text-indent:  1em;
      }
      p.h7i7 {
        padding-left: 7em;
        text-indent:  0em;
      }
      p.h7i8 {
        padding-left: 8em;
        text-indent: -1em;
      }
      p.h7i9 {
        padding-left: 9em;
        text-indent: -2em;
      }
      p.h8i0 {
        padding-left: 0em;
        text-indent:  8em;
      }
      p.h8i1 {
        padding-left: 1em;
        text-indent:  7em;
      }
      p.h8i2 {
        padding-left: 2em;
        text-indent:  6em;
      }
      p.h8i3 {
        padding-left: 3em;
        text-indent:  5em;
      }
      p.h8i4 {
        padding-left: 4em;
        text-indent:  4em;
      }
      p.h8i5 {
        padding-left: 5em;
        text-indent:  3em;
      }
      p.h8i6 {
        padding-left: 6em;
        text-indent:  2em;
      }
      p.h8i7 {
        padding-left: 7em;
        text-indent:  1em;
      }
      p.h8i8 {
        padding-left: 8em;
        text-indent:  0em;
      }
      p.h8i9 {
        padding-left: 9em;
        text-indent: -1em;
      }
      p.h9i0 {
        padding-left: 0em;
        text-indent:  9em;
      }
      p.h9i1 {
        padding-left: 1em;
        text-indent:  8em;
      }
      p.h9i2 {
        padding-left: 2em;
        text-indent:  7em;
      }
      p.h9i3 {
        padding-left: 3em;
        text-indent:  6em;
      }
      p.h9i4 {
        padding-left: 4em;
        text-indent:  5em;
      }
      p.h9i5 {
        padding-left: 5em;
        text-indent:  4em;
      }
      p.h9i6 {
        padding-left: 6em;
        text-indent:  3em;
      }
      p.h9i7 {
        padding-left: 7em;
        text-indent:  2em;
      }
      p.h9i8 {
        padding-left: 8em;
        text-indent:  1em;
      }
      p.h9i9 {
        padding-left: 9em;
        text-indent:  0em;
      }
      p.it0 {
        margin-left: 0em;
        margin-top: 6px;
        margin-bottom: 0px;
        line-height: 100%;
      }
      p.it1 {
        margin-left: 1em;
        margin-top: 0px;
        margin-bottom: 0px;
        line-height: 100%;
      }
      p.it2 {
        margin-left: 2em;
        margin-top: 0px;
        margin-bottom: 0px;
        line-height: 100%;
      }
      p.it3 {
        margin-left: 3em;
        margin-top: 0px;
        margin-bottom: 0px;
        line-height: 100%;
      }
      p.it4 {
        margin-left: 4em;
        margin-top: 0px;
        margin-bottom: 0px;
        line-height: 100%;
      }
      p.it5 {
        margin-left: 5em;
        margin-top: 0px;
        margin-bottom: 0px;
        line-height: 100%;
      }
      p.it6 {
        margin-left: 6em;
        margin-top: 0px;
        margin-bottom: 0px;
        line-height: 100%;
      }
      p.it7 {
        margin-left: 7em;
        margin-top: 0px;
        margin-bottom: 0px;
        line-height: 100%;
      }
      p.it8 {
        margin-left: 8em;
        margin-top: 0px;
        margin-bottom: 0px;
        line-height: 100%;
      }
      p.it9 {
        margin-left: 9em;
        margin-bottom: 0px;
        margin-top: 0px;
        line-height: 100%;
      }
      p.block { }
      p.group { }
      p.alt { }
      p.verse {
        margin-bottom: 6px;
      }
      p.code {
        font-family: inconsolata, andale mono, courier new, courier, monospace;
        font-size: 90%;
        text-align: left;
        background-color: #eeeeee;
      }
      p.caption {
        text-align: left;
        font-size: 80%;
        display: inline;
      }
      p.endnote {
        font-size: 96%;
        line-height: 120%;
        text-align: left;
        margin-right: 15mm;
      }
      p.endnote_indent {
        font-size: 96%;
        line-height: 120%;
        text-align: left;
        margin-left: 2em;
        margin-right: 15mm;
      }
      p.center {
        text-align: center;
      }
      p.bold {
        font-weight: bold;
      }
      p.bold_left {
        font-weight: bold;
        text-align: left;
      }
      p.centerbold {
        text-align: center;
        font-weight: bold;
      }
      p.em {
        font-weight: bold;
        font-style: normal;
        background: #fff3b6;
      }
      p.small {
        font-size: 80%;
        margin-top: 0px;
        margin-bottom: 0px;
        margin-right: 6px;
        text-align: left;
      }
      .tiny, .tiny_left, .tiny_right, .tiny_center {
        font-size: 10px;
        margin-top: 0px;
        margin-bottom: 0px;
        color: #777777;
        margin-right: 6px;
        text-align: left;
      }
      p.tiny { }
      p.tiny_left {
        margin-left: 0px;
        margin-right: 0px;
        text-align: left;
      }
      p.tiny_right {
        margin-right: 1em;
        text-align: right;
      }
      p.tiny_center {
        margin-left: 0px;
        margin-right: 0px;
        text-align: center;
      }
      p.pane, p.pane_title, p.pane_blurb, p.pane_link, p.pane_indent {
        font-size: 80%;
        margin-top: 0px;
        margin-bottom: 0px;
        margin-left: 2mm;
        margin-right: 4px;
        text-align: left;
      }
      p.pane { }
      p.pane_title {
        font-weight: bold;
        margin-bottom: 0px;
      }
      p.pane_blurb {
        font-size: 10px;
        margin-bottom: 0px;
      }
      p.pane_link {
        font-size: 10px;
        margin-bottom: 0px;
        margin-left: 4mm;
      }
      p.pane_indent {
        font-size: 10px;
        margin-bottom: 0px;
        margin-left: 4mm;
      }
      p.concordance_word {
        line-height: 150%;
        font-weight: bold;
        display: inline;
        margin-top: 4px;
        margin-bottom: 1px;
      }
      p.concordance_count {
        font-size: 80%;
        color: #777777;
        display: inline;
        margin-left: 0em;
      }
      p.concordance_object {
        font-size: 80%;
        line-height: 120%;
        text-align: left;
        margin-left: 3em;
        margin-top: 1px;
        margin-bottom: 3px;
      }
      p.book_index_lev1 {
        line-height: 100%;
        margin-top: 4px;
        margin-bottom: 1px;
      }
      p.book_index_lev2 {
        line-height: 100%;
        text-align: left;
        margin-left: 3em;
        margin-top: 1px;
        margin-bottom: 3px;
      }
      p.quickref {
        font-size: 10px;
        font-style: italic;
        margin-top: 0px;
        margin-bottom: 0px;
        color: #777777;
        margin-right: 5px;
        text-align: left;
      }
      p.bigref {
        font-size: 11px;
        font-weight: bold;
        margin-top: 0px;
        margin-bottom: 0px;
        color: #777777;
        margin-right: 5px;
        text-align: center;
      }
      p.letter {
        font-weight: bold;
        font-size: 80%;
        margin-left: 0em;
        margin-top: 2px;
        margin-bottom: 2px;
        margin-right: 6px;
        text-align: left;
        color: white;
        background: #880000;
      }
      tt {
        font-family: inconsolata, andale mono, courier new, courier, monospace;
        background-color: #eeeeee;
      }
      label.ocn {
        width: 2%;
        float: right;
        top: 0;
        font-size: 10px;
        margin-top: 0px;
        margin-bottom: 5px;
        color: #777777;
        margin-right: 5px;
        text-align: right;
        background-color: #ffffff;
      }
      table { }
      tr { }
      th,td {
        vertical-align: top;
        text-align: left;
      }
      th {
        font-weight: bold;
      }
      p.left,th.left,td.left {
        text-align: left;
      }
      p.small_left,th.small_left,td.small_left {
        text-align: left;
        font-size: 80%;
      }
      p.right,th.right,td.right {
        text-align: right;
      }
      #horizontal_links {
        background: #eeeeee;
        margin-left: 5%;
        margin-right: 5%;
      }
      #horizontal {
        margin: 0;
        padding: 0 0 0 10px;
        border-top: 1px solid #000077;
        border-bottom: 1px solid #000077;
      }
      #horizontal li {
        margin: 0 0 0 0;
        padding: 0 16px 0 0;
        display: inline;
        list-style-type: none;
        text-align: left;
        background: none;
      }
      #horizontal a {
        line-height: 12px;
        margin: 0 0 0 0;
        text-decoration: none;
        color: #000077;
      }
      #horizontal a.active, #horizontal a:hover {
        border-bottom: 2px solid #777777;
        padding-bottom: 2px;
        color: #000077;
      }
      #horizontal a:hover {
        color: #000077;
      }
      #document_versions {
        position: absolute;
        top: 10mm;
        right: 2%;
        width: 12%;
        float: right;
      }
      #vertical_links {
        position: absolute;
        top: 10mm;
        right: 0px;
        width: 20%;
        background: #dddddd;
        float: right;
      }
      #vertical {
        padding: 0 12px 0px 0px;
        margin-left: 2%;
        margin-right: 2%;
      }
      #vertical li {
        display: block;
        list-style-type: none;
      }
      #vertical a {
        line-height: 12px;
        text-decoration: none;
        color: #000077;
      }
      #vertical a.active, #vertical a:hover {
        border-bottom: 2px solid #777777;
        padding-bottom: 2px;
        color: #000077;
      }
      ul, li {
        list-style-type: none;
        list-style: none;
        padding-left: 20px;
        display: block;
        font-family: verdana, arial, georgia, tahoma, sans-serif, helvetica, times, roman;
        font-weight: normal;
        line-height: 150%;
        text-align: left;
        text-indent: 0mm;
        margin-left: 1em;
        margin-right: 2em;
        margin-top: 3px;
        margin-bottom: 3px;
      }
      li {
        background: url(../image_sys/bullet_09.png) no-repeat 0px 6px;
      }
      ul {
      }
      li.bullet { margin-left: 1em; }
      li.i1 { margin-left: 2em; }
      li.i2 { margin-left: 3em; }
      li.i3 { margin-left: 4em; }
      li.i4 { margin-left: 5em; }
      li.i5 { margin-left: 6em; }
      li.i6 { margin-left: 7em; }
      li.i7 { margin-left: 8em; }
      li.i8 { margin-left: 9em; }
      li.i9 { margin-left: 10em; }
      li.doc, li.ref, li.refcenter {
        margin-top: 0px;
        margin-bottom: 0px;
        margin-right: 0px;
        font-size: 8px;
        font-style: normal;
        text-align: left;
      }
      li.doc {
        background: url(../image_sys/bullet_09.png) no-repeat 0px 6px;
        padding-left: 16px;
        margin-left: 10px;
        margin-right: 0px;
      }
      li.ref {
        background: none;
        padding-left: 0;
        margin-left: 0;
        color: #777777;
      }
      li.refcenter {
        background: url(../image_sys/bullet_09.png) no-repeat 0px 6px;
        padding-left: 20px;
        margin-left: 10%;
        font-size: 9px;
        color: #777777;
        text-align: center;
      }
      li.refbold {
        list-style-type: none;
        padding-left: 16px;
        margin-left: 0;
        margin-right: 10mm;
        font-weight: bold;
      }
      h0, h1, h2, h3, h4, h5, h6, h7 {
        font-weight: bold;
        line-height: 120%;
        text-align: left;
        margin-top: 20px;
        margin-bottom: 10px;
      }
      h4.norm, h5.norm, h6.norm, h7.norm {
        margin-top: 10px;
        margin-bottom: 0px;
      }
      h0.center, h1.center, h2.center, h3.center, h4.center, h5.center, h6.center, h7.center {
        text-align: center;
      }
      h0 { font-size: 125%; }
      h1 { font-size: 120%; }
      h2 { font-size: 115%; }
      h3 { font-size: 110%; }
      h4 { font-size: 105%; }
      h5 { font-size: 100%; }
      h6 { font-size: 100%; }
      h7 { font-size: 100%; }
      h1.i {margin-left: 2em;}
      h2.i {margin-left: 3em;}
      h3.i {margin-left: 4em;}
      h4.i {margin-left: 5em;}
      h5.i {margin-left: 6em;}
      h6.i {margin-left: 7em;}
      h7.i {margin-left: 8em;}
      h8.i {margin-left: 9em;}
      h9.i {margin-left: 10em;}
      h1.top_band {
        display: inline;
        text-align: left;
        margin-top: 0;
        margin-left: 4mm;
        text-indent: 0mm;
        font-weight: bold;
        font-size: 120%;
      }
      h2.top_band_tiny {
        font-size: 10px;
        font-weight: normal;
        margin-top: 0px;
        margin-left: 4mm;
        text-indent: 0mm;
        margin-bottom: 0px;
        color: #777777;
        margin-left: 140px;
        margin-right: 0px;
        text-align: left;
      }
      p.top_band {
        display: inline;
        text-align: left;
        margin-top: 0;
        margin-left: 140px;
        text-indent: 0mm;
        font-weight: bold;
        font-size: 120%;
      }
      p.top_band_tiny {
        font-size: 10px;
        margin-top: 0px;
        margin-bottom: 0px;
        color: #777777;
        margin-left: 140px;
        margin-right: 0px;
        text-align: left;
      }
      p.top_band_image {
        float: left;
        display: inline;
        text-align: left;
        margin-top: 0;
        margin-left: 1mm;
        text-indent: 0mm;
        margin-right: 1mm;
      }
      .banner, .subbanner {
        font-weight: bold;
        text-align: center;
        margin-left: 10mm;
        margin-right: 15mm;
        margin-top: 20px;
        margin-bottom: 10px;
      }
      h0.banner {
        font-size: 125%;
      }
      h1.banner {
        font-size: 120%;
      }
      h1.subbanner {
        font-size: 115%;
      }
      h2.banner {
        font-size: 110%;
      }
      h3.banner {
        color: #990000;
        font-size: 105%;
      }
      h4.banner {
        color: #ff0000;
        font-size: 100%;
      }
      h5.banner {
      }
      h6.banner {
      }
      h7.banner {
      }
      .toc {
        font-weight: normal;
        margin-top: 6px;
        margin-bottom: 6px;
      }
      h0.toc {
        margin-left: 1em;
        font-size: 120%;
        line-height: 150%;
      }
      h1.toc {
        margin-left: 1em;
        font-size: 115%;
        line-height: 150%;
      }
      h2.toc {
        margin-left: 2em;
        font-size: 110%;
        line-height: 140%;
      }
      h3.toc {
        margin-left: 3em;
        font-size: 105%;
        line-height: 120%;
      }
      h4.toc {
        margin-left: 4em;
        font-size: 100%;
        line-height: 120%;
      }
      h5.toc {
        margin-left: 5em;
        font-size: 95%;
        line-height: 110%;
      }
      h6.toc {
        margin-left: 6em;
        font-size: 90%;
        line-height: 110%;
      }
      h7.toc {
        margin-left: 7em;
        font-size: 85%;
        line-height: 100%;
      }
      .microtoc {
        margin-top: 2px;
        margin-bottom: 2px;
      }
      h0.microtoc {
        margin-left: 0mm;
        font-size: 120%;
      }
      h1.microtoc {
        margin-left: 0mm;
        font-size: 115%;
      }
      h2.microtoc {
        margin-left: 5mm;
        font-size: 110%;
      }
      h3.microtoc {
        margin-left: 10mm;
        font-size: 105%;
      }
      h4.microtoc {
        margin-left: 15mm;
        font-weight: normal;
        font-size: 100%;
      }
      h5.microtoc {
        margin-left: 20mm;
        font-weight: normal;
        font-size: 95%;
      }
      h6.microtoc {
        margin-left: 25mm;
        font-weight: normal;
        font-size: 90%;
      }
      h7.microtoc {
        margin-left: 30mm;
        font-weight: normal;
        font-size: 85%;
      }
      .subtoc {
        margin-right: 34%;
        font-weight: normal;
      }
      h5.subtoc {
        margin-left: 2em;
        font-size: 80%;
        margin-top: 2px;
        margin-bottom: 2px;
      }
      h6.subtoc {
        margin-left: 3em;
        font-size: 75%;
        margin-top: 0px;
        margin-bottom: 0px;
      }
      h7.subtoc {
        margin-left: 4em;
        font-size: 70%;
        margin-top: 0px;
        margin-bottom: 0px;
      }
      div.substance {
        width: 100%;
        background-color: #ffffff;
      }
      div.ocn {
        width: 5%;
        float: right;
        top: 0;
        background-color: #ffffff;
      }
      div.endnote {
        width: 95%;
        background-color: #fffffff;
      }
      div.toc {
        position: absolute;
        float: left;
        margin: 0;
        padding: 0;
        padding-top: 0.5em;
        border: 0;
        width: 13em;
        background-color: #eeeeee;
        margin-right:1em;
      }
      div.summary {
        margin: 0;
        padding: 0;
        border-left: 13em solid #eeeeee;
        padding-left: 1em;
        background-color: #eeeeee;
      }
      div.content, div.main_column {
        margin: 0;
        padding: 0;
        border-left: 13em solid #ffffff;
        padding-left: 1em;
        padding-right: 1em;
      }
      div.content0, div.main_column0 {
        margin: 0;
        padding: 0;
        border-left: 0% solid #ffffff;
        padding-left: 5%;
      }
      div.scroll {
        margin: 0;
        padding: 0;
        padding-left: 1em;
        padding-right: 1em;
      }
      div.content:after {
        content:' ';
        clear:both;
        display:block;
        height:0;
        overflow:hidden
      }
      div.footer {
        clear:left;
        padding: 0.5em;
        font-size: 80%;
        margin: 0;
      }
      div.toc ul {
        list-style: none;
        padding: 0;
        margin: 0;
      }
      div.toc li ul a, li ul span.currentlink
      {
        font-weight: normal;
        font-size: 90%;
        padding-left: 2em;
        background-color: #eeeeee;
      }
      div.toc a, span.currentlink{
        display:block;
        text-decoration: none;
        padding-left: 0.5em;
        color: #0000aa;
      }
      hr {
        width: 90%;
      }
      span.currentlink {
        text-decoration: none;
        background-color: #aaaaf9;
      }
      div.toc a:visited {
        color: #0000aa;
      }
      div.toc a:hover {
        color: #000000;
        background-color: #f9f9aa;
      }
      .minitoc {
        font-weight: normal;
        margin-top: 2px;
        margin-bottom: 2px;
      }
      h1.minitoc, h2.minitoc, h3.minitoc {
        margin-left: 0em;
        font-weight: bold;
        text-align: left;
        font-size: 90%;
        margin-top: 4px;
        margin-bottom: 4px;
      }
      h4.minitoc {
        margin-left: 0em;
        font-size: 90%;
      }
      h5.minitoc {
        margin-left: 1em;
        font-size: 85%;
      }
      h6.minitoc {
        margin-left: 2em;
        font-size: 85%;
      }
      h7.minitoc {
        margin-left: 3em;
        font-size: 80%;
      }
      h0.minitoc {
        margin-left: 0em;
        font-size: 90%;
      }
      h0.c, h1.c, h2.c, h3.c, h4.c, h5.c, h6.c, h7.c, p.c {
        text-align: center
      }
      h1.red, h2.red, h3.red, h4.red, h5.red, h6.red, h7.red {
        text-align: center;
        color: #ff0000;
        margin-left: 5mm;
        text-indent: 5mm;
        margin-top: 30px;
        margin-bottom: 20px;
        margin-right: 15mm;
      }
      h1.ruby, h2.ruby, h3.ruby, h4.ruby, h5.ruby, h6.ruby, h7.ruby {
        text-align: center;
        color: #990000;
        margin-left: 5mm;
        text-indent: 5mm;
        margin-top: 30px;
        margin-bottom: 20px;
        margin-right: 15mm;
      }";
      return css;
    }
    auto css_write() {
      auto pth_css= "_sisu/css";
      auto pth_css_fn= pth_css ~ "/html.css";
      try {
        mkdirRecurse(pth_css);
        auto f = File(pth_css_fn, "w");
        f.writeln(html_css);
        // foreach (o; doc) {
        //   f.writeln(o);
        // }
      }
      catch (ErrnoException ex) {
        // Handle error
      }
    }
  }
}