diff options
author | Ralph Amissah <ralph.amissah@gmail.com> | 2022-02-04 23:50:19 -0500 |
---|---|---|
committer | Ralph Amissah <ralph.amissah@gmail.com> | 2022-02-05 18:26:02 -0500 |
commit | 94f56fab73553aae75a9e92a7707c952c1e763fc (patch) | |
tree | b42a58993bf3e4d0ee82cbbdb347b033aa38d8b2 /src/doc_reform/io_out | |
parent | epub, work on (diff) |
epub, navigation
Diffstat (limited to 'src/doc_reform/io_out')
-rw-r--r-- | src/doc_reform/io_out/epub3.d | 58 | ||||
-rw-r--r-- | src/doc_reform/io_out/xmls.d | 1 |
2 files changed, 35 insertions, 24 deletions
diff --git a/src/doc_reform/io_out/epub3.d b/src/doc_reform/io_out/epub3.d index a49304f..efdf12c 100644 --- a/src/doc_reform/io_out/epub3.d +++ b/src/doc_reform/io_out/epub3.d @@ -71,6 +71,7 @@ template outputEPub3() { .replaceAll(rgx.xhtml_less_than, "<") // "<" .replaceAll(rgx.xhtml_greater_than, ">") // ">" .replaceAll(rgx.br_line, "<br />") + .replaceAll(rgx.br_newline_inline, "<br />") .replaceAll(rgx.nbsp_char, " "); return _txt; } @@ -183,6 +184,7 @@ template outputEPub3() { auto markup = InlineMarkup(); static auto rgx = RgxO(); string toc; + bool _new_title_set = false; string toc_head = format(q"┃<html xmlns="https://www.w3.org/1999/xhtml" xmlns:epub="http://www.idpf.org/2007/ops"> <head> @@ -194,7 +196,7 @@ template outputEPub3() { <h1>Contents</h1> </header> <nav epub:type="toc" id="toc"> - <li>┃", + ┃", (doc_matters.conf_make_meta.meta.title_full).special_characters_text, ); string _toc_nav_tail = ""; @@ -202,17 +204,9 @@ template outputEPub3() { foreach (sect; doc_matters.has.keys_seq.seg) { foreach (obj; doc_abstraction[sect]) { if ((sect == "head") && (obj.metainfo.is_a == "heading")) { - toc = format(q"┃%s - <a href="_the_title.xhtml">%s</a> - </li> - ┃", - toc_head, - obj.text - .replaceAll(rgx.inline_notes_al_gen, "") - .replaceAll(rgx.br_newline_inline, "<br />") - .strip, - ); - } else if (sect == "tail") { // skip + toc = toc_head; + } + if (sect == "tail") { // skip } else if ((sect != "tail") && (obj.metainfo.is_a == "heading")) { string _txt = obj.text.replaceAll(rgx.inline_notes_al_gen, "").strip; foreach_reverse (n; 0 .. 7) { @@ -228,23 +222,39 @@ template outputEPub3() { toc ~= markup.indent_by_spaces_provided((n + 1), " ") ~ "</li>" ~ "\n"; goto default; case DomTags.open : - toc ~= markup.indent_by_spaces_provided(n, " ") ~ "<ol>" ~ "\n"; + if (!(_new_title_set)) { + toc ~= markup.indent_by_spaces_provided(n, " ") ~ "<ol>" ~ "\n"; + } goto default; default : if ((obj.metainfo.dom_structure_collapsed_tags_status[n] == DomTags.close_and_open || obj.metainfo.dom_structure_collapsed_tags_status[n] == DomTags.open )) { - string _hashtag = ""; - if ((obj.metainfo.heading_lev_markup <= 4) && (obj.metainfo.ocn == 0)) { - _hashtag = "#" ~ obj.metainfo.ocn.to!string; + if ((sect == "head") && (obj.metainfo.is_a == "heading")) { + toc ~= format(q"┃ <li> + <a href="_the_title.xhtml">%s</a> + </li>┃", + obj.text + .replaceAll(rgx.inline_notes_al_gen, "") + .replaceAll(rgx.br_newline_inline, "<br />") + .strip, + ); + toc ~= "\n"; + _new_title_set = true; + } else { + _new_title_set = false; + string _hashtag = ""; + if ((obj.metainfo.heading_lev_markup <= 4) && (obj.metainfo.ocn == 0)) { + _hashtag = "#" ~ obj.metainfo.ocn.to!string; + } + string _href = "<a href=\"" + ~ obj.tags.segment_anchor_tag_epub ~ ".xhtml" + ~ _hashtag + ~ "\">"; + toc ~= markup.indent_by_spaces_provided((n + 1), " ") ~ "<li>" ~ "\n" + ~ markup.indent_by_spaces_provided((n + 2), " ") + ~ _href ~ _txt.special_characters_text ~ "</a>" ~ "\n"; } - string _href = "<a href=\"" - ~ obj.tags.segment_anchor_tag_epub ~ ".xhtml" - ~ _hashtag - ~ "\">"; - toc ~= markup.indent_by_spaces_provided((n + 1), " ") ~ "<li>" ~ "\n" - ~ markup.indent_by_spaces_provided((n + 2), " ") - ~ _href ~ _txt.special_characters_text ~ "</a>" ~ "\n"; } break; } @@ -261,8 +271,8 @@ template outputEPub3() { // case DomTags.open: case DomTags.close_and_open: case DomTags.open_still: if (n != 0) { _toc_nav_tail ~= " " ~ markup.indent_by_spaces_provided((n + 1), " ") ~ "</li>" ~ "\n"; + _toc_nav_tail ~= " " ~ markup.indent_by_spaces_provided(n, " ") ~ "</ol>" ~ "\n"; } - _toc_nav_tail ~= " " ~ markup.indent_by_spaces_provided(n, " ") ~ "</ol>" ~ "\n"; break; default : break; diff --git a/src/doc_reform/io_out/xmls.d b/src/doc_reform/io_out/xmls.d index 6191fa9..fd9305a 100644 --- a/src/doc_reform/io_out/xmls.d +++ b/src/doc_reform/io_out/xmls.d @@ -100,6 +100,7 @@ template outputXHTMLs() { .replaceAll(rgx.xhtml_less_than, "<") // "<" .replaceAll(rgx.xhtml_greater_than, ">") // ">" .replaceAll(rgx.br_line, "<br />") + .replaceAll(rgx.br_newline_inline, "<br />") .replaceAll(rgx.nbsp_char, " "); return _txt; } |