diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/sdp/output_epub.d | 669 | ||||
| -rw-r--r-- | src/sdp/output_html.d | 3154 | ||||
| -rw-r--r-- | src/sdp/output_hub.d | 41 | ||||
| -rw-r--r-- | src/sdp/source_sisupod.d | 105 | 
4 files changed, 2001 insertions, 1968 deletions
| diff --git a/src/sdp/output_epub.d b/src/sdp/output_epub.d index 4c23600..cffa560 100644 --- a/src/sdp/output_epub.d +++ b/src/sdp/output_epub.d @@ -1,367 +1,384 @@  template outputEPub() { -  struct outputEPub { -    mixin InternalMarkup; -    mixin outputXHTMLs; -    string epub_mimetypes() { -      string o; -      o = format(q"¶application/epub+zip¶"); -      return o; -    } -    string epub_container_xml() { -      string o; -      o = format(q"¶<?xml version='1.0' encoding='utf-8'?> -    <container version="1.0" -      xmlns="urn:oasis:names:tc:opendocument:xmlns:container"> -      <rootfiles> -        <rootfile full-path="OEBPS/content.opf" -          media-type="application/oebps-package+xml" /> -      </rootfiles> -    </container>¶"); -      return o; -    } -    string epub_oebps_content( -      // string[string][string]   dochead_meta, -    ) { -      // string[] toc; -      // int counter = 0; -      string uuid = "18275d951861c77f78acd05672c9906924c59f18a2e0ba06dad95959693e9bd8"; // TODO shared elsewhere -      string content = format(q"¶<?xml version='1.0' encoding='utf-8'?> -    <?xml version='1.0' encoding='utf-8'?> -    <package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="EPB-UUID"> -      <opf:metadata -        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" -        xmlns:opf="http://www.idpf.org/2007/opf" -        xmlns:dcterms="http://purl.org/dc/terms/" -        xmlns:dc="http://purl.org/dc/elements/1.1/" -        unique-identifier="urn:uuid:%s" version="2.0"> -        <dc:title>%s</dc:title> -        <dc:creator opf:file-as="%s" opf:role="aut">%s</dc:creator> -        <dc:language>en</dc:language> -        <dc:date opf:event="published">%s</dc:date> -        <dc:rights>Copyright: %s</dc:rights> -        <dc:identifier opf:scheme="URI">ox/current/en/epub/sisu_markup.epub</dc:identifier> -        <dc:identifier id="bookid">urn:uuid:%s</dc:identifier> -        <!-- <dc:identifier id="EPB-UUID">urn:uuid:%s</dc:identifier> --> -      </opf:metadata> -      <manifest> -        <!-- NCX --> -        <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" /> -        <!-- CSS Style Sheets --> -        <item id="main-css" href="css/xhtml.css" media-type="text/css" />¶", -        uuid, -        doc_matters.dochead_meta["title"]["full"],                                                               // title -        (doc_matters.dochead_meta["creator"]["author"].empty) ? "" : " by " ~ doc_matters.dochead_meta["creator"]["author"], // author -        (doc_matters.dochead_meta["creator"]["author"].empty) ? "" : " by " ~ doc_matters.dochead_meta["creator"]["author"], // author -        (doc_matters.dochead_meta["date"]["published"].empty) ? "" : " by " ~ doc_matters.dochead_meta["date"]["published"],  // date -        (doc_matters.dochead_meta["rights"]["copyright"].empty) ? "" : " by " ~ doc_matters.dochead_meta["rights"]["copyright"],  // rights -        uuid, -        uuid, -      ); -      foreach (sect; doc_matters.keys_seq_seg) { -        foreach (obj; contents[sect]) { -        } +  private import +    std.algorithm, +    std.array, +    std.container, +    std.exception, +    std.file, +    std.getopt, +    std.json, +    std.process, +    std.stdio, +    std.path, +    std.range, +    std.regex, +    std.string, +    std.traits, +    std.typecons, +    std.uni, +    std.utf, +    ao_defaults; +  import +    ao_rgx, +    output_xhtmls; +  mixin InternalMarkup; +  mixin outputXHTMLs; +  string epub_mimetypes() { +    string o; +    o = format(q"¶application/epub+zip¶"); +    return o; +  } +  string epub_container_xml() { +    string o; +    o = format(q"¶<?xml version='1.0' encoding='utf-8'?> +  <container version="1.0" +    xmlns="urn:oasis:names:tc:opendocument:xmlns:container"> +    <rootfiles> +      <rootfile full-path="OEBPS/content.opf" +        media-type="application/oebps-package+xml" /> +    </rootfiles> +  </container>¶"); +    return o; +  } +  string epub_oebps_content(C,M)(C contents, M doc_matters) { +    string uuid = "18275d951861c77f78acd05672c9906924c59f18a2e0ba06dad95959693e9bd8"; // TODO shared elsewhere +    string content = format(q"¶<?xml version='1.0' encoding='utf-8'?> +  <?xml version='1.0' encoding='utf-8'?> +  <package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="EPB-UUID"> +    <opf:metadata +      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" +      xmlns:opf="http://www.idpf.org/2007/opf" +      xmlns:dcterms="http://purl.org/dc/terms/" +      xmlns:dc="http://purl.org/dc/elements/1.1/" +      unique-identifier="urn:uuid:%s" version="2.0"> +      <dc:title>%s</dc:title> +      <dc:creator opf:file-as="%s" opf:role="aut">%s</dc:creator> +      <dc:language>en</dc:language> +      <dc:date opf:event="published">%s</dc:date> +      <dc:rights>Copyright: %s</dc:rights> +      <dc:identifier opf:scheme="URI">ox/current/en/epub/sisu_markup.epub</dc:identifier> +      <dc:identifier id="bookid">urn:uuid:%s</dc:identifier> +      <!-- <dc:identifier id="EPB-UUID">urn:uuid:%s</dc:identifier> --> +    </opf:metadata> +    <manifest> +      <!-- NCX --> +      <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" /> +      <!-- CSS Style Sheets --> +      <item id="main-css" href="css/xhtml.css" media-type="text/css" />¶", +      uuid, +      doc_matters.dochead_meta["title"]["full"],                                                               // title +      (doc_matters.dochead_meta["creator"]["author"].empty) ? "" : " by " ~ doc_matters.dochead_meta["creator"]["author"], // author +      (doc_matters.dochead_meta["creator"]["author"].empty) ? "" : " by " ~ doc_matters.dochead_meta["creator"]["author"], // author +      (doc_matters.dochead_meta["date"]["published"].empty) ? "" : " by " ~ doc_matters.dochead_meta["date"]["published"],  // date +      (doc_matters.dochead_meta["rights"]["copyright"].empty) ? "" : " by " ~ doc_matters.dochead_meta["rights"]["copyright"],  // rights +      uuid, +      uuid, +    ); +    foreach (sect; doc_matters.keys_seq_seg) { +      foreach (obj; contents[sect]) {        } -      return content;      } -    string epub_oebps_toc() { -      int counter = 0; -      string uuid = "18275d951861c77f78acd05672c9906924c59f18a2e0ba06dad95959693e9bd8"; // TODO shared elsewhere -      auto markup = InlineMarkup(); -      enum DomTags { none, open, close, close_and_open, open_still, } -      string toc = format(q"¶<?xml version='1.0' encoding='utf-8'?> -    <ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1"> -      <head> -        <!-- four required metadata items (for all NCX documents, -          (including the relaxed constraints of OPS 2.0) --> -        <title>%s%s</title> -        <link href="css/xhtml.css" rel="stylesheet" type="text/css" id="main-css" /> -        <meta name="dtb:uid" content="urn:uuid:%s" /> -        <!-- <meta name="epub-creator" content="SiSU http://www.jus.uio.no/sisu (this copy)" /> --> -        <meta name="dtb:depth" content="%s" /> -        <meta name="dtb:totalPageCount" content="0" /> -        <meta name="dtb:maxPageNumber" content="0" /> -      </head> -      <docTitle> -        <text>%s</text> -      </docTitle> -      <docAuthor> -        <text>%s</text> -      </docAuthor> -      <navMap>¶", -        doc_matters.dochead_meta["title"]["full"],                                                               // title -        (doc_matters.dochead_meta["creator"]["author"].empty) ? "" : " by " ~ doc_matters.dochead_meta["creator"]["author"], // author -        uuid,                                                                                        // uuid -        "3",                                                                                         // content depth -        doc_matters.dochead_meta["title"]["full"],                                                               // title -        (doc_matters.dochead_meta["creator"]["author"].empty) ? "" : doc_matters.dochead_meta["creator"]["author"],          // author -      ); -      foreach (sect; doc_matters.keys_seq_seg) { -        foreach (obj; contents[sect]) { -          if (obj.is_a == "heading") { -            foreach_reverse (k; 0 .. 7) { -              switch (obj.dom_markedup[k]) { -              case DomTags.close : -                writeln(markup.indent_by_spaces_provided(k), "</", k, ">"); -    toc ~= "</navPoint>"; -                break; -              case DomTags.close_and_open : -                writeln(markup.indent_by_spaces_provided(k), "</", k, ">"); -                writeln(markup.indent_by_spaces_provided(k), "<", k, ">", obj.text); -                ++counter; -    toc ~= "</navPoint>"; -    toc ~= format(q"¶<navPoint class="chapter" id="navpoint" playOrder="%s"> -    <navLabel> +    return content; +  } +  string epub_oebps_toc(C,M)(C contents, M doc_matters) { +    int counter = 0; +    string uuid = "18275d951861c77f78acd05672c9906924c59f18a2e0ba06dad95959693e9bd8"; // TODO shared elsewhere +    auto markup = InlineMarkup(); +    enum DomTags { none, open, close, close_and_open, open_still, } +    string toc = format(q"¶<?xml version='1.0' encoding='utf-8'?> +  <ncx xmlns="http://www.daisy.org/z3986/2005/ncx/" version="2005-1"> +    <head> +      <!-- four required metadata items (for all NCX documents, +        (including the relaxed constraints of OPS 2.0) --> +      <title>%s%s</title> +      <link href="css/xhtml.css" rel="stylesheet" type="text/css" id="main-css" /> +      <meta name="dtb:uid" content="urn:uuid:%s" /> +      <!-- <meta name="epub-creator" content="SiSU http://www.jus.uio.no/sisu (this copy)" /> --> +      <meta name="dtb:depth" content="%s" /> +      <meta name="dtb:totalPageCount" content="0" /> +      <meta name="dtb:maxPageNumber" content="0" /> +    </head> +    <docTitle>        <text>%s</text> -    </navLabel> -    <content src="%s" />¶", -    counter, -    obj.text, -    obj.segment_anchor_tag,   // lev < 4 [no link]; lev == 4 [filename] markup.xhtml; lev > 4 [filename#ocn] (links done in segment_anchor_tag) -    ); -                break; -              case DomTags.open : -                writeln(markup.indent_by_spaces_provided(k), "<", k, ">", obj.text); -                ++counter; -    toc ~= format(q"¶<navPoint class="chapter" id="navpoint" playOrder="%s"> -    <navLabel> +    </docTitle> +    <docAuthor>        <text>%s</text> -    </navLabel> -    <content src="%s" />¶", -    counter, -    obj.text, -    obj.segment_anchor_tag,   // lev < 4 [no link]; lev == 4 [filename] markup.xhtml; lev > 4 [filename#ocn] (fix links in segment_anchor_tag) +    </docAuthor> +    <navMap>¶", +      doc_matters.dochead_meta["title"]["full"],                                                               // title +      (doc_matters.dochead_meta["creator"]["author"].empty) ? "" : " by " ~ doc_matters.dochead_meta["creator"]["author"], // author +      uuid,                                                                                        // uuid +      "3",                                                                                         // content depth +      doc_matters.dochead_meta["title"]["full"],                                                               // title +      (doc_matters.dochead_meta["creator"]["author"].empty) ? "" : doc_matters.dochead_meta["creator"]["author"],          // author      ); -                break; -              default : -                break; -              } +    foreach (sect; doc_matters.keys_seq_seg) { +      foreach (obj; contents[sect]) { +        if (obj.is_a == "heading") { +          foreach_reverse (k; 0 .. 7) { +            switch (obj.dom_markedup[k]) { +            case DomTags.close : +              writeln(markup.indent_by_spaces_provided(k), "</", k, ">"); +  toc ~= "</navPoint>"; +              break; +            case DomTags.close_and_open : +              writeln(markup.indent_by_spaces_provided(k), "</", k, ">"); +              writeln(markup.indent_by_spaces_provided(k), "<", k, ">", obj.text); +              ++counter; +  toc ~= "</navPoint>"; +  toc ~= format(q"¶<navPoint class="chapter" id="navpoint" playOrder="%s"> +  <navLabel> +    <text>%s</text> +  </navLabel> +  <content src="%s" />¶", +  counter, +  obj.text, +  obj.segment_anchor_tag,   // lev < 4 [no link]; lev == 4 [filename] markup.xhtml; lev > 4 [filename#ocn] (links done in segment_anchor_tag) +  ); +              break; +            case DomTags.open : +              writeln(markup.indent_by_spaces_provided(k), "<", k, ">", obj.text); +              ++counter; +  toc ~= format(q"¶<navPoint class="chapter" id="navpoint" playOrder="%s"> +  <navLabel> +    <text>%s</text> +  </navLabel> +  <content src="%s" />¶", +  counter, +  obj.text, +  obj.segment_anchor_tag,   // lev < 4 [no link]; lev == 4 [filename] markup.xhtml; lev > 4 [filename#ocn] (fix links in segment_anchor_tag) +  ); +              break; +            default : +              break;              }            }          }        } -      toc ~= format(q"¶  </navMap> -    </ncx>¶"); -      return toc;      } -     -    void doc_content(C,T)( -      auto ref const C         contents, -      auto ref T               doc_matters, -    ) { -      auto xhtml_format = outputXHTMLs(); -      auto rgx = Rgx(); -      // string[] toc; -      string[][string] doc_epub; -      string[] doc; -      string segment_filename; -      string[] top_level_headings = ["","","",""]; -      auto mimetypes = epub_mimetypes; -      auto meta_inf_container_xml = epub_container_xml; -      auto oebps_toc_ncx = epub_oebps_toc; -      auto oebps_content_opf = epub_oebps_content; -      foreach (part; doc_matters.keys_seq_seg) { -        foreach (obj; contents[part]) { -          if (obj.is_a == "heading") { +    toc ~= format(q"¶  </navMap> +  </ncx>¶"); +    return toc; +  } +   +  void outputEPub(C,T)( +    auto ref const C         contents, +    auto ref T               doc_matters, +  ) { +    mixin SiSUrgxInit; +    auto xhtml_format = outputXHTMLs(); +    auto rgx = Rgx(); +    // string[] toc; +    string[][string] doc_epub; +    string[] doc; +    string segment_filename; +    string[] top_level_headings = ["","","",""]; +    auto mimetypes = epub_mimetypes; +    auto meta_inf_container_xml = epub_container_xml; +    auto oebps_toc_ncx = epub_oebps_toc(contents, doc_matters); +    auto oebps_content_opf = epub_oebps_content(contents, doc_matters); +    foreach (part; doc_matters.keys_seq_seg) { +      foreach (obj; contents[part]) { +        if (obj.is_a == "heading") { +          switch (obj.heading_lev_markup) { +          // case 0: +          //   break; +          case 0: .. case 3: +            /+ fill buffer, and replace with new levels from 1 to 3 +/              switch (obj.heading_lev_markup) { -            // case 0: -            //   break; -            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); -                break; -              } -              break; -            case 4: -              segment_filename = obj.segment_anchor_tag; -              doc_epub[segment_filename] ~= xhtml_format.seg_head(doc_matters.dochead_meta); -              foreach (top_level_heading; top_level_headings) { -                // writeln(top_level_heading); -                doc_epub[segment_filename] ~= top_level_heading; -              } -              doc_epub[segment_filename] ~= xhtml_format.heading(obj); -              break; -            case 5: .. case 7: -              doc_epub[segment_filename] ~= xhtml_format.heading(obj); +            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);                break; +            } +            break; +          case 4: +            segment_filename = obj.segment_anchor_tag; +            doc_epub[segment_filename] ~= xhtml_format.seg_head(doc_matters.dochead_meta); +            foreach (top_level_heading; top_level_headings) { +              // writeln(top_level_heading); +              doc_epub[segment_filename] ~= top_level_heading; +            } +            doc_epub[segment_filename] ~= xhtml_format.heading(obj); +            break; +          case 5: .. case 7: +            doc_epub[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_epub[segment_filename] ~= xhtml_format.toc(obj); +            //   doc_epub ~= xhtml_toc(obj); +            break;              default: -              writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); +              // writeln(__FILE__, ":", __LINE__, ": ", obj.is_a);                break;              } -          } else if (obj.use == "frontmatter") { -            switch (obj.is_of) { +            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": -              switch (obj.is_a) { -              case "toc": -                  doc_epub[segment_filename] ~= xhtml_format.toc(obj); -              //   doc_epub ~= xhtml_toc(obj); -              break; -              default: -                // writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); -                break; -              } +              doc_epub[segment_filename] ~= xhtml_format.para(obj);                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_epub[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_epub[segment_filename] ~= xhtml_format.nugget(obj); +              // doc_epub ~= xhtml_verse(obj); +              break; +            case "group": +              doc_epub[segment_filename] ~= xhtml_format.nugget(obj); +              // doc_epub ~= xhtml_group(obj);                break;              case "block": -              switch (obj.is_a) { -              case "poem":                        // double check why both poem & verse -                break; -              case "verse": -                doc_epub[segment_filename] ~= xhtml_format.nugget(obj); -                // doc_epub ~= xhtml_verse(obj); -                break; -              case "group": -                doc_epub[segment_filename] ~= xhtml_format.nugget(obj); -                // doc_epub ~= xhtml_group(obj); -                break; -              case "block": -                doc_epub[segment_filename] ~= xhtml_format.nugget(obj); -                // doc_epub ~= xhtml_block(obj); -                break; -              case "quote": -                doc_epub[segment_filename] ~= xhtml_format.nugget(obj); -                // doc_epub ~= xhtml_quote(obj); -                break; -              case "table": -                doc_epub[segment_filename] ~= xhtml_format.para(obj); // -                // doc_epub ~= xhtml_table(obj); -                break; -              case "code": -                doc_epub[segment_filename] ~= xhtml_format.code(obj); -                break; -              default: -                writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); -                break; -              } +              doc_epub[segment_filename] ~= xhtml_format.nugget(obj); +              // doc_epub ~= xhtml_block(obj); +              break; +            case "quote": +              doc_epub[segment_filename] ~= xhtml_format.nugget(obj); +              // doc_epub ~= xhtml_quote(obj); +              break; +            case "table": +              doc_epub[segment_filename] ~= xhtml_format.para(obj); // +              // doc_epub ~= xhtml_table(obj); +              break; +            case "code": +              doc_epub[segment_filename] ~= xhtml_format.code(obj);                break;              default: -              // writeln(__FILE__, ":", __LINE__, ": ", obj.is_of); +              writeln(__FILE__, ":", __LINE__, ": ", obj.is_a);                break;              } -          } else if (obj.use == "backmatter") { -            switch (obj.is_of) { -            case "para": -              switch (obj.is_a) { -              case "endnote": -                doc_epub[segment_filename] ~= xhtml_format.endnote(obj); -                break; -              case "glossary": -                doc_epub[segment_filename] ~= xhtml_format.para(obj); -                break; -              case "bibliography": -                doc_epub[segment_filename] ~= xhtml_format.para(obj); -                break; -              case "bookindex": -                doc_epub[segment_filename] ~= xhtml_format.para(obj); -                break; -              case "blurb": -                doc_epub[segment_filename] ~= xhtml_format.para(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_epub[segment_filename] ~= xhtml_format.endnote(obj); +              break; +            case "glossary": +              doc_epub[segment_filename] ~= xhtml_format.para(obj); +              break; +            case "bibliography": +              doc_epub[segment_filename] ~= xhtml_format.para(obj); +              break; +            case "bookindex": +              doc_epub[segment_filename] ~= xhtml_format.para(obj); +              break; +            case "blurb": +              doc_epub[segment_filename] ~= xhtml_format.para(obj);                break;              default: -              writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); +              // writeln(__FILE__, ":", __LINE__, ": ", obj.is_a);                break;              } +            break; +          default: +            writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); +            break;            }          }        } -      writeln(doc_matters.keys_seq_seg); -      epub_write_output_files( -        doc_matters, -        doc_epub, -        mimetypes, -        meta_inf_container_xml, -        oebps_toc_ncx, -        oebps_content_opf, -      );      } -    void epub_write_output_files(C,EpD,Mt,Mic,Ot,Oc)( -      C   doc_matters, -      EpD doc_epub, -      Mt  mimetypes, -      Mic meta_inf_container_xml, -      Ot  oebps_toc_ncx, -      Oc  oebps_content_opf, -    ) { -      debug(asserts){ -        static assert(is(typeof(doc_epub)               == string[][string])); -        static assert(is(typeof(mimetypes)              == string)); -        static assert(is(typeof(meta_inf_container_xml) == string)); -        static assert(is(typeof(oebps_toc_ncx)          == string)); -        static assert(is(typeof(oebps_content_opf)      == string)); -      } -      mixin SiSUpaths; -      auto pth_epub = EpubPaths(); -      // doc = xhtml_format.scroll_head ~ doc_epub ~  xhtml_format.tail; -      auto xhtml_format = outputXHTMLs(); -      try { -        mkdirRecurse(pth_epub.doc_meta_inf(doc_matters.source_filename)); -        mkdirRecurse(pth_epub.doc_oebps_css(doc_matters.source_filename)); -        mkdirRecurse(pth_epub.doc_oebps_image(doc_matters.source_filename)); -        /+ OEBPS/[segments].xhtml +/ -        foreach (seg_filename; doc_matters.segnames) { -          auto f = File(pth_epub.fn_oebps_content_xhtml(doc_matters.source_filename, seg_filename), "w"); -          /+ // f.writeln(seg_head); // not needed built and inserted earlier +/ -          foreach (docseg; doc_epub[seg_filename]) { -            f.writeln(docseg); -          } -          f.writeln(xhtml_format.tail); // needed for each lev4 +    writeln(doc_matters.keys_seq_seg); +    epub_write_output_files( +      doc_matters, +      doc_epub, +      mimetypes, +      meta_inf_container_xml, +      oebps_toc_ncx, +      oebps_content_opf, +    ); +  } +  void epub_write_output_files(C,EpD,Mt,Mic,Ot,Oc)( +    C   doc_matters, +    EpD doc_epub, +    Mt  mimetypes, +    Mic meta_inf_container_xml, +    Ot  oebps_toc_ncx, +    Oc  oebps_content_opf, +  ) { +    debug(asserts){ +      static assert(is(typeof(doc_epub)               == string[][string])); +      static assert(is(typeof(mimetypes)              == string)); +      static assert(is(typeof(meta_inf_container_xml) == string)); +      static assert(is(typeof(oebps_toc_ncx)          == string)); +      static assert(is(typeof(oebps_content_opf)      == string)); +    } +    mixin SiSUpaths; +    auto pth_epub = EpubPaths(); +    // doc = xhtml_format.scroll_head ~ doc_epub ~  xhtml_format.tail; +    auto xhtml_format = outputXHTMLs(); +    try { +      mkdirRecurse(pth_epub.doc_meta_inf(doc_matters.source_filename)); +      mkdirRecurse(pth_epub.doc_oebps_css(doc_matters.source_filename)); +      mkdirRecurse(pth_epub.doc_oebps_image(doc_matters.source_filename)); +      /+ OEBPS/[segments].xhtml +/ +      foreach (seg_filename; doc_matters.segnames) { +        auto f = File(pth_epub.fn_oebps_content_xhtml(doc_matters.source_filename, seg_filename), "w"); +        /+ // f.writeln(seg_head); // not needed built and inserted earlier +/ +        foreach (docseg; doc_epub[seg_filename]) { +          f.writeln(docseg);          } -        /+ mimetypes +/ -        auto f = File(pth_epub.fn_mimetypes(doc_matters.source_filename), "w"); -        f.writeln(mimetypes); -        /+  META-INF/container.xml +/ -        f = File(pth_epub.fn_dmi_container_xml(doc_matters.source_filename), "w"); -        f.writeln(meta_inf_container_xml); -        /+ OEBPS/toc.ncx +/ -        f = File(pth_epub.fn_oebps_toc_ncx(doc_matters.source_filename), "w"); -        f.writeln(oebps_toc_ncx); -        /+ OEBPS/content.opf +/ -        f = File(pth_epub.fn_oebps_content_opf(doc_matters.source_filename), "w"); -        f.writeln(oebps_content_opf); -      } -      catch (ErrnoException ex) { -        // Handle error +        f.writeln(xhtml_format.tail); // needed for each lev4        } +      /+ mimetypes +/ +      auto f = File(pth_epub.fn_mimetypes(doc_matters.source_filename), "w"); +      f.writeln(mimetypes); +      /+  META-INF/container.xml +/ +      f = File(pth_epub.fn_dmi_container_xml(doc_matters.source_filename), "w"); +      f.writeln(meta_inf_container_xml); +      /+ OEBPS/toc.ncx +/ +      f = File(pth_epub.fn_oebps_toc_ncx(doc_matters.source_filename), "w"); +      f.writeln(oebps_toc_ncx); +      /+ OEBPS/content.opf +/ +      f = File(pth_epub.fn_oebps_content_opf(doc_matters.source_filename), "w"); +      f.writeln(oebps_content_opf); +    } +    catch (ErrnoException ex) { +      // Handle error      } -        } +    } diff --git a/src/sdp/output_html.d b/src/sdp/output_html.d index 0406b3c..384576b 100644 --- a/src/sdp/output_html.d +++ b/src/sdp/output_html.d @@ -1,1618 +1,1642 @@  template outputHTML() { -  struct outputHTML { -    mixin outputXHTMLs; -     -    void scroll_write_output_file(Fn,C)( -      Fn fn_src, -      C doc, -    ) { -      debug(asserts){ -        static assert(is(typeof(fn_src) == string)); -        static assert(is(typeof(doc)    == string[])); -      } -      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 +  private import +    std.algorithm, +    std.array, +    std.container, +    std.exception, +    std.file, +    std.getopt, +    std.json, +    std.process, +    std.stdio, +    std.path, +    std.range, +    std.regex, +    std.string, +    std.traits, +    std.typecons, +    std.uni, +    std.utf, +    ao_defaults; +  import +    ao_rgx, +    output_xhtmls; +  mixin outputXHTMLs; +   +  void scroll_write_output_file(Fn,C)( +    Fn fn_src, +    C doc, +  ) { +    debug(asserts){ +      static assert(is(typeof(fn_src) == string)); +      static assert(is(typeof(doc)    == string[])); +    } +    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);        }      } -    void scroll(C,T)( -      auto ref const C         contents, -      auto ref T               doc_matters, -    ) { -      auto xhtml_format = outputXHTMLs(); -      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; -              } +    catch (ErrnoException ex) { +      // Handle error +    } +  } +  void scroll(C,T)( +    auto ref const C         contents, +    auto ref T               doc_matters, +  ) { +    mixin SiSUrgxInit; +    auto xhtml_format = outputXHTMLs(); +    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;              } -          } else if (obj.use == "body") { -            switch (obj.is_of) { +            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": -              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; -              } +              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": -              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; -              } +              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_of); +              writeln(__FILE__, ":", __LINE__, ": ", obj.is_a);                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_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(M,C)( -      M doc_matters, -      C doc_html, -    ) { -      debug(asserts){ -        static assert(is(typeof(doc_html)      == string[][string])); -      } -      mixin SiSUpaths; -      auto pth_html = HtmlPaths(); -      auto xhtml_format = outputXHTMLs(); -      auto m = matchFirst(doc_matters.source_filename, rgx.src_fn); -      try { -        mkdirRecurse(pth_html.seg(doc_matters.source_filename)); -        foreach (seg_filename; doc_matters.segnames) { -          // writeln(__LINE__, ": ", fn); -          auto f = File(pth_html.fn_seg(doc_matters.source_filename, 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 +    } +    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(M,C)( +    M doc_matters, +    C doc_html, +  ) { +    debug(asserts){ +      static assert(is(typeof(doc_html)      == string[][string])); +    } +    mixin SiSUrgxInit; +    auto rgx = Rgx(); +    mixin SiSUpaths; +    auto pth_html = HtmlPaths(); +    auto xhtml_format = outputXHTMLs(); +    auto m = matchFirst(doc_matters.source_filename, rgx.src_fn); +    try { +      mkdirRecurse(pth_html.seg(doc_matters.source_filename)); +      foreach (seg_filename; doc_matters.segnames) { +        // writeln(__LINE__, ": ", fn); +        auto f = File(pth_html.fn_seg(doc_matters.source_filename, seg_filename), "w"); +        /+ // f.writeln(seg_head); // not needed built and inserted earlier +/ +        foreach (docseg; doc_html[seg_filename]) { +          f.writeln(docseg);          } -      } -      catch (ErrnoException ex) { -        // Handle error +        f.writeln(xhtml_format.tail); // needed for each lev4        }      } -    void seg(C,M)( -      auto ref const C         contents, -      auto ref M               doc_matters, -    ) { -      auto xhtml_format = outputXHTMLs(); -      auto rgx = Rgx(); -      string[][string] doc_html; -      string[] doc; -      string segment_filename; -      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 +    catch (ErrnoException ex) { +      // Handle error +    } +  } +  void seg(C,M)( +    auto ref const C         contents, +    auto ref M               doc_matters, +  ) { +    mixin SiSUrgxInit; +    auto rgx = Rgx(); +    auto xhtml_format = outputXHTMLs(); +    string[][string] doc_html; +    string[] doc; +    string segment_filename; +    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: .. 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: -              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); +            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: +            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); +              // writeln(__FILE__, ":", __LINE__, ": ", obj.is_a);                break;              } -          } else if (obj.use == "frontmatter") { -            switch (obj.is_of) { +            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": -              switch (obj.is_a) { -              case "toc": -                  doc_html[segment_filename] ~= xhtml_format.toc(obj); -              break; -              default: -                // writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); -                break; -              } +              doc_html[segment_filename] ~= xhtml_format.para(obj);                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": -              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; -              } +              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_of); +              writeln(__FILE__, ":", __LINE__, ": ", obj.is_a);                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_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); +              // 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, 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 -      } +    } +    writeln(doc_matters.keys_seq_seg); +    seg_write_output_files(doc_matters, 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      }    }  } diff --git a/src/sdp/output_hub.d b/src/sdp/output_hub.d index f17a007..fe53bdb 100644 --- a/src/sdp/output_hub.d +++ b/src/sdp/output_hub.d @@ -10,7 +10,6 @@ template outputHub() {      std.container,      std.exception,      std.getopt, -    std.json,      std.process,      std.stdio,      std.file, @@ -38,9 +37,7 @@ template outputHub() {        writeln("source");      }      if (doc_matters.opt_action_bool["sisupod"]) { -      mixin SiSUpod; -      auto sisupod=SiSUpod(); -      sisupod.sisupod_assemble(doc_matters.source_filename); +      SiSUpod!()(doc_matters.source_filename);        writeln("sisupod source");      }      if (doc_matters.opt_action_bool["text"]) { @@ -50,41 +47,15 @@ template outputHub() {        // text.scroll(contents, bookindex_unordered_hashes, biblio, dochead_make, dochead_meta, fn_src, opt_action_bool);      }      if (doc_matters.opt_action_bool["html"]) { -      mixin outputHTML; -      auto html=outputHTML(); -      html.css_write; -      html.scroll( -        contents, -        doc_matters, -      ); -      html.seg( -        contents, -        doc_matters, -      ); +      outputHTML!().scroll(contents,doc_matters); +      outputHTML!().seg(contents,doc_matters);      } else if(doc_matters.opt_action_bool["html_seg"]) { -      mixin outputHTML; -      auto html=outputHTML(); -      html.css_write; -      html.seg( -        contents, -        doc_matters, -      ); +      outputHTML!().seg(contents,doc_matters);      } else if(doc_matters.opt_action_bool["html_scroll"]) { -      mixin outputHTML; -      auto html=outputHTML(); -      html.css_write; -      html.scroll( -        contents, -        doc_matters, -      ); +      outputHTML!().scroll(contents,doc_matters);      }      if (doc_matters.opt_action_bool["epub"]) { -      mixin outputEPub; -      auto epub=outputEPub(); -      epub.doc_content(         // consolidate -        contents, -        doc_matters, -      ); +      outputEPub!()(contents, doc_matters);        // epub.css_write;        // writeln("epub processing");      } diff --git a/src/sdp/source_sisupod.d b/src/sdp/source_sisupod.d index 081bb51..1edbbfc 100644 --- a/src/sdp/source_sisupod.d +++ b/src/sdp/source_sisupod.d @@ -1,47 +1,68 @@  template SiSUpod() { -  struct SiSUpod { -     -    void sisupod_assemble(S)( -      S fn_src, -    ) { -      debug(asserts){ -        static assert(is(typeof(fn_src) == string)); -      } -      mixin SiSUpaths; -      auto pth_sisupod = SiSUpodPaths(); -      mixin SiSUlanguageCodes; -      auto lang = Lang(); -      auto rgx = Rgx(); -      /+ -        dir structure -        /tmp/_sisu_processing_/ralph/en/sisupod -          ├── doc -          │   └── en -          └── image -     -        - create directory structure -     -      +/ -      assert (match(fn_src, rgx.src_fn)); -      try { -        /+ create directory structure +/ -        mkdirRecurse(pth_sisupod.doc(fn_src)); -        mkdirRecurse(pth_sisupod.conf(fn_src)); -        mkdirRecurse(pth_sisupod.css(fn_src)); -        mkdirRecurse(pth_sisupod.image(fn_src)); -        /+ copy relevant files +/ -        auto f_out = pth_sisupod.fn_doc(fn_src, "en"); // you need fn without path and then to insert back language code for output sub-directory -        debug(sisupod) { -          writeln(__LINE__, ": ", fn_src, " -> ", f_out); -        } -        mkdirRecurse(pth_sisupod.doc_lng(fn_src, "en")); // need to extract language code directories (from directory structure or filenames & have a default) -        copy(fn_src, f_out); -      } -      catch (ErrnoException ex) { -        // Handle error +  private import +    std.algorithm, +    std.array, +    std.container, +    std.exception, +    std.file, +    std.getopt, +    std.json, +    std.process, +    std.stdio, +    std.path, +    std.range, +    std.regex, +    std.string, +    std.traits, +    std.typecons, +    std.uni, +    std.utf, +    ao_defaults; +  import +    ao_rgx, +    output_xhtmls; +   +  void SiSUpod(S)( +    S fn_src, +  ) { +    debug(asserts){ +      static assert(is(typeof(fn_src) == string)); +    } +    mixin SiSUrgxInit; +    mixin SiSUpaths; +    auto pth_sisupod = SiSUpodPaths(); +    mixin SiSUlanguageCodes; +    auto lang = Lang(); +    auto rgx = Rgx(); +    /+ +      dir structure +      /tmp/_sisu_processing_/ralph/en/sisupod +        ├── doc +        │   └── en +        └── image +   +      - create directory structure +   +    +/ +    assert (match(fn_src, rgx.src_fn)); +    try { +      /+ create directory structure +/ +      mkdirRecurse(pth_sisupod.doc(fn_src)); +      mkdirRecurse(pth_sisupod.conf(fn_src)); +      mkdirRecurse(pth_sisupod.css(fn_src)); +      mkdirRecurse(pth_sisupod.image(fn_src)); +      /+ copy relevant files +/ +      auto f_out = pth_sisupod.fn_doc(fn_src, "en"); // you need fn without path and then to insert back language code for output sub-directory +      debug(sisupod) { +        writeln(__LINE__, ": ", fn_src, " -> ", f_out);        } +      mkdirRecurse(pth_sisupod.doc_lng(fn_src, "en")); // need to extract language code directories (from directory structure or filenames & have a default) +      copy(fn_src, f_out); +    } +    catch (ErrnoException ex) { +      // Handle error      } -     -        } +   +    } | 
