aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/sisudoc
diff options
context:
space:
mode:
authorRalph Amissah <ralph.amissah@gmail.com>2026-09-12 21:19:38 -0400
committerRalph Amissah <ralph.amissah@gmail.com>2026-09-13 23:50:17 -0400
commit416e1be63c7b5a723a7894c3f9b68122e079c38e (patch)
tree872761cf4253f272bd21ba7003cada7aa0a1d5b4 /src/sisudoc
parentepub, html, odt: namespace names as identifiers (diff)
epub, html: metadata text clear of markup
special_characters_text escapes the markup characters and then puts <br /> back in for a line break. That is right for element content and wrong in metadata. fix (assisted by Claude-Code)
Diffstat (limited to 'src/sisudoc')
-rw-r--r--src/sisudoc/outputs/io_out/epub3.d12
-rw-r--r--src/sisudoc/outputs/io_out/xmls.d71
2 files changed, 53 insertions, 30 deletions
diff --git a/src/sisudoc/outputs/io_out/epub3.d b/src/sisudoc/outputs/io_out/epub3.d
index 9184369..100aff1 100644
--- a/src/sisudoc/outputs/io_out/epub3.d
+++ b/src/sisudoc/outputs/io_out/epub3.d
@@ -120,18 +120,18 @@ template outputEPub3() {
<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_main),
+ xhtml_format.special_characters_plain(doc.matters.conf_make_meta.meta.title_main),
(doc.matters.conf_make_meta.meta.title_sub.empty)
- ? "" : xhtml_format.special_characters_text(doc.matters.conf_make_meta.meta.title_sub),
+ ? "" : xhtml_format.special_characters_plain(doc.matters.conf_make_meta.meta.title_sub),
(doc.matters.conf_make_meta.meta.creator_author.empty)
- ? "" : xhtml_format.special_characters_text(doc.matters.conf_make_meta.meta.creator_author),
+ ? "" : xhtml_format.special_characters_plain(doc.matters.conf_make_meta.meta.creator_author),
(doc.matters.conf_make_meta.meta.creator_author.empty)
- ? "" : xhtml_format.special_characters_text(doc.matters.conf_make_meta.meta.creator_author),
+ ? "" : xhtml_format.special_characters_plain(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_date(doc.matters.conf_make_meta.meta.date_published),
+ ? "" : xhtml_format.special_characters_plain_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),
+ ? "" : xhtml_format.special_characters_plain(doc.matters.conf_make_meta.meta.rights_copyright),
_uuid,
_uuid,
(pth_epub3.fn_oebps_css).chompPrefix("OEBPS/"),
diff --git a/src/sisudoc/outputs/io_out/xmls.d b/src/sisudoc/outputs/io_out/xmls.d
index 10e0518..4cc4599 100644
--- a/src/sisudoc/outputs/io_out/xmls.d
+++ b/src/sisudoc/outputs/io_out/xmls.d
@@ -108,6 +108,29 @@ template outputXHTMLs() {
.replaceAll(rgx.nbsp_char, " ");
return _txt;
}
+ /+ the same escaping for where markup cannot go. +/
+ string special_characters_plain(string _txt) {
+ _txt = _txt
+ .replaceAll(rgx.br_line, " ")
+ .replaceAll(rgx.br_line_inline, " ")
+ .replaceAll(rgx.br_line_spaced, " ")
+ .replaceAll(rgx_xhtml.ampersand, "&amp;")
+ .replaceAll(rgx_xhtml.quotation, "&quot;")
+ .replaceAll(rgx_xhtml.less_than, "&lt;")
+ .replaceAll(rgx_xhtml.greater_than, "&gt;")
+ .replaceAll(rgx.nbsp_char, " ");
+ return _txt;
+ }
+ /+ ↓ a date for an attribute value: the same trimming, no markup +/
+ string special_characters_plain_date(string _txt) {
+ _txt = _txt
+ .replaceAll(regex(r"(?:-00)+"), "")
+ .replaceAll(rgx.br_line, " ")
+ .replaceAll(rgx.br_line_inline, " ")
+ .replaceAll(rgx.br_line_spaced, " ")
+ .replaceAll(rgx.nbsp_char, " ");
+ return _txt;
+ }
string special_characters_date(string _txt) {
_txt = _txt
.replaceAll(regex(r"(?:-00)+"), "")
@@ -214,19 +237,19 @@ template outputXHTMLs() {
<meta name="generator" content="%s" />
<link rel="generator" href="%s" />
<!-- spine DocReform header metadata -->┃",
- special_characters_text(doc_matters.conf_make_meta.meta.title_full),
- special_characters_text(doc_matters.conf_make_meta.meta.creator_author),
+ special_characters_plain(doc_matters.conf_make_meta.meta.title_full),
+ special_characters_plain(doc_matters.conf_make_meta.meta.creator_author),
_publisher,
- 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),
- special_characters_text(doc_matters.conf_make_meta.meta.date_valid),
- special_characters_text(doc_matters.conf_make_meta.meta.date_modified),
+ special_characters_plain_date(doc_matters.conf_make_meta.meta.date_published),
+ special_characters_plain(doc_matters.conf_make_meta.meta.date_created),
+ special_characters_plain(doc_matters.conf_make_meta.meta.date_issued),
+ special_characters_plain(doc_matters.conf_make_meta.meta.date_available),
+ special_characters_plain(doc_matters.conf_make_meta.meta.date_valid),
+ special_characters_plain(doc_matters.conf_make_meta.meta.date_modified),
doc_matters.src.language,
- special_characters_text(doc_matters.conf_make_meta.meta.rights_copyright),
- doc_matters.opt.action.generated_by ? special_characters_text(doc_matters.generator_program.name_and_version) : "",
- special_characters_text(doc_matters.generator_program.url_home),
+ special_characters_plain(doc_matters.conf_make_meta.meta.rights_copyright),
+ doc_matters.opt.action.generated_by ? special_characters_plain(doc_matters.generator_program.name_and_version) : "",
+ special_characters_plain(doc_matters.generator_program.url_home),
);
return o;
}
@@ -443,22 +466,22 @@ template outputXHTMLs() {
<body lang="%s">
<a name="top" id="top"></a>┃",
html_simple,
- special_characters_text(doc_matters.conf_make_meta.meta.title_full),
+ special_characters_plain(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.title_full),
+ : ", " ~ special_characters_plain(doc_matters.conf_make_meta.meta.creator_author),
+ special_characters_plain(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_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),
- special_characters_text(doc_matters.conf_make_meta.meta.date_valid),
- special_characters_text(doc_matters.conf_make_meta.meta.date_modified),
+ : ", " ~ special_characters_plain(doc_matters.conf_make_meta.meta.creator_author),
+ special_characters_plain_date(doc_matters.conf_make_meta.meta.date_published),
+ special_characters_plain(doc_matters.conf_make_meta.meta.date_created),
+ special_characters_plain(doc_matters.conf_make_meta.meta.date_issued),
+ special_characters_plain(doc_matters.conf_make_meta.meta.date_available),
+ special_characters_plain(doc_matters.conf_make_meta.meta.date_valid),
+ special_characters_plain(doc_matters.conf_make_meta.meta.date_modified),
doc_matters.src.language,
- special_characters_text(doc_matters.conf_make_meta.meta.rights_copyright),
- special_characters_text(doc_matters.generator_program.name_and_version),
- special_characters_text(doc_matters.generator_program.url_home),
+ special_characters_plain(doc_matters.conf_make_meta.meta.rights_copyright),
+ special_characters_plain(doc_matters.generator_program.name_and_version),
+ special_characters_plain(doc_matters.generator_program.url_home),
doc_matters.src.language,
);
return o;