From e9ff8330d44330ed87bb2cce562f132a9a005f3d Mon Sep 17 00:00:00 2001
From: Ralph Amissah <ralph.amissah@gmail.com>
Date: Wed, 9 Feb 2022 14:18:45 -0500
Subject: xmls, copyright and license display

---
 src/doc_reform/io_out/epub3.d             |   4 +-
 src/doc_reform/io_out/html.d              |   4 +-
 src/doc_reform/io_out/xmls.d              | 108 ++++++++++++++++++++----------
 src/doc_reform/io_out/xmls_css.d          |  54 +++++++++++++--
 src/doc_reform/meta/conf_make_meta_yaml.d |  12 +++-
 5 files changed, 136 insertions(+), 46 deletions(-)

(limited to 'src')

diff --git a/src/doc_reform/io_out/epub3.d b/src/doc_reform/io_out/epub3.d
index efdf12c..8a8b9e4 100644
--- a/src/doc_reform/io_out/epub3.d
+++ b/src/doc_reform/io_out/epub3.d
@@ -670,7 +670,7 @@ template outputEPub3() {
               foreach (docseg; epub_write.doc_epub3_endnotes[seg_filename]) {
                 f.writeln(docseg);
               }
-              f.writeln(xhtml_format.tail);
+              f.writeln(xhtml_format.tail(doc_matters));
             }
           }
           foreach (docseg; epub_write.doc_epub3[seg_filename]) {
@@ -679,7 +679,7 @@ template outputEPub3() {
           foreach (docseg; epub_write.doc_epub3_endnotes[seg_filename]) {
             zip_data.write(docseg.dup);
           }
-          zip_data.write(xhtml_format.tail.dup);
+          zip_data.write(xhtml_format.tail(doc_matters).dup);
           zip_arc_member_file.expandedData = zip_data.toBytes();
           zip.addMember(zip_arc_member_file);
           /+ create the zip file +/
diff --git a/src/doc_reform/io_out/html.d b/src/doc_reform/io_out/html.d
index 136229b..4efc91d 100644
--- a/src/doc_reform/io_out/html.d
+++ b/src/doc_reform/io_out/html.d
@@ -234,7 +234,7 @@ template outputHTML() {
     doc = xhtml_format.html_head(doc_matters, "scroll")
       ~ doc_html
       ~ xhtml_format.dom_close
-      ~ xhtml_format.tail;
+      ~ xhtml_format.tail(doc_matters);
     scroll_write_output(doc, doc_matters);
   }
   @trusted void scroll_write_output(D,M)(
@@ -543,7 +543,7 @@ template outputHTML() {
         foreach (docseg; doc_html_endnotes[seg_filename]) {
           f.writeln(docseg);
         }
-        f.writeln(xhtml_format.tail);
+        f.writeln(xhtml_format.tail(doc_matters));
       }
     } catch (ErrnoException ex) {
       // handle error
diff --git a/src/doc_reform/io_out/xmls.d b/src/doc_reform/io_out/xmls.d
index fd9305a..871332d 100644
--- a/src/doc_reform/io_out/xmls.d
+++ b/src/doc_reform/io_out/xmls.d
@@ -417,13 +417,36 @@ template outputXHTMLs() {
   o = format(q"┃</div>┃");
   return o;
 }
-@safe string tail() {
+@safe string tail(M)(M doc_matters) {
   string o;
-  o = format(q"┃
+  o = format(q"┃<hr />
+  <div class="rights">
+    <p class="small" id="copyright"><a name="copyright"></a>
+      <b>Copyright:</b> %s
+    </p>
+  </div>
+  %s
+  <div class="rights">
+    <p class="small" id="rights"><a name="rights"></a>
+      %s
+    </p>
+  </div>
+  <hr />
+  <div class="generator">
+    <p class="small_center" id="sisu_spine"><a name="sisu_spine"></a>
+      <a href="https://sisudoc.org">SiSU Spine</a> (object numbering &amp; search)
+    </p>
+  </div>
   <a name="bottom" id="bottom"></a>
   <a name="end" id="end"></a>
 </body>
-</html>┃");
+</html>
+┃",
+    special_characters_text(doc_matters.conf_make_meta.meta.rights_copyright),
+    ((doc_matters.conf_make_meta.meta.rights_license).empty) ? "" : "<br />",
+    ((doc_matters.conf_make_meta.meta.rights_license).empty) ? ""
+      : "<b>License:</b> " ~ special_characters_text(doc_matters.conf_make_meta.meta.rights_license)
+  );
   return o;
 }
     @safe string inline_images(O,M)(
@@ -798,48 +821,65 @@ template outputXHTMLs() {
       ┃",
         _horizontal_rule,
         );
-      } else if (!(obj.metainfo.identifier.empty)) {
-        o = format(q"┃%s
+      } else {
+        o = "";
+        if (obj.metainfo.is_of_section == "toc") {
+          o ~= format(q"┃
+      <div class="substance">
+        <p class="small" id="copyright"><a name="copyright"></a>
+          Copyright: %s
+        </p>
+        <!-- <p class="small" id="rights"><a name="rights"></a>
+          %s
+        </p> -->
+      </div>┃",
+            special_characters_text(doc_matters.conf_make_meta.meta.rights_copyright),
+            special_characters_text(doc_matters.conf_make_meta.meta.rights_license)
+          );
+        }
+      }
+        if (!(obj.metainfo.identifier.empty)) {
+          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>┃",
-          _horizontal_rule,
-          obj.metainfo.identifier,
-          (doc_matters.opt.action.ocn_off)
-            ? "" : ((obj.metainfo.object_number.empty)
-              ? "" : obj.metainfo.identifier),
-          ((_xml_type == "epub" && obj.metainfo.heading_lev_markup == 0) ? 1
-          : obj.metainfo.heading_lev_markup),
-          obj.metainfo.is_a,
-          obj.metainfo.identifier,
-          obj.metainfo.identifier,
-          tags,
-          heading_lev_anchor_tag,
-          _txt,
-          ((_xml_type == "epub" && obj.metainfo.heading_lev_markup == 0) ? 1
-          : obj.metainfo.heading_lev_markup),
-        );
-      } else {
-        o = format(q"┃%s
+            _horizontal_rule,
+            obj.metainfo.identifier,
+            (doc_matters.opt.action.ocn_off)
+              ? "" : ((obj.metainfo.object_number.empty)
+                ? "" : obj.metainfo.identifier),
+            ((_xml_type == "epub" && obj.metainfo.heading_lev_markup == 0) ? 1
+            : obj.metainfo.heading_lev_markup),
+            obj.metainfo.is_a,
+            obj.metainfo.identifier,
+            obj.metainfo.identifier,
+            tags,
+            heading_lev_anchor_tag,
+            _txt,
+            ((_xml_type == "epub" && obj.metainfo.heading_lev_markup == 0) ? 1
+            : obj.metainfo.heading_lev_markup),
+          );
+        } else {
+          o ~= format(q"┃%s
       <div class="substance">
         <h%s class="%s">%s%s
           %s
         </h%s>
       </div>┃",
-          _horizontal_rule,
-          ((_xml_type == "epub" && obj.metainfo.heading_lev_markup == 0) ? 1
-          : obj.metainfo.heading_lev_markup),
-          obj.metainfo.is_a,
-          tags,
-          heading_lev_anchor_tag,
-          _txt,
-          ((_xml_type == "epub" && obj.metainfo.heading_lev_markup == 0) ? 1
-          : obj.metainfo.heading_lev_markup),
-        );
-      }
+            _horizontal_rule,
+            ((_xml_type == "epub" && obj.metainfo.heading_lev_markup == 0) ? 1
+            : obj.metainfo.heading_lev_markup),
+            obj.metainfo.is_a,
+            tags,
+            heading_lev_anchor_tag,
+            _txt,
+            ((_xml_type == "epub" && obj.metainfo.heading_lev_markup == 0) ? 1
+            : obj.metainfo.heading_lev_markup),
+          );
+        }
       return o;
     }
     @safe string heading_scroll(O,M)(
diff --git a/src/doc_reform/io_out/xmls_css.d b/src/doc_reform/io_out/xmls_css.d
index bb2cdfc..505287e 100644
--- a/src/doc_reform/io_out/xmls_css.d
+++ b/src/doc_reform/io_out/xmls_css.d
@@ -762,13 +762,20 @@ p.em {
   font-style               : normal;
   background               : #FFF3B6;
 }
-p.small {
+.small, .small_center {
   font-size                : 1.4rem;
   margin-top               : 0px;
   margin-bottom            : 0px;
   margin-right             : 6px;
+}
+p.small {
   text-align               : left;
 }
+p.small_center {
+  margin-left              : 0px;
+  margin-right             : 0px;
+  text-align               : center;
+}
 .tiny, .tiny_left, .tiny_right, .tiny_center {
   font-size                : 1.2rem;
   margin-top               : 0px;
@@ -1485,13 +1492,20 @@ p.em {
   font-style               : normal;
   background               : #FFF3B6;
 }
-p.small {
+.small, .small_center {
   font-size                : 1.4rem;
   margin-top               : 0px;
   margin-bottom            : 0px;
   margin-right             : 6px;
+}
+p.small {
   text-align               : left;
 }
+p.small_center {
+  margin-left              : 0px;
+  margin-right             : 0px;
+  text-align               : center;
+}
 .tiny, .tiny_left, .tiny_right, .tiny_center {
   font-size                : 1.35rem;
   margin-top               : 0px;
@@ -2211,13 +2225,20 @@ p.em {
   font-style               : normal;
   background               : #FFF3B6;
 }
-p.small {
+.small, .small_center {
   font-size                : 1.4rem;
   margin-top               : 0px;
   margin-bottom            : 0px;
   margin-right             : 6px;
+}
+p.small {
   text-align               : left;
 }
+p.small_center {
+  margin-left              : 0px;
+  margin-right             : 0px;
+  text-align               : center;
+}
 .tiny, .tiny_left, .tiny_right, .tiny_center {
   font-size                : 1.2rem;
   margin-top               : 0px;
@@ -2860,13 +2881,20 @@ p.em {
   font-style               : normal;
   background               : #FFF3B6;
 }
-p.small {
+.small, .small_center {
   font-size                : 1.4rem;
   margin-top               : 0px;
   margin-bottom            : 0px;
   margin-right             : 6px;
+}
+p.small {
   text-align               : left;
 }
+p.small_center {
+  margin-left              : 0px;
+  margin-right             : 0px;
+  text-align               : center;
+}
 .tiny, .tiny_left, .tiny_right, .tiny_center {
   font-size                : 1.35rem;
   margin-top               : 0px;
@@ -3512,13 +3540,20 @@ p.em {
   font-style               : normal;
   background               : #FFF3B6;
 }
-p.small {
+.small, .small_center {
   font-size                : 1.4rem;
   margin-top               : 0px;
   margin-bottom            : 0px;
   margin-right             : 6px;
+}
+p.small {
   text-align               : left;
 }
+p.small_center {
+  margin-left              : 0px;
+  margin-right             : 0px;
+  text-align               : center;
+}
 .tiny, .tiny_left, .tiny_right, .tiny_center {
   font-size                : 1.2rem;
   margin-top               : 0px;
@@ -4051,13 +4086,20 @@ p.em {
   font-style               : normal;
   background               : #FFF3B6;
 }
-p.small {
+.small, .small_center {
   font-size                : 1.4rem;
   margin-top               : 0px;
   margin-bottom            : 0px;
   margin-right             : 6px;
+}
+p.small {
   text-align               : left;
 }
+p.small_center {
+  margin-left              : 0px;
+  margin-right             : 0px;
+  text-align               : center;
+}
 .tiny, .tiny_left, .tiny_right, .tiny_center {
   font-size                : 1.35rem;
   margin-top               : 0px;
diff --git a/src/doc_reform/meta/conf_make_meta_yaml.d b/src/doc_reform/meta/conf_make_meta_yaml.d
index af6096a..ff0bcf5 100644
--- a/src/doc_reform/meta/conf_make_meta_yaml.d
+++ b/src/doc_reform/meta/conf_make_meta_yaml.d
@@ -80,6 +80,14 @@ template contentYAMLtoSpineStruct() {
   ) {
     mixin spineRgxIn;
     static auto rgx = RgxI();
+    string check_input_markup()(
+      string _txt,
+    ) {
+      _txt = _txt
+       .replaceAll(regex(r"\\"), mkup.br_newline_inline)
+       .strip;
+      return _txt;
+    }
     confCompositeMakeBuild _mk;
     if (_identifier != "header") { // called only once per run anyway
       /+ conf ------------------------------------------------------------------- +/
@@ -1127,7 +1135,7 @@ template contentYAMLtoSpineStruct() {
             && _yaml["rights"]["copyright"].type.string
             && _yaml["rights"]["copyright"].tag.match(rgx.yaml_tag_is_str)
           ) {
-            _struct_composite.meta.rights_copyright = _yaml["rights"]["copyright"].get!string;
+            _struct_composite.meta.rights_copyright = check_input_markup(_yaml["rights"]["copyright"].get!string);
           }
           if ("copyright_text" in _yaml["rights"]
             && _yaml["rights"]["copyright_text"].type.string
@@ -1175,7 +1183,7 @@ template contentYAMLtoSpineStruct() {
             && _yaml["rights"]["license"].type.string
             && _yaml["rights"]["license"].tag.match(rgx.yaml_tag_is_str)
           ) {
-            _struct_composite.meta.rights_license = _yaml["rights"]["license"].get!string;
+            _struct_composite.meta.rights_license = check_input_markup(_yaml["rights"]["license"].get!string);
           }
         }
       }
-- 
cgit v1.2.3