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 /org/out_xmls.org | |
| 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 'org/out_xmls.org')
| -rw-r--r-- | org/out_xmls.org | 96 |
1 files changed, 66 insertions, 30 deletions
diff --git a/org/out_xmls.org b/org/out_xmls.org index 52cad25..186137b 100644 --- a/org/out_xmls.org +++ b/org/out_xmls.org @@ -37,6 +37,7 @@ template outputXHTMLs() { static auto rgx_xhtml = RgxXHTML(); <<xhtml_format_objects_div_delimit>> <<xhtml_format_objects_special_characters_text>> + <<xhtml_format_objects_special_characters_plain>> <<xhtml_format_objects_special_characters_date>> <<xhtml_format_objects_breaks_indents_bullets>> <<xhtml_format_objects_font_face>> @@ -171,6 +172,41 @@ string special_characters_text(string _txt) { } #+END_SRC +**** special characters plain + +special_characters_text escapes the markup characters and then puts +<br /> back in for a line break, which is right for element content +and wrong for an attribute value: a "<" in an attribute is not +well-formed XML and parsing stops there. A line break has no meaning +in a one line value anyway, so it becomes a space. + +#+NAME: xhtml_format_objects_special_characters_plain +#+BEGIN_SRC d +/+ 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; +} +#+END_SRC + **** special characters date #+NAME: xhtml_format_objects_special_characters_date @@ -306,19 +342,19 @@ string header_metadata(M)( <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; } @@ -561,22 +597,22 @@ string epub3_seg_head(M)( <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; @@ -2571,18 +2607,18 @@ string epub3_oebps_content(D,P)(D doc, P parts) { <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/"), |
