diff options
Diffstat (limited to 'src/doc_reform')
| -rw-r--r-- | src/doc_reform/meta/metadoc_from_src.d | 10 | ||||
| -rw-r--r-- | src/doc_reform/meta/rgx.d | 3 | ||||
| -rw-r--r-- | src/doc_reform/output/epub3.d | 56 | ||||
| -rw-r--r-- | src/doc_reform/output/paths_output.d | 2 | ||||
| -rw-r--r-- | src/doc_reform/output/rgx.d | 3 | ||||
| -rw-r--r-- | src/doc_reform/output/sqlite.d | 48 | ||||
| -rw-r--r-- | src/doc_reform/output/xmls.d | 130 | 
7 files changed, 125 insertions, 127 deletions
| diff --git a/src/doc_reform/meta/metadoc_from_src.d b/src/doc_reform/meta/metadoc_from_src.d index 5df5e87..2dfd746 100644 --- a/src/doc_reform/meta/metadoc_from_src.d +++ b/src/doc_reform/meta/metadoc_from_src.d @@ -712,13 +712,9 @@ template DocReformDocAbstraction() {            /+ within block object: block +/            line = line._doc_header_and_make_substitutions_(conf_make_meta);            line = line._doc_header_and_make_substitutions_fontface_(conf_make_meta); -          if (auto m = line.match(rgx.spaces_line_start)) { +          if (auto m = line.match(rgx.spaces_keep)) {              line = line -              .replaceAll(rgx.spaces_line_start, (m.captures[1]).translate([ ' ' : mkup.nbsp ])); -          } -          if (auto m = line.match(rgx.spaces_multiple)) { -            line = line -              .replaceAll(rgx.spaces_multiple, (m.captures[1]).translate([ ' ' : mkup.nbsp ])); +              .replaceAll(rgx.spaces_keep, (m.captures[1]).translate([ ' ' : mkup.nbsp ]));            }            line._block_block_(an_object, obj_type_status);            continue; @@ -1743,7 +1739,7 @@ template DocReformDocAbstraction() {              obj.stow.link ~= obj.text.matchFirst(rgx.inline_link_stow_uri)[2];              obj.text = obj.text.replaceFirst(                rgx.inline_link_stow_uri, -              format(q"¶┥%s┝┤%s├¶", "$1", i) +              format(q"┋┥%s┝┤%s├┋", "$1", i)              );            }          } diff --git a/src/doc_reform/meta/rgx.d b/src/doc_reform/meta/rgx.d index dcfc245..df294e8 100644 --- a/src/doc_reform/meta/rgx.d +++ b/src/doc_reform/meta/rgx.d @@ -200,6 +200,7 @@ static template DocReformRgxInit() {      static newline                                        = ctRegex!("\n", "mg");      static strip_br                                       = ctRegex!("^<br>\n|<br>\n*$");      static space                                          = ctRegex!(`[ ]`, "mg"); +    static spaces_keep                                    = ctRegex!(`(?P<keep_spaces>^[ ]+|[ ]{2,})`, "mg"); // code, verse, block      static spaces_line_start                              = ctRegex!(`^(?P<opening_spaces>[ ]+)`, "mg");      static spaces_multiple                                = ctRegex!(`(?P<multiple_spaces>[ ]{2,})`, "mg");      static two_spaces                                     = ctRegex!(`[ ]{2}`, "mg"); @@ -269,7 +270,7 @@ static template DocReformRgxInit() {      static inline_seg_link                                = ctRegex!(`(¤)(?:.+?)\.fnSuffix`, "mg");      static mark_internal_site_lnk                         = ctRegex!(`¤`, "mg");      static quotation_mark_sql_insert_delimiter            = ctRegex!("[']", "mg"); -    static quotation_mark_various                         = ctRegex!(q"¶['‘’“”"`´¨]¶", "mg"); +    static quotation_mark_various                         = ctRegex!(q"┋['‘’“”"`´¨]┋", "mg");      /+ inline markup font face mod +/      static inline_faces                                   = ctRegex!(`(?P<markup>(?P<mod>[*!_^,+#-])\{(?P<text>.+?)\}[*!_^,+#-])`, "mg");      static inline_emphasis                                = ctRegex!(`\*\{(?P<text>.+?)\}\*`, "mg"); diff --git a/src/doc_reform/output/epub3.d b/src/doc_reform/output/epub3.d index f57229b..97d8427 100644 --- a/src/doc_reform/output/epub3.d +++ b/src/doc_reform/output/epub3.d @@ -16,25 +16,25 @@ template outputEPub3() {    mixin outputXHTMLs;    string epub3_mimetypes() {      string o; -    o = format(q"¶application/epub+zip¶") ~ "\n"; +    o = format(q"┋application/epub+zip┋") ~ "\n";      return o;    }    string epub3_container_xml() {      string o; -    o = format(q"¶<?xml version='1.0' encoding='utf-8'?>¶") ~ "\n"; -    o ~= format(q"¶<container version="1.0" +    o = format(q"┋<?xml version='1.0' encoding='utf-8'?>┋") ~ "\n"; +    o ~= format(q"┋<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>¶") ~ "\n</container>\n"; +  </rootfiles>┋") ~ "\n</container>\n";      return o;    }    string epub3_oebps_content(D,M,P)(D doc_abstraction, M doc_matters, P parts) {      auto xhtml_format = outputXHTMLs();      auto pth_epub3 = DocReformPathsEPUB!()(doc_matters.output_path, doc_matters.src.language);      string _uuid = "18275d951861c77f78acd05672c9906924c59f18a2e0ba06dad95959693e9bd8"; // TODO sort uuid in doc_matters! -    string content = format(q"¶  <?xml version='1.0' encoding='utf-8'?> +    string content = format(q"┋  <?xml version='1.0' encoding='utf-8'?>    <package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="EPB-UUID">      <metadata        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" @@ -61,7 +61,7 @@ template outputEPub3() {          <link rel="stylesheet" href="%s" type="text/css" id="main-css" />        <!-- nav epub3 navigation -->          <item id="nav" href="toc_nav.xhtml" media-type="application/xhtml+xml" properties="nav" /> -  ¶", +  ┋",        _uuid,        xhtml_format.special_characters_text(doc_matters.conf_make_meta.meta.title_full),        xhtml_format.special_characters_text(doc_matters.conf_make_meta.meta.title_main), @@ -86,8 +86,8 @@ template outputEPub3() {      // TODO sort jpg & png      content ~= "    " ~ "<!-- Images -->" ~ "\n  ";      foreach (image; doc_matters.srcs.image_list) { -      content ~= format(q"¶      <item id="%s" href="%s/%s" media-type="image/%s" /> -  ¶", +      content ~= format(q"┋      <item id="%s" href="%s/%s" media-type="image/%s" /> +  ┋",          image.baseName.stripExtension,          (pth_epub3.doc_oebps_image(doc_matters.src.filename)).chompPrefix("OEBPS/"),          image, @@ -213,7 +213,7 @@ template outputEPub3() {      auto markup = InlineMarkup();      auto rgx = Rgx();      enum DomTags { none, open, close, close_and_open, open_still, } -    string toc = format(q"¶<?xml version='1.0' encoding='utf-8'?> +    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, @@ -232,7 +232,7 @@ template outputEPub3() {    <docAuthor>      <text>%s</text>    </docAuthor> -  <navMap>¶", +  <navMap>┋",        doc_matters.conf_make_meta.meta.title_full,                          // title        (doc_matters.conf_make_meta.meta.creator_author.empty) ? ""          : " by " ~ doc_matters.conf_make_meta.meta.creator_author,         // author @@ -255,12 +255,12 @@ template outputEPub3() {              case DomTags.close_and_open :                ++counter;                toc ~= "\n    </navPoint>"; -              toc ~= format(q"¶ +              toc ~= format(q"┋      <navPoint class="chapter" id="navpoint" playOrder="%s">        <navLabel>          <text>%s</text>        </navLabel> -      <content src="%s.xhtml%s" />¶", +      <content src="%s.xhtml%s" />┋",                  counter,                  _txt,                  obj.tags.segment_anchor_tag_epub, @@ -269,12 +269,12 @@ template outputEPub3() {                break;              case DomTags.open :                ++counter; -              toc ~= format(q"¶ +              toc ~= format(q"┋      <navPoint class="chapter" id="navpoint" playOrder="%s">        <navLabel>          <text>%s</text>        </navLabel> -      <content src="%s.xhtml%s" />¶", +      <content src="%s.xhtml%s" />┋",                  counter,                  _txt,                  obj.tags.segment_anchor_tag_epub, @@ -288,8 +288,8 @@ template outputEPub3() {          }        }      } -    toc ~= format(q"¶  </navMap> -  </ncx>¶"); +    toc ~= format(q"┋  </navMap> +  </ncx>┋");      return toc;    } @@ -552,40 +552,40 @@ template outputEPub3() {            assert(obj.text.length > 0);            if (obj.metainfo.heading_lev_markup <= 4) {              oepbs_content_parts["manifest_documents"] ~= -              format(q"¶      <item id="%s.xhtml" href="%s.xhtml" media-type="application/xhtml+xml" /> -  ¶", +              format(q"┋      <item id="%s.xhtml" href="%s.xhtml" media-type="application/xhtml+xml" /> +  ┋",                obj.tags.segment_anchor_tag_epub,                obj.tags.segment_anchor_tag_epub,              );              oepbs_content_parts["spine"] ~= -              format(q"¶    <itemref idref="%s.xhtml" linear="yes" /> -  ¶", +              format(q"┋    <itemref idref="%s.xhtml" linear="yes" /> +  ┋",                obj.tags.segment_anchor_tag_epub,              );              oepbs_content_parts["guide"] ~= -              format(q"¶      <reference type="%s" href="%s" /> -  ¶", +              format(q"┋      <reference type="%s" href="%s" /> +  ┋",                obj.tags.segment_anchor_tag_epub,                obj.tags.segment_anchor_tag_epub,              );            } else if (obj.metainfo.heading_lev_markup > 4) {              oepbs_content_parts["manifest_documents"] ~= -              format(q"¶      <item id="%s.xhtml#%s" href="%s.xhtml#%s" media-type="application/xhtml+xml" /> -  ¶", +              format(q"┋      <item id="%s.xhtml#%s" href="%s.xhtml#%s" media-type="application/xhtml+xml" /> +  ┋",                obj.tags.segment_anchor_tag_epub,                obj.metainfo.object_number,                obj.tags.segment_anchor_tag_epub,                obj.metainfo.object_number,              );              oepbs_content_parts["spine"] ~= -              format(q"¶    <itemref idref="%s.xhtml#%s" linear="yes" /> -  ¶", +              format(q"┋    <itemref idref="%s.xhtml#%s" linear="yes" /> +  ┋",                obj.tags.segment_anchor_tag_epub,                obj.metainfo.object_number,              );              oepbs_content_parts["guide"] ~= -              format(q"¶      <reference type="%s#%s" href="%s#%s" /> -  ¶", +              format(q"┋      <reference type="%s#%s" href="%s#%s" /> +  ┋",                obj.tags.segment_anchor_tag_epub,                obj.metainfo.object_number,                obj.tags.segment_anchor_tag_epub, diff --git a/src/doc_reform/output/paths_output.d b/src/doc_reform/output/paths_output.d index f6e8f1b..c35fa55 100644 --- a/src/doc_reform/output/paths_output.d +++ b/src/doc_reform/output/paths_output.d @@ -92,7 +92,7 @@ template DocReformPathsUrl() {          return _doc_root;        }        string html_seg(string html_segname, string obj_id) { // TODO bespoke for sqlite -        string _url = format(q"¶%s/%s/html/%s/%s.html#%s¶", +        string _url = format(q"┋%s/%s/html/%s/%s.html#%s┋",            doc_root,            doc_matters.src.language,            doc_matters.src.filename_base, diff --git a/src/doc_reform/output/rgx.d b/src/doc_reform/output/rgx.d index bfd2a4e..0483f1b 100644 --- a/src/doc_reform/output/rgx.d +++ b/src/doc_reform/output/rgx.d @@ -8,6 +8,7 @@ static template DocReformOutputRgxInit() {      static newline                                        = ctRegex!("\n", "mg");      static strip_br                                       = ctRegex!("^<br>\n|<br>\n*$");      static space                                          = ctRegex!(`[ ]`, "mg"); +    static spaces_keep                                    = ctRegex!(`(?P<keep_spaces>^[ ]+|[ ]{2,})`, "mg"); // code, verse, block      static spaces_line_start                              = ctRegex!(`^(?P<opening_spaces>[ ]+)`, "mg");      static spaces_multiple                                = ctRegex!(`(?P<multiple_spaces>[ ]{2,})`, "mg");      static two_spaces                                     = ctRegex!(`[ ]{2}`, "mg"); @@ -77,7 +78,7 @@ static template DocReformOutputRgxInit() {      static inline_seg_link                                = ctRegex!(`(¤)(?:.+?)\.fnSuffix`, "mg");      static mark_internal_site_lnk                         = ctRegex!(`¤`, "mg");      static quotation_mark_sql_insert_delimiter            = ctRegex!("[']", "mg"); -    static quotation_mark_various                         = ctRegex!(q"¶['‘’“”"`´¨]¶", "mg"); +    static quotation_mark_various                         = ctRegex!(q"┋['‘’“”"`´¨]┋", "mg");      /+ inline markup font face mod +/      static inline_faces                                   = ctRegex!(`(?P<markup>(?P<mod>[*!_^,+#-])\{(?P<text>.+?)\}[*!_^,+#-])`, "mg");      static inline_emphasis                                = ctRegex!(`\*\{(?P<text>.+?)\}\*`, "mg"); diff --git a/src/doc_reform/output/sqlite.d b/src/doc_reform/output/sqlite.d index acfbff3..5f4e99d 100644 --- a/src/doc_reform/output/sqlite.d +++ b/src/doc_reform/output/sqlite.d @@ -459,9 +459,9 @@ template SQLiteFormatAndLoadObject() {        ) {          string _txt = munge_html(doc_matters, obj);          _txt = inline_markup(doc_matters, obj, _txt); -        string o = format(q"¶<p class="%s"><b> +        string o = format(q"┋<p class="%s"><b>              %s -          </b></p>¶", +          </b></p>┋",              obj.metainfo.is_a,              _txt,            ); @@ -474,9 +474,9 @@ template SQLiteFormatAndLoadObject() {          string _txt = munge_html(doc_matters, obj);          _txt = (obj.attrib.bullet) ? ("●  " ~ _txt) : _txt;          _txt = inline_markup(doc_matters, obj, _txt); -        string o = format(q"¶<p class="%s" indent="h%si%s"> +        string o = format(q"┋<p class="%s" indent="h%si%s">            %s -        </p>¶", +        </p>┋",              obj.metainfo.is_a,              obj.attrib.indent_hang,              obj.attrib.indent_base, @@ -489,9 +489,9 @@ template SQLiteFormatAndLoadObject() {          auto ref const O    obj,        ) {          string _txt = munge_html(doc_matters, obj); -        string o = format(q"¶<p class="%s"> +        string o = format(q"┋<p class="%s">            %s -        </p>¶", +        </p>┋",              obj.metainfo.is_a,              _txt            ); @@ -502,9 +502,9 @@ template SQLiteFormatAndLoadObject() {          auto ref const O    obj,        ) {          string _txt = munge_html(doc_matters, obj); -        string o = format(q"¶<p class="%s"> +        string o = format(q"┋<p class="%s">            %s -        </p>¶", +        </p>┋",              obj.metainfo.is_a,              _txt            ); @@ -515,8 +515,8 @@ template SQLiteFormatAndLoadObject() {          auto ref const O    obj,        ) {          string _txt = munge_html(doc_matters, obj); -        string o = format(q"¶ -        <p class="%s">%s</p>¶", +        string o = format(q"┋ +        <p class="%s">%s</p>┋",              obj.metainfo.is_a,              _txt.stripRight            ); @@ -527,7 +527,7 @@ template SQLiteFormatAndLoadObject() {          auto ref const O    obj,        ) {          string _txt = munge_html(doc_matters, obj); -        string o = format(q"¶<p class="%s">%s</p>¶", +        string o = format(q"┋<p class="%s">%s</p>┋",              obj.metainfo.is_a,              _txt            ); @@ -537,7 +537,7 @@ template SQLiteFormatAndLoadObject() {          auto ref const O    obj,        ) {          string _txt = html_special_characters_code(obj.text); -        string o = format(q"¶<p class="%s">%s</p>¶", +        string o = format(q"┋<p class="%s">%s</p>┋",              obj.metainfo.is_a,              _txt            ); @@ -592,12 +592,12 @@ template SQLiteFormatAndLoadObject() {          auto t = _tablarize(obj, _txt);          _txt = t[0];          string _note = t[1]; -        string o = format(q"¶<p class="%s"> +        string o = format(q"┋<p class="%s">            <table summary="normal text css" width="95%%" border="0" bgcolor="white" cellpadding="2" align="center">              %s            </table>            %s -        </p>¶", +        </p>┋",            obj.metainfo.is_a,            _txt,            _note @@ -823,7 +823,7 @@ template SQLiteFormatAndLoadObject() {  template SQLiteTablesReCreate() {    string SQLiteTablesReCreate()() {      string _sql_instruct; -    _sql_instruct = format(q"¶ +    _sql_instruct = format(q"┋        DROP INDEX IF EXISTS idx_ocn;        DROP INDEX IF EXISTS idx_uid;        DROP INDEX IF EXISTS idx_digest_clean; @@ -952,7 +952,7 @@ template SQLiteTablesReCreate() {        CREATE INDEX idx_filename ON metadata_and_text(src_filename);        CREATE INDEX idx_language ON metadata_and_text(language_document_char);        CREATE INDEX idx_topics ON metadata_and_text(classify_topic_register); -    ¶",); +    ┋",);      return _sql_instruct;    }  } @@ -961,12 +961,12 @@ template SQLiteDeleteDocument() {      M doc_matters,    ) {      string _uid = doc_matters.src.doc_uid; -    string _delete_uid = format(q"¶ +    string _delete_uid = format(q"┋      DELETE FROM metadata_and_text      WHERE uid = '%s';      DELETE FROM doc_objects      WHERE uid_metadata_and_text = '%s'; -    ¶", +    ┋",        _uid,        _uid,      ); @@ -978,7 +978,7 @@ template SQLiteInsertMetadata() {      M doc_matters,    ) {      string _uid = SQLinsertDelimiter!()(doc_matters.src.doc_uid); -    string _insert_metadata = format(q"¶ +    string _insert_metadata = format(q"┋        INSERT INTO metadata_and_text (          uid,          src_filename, @@ -1079,7 +1079,7 @@ template SQLiteInsertMetadata() {          '%s',          '%s'        ); -    ¶", +    ┋",        _uid,        SQLinsertDelimiter!()(doc_matters.src.filename),        SQLinsertDelimiter!()(doc_matters.src.docname_composite_unique_per_src_doc), @@ -1140,7 +1140,7 @@ template SQLiteInsertDocObjectsLoop() {      string _uid = SQLinsertDelimiter!()(doc_matters.src.doc_uid);      auto site_url = DocReformPathsUrl!()(doc_matters);      string insertDocObjectsRow(O)(O obj) { -      string _insert_doc_objects_row = format(q"¶ +      string _insert_doc_objects_row = format(q"┋          INSERT INTO doc_objects (            uid_metadata_and_text,            ocn, @@ -1163,7 +1163,7 @@ template SQLiteInsertDocObjectsLoop() {            '%s',            '%s'          ); -      ¶", +      ┋",          _uid,          obj.metainfo.ocn,          obj.metainfo.identifier, @@ -1359,7 +1359,7 @@ template SQLiteTablesCreate() {      template SQLiteTablesReCreate() {        string SQLiteTablesReCreate()() {          string _sql_instruct; -        _sql_instruct = format(q"¶ +        _sql_instruct = format(q"┋            DROP INDEX IF EXISTS idx_ocn;            DROP INDEX IF EXISTS idx_uid;            DROP INDEX IF EXISTS idx_digest_clean; @@ -1488,7 +1488,7 @@ template SQLiteTablesCreate() {            CREATE INDEX idx_filename ON metadata_and_text(src_filename);            CREATE INDEX idx_language ON metadata_and_text(language_document_char);            CREATE INDEX idx_topics ON metadata_and_text(classify_topic_register); -        ¶",); +        ┋",);          return _sql_instruct;        }      } diff --git a/src/doc_reform/output/xmls.d b/src/doc_reform/output/xmls.d index 97262a1..266ad55 100644 --- a/src/doc_reform/output/xmls.d +++ b/src/doc_reform/output/xmls.d @@ -95,7 +95,7 @@ template outputXHTMLs() {      ) {        string _publisher="Publisher"; // TODO        string o; -      o = format(q"¶<!-- DocReform header metadata --> +      o = format(q"┋<!-- DocReform header metadata -->      <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />      <meta name="dc.title" content="%s" />      <meta name="dc.author" content="%s" /> @@ -110,7 +110,7 @@ template outputXHTMLs() {      <meta name="dc.rights" content="%s" />      <meta name="generator" content="%s" />      <link rel="generator" href="%s" /> -    <!-- DocReform header metadata -->¶", +    <!-- DocReform header metadata -->┋",          doc_matters.conf_make_meta.meta.title_full,          doc_matters.conf_make_meta.meta.creator_author,          _publisher, @@ -144,9 +144,9 @@ template outputXHTMLs() {           _locations = "<p class=\"tiny_left\"><a href=\"http://www.doc-reform.org\">doc-reform</a></p>\n<p class=\"tiny_left\"><a href=\"http://git.sisudoc.org/software/doc-reform/\">sources / git</a></p>\n<p class=\"tiny_left\"><a href=\"http://www.sisudoc.org\">www.sisudoc.org</a></p>";        }        string o; -      o = format(q"¶<div class="flex-menu-option"> +      o = format(q"┋<div class="flex-menu-option">            %s -        </div>¶", +        </div>┋",          _locations,        );        return o; @@ -159,7 +159,7 @@ template outputXHTMLs() {        string o;        string _form;        if (doc_matters.opt.action.workon) { -        _form = format(q"¶ +        _form = format(q"┋      <a name="search"></a>      <form method="get" action="%s" target="_top">      <font size="2"> @@ -171,17 +171,17 @@ template outputXHTMLs() {      <input type="submit" name="search" value="search doc" />      <input type="submit" name="search" value="search db" />      </font></form> -          ¶", +          ┋",          _action,          _db,          );        } else { -        _form = format(q"¶%s¶", +        _form = format(q"┋%s┋",            "",          );        } -      o = format(q"¶<div class="flex-menu-option">%s -        </div>¶", +      o = format(q"┋<div class="flex-menu-option">%s +        </div>┋",          _form,        );        return o; @@ -192,17 +192,17 @@ template outputXHTMLs() {      ) {      string _manifest = "";      if (doc_matters.opt.action.workon) { -      _manifest = format(q"¶ +      _manifest = format(q"┋           <a href="../../manifest/sisu.en.html" target="_top">             <font face="verdana, arial, georgia, tahoma, sans-serif, helvetica, times, roman" size="2">               [ document manifest ]             </font>           </a> -         ¶", +         ┋",        );      }        string o; -      o = format(q"¶<!DOCTYPE html> +      o = format(q"┋<!DOCTYPE html>      <html>      <head>        <meta charset="utf-8" /> @@ -224,7 +224,7 @@ template outputXHTMLs() {          <div class="flex-menu-option">            %s          </div> -        %s%s¶", +        %s%s┋",          doc_matters.conf_make_meta.meta.title_full,          (doc_matters.conf_make_meta.meta.creator_author.empty) ? ""            : ", " ~ doc_matters.conf_make_meta.meta.creator_author, @@ -244,27 +244,27 @@ template outputXHTMLs() {      auto epub3_seg_head(M)(        M  doc_matters,      ) { -      string html_base = format(q"¶<!DOCTYPE html> -    <html>¶", +      string html_base = format(q"┋<!DOCTYPE html> +    <html>┋",      ); -      string html_simple = format(q"¶<!DOCTYPE html> +      string html_simple = format(q"┋<!DOCTYPE html>      <html        xmlns="http://www.w3.org/1999/xhtml"        xmlns:epub="http://www.idpf.org/2007/ops" -      lang="%s" xml:lang="%s">¶", +      lang="%s" xml:lang="%s">┋",          doc_matters.src.language,          doc_matters.src.language,        ); -      string html_strict = format(q"¶<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" +      string html_strict = format(q"┋<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"           "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">      <html xmlns="http://www.w3.org/1999/xhtml"        xmlns:epub="http://www.idpf.org/2007/ops" -      lang="%s" xml:lang="%s">¶", +      lang="%s" xml:lang="%s">┋",          doc_matters.src.language,          doc_matters.src.language,        );        string o; -      o = format(q"¶%s +      o = format(q"┋%s      <head>        <title>          %s%s @@ -287,7 +287,7 @@ template outputXHTMLs() {        <link rel="stylesheet" href="css/epub.css" type="text/css" id="main-css" />      </head>      <body lang="%s"> -    <a name="top" id="top"></a>¶", +    <a name="top" id="top"></a>┋",          html_simple,          doc_matters.conf_make_meta.meta.title_full,          (doc_matters.conf_make_meta.meta.creator_author.empty) ? "" @@ -311,11 +311,11 @@ template outputXHTMLs() {      }      auto tail() {        string o; -      o = format(q"¶  </div> +      o = format(q"┋  </div>        <a name="bottom" id="bottom"></a>        <a name="end" id="end"></a>      </body> -    </html>¶"); +    </html>┋");        return o;      }      auto inline_images(O,M)( @@ -529,10 +529,10 @@ template outputXHTMLs() {            text = font_face(text);            auto link = m.captures[3].to!string;            lev4_subtoc ~= subtoc.replaceFirst(rgx.inline_link_subtoc, -            format(q"¶    <p class="minitoc" indent="h%si%s"> +            format(q"┋    <p class="minitoc" indent="h%si%s">            ۰ <a href="%s">%s</a>          </p> -    ¶", +    ┋",                indent,                indent,                link, @@ -552,42 +552,42 @@ template outputXHTMLs() {          toc = "";          prev = "";        } else { -        toc = format(q"¶<a href="toc.html" target="_top"> +        toc = format(q"┋<a href="toc.html" target="_top">                <div class="toc-button menu">                  <svg viewbox="0 0 100 100">                    <path d="M4,10h24c1.104,0,2-0.896,2-2s-0.896-2-2-2H4C2.896,6,2,6.896,2,8S2.896,10,4,10z M28,14H4c-1.104,0-2,0.896-2,2  s0.896,2,2,2h24c1.104,0,2-0.896,2-2S29.104,14,28,14z M28,22H4c-1.104,0-2,0.896-2,2s0.896,2,2,2h24c1.104,0,2-0.896,2-2  S29.104,22,28,22z"/>                  </svg>                </div> -            </a>¶", +            </a>┋",          );        }        if (obj.tags.segname_prev == "") {          prev = "";        } else { -        prev = format(q"¶<a href="%s.html" target="_top"> +        prev = format(q"┋<a href="%s.html" target="_top">                <div class="prev-next-button previous">                  <svg viewbox="0 0 100 100">                    <path class="arrow" d="M 50,0 L 60,10 L 20,50 L 60,90 L 50,100 L 0,50 Z" transform=" translate(15,0)">                  </svg>                </div> -            </a>¶", +            </a>┋",            obj.tags.segname_prev,          );        }        if (obj.tags.segname_next == "") {          next = "";        } else { -        next = format(q"¶<a href="%s.html" target="_top"> +        next = format(q"┋<a href="%s.html" target="_top">                <div class="prev-next-button next">                  <svg viewbox="0 0 100 100">                    <path class="arrow" d="M 50,0 L 60,10 L 20,50 L 60,90 L 50,100 L 0,50 Z "transform="translate(85,100) rotate(180) ">                  </svg>                </div> -            </a>¶", +            </a>┋",            obj.tags.segname_next,          );        } -      string _toc_pre_next = format(q"¶        <div class="flex-menu-option"> +      string _toc_pre_next = format(q"┋        <div class="flex-menu-option">            <div class="nav-bar">              %s              %s @@ -595,19 +595,19 @@ template outputXHTMLs() {            </div>          </div>        </div> -    </div>¶", +    </div>┋",          toc,          prev,          next,        ); -      string _pre_next = format(q"¶        <div class="flex-menu-option"> +      string _pre_next = format(q"┋        <div class="flex-menu-option">            <div class="nav-bar">              %s              %s            </div>          </div>        </div> -    </div>¶", +    </div>┋",          prev,          next,        ); @@ -643,13 +643,13 @@ template outputXHTMLs() {          ? ""          : "<a name=\"" ~ obj.tags.heading_lev_anchor_tag ~ "\"></a>";        if (!(obj.metainfo.identifier.empty)) { -        o = format(q"¶%s +        o = format(q"┋%s        <div class="substance">          <label class="ocn"><a href="#%s" class="lnkocn">%s</a></label>          <h%s class="%s" id="%s"><a name="%s"></a>%s%s            %s          </h%s> -      </div>¶", +      </div>┋",          _horizontal_rule,          obj.metainfo.identifier,          (obj.metainfo.object_number.empty) ? "" : obj.metainfo.identifier, @@ -663,12 +663,12 @@ template outputXHTMLs() {          obj.metainfo.heading_lev_markup,          );        } else { -        o = format(q"¶%s +        o = format(q"┋%s        <div class="substance">          <h%s class="%s">%s%s            %s          </h%s> -      </div>¶", +      </div>┋",            _horizontal_rule,            obj.metainfo.heading_lev_markup,            obj.metainfo.is_a, @@ -723,12 +723,12 @@ template outputXHTMLs() {        _txt = _txt.replaceFirst(rgx.inline_link_anchor,           "<a name=\"$1\"></a>");        if (!(obj.metainfo.identifier.empty)) { -        o = format(q"¶  <div class="substance"> +        o = format(q"┋  <div class="substance">        <label class="ocn"><a href="#%s" class="lnkocn">%s</a></label>        <p class="%s" indent="h%si%s" id="%s">%s          %s        </p> -    </div>¶", +    </div>┋",            obj.metainfo.identifier,            (obj.metainfo.object_number.empty) ? "" : obj.metainfo.identifier,            obj.metainfo.is_a, @@ -739,11 +739,11 @@ template outputXHTMLs() {            _txt          );        } else { -        o = format(q"¶  <div class="substance"> +        o = format(q"┋  <div class="substance">        <p class="%s" indent="h%si%s">%s          %s        </p> -    </div>¶", +    </div>┋",            obj.metainfo.is_a,            obj.attrib.indent_hang,            obj.attrib.indent_base, @@ -792,12 +792,12 @@ template outputXHTMLs() {        _txt = font_face(_txt);        string o;        if (!(obj.metainfo.identifier.empty)) { -        o = format(q"¶  <div class="substance"> +        o = format(q"┋  <div class="substance">        <label class="ocn"><a href="#%s" class="lnkocn">%s</a></label>        <p class="%s" id="%s">          %s        </p> -    </div>¶", +    </div>┋",            obj.metainfo.identifier,            (obj.metainfo.object_number.empty) ? "" : obj.metainfo.identifier,            obj.metainfo.is_a, @@ -805,11 +805,11 @@ template outputXHTMLs() {            _txt          );        } else { -        o = format(q"¶  <div class="substance"> +        o = format(q"┋  <div class="substance">        <p class="%s">          %s        </p> -    </div>¶", +    </div>┋",            obj.metainfo.is_a,            _txt          ); @@ -855,12 +855,12 @@ template outputXHTMLs() {        _txt = font_face(_txt);        string o;        if (!(obj.metainfo.identifier.empty)) { -        o = format(q"¶  <div class="substance"> +        o = format(q"┋  <div class="substance">        <label class="ocn"><a href="#%s" class="lnkocn">%s</a></label>        <p class="%s" id="%s">          %s        </p> -    </div>¶", +    </div>┋",            obj.metainfo.identifier,            (obj.metainfo.object_number.empty) ? "" : obj.metainfo.identifier,            obj.metainfo.is_a, @@ -868,11 +868,11 @@ template outputXHTMLs() {            _txt          );        } else { -        o = format(q"¶  <div class="substance"> +        o = format(q"┋  <div class="substance">        <p class="%s">          %s        </p> -    </div>¶", +    </div>┋",            obj.metainfo.is_a,            _txt          ); @@ -919,10 +919,10 @@ template outputXHTMLs() {        _txt = font_face(_txt);        string o;        if (!(obj.metainfo.identifier.empty)) { -        o = format(q"¶  <div class="substance"> +        o = format(q"┋  <div class="substance">        <label class="ocn"><a href="#%s" class="lnkocn">%s</a></label>        <p class="%s" id="%s">%s</p> -    </div>¶", +    </div>┋",            obj.metainfo.identifier,            (obj.metainfo.object_number.empty) ? "" : obj.metainfo.identifier,            obj.metainfo.is_a, @@ -930,9 +930,9 @@ template outputXHTMLs() {            _txt.stripRight          );        } else { -        o = format(q"¶  <div class="substance"> +        o = format(q"┋  <div class="substance">        <p class="%s">%s</p> -    </div>¶", +    </div>┋",            obj.metainfo.is_a,            _txt.stripRight          ); @@ -979,10 +979,10 @@ template outputXHTMLs() {        _txt = font_face(_txt);        string o;        if (!(obj.metainfo.identifier.empty)) { -        o = format(q"¶  <div class="substance"> +        o = format(q"┋  <div class="substance">            <label class="ocn"><a href="#%s" class="lnkocn">%s</a></label>            <p class="%s" id="%s">%s</p> -        </div>¶", +        </div>┋",            obj.metainfo.identifier,            (obj.metainfo.object_number.empty) ? "" : obj.metainfo.identifier,            obj.metainfo.is_a, @@ -990,9 +990,9 @@ template outputXHTMLs() {            _txt          );        } else { -        o = format(q"¶  <div class="substance"> +        o = format(q"┋  <div class="substance">            <p class="%s">%s</p> -        </div>¶", +        </div>┋",            obj.metainfo.is_a,            _txt          ); @@ -1075,7 +1075,7 @@ template outputXHTMLs() {        _txt = t[0];        string _note = t[1];        string o; -      o = format(q"¶  <div class="substance"> +      o = format(q"┋  <div class="substance">        <label class="ocn"><a href="#%s" class="lnkocn">%s</a></label>        <p class="%s" id="%s">%s          <table summary="normal text css" width="95%%" border="0" bgcolor="white" cellpadding="2" align="center"> @@ -1083,7 +1083,7 @@ template outputXHTMLs() {          </table>          %s        </p> -    </div>¶", +    </div>┋",          obj.metainfo.object_number,          obj.metainfo.object_number,          obj.metainfo.is_a, @@ -1104,10 +1104,10 @@ template outputXHTMLs() {        assert(obj.metainfo.is_a          == "code");        string o;        if (!(obj.metainfo.identifier.empty)) { -        o = format(q"¶  <div class="substance"> +        o = format(q"┋  <div class="substance">        <label class="ocn"><a href="#%s" class="lnkocn">%s</a></label>        <pre><p class="%s" id="%s">%s</p></pre> -    </div>¶", +    </div>┋",            obj.metainfo.identifier,            (obj.metainfo.object_number.empty) ? "" : obj.metainfo.identifier,            obj.metainfo.is_a, @@ -1115,9 +1115,9 @@ template outputXHTMLs() {            _txt          );        } else { -        o = format(q"¶  <div class="substance"> +        o = format(q"┋  <div class="substance">        <pre><p class="%s">%s</p></pre> -    </div>¶", +    </div>┋",            obj.metainfo.is_a,            _txt          ); | 
