From 30b6d716f3e4448667ee61bdda044df739d6ad68 Mon Sep 17 00:00:00 2001 From: Ralph Amissah Date: Fri, 4 Feb 2022 18:48:25 -0500 Subject: epub, work on --- org/default_misc.org | 2 +- org/default_regex.org | 3 +- org/metaverse.org | 12 ++-- org/out_xmls.org | 183 ++++++++------------------------------------------ 4 files changed, 37 insertions(+), 163 deletions(-) (limited to 'org') diff --git a/org/default_misc.org b/org/default_misc.org index 5c71dee..429e13a 100644 --- a/org/default_misc.org +++ b/org/default_misc.org @@ -237,7 +237,7 @@ template InternalMarkup() { string mark_internal_site_lnk = "¤"; string nbsp = "░"; string br_line = "┘"; - string br_nl = "┙"; + string br_newline_inline = "┙"; string br_paragraph = "┚"; string br_obj = "break_obj"; string br_page_line = "┼"; diff --git a/org/default_regex.org b/org/default_regex.org index 6734b62..636d767 100644 --- a/org/default_regex.org +++ b/org/default_regex.org @@ -105,6 +105,7 @@ static trailing_linebreak = ctRegex!(",[ ]{1,2}\\\\\ static newline_eol_delimiter = ctRegex!("\n"); static newline_eol_strip_preceding = ctRegex!("[ ]*\n"); static newline_eol_delimiter_only = ctRegex!("^\n"); +static markup_inline_linebreak = ctRegex!(`\s*\\\\s*`, "m"); static line_delimiter_ws_strip = ctRegex!("[ ]*\n[ ]*"); static para_delimiter = ctRegex!("\n[ ]*\n+"); static table_col_delimiter = ctRegex!("[ ]*\n+", "mg"); @@ -526,7 +527,7 @@ static src_formalised_file_path_parts = ctRegex!(`(?P(?:[/a static br_empty_line = ctRegex!(`\n[ ]*\n`, "mg"); static br_newlines_linebreaks = ctRegex!(`[\n┘┙]`, "mg"); static br_line = ctRegex!(`┘`, "mg"); -static br_nl = ctRegex!(`┙`, "mg"); +static br_newline_inline = ctRegex!(`┙`, "mg"); #+END_SRC *** inline (internal program) markup footnotes endnotes :inline:footnote: diff --git a/org/metaverse.org b/org/metaverse.org index b97bd2f..a3896c2 100644 --- a/org/metaverse.org +++ b/org/metaverse.org @@ -5170,11 +5170,11 @@ if (pith["block_is"] == eN.blk_is.quote) { an_object[an_object_key] = an_object[an_object_key] .replaceFirst(rgx.variable_doc_title_author_date, (conf_make_meta.meta.title_full - ~ mkup.br_nl + ~ mkup.br_newline_inline ~ conf_make_meta.meta.creator_author ~ " (" ~ (conf_make_meta.meta.date_published.replaceFirst(regex(r"(?:-00)+"),"")) ~ ")")) .replaceFirst(rgx.variable_doc_title, - (conf_make_meta.meta.title_full ~ mkup.br_nl)) + (conf_make_meta.meta.title_full ~ mkup.br_newline_inline)) .replaceFirst(rgx.variable_doc_author, conf_make_meta.meta.creator_author) .replaceFirst(rgx.variable_doc_date, @@ -5185,10 +5185,10 @@ if (pith["block_is"] == eN.blk_is.quote) { an_object[an_object_key] = an_object[an_object_key] .replaceFirst(rgx.variable_doc_title_author_date, (conf_make_meta.meta.title_full - ~ mkup.br_nl + ~ mkup.br_newline_inline ~ conf_make_meta.meta.creator_author)) .replaceFirst(rgx.variable_doc_title, - (conf_make_meta.meta.title_full ~ mkup.br_nl)) + (conf_make_meta.meta.title_full ~ mkup.br_newline_inline)) .replaceFirst(rgx.variable_doc_author, conf_make_meta.meta.creator_author); } else if (an_object[an_object_key].match(rgx.variable_doc_title)) { @@ -5893,6 +5893,7 @@ invariant() { obj_txt["munge"] = obj_txt_in .replaceFirst(rgx.headings, "") .replaceFirst(rgx.object_number_off_all, "") + .replaceFirst(rgx.markup_inline_linebreak, mkup.br_newline_inline) .strip; TxtPlusHasFootnotesUrlsImages t = object_notes_and_links_(obj_txt["munge"], reset_note_numbers); debug(munge) { @@ -5923,7 +5924,8 @@ invariant() { @safe auto munge_para()(string obj_txt_in) { obj_txt["munge"] = (obj_txt_in) .replaceFirst(rgx.para_attribs, "") - .replaceFirst(rgx.object_number_off_all, ""); + .replaceFirst(rgx.object_number_off_all, "") + .replaceFirst(rgx.markup_inline_linebreak, mkup.br_newline_inline); TxtPlusHasFootnotesUrlsImages t = object_notes_and_links_(obj_txt["munge"]); debug(munge) { writeln(__LINE__); diff --git a/org/out_xmls.org b/org/out_xmls.org index 84c15db..0e9bafe 100644 --- a/org/out_xmls.org +++ b/org/out_xmls.org @@ -159,8 +159,7 @@ import .replaceAll(rgx.xhtml_quotation, """) // """ .replaceAll(rgx.xhtml_less_than, "<") // "<" .replaceAll(rgx.xhtml_greater_than, ">") // ">" - .replaceAll(rgx.br_line, "
") - .replaceAll(rgx.br_nl, "
") + .replaceAll(rgx.br_line, "
") .replaceAll(rgx.nbsp_char, " "); return _txt; } @@ -173,8 +172,7 @@ import @safe string special_characters_date(string _txt) { _txt = _txt .replaceAll(regex(r"(?:-00)+"), "") - .replaceAll(rgx.br_line, "
") - .replaceAll(rgx.br_nl, "
") + .replaceAll(rgx.br_line, "
") .replaceAll(rgx.nbsp_char, " "); return _txt; } @@ -334,7 +332,7 @@ import .replaceAll( rgx.br_line, "") .replaceAll( - rgx.br_nl, ""); + rgx.br_newline_inline, ""); } else { _locations = "

spine

\n

sources / git

\n

www.sisudoc.org

"; } @@ -999,14 +997,16 @@ import (doc_matters.opt.action.ocn_off) ? "" : ((obj.metainfo.object_number.empty) ? "" : obj.metainfo.identifier), - obj.metainfo.heading_lev_markup, + ((_xml_type == "epub" && obj.metainfo.heading_lev_markup == 0) ? 1 + : obj.metainfo.heading_lev_markup), obj.metainfo.is_a, obj.metainfo.identifier, obj.metainfo.identifier, tags, heading_lev_anchor_tag, _txt, - obj.metainfo.heading_lev_markup, + ((_xml_type == "epub" && obj.metainfo.heading_lev_markup == 0) ? 1 + : obj.metainfo.heading_lev_markup), ); } else { o = format(q"┃%s @@ -1016,12 +1016,14 @@ import ┃", _horizontal_rule, - obj.metainfo.heading_lev_markup, + ((_xml_type == "epub" && obj.metainfo.heading_lev_markup == 0) ? 1 + : obj.metainfo.heading_lev_markup), obj.metainfo.is_a, tags, heading_lev_anchor_tag, _txt, - obj.metainfo.heading_lev_markup, + ((_xml_type == "epub" && obj.metainfo.heading_lev_markup == 0) ? 1 + : obj.metainfo.heading_lev_markup), ); } return o; @@ -2349,7 +2351,6 @@ template outputEPub3() { <> <> <> - <> <> <> <> @@ -2440,8 +2441,7 @@ xmlns="urn:oasis:names:tc:opendocument:xmlns:container"> urn:uuid:%s - - + ┃", _uuid, @@ -2473,7 +2473,7 @@ xmlns="urn:oasis:names:tc:opendocument:xmlns:container"> ); } content ~= " " ~ "" ~ "\n "; - content ~= " " ~ "" ~ "\n "; + content ~= " " ~ "" ~ "\n "; content ~= parts["spine"]; content ~= " " ~ "" ~ "\n "; content ~= " " ~ "" ~ "\n "; @@ -2530,7 +2530,6 @@ xmlns="urn:oasis:names:tc:opendocument:xmlns:container">

Contents

+ _toc_nav_tail ~=" \n"; @@ -2617,124 +2619,6 @@ xmlns="urn:oasis:names:tc:opendocument:xmlns:container"> } #+END_SRC -**** TODO _doc navigation epub2_ (OEBPS/toc.ncx) navigable toc using Dom structure - -- toc.ncx (epub2 navigation document) - - (replaced in epub3 by a declared xhtml nav file, in our case toc_nav.xhtml) - -#+NAME: output_epub3_constructs_oebps_toc_ncx -#+BEGIN_SRC d -@safe string epub2_oebps_toc_ncx(D,I)(D doc_abstraction, I doc_matters) { - int counter_play_order = 0; - string _uuid = "18275d951861c77f78acd05672c9906924c59f18a2e0ba06dad95959693e9bd8"; // TODO shared elsewhere - auto markup = InlineMarkup(); - static auto rgx = RgxO(); - enum DomTags { none, open, close, close_and_open, open_still, } - string toc; - string toc_ = format(q"┃ - - - - %s%s - - - - - - - - %s - - - %s - -┃", - (doc_matters.conf_make_meta.meta.title_full).special_characters_text, // title - (doc_matters.conf_make_meta.meta.creator_author.empty) ? "" - : " by " ~ (doc_matters.conf_make_meta.meta.creator_author).special_characters_text, // author - _uuid, // uuid - "3", // content depth - (doc_matters.conf_make_meta.meta.title_full).special_characters_text, // title - (doc_matters.conf_make_meta.meta.creator_author.empty) ? "" - : (doc_matters.conf_make_meta.meta.creator_author).special_characters_text, // author - ); - string _toc_ncx_tail = ""; - foreach (sect; doc_matters.has.keys_seq.seg) { - foreach (obj; doc_abstraction[sect]) { - if (sect == "head") { toc = toc_; - } - if (obj.metainfo.is_a == "heading") { - string _txt = obj.text.replaceAll(rgx.inline_notes_al_gen, "").strip.special_characters_text; - // writeln(_txt, " --- ", obj.metainfo.dom_structure_collapsed_tags_status); // DEBUG line - string hashtag = (obj.metainfo.heading_lev_markup <= 4) ? "" : ("#" ~ obj.metainfo.ocn.to!string); - foreach_reverse (k; 0 .. 7) { - switch (obj.metainfo.dom_structure_collapsed_tags_status[k]) { // for epub may need to construct for levels 1 to 4 only - case DomTags.close : - if (sect != "head") { - toc ~= "\n "; // issue at start of some documents - } - break; - case DomTags.close_and_open : - toc ~= "\n "; - goto default; - case DomTags.open : - goto default; - default : - string _toc; - if ((obj.metainfo.dom_structure_collapsed_tags_status[k] == DomTags.open - || obj.metainfo.dom_structure_collapsed_tags_status[k] == DomTags.close_and_open - // || obj.metainfo.dom_structure_collapsed_tags_status[k] == DomTags.open_still - )) { - ++counter_play_order; - _toc = format(q"┃ - - - %s - - ┃", - counter_play_order, - _txt, - obj.tags.segment_anchor_tag_epub, - hashtag, - ); - } - if (obj.metainfo.dom_structure_collapsed_tags_status[k] == DomTags.close_and_open) { - toc ~= _toc; - } else if (obj.metainfo.dom_structure_collapsed_tags_status[k] == DomTags.open) { - toc ~= _toc; - } - break; - } - if (doc_matters.has.keys_seq.seg[doc_matters.has.keys_seq.seg.length - 2] == sect) { - if (k == 6) {_toc_ncx_tail = "";} - switch (obj.metainfo.dom_structure_collapsed_tags_status[k]) { - case 0: case 2: - // case DomTags.none: case DomTags.close: - break; - case 1: case 3: case 4: - // case DomTags.open: case DomTags.close_and_open: case DomTags.open_still: - if (k != 0) { - } - _toc_ncx_tail ~= " " ~ markup.indent_by_spaces_provided(k, " ") ~ "" ~ "\n"; - break; - default : - break; - } - if (k == 0) { - _toc_ncx_tail ~= format(q"┃ -┃"); - } - } - } - } - } - } - toc ~= _toc_ncx_tail; - return toc; -} -#+END_SRC - ** the document contents :seg: *** ↻ loop & switch (sections & objects) format epub3 xhtml output @@ -2756,7 +2640,6 @@ xmlns="urn:oasis:names:tc:opendocument:xmlns:container"> /+ fixed output +/ string mimetypes; string meta_inf_container_xml; - string oebps_toc_ncx; string oebps_toc_nav_xhtml; /+ variable output +/ string oebps_content_opf; @@ -3052,25 +2935,25 @@ if (obj.metainfo.is_a == "heading") { assert(obj.text.length > 0); if (obj.metainfo.heading_lev_markup <= 4) { oepbs_content_parts["manifest_documents"] ~= - format(q"┃ + format(q"┃ ┃", obj.tags.segment_anchor_tag_epub, obj.tags.segment_anchor_tag_epub, ); oepbs_content_parts["spine"] ~= - format(q"┃ + format(q"┃ ┃", obj.tags.segment_anchor_tag_epub, ); oepbs_content_parts["guide"] ~= - format(q"┃ + format(q"┃ ┃", obj.tags.segment_anchor_tag_epub, obj.tags.segment_anchor_tag_epub, ); } else if (obj.metainfo.heading_lev_markup > 4) { oepbs_content_parts["manifest_documents"] ~= - format(q"┃ + format(q"┃ ┃", obj.tags.segment_anchor_tag_epub, obj.metainfo.object_number, @@ -3078,13 +2961,13 @@ if (obj.metainfo.is_a == "heading") { obj.metainfo.object_number, ); oepbs_content_parts["spine"] ~= - format(q"┃ + format(q"┃ ┃", obj.tags.segment_anchor_tag_epub, obj.metainfo.object_number, ); oepbs_content_parts["guide"] ~= - format(q"┃ + format(q"┃ ┃", obj.tags.segment_anchor_tag_epub, obj.metainfo.object_number, @@ -3102,11 +2985,10 @@ if (obj.metainfo.is_a == "heading") { } } /+ epub specific documents +/ - epubWrite.mimetypes = epub3_mimetypes; + epubWrite.mimetypes = epub3_mimetypes; epubWrite.meta_inf_container_xml = epub3_container_xml; - epubWrite.oebps_toc_ncx = doc_abstraction.epub2_oebps_toc_ncx(doc_matters); - epubWrite.oebps_toc_nav_xhtml = doc_abstraction.epub3_oebps_toc_nav_xhtml(doc_matters); - epubWrite.oebps_content_opf = doc_abstraction.epub3_oebps_content(doc_matters, oepbs_content_parts); + epubWrite.oebps_toc_nav_xhtml = doc_abstraction.epub3_oebps_toc_nav_xhtml(doc_matters); + epubWrite.oebps_content_opf = doc_abstraction.epub3_oebps_content(doc_matters, oepbs_content_parts); epubWrite.epub3_write_output_files(doc_matters); } #+END_SRC @@ -3127,7 +3009,6 @@ zip -0 file.epub mimetype && zip -r -9 file.epub META-INF OEBPS static assert(is(typeof(epub_write.mimetypes) == string)); static assert(is(typeof(epub_write.meta_inf_container_xml) == string)); static assert(is(typeof(epub_write.oebps_toc_nav_xhtml) == string)); - static assert(is(typeof(epub_write.oebps_toc_ncx) == string)); static assert(is(typeof(epub_write.oebps_content_opf) == string)); } static auto rgx = RgxO(); @@ -3234,16 +3115,6 @@ zip -0 file.epub mimetype && zip -r -9 file.epub META-INF OEBPS fn = pth_epub3.fn_oebps_toc_nav_xhtml; EPUBzip(epub_write.oebps_toc_nav_xhtml, fn); } - { /+ OEBPS/toc.ncx (navigation toc epub2) +/ - { /+ debug +/ - if (doc_matters.opt.action.debug_do) { - fn_dbg = pth_epub3.dbg_fn_oebps_toc_ncx(doc_matters.src.filename); - File(fn_dbg, "w").writeln(epub_write.oebps_toc_ncx); - } - } - fn = pth_epub3.fn_oebps_toc_ncx; - EPUBzip(epub_write.oebps_toc_ncx, fn); - } { /+ OEBPS/content.opf (doc manifest) +/ { /+ debug +/ if (doc_matters.opt.action.debug_do) { -- cgit v1.2.3