From 3c2da303eed87e506533c738c1bcfda154944790 Mon Sep 17 00:00:00 2001
From: Ralph Amissah <ralph.amissah@gmail.com>
Date: Tue, 25 Jan 2022 14:36:59 -0500
Subject: doc presentation, add option to include date with title and author

---
 src/doc_reform/io_out/epub3.d          |  4 +++-
 src/doc_reform/io_out/xmls.d           | 14 ++++++++++++--
 src/doc_reform/meta/metadoc_from_src.d | 28 +++++++++++++++++++++++++---
 src/doc_reform/meta/rgx.d              |  3 +++
 4 files changed, 43 insertions(+), 6 deletions(-)

(limited to 'src')

diff --git a/src/doc_reform/io_out/epub3.d b/src/doc_reform/io_out/epub3.d
index 029a2c2..6593db5 100644
--- a/src/doc_reform/io_out/epub3.d
+++ b/src/doc_reform/io_out/epub3.d
@@ -70,6 +70,8 @@ template outputEPub3() {
       .replaceAll(rgx.xhtml_quotation,    "&quot;") // "&#34;"
       .replaceAll(rgx.xhtml_less_than,    "&lt;")   // "&#60;"
       .replaceAll(rgx.xhtml_greater_than, "&gt;")   // "&#62;"
+      .replaceAll(rgx.br_line,            "<br>")
+      .replaceAll(rgx.br_nl,              "<br>")
       .replaceAll(rgx.nbsp_char,          " ");
     return _txt;
   }
@@ -126,7 +128,7 @@ template outputEPub3() {
         ? "" : xhtml_format.special_characters_text(doc_matters.conf_make_meta.meta.creator_author),
       doc_matters.src.language,                                   // language, fix (needed in dochead metadata)
       (doc_matters.conf_make_meta.meta.date_published.empty)
-        ? "" : xhtml_format.special_characters_text(doc_matters.conf_make_meta.meta.date_published),
+        ? "" : xhtml_format.special_characters_date(doc_matters.conf_make_meta.meta.date_published),
       (doc_matters.conf_make_meta.meta.rights_copyright.empty)
         ? "" : xhtml_format.special_characters_text(doc_matters.conf_make_meta.meta.rights_copyright),
       _uuid,
diff --git a/src/doc_reform/io_out/xmls.d b/src/doc_reform/io_out/xmls.d
index f0c7185..f4ca976 100644
--- a/src/doc_reform/io_out/xmls.d
+++ b/src/doc_reform/io_out/xmls.d
@@ -99,6 +99,16 @@ template outputXHTMLs() {
         .replaceAll(rgx.xhtml_quotation,    "&quot;") // "&#34;"
         .replaceAll(rgx.xhtml_less_than,    "&lt;")   // "&#60;"
         .replaceAll(rgx.xhtml_greater_than, "&gt;")   // "&#62;"
+        .replaceAll(rgx.br_line,            "<br>")
+        .replaceAll(rgx.br_nl,              "<br>")
+        .replaceAll(rgx.nbsp_char,          " ");
+      return _txt;
+    }
+    @safe string special_characters_date(string _txt) {
+      _txt = _txt
+        .replaceAll(regex(r"(?:-00)+"),     "")
+        .replaceAll(rgx.br_line,            "<br>")
+        .replaceAll(rgx.br_nl,              "<br>")
         .replaceAll(rgx.nbsp_char,          " ");
       return _txt;
     }
@@ -202,7 +212,7 @@ template outputXHTMLs() {
         special_characters_text(doc_matters.conf_make_meta.meta.title_full),
         special_characters_text(doc_matters.conf_make_meta.meta.creator_author),
         _publisher,
-        special_characters_text(doc_matters.conf_make_meta.meta.date_published),
+        special_characters_date(doc_matters.conf_make_meta.meta.date_published),
         special_characters_text(doc_matters.conf_make_meta.meta.date_created),
         special_characters_text(doc_matters.conf_make_meta.meta.date_issued),
         special_characters_text(doc_matters.conf_make_meta.meta.date_available),
@@ -382,7 +392,7 @@ template outputXHTMLs() {
         special_characters_text(doc_matters.conf_make_meta.meta.title_full),
         (doc_matters.conf_make_meta.meta.creator_author.empty) ? ""
           : ", " ~ special_characters_text(doc_matters.conf_make_meta.meta.creator_author),
-        special_characters_text(doc_matters.conf_make_meta.meta.date_published),
+        special_characters_date(doc_matters.conf_make_meta.meta.date_published),
         special_characters_text(doc_matters.conf_make_meta.meta.date_created),
         special_characters_text(doc_matters.conf_make_meta.meta.date_issued),
         special_characters_text(doc_matters.conf_make_meta.meta.date_available),
diff --git a/src/doc_reform/meta/metadoc_from_src.d b/src/doc_reform/meta/metadoc_from_src.d
index 65e0754..28ce990 100644
--- a/src/doc_reform/meta/metadoc_from_src.d
+++ b/src/doc_reform/meta/metadoc_from_src.d
@@ -4041,6 +4041,7 @@ template docAbstraction() {
     return ref CMM             conf_make_meta,
   ) {
     static auto rgx = RgxI();
+    static auto mkup = InlineMarkup();
     if (auto m = line.match(rgx.headings)) {                                      /+ heading match +/
       ++line_occur["heading"];
       pith["txt_is"]           = eN.txt_is.heading;
@@ -4052,11 +4053,32 @@ template docAbstraction() {
       assertions_doc_structure(an_object, lv); // includes most of the logic for collapsed levels
       switch (an_object["lev"]) {
       case "A":                                // Title set
-        if (an_object[an_object_key].match(rgx.variable_doc_title)
-        && an_object[an_object_key].match(rgx.variable_doc_author)) {
+        if ((an_object[an_object_key].match(rgx.variable_doc_title_author_date))
+        || (an_object[an_object_key].match(rgx.variable_doc_title)
+        && an_object[an_object_key].match(rgx.variable_doc_author)
+        && an_object[an_object_key].match(rgx.variable_doc_date))) {
+          an_object[an_object_key] = an_object[an_object_key]
+            .replaceFirst(rgx.variable_doc_title_author_date,
+              (conf_make_meta.meta.title_full
+              ~ mkup.br_nl
+              ~ conf_make_meta.meta.creator_author
+              ~ " (" ~ (conf_make_meta.meta.date_published.replaceFirst(regex(r"(?:-00)+"),"")) ~ ")"))
+            .replaceFirst(rgx.variable_doc_title,
+              (conf_make_meta.meta.title_full ~ mkup.br_nl))
+            .replaceFirst(rgx.variable_doc_author,
+              conf_make_meta.meta.creator_author)
+            .replaceFirst(rgx.variable_doc_date,
+              " (" ~ (conf_make_meta.meta.date_published.replaceFirst(regex(r"(?:-00)+"),"")) ~ ")");
+        } else if ((an_object[an_object_key].match(rgx.variable_doc_title_author))
+        || (an_object[an_object_key].match(rgx.variable_doc_title)
+        && an_object[an_object_key].match(rgx.variable_doc_author))) {
           an_object[an_object_key] = an_object[an_object_key]
+            .replaceFirst(rgx.variable_doc_title_author_date,
+              (conf_make_meta.meta.title_full
+              ~ mkup.br_nl
+              ~ conf_make_meta.meta.creator_author))
             .replaceFirst(rgx.variable_doc_title,
-              (conf_make_meta.meta.title_full ~ ", "))
+              (conf_make_meta.meta.title_full ~ mkup.br_nl))
             .replaceFirst(rgx.variable_doc_author,
               conf_make_meta.meta.creator_author);
         } else if (an_object[an_object_key].match(rgx.variable_doc_title)) {
diff --git a/src/doc_reform/meta/rgx.d b/src/doc_reform/meta/rgx.d
index 5df1e9c..0d2912d 100644
--- a/src/doc_reform/meta/rgx.d
+++ b/src/doc_reform/meta/rgx.d
@@ -91,8 +91,11 @@ static template spineRgxIn() {
     static comment                                        = ctRegex!(`^%+ `);
     /+ header +/
     /+ header +/
+    static variable_doc_title_author_date                 = ctRegex!(`@title-author-date`);
+    static variable_doc_title_author                      = ctRegex!(`@title-author`);
     static variable_doc_title                             = ctRegex!(`@title`);
     static variable_doc_author                            = ctRegex!(`@author|@creator`);
+    static variable_doc_date                              = ctRegex!(`@date`);
     static raw_author_munge                               = ctRegex!(`(?P<last>\S.+?),\s+(?P<first>.+)`,"i");
     static yaml_header_meta_title                         = ctRegex!(`^\s*title\s*:\s*(?:"?\w|$)`, "m");
     static yaml_config                                    = ctRegex!(`^[a-z]+\s*:\s*(?:"?\w|$)`, "m");
-- 
cgit v1.2.3