diff options
Diffstat (limited to 'src/sdp')
| -rw-r--r-- | src/sdp/ao_abstract_doc_source.d | 219 | ||||
| -rw-r--r-- | src/sdp/ao_output_debugs.d | 48 | ||||
| -rw-r--r-- | src/sdp/ao_read_source_files.d | 28 | ||||
| -rw-r--r-- | src/sdp/ao_rgx.d | 5 | ||||
| -rw-r--r-- | src/sdp/output_hub.d | 1484 | 
5 files changed, 1637 insertions, 147 deletions
| diff --git a/src/sdp/ao_abstract_doc_source.d b/src/sdp/ao_abstract_doc_source.d index c1566d2..7539755 100644 --- a/src/sdp/ao_abstract_doc_source.d +++ b/src/sdp/ao_abstract_doc_source.d @@ -136,7 +136,7 @@ template SiSUdocAbstraction() {        }        auto type = flags_type_init;        auto dochead_make = parseJSON(header_make_jsonstr).object; -      auto dochead_metadata = parseJSON(header_metadata_jsonstr).object; +      auto dochead_meta = parseJSON(header_metadata_jsonstr).object;        mixin ScreenTxtColors;        int tell_lo(string color, int obj_cite_number, in char[] line) {          writefln( @@ -242,12 +242,12 @@ template SiSUdocAbstraction() {            /+ block object: code +/            code_block(line, an_object, type);            continue; -        } else if (!match(line, rgx.regular_parse_skip)) { +        } else if (!matchFirst(line, rgx.regular_parse_skip)) {            /+ object other than code block object (includes regular text paragraph) +/ -          if (((match(line, rgx.heading_biblio) +          if (((matchFirst(line, rgx.heading_biblio)            || (type["heading_biblio"] == State.on))) -          && (!match(line, rgx.heading)) -          && (!match(line, rgx.comment))) { +          && (!matchFirst(line, rgx.heading)) +          && (!matchFirst(line, rgx.comment))) {              /+ within block object: biblio +/              biblio_block(line, type, bib_entry, biblio_arr_json);              continue; @@ -273,15 +273,15 @@ template SiSUdocAbstraction() {              table_block(line, an_object, type);              continue;            } else { -          /+ not within a block group +/ +            /+ not within a block group +/              assert(                (type["blocks"] == TriState.off)                || (type["blocks"] == TriState.closing),                "block status: none or closed"              );              assertions_flag_types_block_status_none_or_closed(type); -            if (match(line, rgx.block_open)) { -              if (match(line, (rgx.block_poem_open))) { +            if (matchFirst(line, rgx.block_open)) { +              if (matchFirst(line, (rgx.block_poem_open))) {                  /+ poem to verse exceptions! +/                  object_reset(an_object);                  processing.remove("verse"); @@ -308,19 +308,19 @@ template SiSUdocAbstraction() {                    tell_l("red", line);                  }                  assert( -                  match(line, rgx.book_index) -                  || match(line, rgx.book_index_open) +                  matchFirst(line, rgx.book_index) +                  || matchFirst(line, rgx.book_index_open)                    || type["book_index"] == State.on                  );                } -              if ((match(line, rgx.book_index)) -              || (match(line, rgx.book_index_open)) +              if ((matchFirst(line, rgx.book_index)) +              || (matchFirst(line, rgx.book_index_open))                || (type["book_index"] == State.on ))  {                  /+ book_index +/                  book_index(line, book_idx_tmp, an_object, type);                } else {                  /+ not book_index +/ -                if (auto m = match(line, rgx.comment)) { +                if (auto m = matchFirst(line, rgx.comment)) {                    /+ matched comment +/                    debug(comment) {                      tell_l("blue", line); @@ -333,8 +333,8 @@ template SiSUdocAbstraction() {                    type["header_make"] = State.off;                    type["header_metadata"] = State.off;                    ++counter; -                } else if ((match(line, rgx.header_make)) -                  || (match(line, rgx.header_metadata)) +                } else if ((matchFirst(line, rgx.header_make)) +                  || (matchFirst(line, rgx.header_metadata))                    || (type["header_make"] == State.on                    && (line_occur["header_make"] > State.off))                    || (type["header_metadata"] == State.on @@ -360,9 +360,9 @@ template SiSUdocAbstraction() {                      /+ heading make set +/                      heading_make_set(line, line_occur, heading_match_rgx, type);                    } -                  if (auto m = match(line, rgx.heading)) { +                  if (matchFirst(line, rgx.heading)) {                      /+ heading match +/ -                    heading_match(line, line_occur, an_object, lv, collapsed_lev, type); +                    heading_match(line, line_occur, an_object, lv, collapsed_lev, type, dochead_meta);                    } else if (line_occur["para"] == State.off) {                      /+ para match +/                      para_match(line, an_object, indent, bullet, type); @@ -417,9 +417,9 @@ template SiSUdocAbstraction() {                && (line_occur["header_make"] > State.off)) {                  /+ header_make instructions (current line empty) +/                  auto dochead_metadata_and_make = -                  set_header.header_metadata_and_make_jsonstr(strip(an_object["obj"]), dochead_metadata, dochead_make); +                  set_header.header_metadata_and_make_jsonstr(strip(an_object["obj"]), dochead_meta, dochead_make);                  static assert(!isTypeTuple!(dochead_metadata_and_make)); -                dochead_metadata = dochead_metadata_and_make[0]; +                dochead_meta = dochead_metadata_and_make[0];                  dochead_make = dochead_metadata_and_make[1];                  header_set_common(line_occur, an_object, type);                  processing.remove("verse"); @@ -427,9 +427,9 @@ template SiSUdocAbstraction() {                && (line_occur["header_metadata"] > State.off)) {                  /+ header_metadata (current line empty) +/                  auto dochead_metadata_and_make = -                  set_header.header_metadata_and_make_jsonstr(strip(an_object["obj"]), dochead_metadata, dochead_make); -                static assert(!isTypeTuple!(dochead_metadata_and_make)); -                dochead_metadata = dochead_metadata_and_make[0]; +                  set_header.header_metadata_and_make_jsonstr(strip(an_object["obj"]), dochead_meta, dochead_make); +                static assert(!isTypeTuple!(dochead_meta)); +                dochead_meta = dochead_metadata_and_make[0];                  dochead_make = dochead_metadata_and_make[1];                  header_set_common(line_occur, an_object, type);                  type["header_make"] = State.off; @@ -684,7 +684,7 @@ template SiSUdocAbstraction() {          tuple(            document_the,            dochead_make, -          dochead_metadata, +          dochead_meta,            bookindex_unordered_hashes,            biblio_ordered          ); @@ -721,15 +721,15 @@ template SiSUdocAbstraction() {      auto check_obj_cite_number_status(char[] line, ref int[string] type) {        if ((!line.empty) && (type["obj_cite_number_status_multi_obj"] == TriState.off)) {          /+ not multi-line object, check whether obj_cite_number is on or turned off +/ -        if (match(line, rgx.obj_cite_number_block_marks)) { +        if (matchFirst(line, rgx.obj_cite_number_block_marks)) {            /+ switch off obj_cite_number +/ -          if (match(line, rgx.obj_cite_number_off_block)) { +          if (matchFirst(line, rgx.obj_cite_number_off_block)) {              type["obj_cite_number_status_multi_obj"] = TriState.on;              debug(ocnoff) {                tell_l("fuchsia", line);              }            } -          if (match(line, rgx.obj_cite_number_off_block_dh)) { +          if (matchFirst(line, rgx.obj_cite_number_off_block_dh)) {              type["obj_cite_number_status_multi_obj"] = TriState.closing;              debug(ocnoff) {                tell_l("fuchsia", line); @@ -737,9 +737,9 @@ template SiSUdocAbstraction() {            }          } else {            if (type["obj_cite_number_status_multi_obj"] == TriState.off) { -            if (match(line, rgx.obj_cite_number_off)) { +            if (matchFirst(line, rgx.obj_cite_number_off)) {                type["obj_cite_number_status"] = TriState.on; -            } else if (match(line, rgx.obj_cite_number_off_dh)) { +            } else if (matchFirst(line, rgx.obj_cite_number_off_dh)) {                type["obj_cite_number_status"] = TriState.closing;              } else {                // type["obj_cite_number_status"] = TriState.closing; @@ -751,7 +751,7 @@ template SiSUdocAbstraction() {            }          }        } else if ((!line.empty) && (type["obj_cite_number_status_multi_obj"] > TriState.off)) { -        if (auto m = match(line, rgx.obj_cite_number_off_block_close)) { +        if (matchFirst(line, rgx.obj_cite_number_off_block_close)) {            type["obj_cite_number_status_multi_obj"] = TriState.off;            type["obj_cite_number_status"] = TriState.off;            debug(ocnoff) { @@ -766,7 +766,7 @@ template SiSUdocAbstraction() {        ref int[string] type,        string[string] obj_cite_number_poem      ) { -      if (match(line, rgx.block_curly_code_open)) { +      if (matchFirst(line, rgx.block_curly_code_open)) {          /+ curly code open +/          debug(code) {                              // code (curly) open            writefln( @@ -779,7 +779,7 @@ template SiSUdocAbstraction() {          type["blocks"] = TriState.on;          type["code"] = TriState.on;          type["curly_code"] = TriState.on; -      } else if (match(line, rgx.block_curly_poem_open)) { +      } else if (matchFirst(line, rgx.block_curly_poem_open)) {          /+ curly poem open +/          debug(poem) {                              // poem (curly) open            writefln( @@ -795,7 +795,7 @@ template SiSUdocAbstraction() {          type["verse_new"] = State.on;          type["poem"] = TriState.on;          type["curly_poem"] = TriState.on; -      } else if (match(line, rgx.block_curly_group_open)) { +      } else if (matchFirst(line, rgx.block_curly_group_open)) {          /+ curly group open +/          debug(group) {                             // group (curly) open            writefln( @@ -808,7 +808,7 @@ template SiSUdocAbstraction() {          type["blocks"] = TriState.on;          type["group"] = TriState.on;          type["curly_group"] = TriState.on; -      } else if (match(line, rgx.block_curly_block_open)) { +      } else if (matchFirst(line, rgx.block_curly_block_open)) {          /+ curly block open +/          debug(block) {                             // block (curly) open            writefln( @@ -821,7 +821,7 @@ template SiSUdocAbstraction() {          type["blocks"] = TriState.on;          type["block"] = TriState.on;          type["curly_block"] = TriState.on; -      } else if (match(line, rgx.block_curly_quote_open)) { +      } else if (matchFirst(line, rgx.block_curly_quote_open)) {          /+ curly quote open +/          debug(quote) {                             // quote (curly) open            writefln( @@ -834,7 +834,7 @@ template SiSUdocAbstraction() {          type["blocks"] = TriState.on;          type["quote"] = TriState.on;          type["curly_quote"] = TriState.on; -      } else if (match(line, rgx.block_curly_table_open)) { +      } else if (matchFirst(line, rgx.block_curly_table_open)) {          /+ curly table open +/          debug(table) {                             // table (curly) open            writefln( @@ -847,7 +847,7 @@ template SiSUdocAbstraction() {          type["blocks"] = TriState.on;          type["table"] = TriState.on;          type["curly_table"] = TriState.on; -      } else if (match(line, rgx.block_tic_code_open)) { +      } else if (matchFirst(line, rgx.block_tic_code_open)) {          /+ tic code open +/          debug(code) {                              // code (tic) open            writefln( @@ -860,7 +860,7 @@ template SiSUdocAbstraction() {          type["blocks"] = TriState.on;          type["code"] = TriState.on;          type["tic_code"] = TriState.on; -      } else if (match(line, rgx.block_tic_poem_open)) { +      } else if (matchFirst(line, rgx.block_tic_poem_open)) {          /+ tic poem open +/          debug(poem) {                              // poem (tic) open            writefln( @@ -875,7 +875,7 @@ template SiSUdocAbstraction() {          type["verse_new"] = State.on;          type["poem"] = TriState.on;          type["tic_poem"] = TriState.on; -      } else if (match(line, rgx.block_tic_group_open)) { +      } else if (matchFirst(line, rgx.block_tic_group_open)) {          /+ tic group open +/          debug(group) {                             // group (tic) open            writefln( @@ -888,7 +888,7 @@ template SiSUdocAbstraction() {          type["blocks"] = TriState.on;          type["group"] = TriState.on;          type["tic_group"] = TriState.on; -      } else if (match(line, rgx.block_tic_block_open)) { +      } else if (matchFirst(line, rgx.block_tic_block_open)) {          /+ tic block open +/          debug(block) {                             // block (tic) open            writefln( @@ -901,7 +901,7 @@ template SiSUdocAbstraction() {          type["blocks"] = TriState.on;          type["block"] = TriState.on;          type["tic_block"] = TriState.on; -      } else if (match(line, rgx.block_tic_quote_open)) { +      } else if (matchFirst(line, rgx.block_tic_quote_open)) {          /+ tic quote open +/          debug(quote) {                             // quote (tic) open            writefln( @@ -914,7 +914,7 @@ template SiSUdocAbstraction() {          type["blocks"] = TriState.on;          type["quote"] = TriState.on;          type["tic_quote"] = TriState.on; -      } else if (match(line, rgx.block_tic_table_open)) { +      } else if (matchFirst(line, rgx.block_tic_table_open)) {          /+ tic table open +/          debug(table) {                             // table (tic) open            writefln( @@ -936,7 +936,7 @@ template SiSUdocAbstraction() {        ref int[string] type      ) {        if (type["curly_code"] == TriState.on) { -        if (auto m = match(line, rgx.block_curly_code_close)) { +        if (matchFirst(line, rgx.block_curly_code_close)) {            debug(code) {                              // code (curly) close              tell_l("blue", line);            } @@ -947,10 +947,10 @@ template SiSUdocAbstraction() {            debug(code) {                              // code (curly) line              tell_l("blue", line);            } -          an_object["obj"] ~= line ~= "\n";                       // code (curly) line +          an_object["obj"] ~= line ~= "\n";          // code (curly) line          }        } else if (type["tic_code"] == TriState.on) { -        if (auto m = match(line, rgx.block_tic_close)) { +        if (matchFirst(line, rgx.block_tic_close)) {            debug(code) {                              // code (tic) close              tell_l("blue", line);            } @@ -961,7 +961,7 @@ template SiSUdocAbstraction() {            debug(code) {                              // code (tic) line              tell_l("blue", line);            } -          an_object["obj"] ~= line ~= "\n";                       // code (tic) line +          an_object["obj"] ~= line ~= "\n";          // code (tic) line          }        }        return 0; @@ -991,7 +991,7 @@ template SiSUdocAbstraction() {        ref int bib_entry,        ref string[] biblio_arr_json      ) { -      if (match(line, rgx.heading_biblio)) { +      if (matchFirst(line, rgx.heading_biblio)) {          type["heading_biblio"] = TriState.on;        }        if (empty(line) && (bib_entry == TriState.off)) { @@ -1006,7 +1006,7 @@ template SiSUdocAbstraction() {            line          );        } -      if (match(line, rgx.biblio_tags)) { +      if (matchFirst(line, rgx.biblio_tags)) {          auto bt = match(line, rgx.biblio_tags);          bib_entry = 0;          st=to!string(bt.captures[1]); @@ -1081,7 +1081,7 @@ template SiSUdocAbstraction() {        string[string] obj_cite_number_poem      ) {        if (type["curly_poem"] == TriState.on) { -        if (auto m = match(line, rgx.block_curly_poem_close)) { +        if (matchFirst(line, rgx.block_curly_poem_close)) {            an_object["obj"]="verse"; // check that this is as you please            debug(poem) {                            // poem (curly) close              writefln( @@ -1140,7 +1140,7 @@ template SiSUdocAbstraction() {              obj_cite_number =                obj_cite_number_emit(type["obj_cite_number_status"]);              type["verse_new"] = State.off; -          } else if (match(line, rgx.line_delimiter_only)) { +          } else if (matchFirst(line, rgx.line_delimiter_only)) {              verse_line = TriState.off;              type["verse_new"] = State.on;            } @@ -1181,7 +1181,7 @@ template SiSUdocAbstraction() {            }          }        } else if (type["tic_poem"] == TriState.on) { -        if (auto m = match(line, rgx.block_tic_close)) { // tic_poem_close +        if (auto m = matchFirst(line, rgx.block_tic_close)) { // tic_poem_close            an_object["obj"]="verse"; // check that this is as you please            debug(poem) {                            // poem (curly) close              writefln( @@ -1226,7 +1226,7 @@ template SiSUdocAbstraction() {              obj_cite_number =                obj_cite_number_emit(type["obj_cite_number_status"]);              type["verse_new"] = State.off; -          } else if (match(line, rgx.line_delimiter_only)) { +          } else if (matchFirst(line, rgx.line_delimiter_only)) {              type["verse_new"] = State.on;              verse_line = TriState.off;            } @@ -1276,7 +1276,7 @@ template SiSUdocAbstraction() {        ref int[string] type      ) {        if (type["curly_group"] == State.on) { -        if (match(line, rgx.block_curly_group_close)) { +        if (matchFirst(line, rgx.block_curly_group_close)) {            debug(group) {                           // group (curly) close              tell_l("blue", line);            } @@ -1290,7 +1290,7 @@ template SiSUdocAbstraction() {            an_object["obj"] ~= line ~= "\n";           // build group array (or string)          }        } else if (type["tic_group"] == TriState.on) { -        if (match(line, rgx.block_tic_close)) { +        if (matchFirst(line, rgx.block_tic_close)) {            debug(group) {                           // group (tic) close              tell_l("blue", line);            } @@ -1312,7 +1312,7 @@ template SiSUdocAbstraction() {        ref int[string] type      ) {        if (type["curly_block"] == TriState.on) { -        if (match(line, rgx.block_curly_block_close)) { +        if (matchFirst(line, rgx.block_curly_block_close)) {            debug(block) {                           // block (curly) close              tell_l("blue", line);            } @@ -1326,7 +1326,7 @@ template SiSUdocAbstraction() {            an_object["obj"] ~= line ~= "\n";           // build block array (or string)          }        } else if (type["tic_block"] == TriState.on) { -        if (match(line, rgx.block_tic_close)) { +        if (matchFirst(line, rgx.block_tic_close)) {            debug(block) {                           // block (tic) close              tell_l("blue", line);            } @@ -1344,7 +1344,7 @@ template SiSUdocAbstraction() {      }      auto quote_block(char[] line, ref string[string] an_object, ref int[string] type) {        if (type["curly_quote"] == TriState.on) { -        if (match(line, rgx.block_curly_quote_close)) { +        if (matchFirst(line, rgx.block_curly_quote_close)) {            debug(quote) {                           // quote (curly) close              tell_l("blue", line);            } @@ -1358,7 +1358,7 @@ template SiSUdocAbstraction() {            an_object["obj"] ~= line ~= "\n";           // build quote array (or string)          }        } else if (type["tic_quote"] == TriState.on) { -        if (match(line, rgx.block_tic_close)) { +        if (matchFirst(line, rgx.block_tic_close)) {            debug(quote) {                           // quote (tic) close              tell_l("blue", line);            } @@ -1376,7 +1376,7 @@ template SiSUdocAbstraction() {      }      auto table_block(char[] line, ref string[string] an_object, ref int[string] type) {        if (type["curly_table"] == TriState.on) { -        if (match(line, rgx.block_curly_table_close)) { +        if (matchFirst(line, rgx.block_curly_table_close)) {            debug(table) {                           // table (curly) close              tell_l("blue", line);            } @@ -1390,7 +1390,7 @@ template SiSUdocAbstraction() {            an_object["obj"] ~= line ~= "\n";           // build table array (or string)          }        } else if (type["tic_table"] == TriState.on) { -        if (match(line, rgx.block_tic_close)) { +        if (matchFirst(line, rgx.block_tic_close)) {            debug(table) {                           // table (tic) close              tell_l("blue", line);            } @@ -1674,7 +1674,7 @@ template SiSUdocAbstraction() {        ref string[string] an_object,        ref int[string] type      ) { -      if (auto m = match(line, rgx.header_make)) { +      if (matchFirst(line, rgx.header_make)) {          /+ matched header_make +/          debug(header1) {                          // header            tell_l("yellow", line); @@ -1686,7 +1686,7 @@ template SiSUdocAbstraction() {          type["para"] = State.off;          ++line_occur["header_make"];          an_object["obj"] ~= line ~= "\n"; -      } else if (auto m = match(line, rgx.header_metadata)) { +      } else if (matchFirst(line, rgx.header_metadata)) {          /+ matched header_metadata +/          debug(header1) {                          // header            tell_l("yellow", line); @@ -1701,7 +1701,7 @@ template SiSUdocAbstraction() {        } else if (type["header_make"] == State.on        && (line_occur["header_make"] > State.off)) {          /+ header_make flag set +/ -        if (auto m = match(line, rgx.header_sub)) { +        if (matchFirst(line, rgx.header_sub)) {            /+ sub-header +/            debug(header1) {              tell_l("yellow", line); @@ -1713,7 +1713,7 @@ template SiSUdocAbstraction() {        } else if (type["header_metadata"] == State.on        && (line_occur["header_metadata"] > State.off)) {          /+ header_metadata flag set +/ -        if (auto m = match(line, rgx.header_sub)) { +        if (matchFirst(line, rgx.header_sub)) {            /+ sub-header +/            debug(header1) {              tell_l("yellow", line); @@ -1824,43 +1824,43 @@ template SiSUdocAbstraction() {        && ((type["para"] == State.off)        && (type["heading"] == State.off))) {          /+ heading make set +/ -        if (match(line, heading_match_rgx["h_B"])) { +        if (matchFirst(line, heading_match_rgx["h_B"])) {            line = "B~ " ~ line;            debug(headingsfound) {              writeln(line);            }          } -        if (match(line, heading_match_rgx["h_C"])) { +        if (matchFirst(line, heading_match_rgx["h_C"])) {            line = "C~ " ~ line;            debug(headingsfound) {              writeln(line);            }          } -        if (match(line, heading_match_rgx["h_D"])) { +        if (matchFirst(line, heading_match_rgx["h_D"])) {            line = "D~ " ~ line;            debug(headingsfound) {              writeln(line);            }          } -        if (match(line, heading_match_rgx["h_1"])) { +        if (matchFirst(line, heading_match_rgx["h_1"])) {            line = "1~ " ~ line;            debug(headingsfound) {              writeln(line);            }          } -        if (match(line, heading_match_rgx["h_2"])) { +        if (matchFirst(line, heading_match_rgx["h_2"])) {            line = "2~ " ~ line;            debug(headingsfound) {              writeln(line);            }          } -        if (match(line, heading_match_rgx["h_3"])) { +        if (matchFirst(line, heading_match_rgx["h_3"])) {            line = "3~ " ~ line;            debug(headingsfound) {              writeln(line);            }          } -        if (match(line, heading_match_rgx["h_4"])) { +        if (matchFirst(line, heading_match_rgx["h_4"])) {            line = "4~ " ~ line;            debug(headingsfound) {              writeln(line); @@ -1874,7 +1874,8 @@ template SiSUdocAbstraction() {        ref string[string] an_object,        ref int[string] lv,        ref int[string] collapsed_lev, -      ref int[string] type +      ref int[string] type, +      ref JSONValue[string] dochead_meta      ) {        if (auto m = match(line, rgx.heading)) {          /+ heading match +/ @@ -1890,6 +1891,8 @@ template SiSUdocAbstraction() {          assertions_doc_structure(an_object, lv); // includes most of the logic for collapsed levels          switch (an_object["lev"]) {          case "A": +          an_object["obj"]=replaceFirst(an_object["obj"], rgx.head_value_title, to!string(dochead_meta["title"]["main"])); +          an_object["obj"]=replaceFirst(an_object["obj"], rgx.head_value_author, to!string(dochead_meta["creator"]["author"]));            collapsed_lev["h0"] = 1;            an_object["lev_collapsed_number"] =              to!string(collapsed_lev["h0"]); @@ -2017,7 +2020,7 @@ template SiSUdocAbstraction() {          /+ para matches +/            // paragraphs            // (fl  ag_type["heading"] = true) && -        if (auto m = match(line, rgx.para_indent)) { +        if (auto m = matchFirst(line, rgx.para_indent)) {            debug(paraindent) {                    // para indent              tell_l("blue", line);            } @@ -2026,7 +2029,7 @@ template SiSUdocAbstraction() {            indent["first"] = to!string(m.captures[1]);            indent["second"] = "0";            bullet = false; -        } else if (auto m = match(line, rgx.para_bullet)) { +        } else if (matchFirst(line, rgx.para_bullet)) {            debug(parabullet) {                    // para bullet              tell_l("blue", line);            } @@ -2035,7 +2038,7 @@ template SiSUdocAbstraction() {            indent["first"] = "0";            indent["second"] = "0";            bullet = true; -        } else if (auto m = match(line, rgx.para_indent_hang)) { +        } else if (auto m = matchFirst(line, rgx.para_indent_hang)) {            debug(paraindenthang) {                // para indent hang              tell_l("blue", line);            } @@ -2044,7 +2047,7 @@ template SiSUdocAbstraction() {            indent["first"] = to!string(m.captures[1]);            indent["second"] = to!string(m.captures[2]);            bullet = false; -        } else if (auto m = match(line, rgx.para_bullet_indent)) { +        } else if (auto m = matchFirst(line, rgx.para_bullet_indent)) {            debug(parabulletindent) {              // para bullet indent              tell_l("blue", line);            } @@ -2092,19 +2095,19 @@ template SiSUdocAbstraction() {        body {          auto rgx = Rgx();          obj_txt["munge"]=obj_txt_in; -        if (match(obj_txt_in, rgx.para_bullet)) { +        if (matchFirst(obj_txt_in, rgx.para_bullet)) {            obj_txt["attrib"] =" \"bullet\": \"true\","            ~ " \"indent_first\": 0,"            ~ " \"indent_rest\": 0,"; -        } else if (auto m = match(obj_txt_in, rgx.para_bullet_indent)) { +        } else if (auto m = matchFirst(obj_txt_in, rgx.para_bullet_indent)) {            obj_txt["attrib"] =" \"bullet\": \"true\","            ~ " \"indent_first\": " ~ to!string(m.captures[1]) ~ ","            ~ " \"indent_rest\": " ~ to!string(m.captures[1]) ~ ","; -        } else if (auto m = match(obj_txt_in, rgx.para_indent_hang)) { +        } else if (auto m = matchFirst(obj_txt_in, rgx.para_indent_hang)) {            obj_txt["attrib"] =" \"bullet\": \"false\","            ~ " \"indent_first\": " ~ to!string(m.captures[1]) ~ ","            ~ " \"indent_rest\": " ~  to!string(m.captures[2]) ~ ","; -        } else if (auto m = match(obj_txt_in, rgx.para_indent)) { +        } else if (auto m = matchFirst(obj_txt_in, rgx.para_indent)) {            obj_txt["attrib"] =" \"bullet\": \"false\","            ~ " \"indent_first\": " ~ to!string(m.captures[1]) ~ ","            ~ " \"indent_rest\": " ~ to!string(m.captures[1]) ~ ","; @@ -2578,14 +2581,14 @@ template SiSUdocAbstraction() {        string hm, hs;        auto header_metadata_and_make_jsonstr(          string header, -        JSONValue[string] dochead_metadata, +        JSONValue[string] dochead_meta,          JSONValue[string] dochead_make        )        in { }        body {          scope(exit) {            destroy(header); -          destroy(dochead_metadata); +          destroy(dochead_meta);            destroy(dochead_make);          }          if (auto t = match(header, rgx.head_main)) { @@ -2599,13 +2602,13 @@ template SiSUdocAbstraction() {                if (auto m = match(line, rgx.head_main)) {                  if (!empty(m.captures[2])) {                    if (hm == "creator") { -                    dochead_metadata[hm]["author"].str = +                    dochead_meta[hm]["author"].str =                        to!string(m.captures[2]);                    } else if (hm == "title") { -                    dochead_metadata[hm]["main"].str = +                    dochead_meta[hm]["main"].str =                        to!string(m.captures[2]);                    } else if (hm == "publisher") { -                    dochead_metadata[hm]["name"].str = +                    dochead_meta[hm]["name"].str =                        to!string(m.captures[2]);                    }                  } @@ -2629,12 +2632,12 @@ template SiSUdocAbstraction() {                      default:                        break;                      } -                  } else if (dochead_metadata[hm].type() == JSON_TYPE.OBJECT) { +                  } else if (dochead_meta[hm].type() == JSON_TYPE.OBJECT) {                      switch (hm) {                      case "creator":                        if (match(hs, rgx.subhead_creator)) { -                        if (dochead_metadata[hm][hs].type() == JSON_TYPE.STRING) { -                          dochead_metadata[hm][hs].str = +                        if (dochead_meta[hm][hs].type() == JSON_TYPE.STRING) { +                          dochead_meta[hm][hs].str =                              to!string(s.captures[2]);                          }                        } else { @@ -2646,11 +2649,11 @@ template SiSUdocAbstraction() {                      case "title":                        if (match(hs, rgx.subhead_title)) {                          if ((hs == "subtitle") -                        && (dochead_metadata[hm]["sub"].type() == JSON_TYPE.STRING)) { -                          dochead_metadata[hm]["sub"].str = +                        && (dochead_meta[hm]["sub"].type() == JSON_TYPE.STRING)) { +                          dochead_meta[hm]["sub"].str =                              to!string(s.captures[2]); -                        } else if (dochead_metadata[hm][hs].type() == JSON_TYPE.STRING) { -                          dochead_metadata[hm][hs].str = +                        } else if (dochead_meta[hm][hs].type() == JSON_TYPE.STRING) { +                          dochead_meta[hm][hs].str =                              to!string(s.captures[2]);                          }                        } else { @@ -2661,8 +2664,8 @@ template SiSUdocAbstraction() {                        break;                      case "rights":                        if (match(hs, rgx.subhead_rights)) { -                        if (dochead_metadata[hm][hs].type() == JSON_TYPE.STRING) { -                          dochead_metadata[hm][hs].str = +                        if (dochead_meta[hm][hs].type() == JSON_TYPE.STRING) { +                          dochead_meta[hm][hs].str =                              to!string(s.captures[2]);                          }                        } else { @@ -2673,8 +2676,8 @@ template SiSUdocAbstraction() {                        break;                      case "date":                        if (match(hs, rgx.subhead_date)) { -                        if (dochead_metadata[hm][hs].type() == JSON_TYPE.STRING) { -                          dochead_metadata[hm][hs].str = +                        if (dochead_meta[hm][hs].type() == JSON_TYPE.STRING) { +                          dochead_meta[hm][hs].str =                              to!string(s.captures[2]);                          }                        } else { @@ -2685,8 +2688,8 @@ template SiSUdocAbstraction() {                        break;                      case "original":                        if (match(hs, rgx.subhead_original)) { -                        if (dochead_metadata[hm][hs].type() == JSON_TYPE.STRING) { -                          dochead_metadata[hm][hs].str = +                        if (dochead_meta[hm][hs].type() == JSON_TYPE.STRING) { +                          dochead_meta[hm][hs].str =                              to!string(s.captures[2]);                          }                        } else { @@ -2697,8 +2700,8 @@ template SiSUdocAbstraction() {                        break;                      case "classify":                        if (match(hs, rgx.subhead_classify)) { -                        if (dochead_metadata[hm][hs].type() == JSON_TYPE.STRING) { -                          dochead_metadata[hm][hs].str = +                        if (dochead_meta[hm][hs].type() == JSON_TYPE.STRING) { +                          dochead_meta[hm][hs].str =                              to!string(s.captures[2]);                          }                        } else { @@ -2709,8 +2712,8 @@ template SiSUdocAbstraction() {                        break;                      case "identifier":                        if (match(hs, rgx.subhead_identifier)) { -                        if (dochead_metadata[hm][hs].type() == JSON_TYPE.STRING) { -                          dochead_metadata[hm][hs].str = +                        if (dochead_meta[hm][hs].type() == JSON_TYPE.STRING) { +                          dochead_meta[hm][hs].str =                              to!string(s.captures[2]);                          }                        } else { @@ -2721,8 +2724,8 @@ template SiSUdocAbstraction() {                        break;                      case "notes":                        if (match(hs, rgx.subhead_notes)) { -                        if (dochead_metadata[hm][hs].type() == JSON_TYPE.STRING) { -                          dochead_metadata[hm][hs].str = +                        if (dochead_meta[hm][hs].type() == JSON_TYPE.STRING) { +                          dochead_meta[hm][hs].str =                              to!string(s.captures[2]);                          }                        } else { @@ -2733,8 +2736,8 @@ template SiSUdocAbstraction() {                        break;                      case "publisher":                        if (match(hs, rgx.subhead_publisher)) { -                        if (dochead_metadata[hm][hs].type() == JSON_TYPE.STRING) { -                          dochead_metadata[hm][hs].str = +                        if (dochead_meta[hm][hs].type() == JSON_TYPE.STRING) { +                          dochead_meta[hm][hs].str =                              to!string(s.captures[2]);                          }                        } else { @@ -2747,8 +2750,8 @@ template SiSUdocAbstraction() {                        destroy(hm);                        destroy(hs);                        // if (match(hs, rgx.subhead_links)) { -                      //   if (dochead_metadata[hm][hs].type() == JSON_TYPE.STRING) { -                      //     dochead_metadata[hm][hs].str = to!string(s.captures[2]); +                      //   if (dochead_meta[hm][hs].type() == JSON_TYPE.STRING) { +                      //     dochead_meta[hm][hs].str = to!string(s.captures[2]);                        //   }                        // } else {                        //   writeln("not a valid header type:", hm, ":", hs); @@ -2767,7 +2770,7 @@ template SiSUdocAbstraction() {              writeln("not a valid header type:", hm);            }          } -        auto t = tuple(dochead_metadata, dochead_make); +        auto t = tuple(dochead_meta, dochead_make);          static assert(!isTypeTuple!(t));          return t;        } diff --git a/src/sdp/ao_output_debugs.d b/src/sdp/ao_output_debugs.d index 8c655e8..3c97640 100644 --- a/src/sdp/ao_output_debugs.d +++ b/src/sdp/ao_output_debugs.d @@ -6,10 +6,10 @@ template SiSUoutputDebugs() {    struct SDPoutputDebugs {      auto abstract_doc_source_debugs(S)(        auto ref const S         contents, -      JSONValue[string]        docmake, -      JSONValue[string]        dochead,        string[][string][string] bookindex_unordered_hashes,        JSONValue[]              biblio, +      JSONValue[string]        dochead_make, +      JSONValue[string]        dochead_meta,        string                   fn_src,        bool[string]             opt_action_bool      ) { @@ -80,19 +80,19 @@ template SiSUoutputDebugs() {          writefln(            "%s\n%s\n%s",            "document header, metadata & make instructions:", -          dochead, +          dochead_meta,            pointer_head_main,          );          foreach (main_header; pointer_head_main) {            switch (main_header) {            case "make":              foreach (sub_header; pointer_head_sub_make) { -              if (to!string(dochead[main_header][sub_header]).length > 2) { +              if (to!string(dochead_meta[main_header][sub_header]).length > 2) {                  writefln(                    "%s:%s: %s",                    main_header,                    sub_header, -                  dochead[main_header][sub_header] +                  dochead_meta[main_header][sub_header]                  );                }              } @@ -106,115 +106,115 @@ template SiSUoutputDebugs() {          writefln(            "%s\n%s\n%s",            "document header, metadata & make instructions:", -          dochead, +          dochead_meta,            pointer_head_main,          );          foreach (main_header; pointer_head_main) {            switch (main_header) {            case "creator":              foreach (sub_header; pointer_head_sub_creator) { -              if (to!string(dochead[main_header][sub_header]).length > 2) { +              if (to!string(dochead_meta[main_header][sub_header]).length > 2) {                  writefln(                    "%s:%s: %s",                    main_header,                    sub_header, -                  dochead[main_header][sub_header] +                  dochead_meta[main_header][sub_header]                  );                }              }              break;            case "title":              foreach (sub_header; pointer_head_sub_title) { -              if (to!string(dochead[main_header][sub_header]).length > 2) { +              if (to!string(dochead_meta[main_header][sub_header]).length > 2) {                  writefln(                    "%s:%s: %s",                    main_header,                    sub_header, -                  dochead[main_header][sub_header] +                  dochead_meta[main_header][sub_header]                  );                }              }              break;            case "rights":              foreach (sub_header; pointer_head_sub_rights) { -              if (to!string(dochead[main_header][sub_header]).length > 2) { +              if (to!string(dochead_meta[main_header][sub_header]).length > 2) {                  writefln(                    "%s:%s: %s",                    main_header,                    sub_header, -                  dochead[main_header][sub_header] +                  dochead_meta[main_header][sub_header]                  );                }              }              break;            case "date":              foreach (sub_header; pointer_head_sub_date) { -              if (to!string(dochead[main_header][sub_header]).length > 2) { +              if (to!string(dochead_meta[main_header][sub_header]).length > 2) {                  writefln(                    "%s:%s: %s",                    main_header,                    sub_header, -                  dochead[main_header][sub_header] +                  dochead_meta[main_header][sub_header]                  );                }              }              break;            case "original":              foreach (sub_header; pointer_head_sub_original) { -              if (to!string(dochead[main_header][sub_header]).length > 2) { +              if (to!string(dochead_meta[main_header][sub_header]).length > 2) {                  writefln(                    "%s:%s: %s",                    main_header,                    sub_header, -                  dochead[main_header][sub_header] +                  dochead_meta[main_header][sub_header]                  );                }              }              break;            case "classify":              foreach (sub_header; pointer_head_sub_classify) { -              if (to!string(dochead[main_header][sub_header]).length > 2) { +              if (to!string(dochead_meta[main_header][sub_header]).length > 2) {                  writefln(                    "%s:%s: %s",                    main_header,                    sub_header, -                  dochead[main_header][sub_header] +                  dochead_meta[main_header][sub_header]                  );                }              }              break;            case "identifier":              foreach (sub_header; pointer_head_sub_identifier) { -              if (to!string(dochead[main_header][sub_header]).length > 2) { +              if (to!string(dochead_meta[main_header][sub_header]).length > 2) {                  writefln(                    "%s:%s: %s",                    main_header,                    sub_header, -                  dochead[main_header][sub_header] +                  dochead_meta[main_header][sub_header]                  );                }              }              break;            case "notes":              foreach (sub_header; pointer_head_sub_notes) { -              if (to!string(dochead[main_header][sub_header]).length > 2) { +              if (to!string(dochead_meta[main_header][sub_header]).length > 2) {                  writefln(                    "%s:%s: %s",                    main_header,                    sub_header, -                  dochead[main_header][sub_header] +                  dochead_meta[main_header][sub_header]                  );                }              }              break;            case "publisher":              foreach (sub_header; pointer_head_sub_publisher) { -              if (to!string(dochead[main_header][sub_header]).length > 2) { +              if (to!string(dochead_meta[main_header][sub_header]).length > 2) {                  writefln(                    "%s:%s: %s",                    main_header,                    sub_header, -                  dochead[main_header][sub_header] +                  dochead_meta[main_header][sub_header]                  );                }              } diff --git a/src/sdp/ao_read_source_files.d b/src/sdp/ao_read_source_files.d index a5ca084..9bfaa05 100644 --- a/src/sdp/ao_read_source_files.d +++ b/src/sdp/ao_read_source_files.d @@ -103,11 +103,11 @@ template SiSUmarkupRaw() {          if (type1["curly_code"] == 1) {            type1["header_make"] = 0;            type1["header_metadata"] = 0; -          if (auto m = match(line, rgx.block_curly_code_close)) { +          if (matchFirst(line, rgx.block_curly_code_close)) {              type1["curly_code"] = 0;            }            contents_insert ~= line; -        } else if (auto m = match(line, rgx.block_curly_code_open)) { +        } else if (matchFirst(line, rgx.block_curly_code_open)) {            type1["curly_code"] = 1;            type1["header_make"] = 0;            type1["header_metadata"] = 0; @@ -115,25 +115,25 @@ template SiSUmarkupRaw() {          } else if (type1["tic_code"] == 1) {            type1["header_make"] = 0;            type1["header_metadata"] = 0; -          if (auto m = match(line, rgx.block_tic_close)) { +          if (matchFirst(line, rgx.block_tic_close)) {              type1["tic_code"] = 0;            }            contents_insert ~= line; -        } else if (auto m = match(line, rgx.block_tic_code_open)) { +        } else if (matchFirst(line, rgx.block_tic_code_open)) {            type1["tic_code"] = 1;            type1["header_make"] = 0;            type1["header_metadata"] = 0;            contents_insert ~= line;          } else if (            (type1["header_make"] == 1) -          && match(line, rgx.header_sub) +          && matchFirst(line, rgx.header_sub)          ) {              type1["header_make"] = 1;              type1["header_metadata"] = 0;              // cont_dynamic_array ~= "% " ~ line;          } else if (            (type1["header_metadata"] == 1) -          && match(line, rgx.header_sub) +          && matchFirst(line, rgx.header_sub)          ) {              type1["header_metadata"] = 1;              type1["header_make"] = 0; @@ -193,11 +193,11 @@ template SiSUmarkupRaw() {          if (type["curly_code"] == 1) {            type["header_make"] = 0;            type["header_metadata"] = 0; -          if (auto m = match(line, rgx.block_curly_code_close)) { +          if (matchFirst(line, rgx.block_curly_code_close)) {              type["curly_code"] = 0;            }            contents ~= line; -        } else if (auto m = match(line, rgx.block_curly_code_open)) { +        } else if (matchFirst(line, rgx.block_curly_code_open)) {            type["curly_code"] = 1;            type["header_make"] = 0;            type["header_metadata"] = 0; @@ -205,30 +205,30 @@ template SiSUmarkupRaw() {          } else if (type["tic_code"] == 1) {            type["header_make"] = 0;            type["header_metadata"] = 0; -          if (auto m = match(line, rgx.block_tic_close)) { +          if (matchFirst(line, rgx.block_tic_close)) {              type["tic_code"] = 0;            }            contents ~= line; -        } else if (auto m = match(line, rgx.block_tic_code_open)) { +        } else if (matchFirst(line, rgx.block_tic_code_open)) {            type["tic_code"] = 1;            type["header_make"] = 0;            type["header_metadata"] = 0;            contents ~= line;          } else if (            (type["header_make"] == 1) -          && match(line, rgx.header_sub) +          && matchFirst(line, rgx.header_sub)          ) {            contents ~= line;          } else if (            (type["header_metadata"] == 1) -          && match(line, rgx.header_sub) +          && matchFirst(line, rgx.header_sub)          ) {            contents ~= line; -        } else if (auto m = match(line, rgx.header_make)) { +        } else if (matchFirst(line, rgx.header_make)) {            type["header_make"] = 1;            type["header_metadata"] = 0;            contents ~= line; -        } else if (auto m = match(line, rgx.header_metadata)) { +        } else if (matchFirst(line, rgx.header_metadata)) {            type["header_make"] = 0;            type["header_metadata"] = 1;            contents ~= line; diff --git a/src/sdp/ao_rgx.d b/src/sdp/ao_rgx.d index e675ca1..073148e 100644 --- a/src/sdp/ao_rgx.d +++ b/src/sdp/ao_rgx.d @@ -8,7 +8,8 @@ template RgxInit() {      static flag_action               = ctRegex!(`^(--[a-z][a-z0-9-]+)$`);      static flag_action_str           = ctRegex!(` (--[a-z][a-z0-9-]+)`);      static src_pth                   = ctRegex!(`^([a-zA-Z0-9._-]+/)*([a-zA-Z0-9._-]+[.]ss[tm])$`); -    static src_fn                    = ctRegex!(`^([a-zA-Z0-9._-]+/)*([a-zA-Z0-9._-]+[.]ss[tm])$`); +    static src_fn                    = +      ctRegex!(`^([a-zA-Z0-9._-]+/)*(?P<fn_src>(?P<fn_base>[a-zA-Z0-9._-]+)[.](?P<fn_src_suffix>ss[tm]))$`);      static src_fn_master             = ctRegex!(`^([a-zA-Z0-9._-]+/)*([a-zA-Z0-9._-]+[.]ssm)$`);      static src_fn_find_inserts       = ctRegex!(`^([a-zA-Z0-9._-]+/)*([a-zA-Z0-9._-]+[.]ss[im])$`);      // static ssm_fn                    = ctRegex!(`^[a-zA-Z0-9._-]+[.]ssm$`); @@ -41,6 +42,8 @@ template RgxInit() {      static header_sub                = ctRegex!(`^[ ]+:([a-z_]+):\s`);      static head_main                 = ctRegex!(`^@([a-z_]+):\s*(.*)`, "m");      static head_sub                  = ctRegex!(`^[ ]*:([a-z_]+):\s+(.+)`, "m"); +    static head_value_title          = ctRegex!(`@title`); +    static head_value_author         = ctRegex!(`@author`);      /+ heading & paragraph operators +/      static heading            = ctRegex!(`^:?([A-D1-4])[~]([a-z0-9_.-]*[?]?) `);      static heading_marker     = ctRegex!(`^:?([A-D1-4])[~]`); diff --git a/src/sdp/output_hub.d b/src/sdp/output_hub.d new file mode 100644 index 0000000..5912e7e --- /dev/null +++ b/src/sdp/output_hub.d @@ -0,0 +1,1484 @@ +/+ +  output hub +  output_hub.d ++/ +template SiSUoutputHub() { +  struct SDPoutputHTML { +    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 +      } +    } +    auto html_toc(O)( +      auto ref const O         obj, +    ) { +      string o; +      o = format(q"◎<h%s class="toc"><a href="#%s">%s</a></h%s>◎", +      obj.heading_attrib.lev_markup_number, +      obj.obj_cite_number, +      obj.object, +      obj.heading_attrib.lev_markup_number +      ); +      return o; +    } +    auto html_heading(O)( +      auto ref const O         obj, +    ) { +      string o; +      o = format(q"◎<br><hr /><br> +      <div class="substance"> +        <label class="ocn"><a href="#%s" class="lnkocn">%s</a></label> +        <h%s class="norm" id="%s"><a name="%s"></a> +          %s +        </h%s> +      </div> +      ◎", +      obj.obj_cite_number, +      obj.obj_cite_number, +      obj.heading_attrib.lev_markup_number, +      obj.obj_cite_number, +      obj.obj_cite_number, +      obj.object, +      obj.heading_attrib.lev_markup_number +      ); +      return o; +    } +    auto html_para(O)( +      auto ref const O         obj, +    ) { +      string o; +      o = format(q"◎<div class="substance"> +        <label class="ocn"><a href="#%s" class="lnkocn">%s</a></label> +        <p class="h%si%s" id="%s"> +          %s +        </p> +      </div> +      ◎", +      obj.obj_cite_number, +      obj.obj_cite_number, +      obj.para_attrib.indent_first, +      obj.para_attrib.indent_second, +      obj.obj_cite_number, +      obj.object +      ); +      return o; +    } +    auto scroll_head() { +      string o; +      o = format(q"◎ +  <!DOCTYPE html> +  <html> +  <head> +    <meta charset="utf-8"> +    <title> +      Title +    </title> +  <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> +    <meta name="dc.title" content="Title" /> +    <meta name="dc.author" content="Author" /> +    <meta name="dc.publisher" content="SiSU http://www.jus.uio.no/sisu (this copy)" /> +    <meta name="dc.date" content="year" /> +    <meta name="dc.date.created" content="year" /> +    <meta name="dc.date.issued" content="year" /> +    <meta name="dc.date.available" content="year" /> +    <meta name="dc.date.valid" content="year" /> +    <meta name="dc.date.modified" content="year" /> +    <meta name="dc.language" content="US" /> +    <meta name="dc.rights" content="Copyright: Copyright (C) year holder /> +    <meta name="generator" content="sdp [SiSU 7.1.8 of 2016w08/5 (2016-02-26)] (n*x and D)" /> +      <link rel="generator" href="http://www.sisudoc.org/" /> +    <link rel="shortcut icon" href="../_sisu/image/rb7.ico" /> +    <link href="../../_sisu/css/html.css" rel="stylesheet"> +    <link href="../../../_sisu/css/html.css" rel="stylesheet"> +  </head> +  <body lang="en"> +  <a name="top" id="top"></a> +  ◎"); +      return o; +    } +    auto scroll_tail() { +      string o; +      o = format(q"◎ +  <a name="bottom" id="bottom"></a> +  <a name="end" id="end"></a> +  </div> +  </body> +  </html> +  ◎"); +      return o; +    } +    auto scroll(C)( +      auto ref const C         contents, +      string[][string][string] bookindex_unordered_hashes, +      JSONValue[]              biblio, +      JSONValue[string]        dochead_make, +      JSONValue[string]        dochead_meta, +      string                   fn_src, +      bool[string]             opt_action_bool +    ) { +      mixin ScreenTxtColors; +      mixin RgxInit; +      auto rgx = Rgx(); +      string[] toc; +      string[] body_; +      string[] doc; +      foreach (obj; contents) { +        if (obj.use == "content") { +          switch (obj.is_a) { +          case "heading": +            toc ~= html_toc(obj); +            body_ ~= html_heading(obj); +            break; +          case "para": +            body_ ~= html_para(obj); +            break; +          case "verse": +            body_ ~= html_para(obj); +            // body_ ~= html_verse(obj); +            break; +          case "group": +            body_ ~= html_para(obj); +            // body_ ~= html_group(obj); +            break; +          case "block": +            body_ ~= html_para(obj); +            // body_ ~= html_block(obj); +            break; +          case "quote": +            body_ ~= html_para(obj); +            // body_ ~= html_quote(obj); +            break; +          case "table": +            body_ ~= html_para(obj); +            // body_ ~= html_table(obj); +            break; +          case "code": +            body_ ~= html_para(obj); +            // body_ ~= html_code(obj); +            break; +          default: +            body_ ~= html_para(obj); +            break; +          } +        } +      } +      doc = scroll_head ~ toc ~ body_ ~ scroll_tail; +      auto m = matchFirst(fn_src, rgx.src_fn); +      auto fn = m["fn_base"] ~ ".html"; +      auto pth_html = "en/html"; +      auto pth_seg = pth_html ~ "/" ~ m["fn_base"]; +      auto pth_html_fn = pth_html ~ "/" ~ fn; +      // auto pth_css= "_sisu/css"; +      // auto pth_css_fn= pth_css ~ "/html.css"; +      try { +        mkdirRecurse(pth_seg); +        auto f = File(pth_html_fn, "w"); +        foreach (o; doc) { +          f.writeln(o); +        } +      } +      catch (ErrnoException ex) { +        // Handle error +      } +    } +  } +} | 
