diff options
| author | Ralph Amissah <ralph.amissah@gmail.com> | 2026-09-12 22:59:01 -0400 |
|---|---|---|
| committer | Ralph Amissah <ralph.amissah@gmail.com> | 2026-09-14 12:18:51 -0400 |
| commit | 282b2a4166aeba76e3b99abaa46bf6858f7cd172 (patch) | |
| tree | 6fd6d1d48b349d41809ddb624a3283fb04c95d8f | |
| parent | epub, html, db: use of elements & attributes, fix (diff) | |
epub, html: document heads and ids, fixes
One document head per file, and ids must be unique. No remaining fatal
errors in the epub in the marup sample set.
(assisted by Claude-Code)
| -rw-r--r-- | org/out_xmls.org | 19 | ||||
| -rw-r--r-- | src/sisudoc/outputs/io_out/epub3.d | 11 | ||||
| -rw-r--r-- | src/sisudoc/outputs/io_out/xmls.d | 8 |
3 files changed, 26 insertions, 12 deletions
diff --git a/org/out_xmls.org b/org/out_xmls.org index dac590e..5b989df 100644 --- a/org/out_xmls.org +++ b/org/out_xmls.org @@ -639,7 +639,7 @@ string tail(M)(M doc_matters) { string o; o = format(q"┃<hr /> <div class="rights"> - <p class="small" id="copyright"><a name="copyright"></a> + <p class="small" id="copyright"> <b>Copyright:</b> %s </p> </div> @@ -651,10 +651,10 @@ string tail(M)(M doc_matters) { </div> <hr /> <div class="generator"> - <p class="small_center" id="sisu_spine"><a name="sisu_spine"></a> + <p class="small_center" id="sisu_spine"> <a href="https://sisudoc.org" class="lnkicon">≅ SiSU Spine ፨</a> (object numbering & object search) </p> - <p class="small_center" id="sisu_spine"><a name="sisu_spine"></a> + <p class="small_center" id="sisu_spine_dates"> (web 1993, object numbering 1997, object search 2002 ...) <<year>> </p> </div> @@ -1107,7 +1107,7 @@ string heading(O,M)( if (obj.metainfo.is_of_section == "toc") { o ~= format(q"┃ <div class="substance"> - <p class="small" id="copyright"><a name="copyright"></a> + <p class="small" id="copyright_toc"> Copyright: %s </p> <!-- <p class="small" id="rights"><a name="rights"></a> @@ -2815,6 +2815,13 @@ string epub3_oebps_toc_nav_xhtml(D)(D doc) { static auto rgx = RgxO(); static auto rgx_xhtml = RgxXHTML(); string segment_filename; + /+ ↓ a segment file gets one document head, not one per heading. +/ + bool[string] _seg_head_written; + string _segHead(M)(M _m, string _seg) { + if (_seg in _seg_head_written) { return ""; } + _seg_head_written[_seg] = true; + return xhtml_format.epub3_seg_head(_m); + } string[] top_level_headings = ["","","",""]; string[string] oepbs_content_parts; bool[string] _segment_files_seen; /+ a segment file is listed once +/ @@ -2872,7 +2879,7 @@ if (obj.metainfo.is_a == "heading") { goto default; default: epubWrite.doc_parts ~= obj.tags.segment_anchor_tag_epub; - epubWrite.doc_epub3[obj.tags.segment_anchor_tag_epub] ~= xhtml_format.epub3_seg_head(doc.matters); + epubWrite.doc_epub3[obj.tags.segment_anchor_tag_epub] ~= _segHead(doc.matters, obj.tags.segment_anchor_tag_epub); Tuple!(string, string[]) t = xhtml_format.heading_seg(_txt, obj, doc.matters, suffix, "epub"); epubWrite.doc_epub3[obj.tags.segment_anchor_tag_epub] ~= t[0]; epubWrite.doc_epub3_endnotes[obj.tags.segment_anchor_tag_epub] ~= t[1]; @@ -2881,7 +2888,7 @@ if (obj.metainfo.is_a == "heading") { break; case 4: segment_filename = obj.tags.segment_anchor_tag_epub; - epubWrite.doc_epub3[segment_filename] ~= xhtml_format.epub3_seg_head(doc.matters); + epubWrite.doc_epub3[segment_filename] ~= _segHead(doc.matters, segment_filename); Tuple!(string, string[]) t = xhtml_format.heading_seg(_txt, obj, doc.matters, suffix, "epub"); epubWrite.doc_epub3[segment_filename] ~= t[0]; epubWrite.doc_epub3_endnotes[segment_filename] ~= t[1]; diff --git a/src/sisudoc/outputs/io_out/epub3.d b/src/sisudoc/outputs/io_out/epub3.d index d149dac..1c08bab 100644 --- a/src/sisudoc/outputs/io_out/epub3.d +++ b/src/sisudoc/outputs/io_out/epub3.d @@ -306,6 +306,13 @@ template outputEPub3() { static auto rgx = RgxO(); static auto rgx_xhtml = RgxXHTML(); string segment_filename; + /+ ↓ a segment file gets one document head, not one per heading. +/ + bool[string] _seg_head_written; + string _segHead(M)(M _m, string _seg) { + if (_seg in _seg_head_written) { return ""; } + _seg_head_written[_seg] = true; + return xhtml_format.epub3_seg_head(_m); + } string[] top_level_headings = ["","","",""]; string[string] oepbs_content_parts; bool[string] _segment_files_seen; /+ a segment file is listed once +/ @@ -351,7 +358,7 @@ template outputEPub3() { goto default; default: epubWrite.doc_parts ~= obj.tags.segment_anchor_tag_epub; - epubWrite.doc_epub3[obj.tags.segment_anchor_tag_epub] ~= xhtml_format.epub3_seg_head(doc.matters); + epubWrite.doc_epub3[obj.tags.segment_anchor_tag_epub] ~= _segHead(doc.matters, obj.tags.segment_anchor_tag_epub); Tuple!(string, string[]) t = xhtml_format.heading_seg(_txt, obj, doc.matters, suffix, "epub"); epubWrite.doc_epub3[obj.tags.segment_anchor_tag_epub] ~= t[0]; epubWrite.doc_epub3_endnotes[obj.tags.segment_anchor_tag_epub] ~= t[1]; @@ -360,7 +367,7 @@ template outputEPub3() { break; case 4: segment_filename = obj.tags.segment_anchor_tag_epub; - epubWrite.doc_epub3[segment_filename] ~= xhtml_format.epub3_seg_head(doc.matters); + epubWrite.doc_epub3[segment_filename] ~= _segHead(doc.matters, segment_filename); Tuple!(string, string[]) t = xhtml_format.heading_seg(_txt, obj, doc.matters, suffix, "epub"); epubWrite.doc_epub3[segment_filename] ~= t[0]; epubWrite.doc_epub3_endnotes[segment_filename] ~= t[1]; diff --git a/src/sisudoc/outputs/io_out/xmls.d b/src/sisudoc/outputs/io_out/xmls.d index 3f7f4c9..f1bcd95 100644 --- a/src/sisudoc/outputs/io_out/xmls.d +++ b/src/sisudoc/outputs/io_out/xmls.d @@ -495,7 +495,7 @@ string tail(M)(M doc_matters) { string o; o = format(q"┃<hr /> <div class="rights"> - <p class="small" id="copyright"><a name="copyright"></a> + <p class="small" id="copyright"> <b>Copyright:</b> %s </p> </div> @@ -507,10 +507,10 @@ string tail(M)(M doc_matters) { </div> <hr /> <div class="generator"> - <p class="small_center" id="sisu_spine"><a name="sisu_spine"></a> + <p class="small_center" id="sisu_spine"> <a href="https://sisudoc.org" class="lnkicon">≅ SiSU Spine ፨</a> (object numbering & object search) </p> - <p class="small_center" id="sisu_spine"><a name="sisu_spine"></a> + <p class="small_center" id="sisu_spine_dates"> (web 1993, object numbering 1997, object search 2002 ...) 2026 </p> </div> @@ -903,7 +903,7 @@ string tail(M)(M doc_matters) { if (obj.metainfo.is_of_section == "toc") { o ~= format(q"┃ <div class="substance"> - <p class="small" id="copyright"><a name="copyright"></a> + <p class="small" id="copyright_toc"> Copyright: %s </p> <!-- <p class="small" id="rights"><a name="rights"></a> |
