diff options
| author | Ralph Amissah <ralph.amissah@gmail.com> | 2026-09-12 21:19:38 -0400 |
|---|---|---|
| committer | Ralph Amissah <ralph.amissah@gmail.com> | 2026-09-13 23:50:17 -0400 |
| commit | 416e1be63c7b5a723a7894c3f9b68122e079c38e (patch) | |
| tree | 872761cf4253f272bd21ba7003cada7aa0a1d5b4 /src/sisudoc | |
| parent | epub, 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.d | 12 | ||||
| -rw-r--r-- | src/sisudoc/outputs/io_out/xmls.d | 71 |
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, "&") + .replaceAll(rgx_xhtml.quotation, """) + .replaceAll(rgx_xhtml.less_than, "<") + .replaceAll(rgx_xhtml.greater_than, ">") + .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; |
