diff options
Diffstat (limited to 'src/sisudoc/outputs/io_out/epub3.d')
| -rw-r--r-- | src/sisudoc/outputs/io_out/epub3.d | 11 |
1 files changed, 9 insertions, 2 deletions
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]; |
