From c98283e3919f39c093e1eb51f80e6f259a7fd103 Mon Sep 17 00:00:00 2001 From: Ralph Amissah Date: Fri, 10 Feb 2017 16:51:55 -0500 Subject: output, sisupod & a few switches --- org/ao_defaults.org | 24 +- org/output.org | 689 +++++++++++++++++++++++++++++----------------------- org/sdp.org | 9 + 3 files changed, 412 insertions(+), 310 deletions(-) (limited to 'org') diff --git a/org/ao_defaults.org b/org/ao_defaults.org index 2cb0eee..fbf4495 100644 --- a/org/ao_defaults.org +++ b/org/ao_defaults.org @@ -645,18 +645,21 @@ template SiSUpaths() { string doc_lng(string fn_src, string lng) { return chainPath(doc(fn_src), lng).array; } - string image(string fn_src) { - return chainPath(base(fn_src), "image").array; - } string conf(string fn_src) { - return chainPath(base(fn_src), "conf").array; + return chainPath(doc(fn_src), "_sisu").array; + } + string image(string fn_src) { + return chainPath(conf(fn_src), "image").array; } string css(string fn_src) { - return chainPath(base(fn_src), "css").array; + return chainPath(conf(fn_src), "css").array; } string fn_doc(string fn_src, string lng) { return chainPath((doc_lng(fn_src, lng)), baseName(fn_src)).array; } + string fn_doc_insert(string fn_src, string fn_insert, string lng) { + return chainPath((doc_lng(fn_src, lng)), baseName(fn_insert)).array; + } } struct HtmlPaths { string base_filename(string fn_src) { @@ -1090,6 +1093,17 @@ static bi_sub_terms_plus_obj_cite_number_offset_split = ctRegex!(`\s*\|\s*`); static bi_term_and_obj_cite_numbers_match = ctRegex!(`^(.+?)\+(\d+)`); #+END_SRC +** language codes :language:codes: + +#+name: ao_rgx +#+BEGIN_SRC d +/+ language codes +/ +auto language_codes = + ctRegex!("(am|bg|bn|br|ca|cs|cy|da|de|el|en|eo|es|et|eu|fi|fr|ga|gl|he|hi|hr|hy|ia|is|it|ja|ko|la|lo|lt|lv|ml|mr|nl|no|nn|oc|pl|pt|pt_BR|ro|ru|sa|se|sk|sl|sq|sr|sv|ta|te|th|tk|tr|uk|ur|vi|zh)"); +auto language_code_and_filename = + ctRegex!("(am|bg|bn|br|ca|cs|cy|da|de|el|en|eo|es|et|eu|fi|fr|ga|gl|he|hi|hr|hy|ia|is|it|ja|ko|la|lo|lt|lv|ml|mr|nl|no|nn|oc|pl|pt|pt_BR|ro|ru|sa|se|sk|sl|sq|sr|sv|ta|te|th|tk|tr|uk|ur|vi|zh)/[A-Za-z0-9._-].+?[.](?:sst|ssm)$"); +#+END_SRC + * +set colors for terminal+ (unused) :colors:terminal: #+name: ao_ansi_colors diff --git a/org/output.org b/org/output.org index 054937e..903b6ed 100644 --- a/org/output.org +++ b/org/output.org @@ -143,108 +143,111 @@ import #+BEGIN_SRC d :tangle ../src/sdp/source_sisupod.d template SiSUpod() { <> - <> - <> - <> - <> + void SiSUpod(T)(T doc_matters) { + <> + try { + <> + <> + } + catch (ErrnoException ex) { + // Handle error + } + } } #+END_SRC -*** TODO output files +*** mkdir -#+name: source_sisupod_config +#+name: source_sisupod_init #+BEGIN_SRC d -void SiSUpod(T)(T doc_matters) { - debug(asserts){ - } - mixin SiSUrgxInit; - mixin SiSUpaths; - auto pth_sisupod = SiSUpodPaths(); - mixin SiSUlanguageCodes; - auto lang = Lang(); - auto rgx = Rgx(); - /+ - dir structure - /tmp/_sisu_processing_/ralph/sisupod - ├── conf - ├── css (unless should be within conf?) - ├── doc - │ ├── en - │ ├── es - │ ├── fr - │   └── zh - └── image +debug(asserts){ + // static assert(is(typeof(doc_matters) == tuple)); +} +mixin SiSUrgxInit; +mixin SiSUpaths; +auto pth_sisupod = SiSUpodPaths(); +mixin SiSUlanguageCodes; +auto lang = Lang(); +auto rgx = Rgx(); +assert (match(doc_matters.source_filename, rgx.src_fn)); +#+END_SRC - - tasks - - create directory structure - - map other language directories - - check for corresponding files within - +/ - assert (match(doc_matters.source_filename, rgx.src_fn)); - try { - /+ create directory structure +/ - if (!exists(pth_sisupod.doc(doc_matters.source_filename))) { - mkdirRecurse(pth_sisupod.doc(doc_matters.source_filename)); - } - if (!exists(pth_sisupod.conf(doc_matters.source_filename))) { - mkdirRecurse(pth_sisupod.conf(doc_matters.source_filename)); - } - if (!exists(pth_sisupod.css(doc_matters.source_filename))) { - mkdirRecurse(pth_sisupod.css(doc_matters.source_filename)); - } - if (!exists(pth_sisupod.image(doc_matters.source_filename))) { - mkdirRecurse(pth_sisupod.image(doc_matters.source_filename)); - } - /+ copy relevant files +/ +#+name: source_sisupod_mkdirs +#+BEGIN_SRC d +/+ create directory structure +/ +if (!exists(pth_sisupod.doc(doc_matters.source_filename))) { + mkdirRecurse(pth_sisupod.doc(doc_matters.source_filename)); +} +if (!exists(pth_sisupod.conf(doc_matters.source_filename))) { + mkdirRecurse(pth_sisupod.conf(doc_matters.source_filename)); +} +if (!exists(pth_sisupod.css(doc_matters.source_filename))) { + mkdirRecurse(pth_sisupod.css(doc_matters.source_filename)); +} +if (!exists(pth_sisupod.image(doc_matters.source_filename))) { + mkdirRecurse(pth_sisupod.image(doc_matters.source_filename)); +} +if (!exists(pth_sisupod.doc_lng(doc_matters.source_filename, doc_matters.language))) { + mkdirRecurse(pth_sisupod.doc_lng(doc_matters.source_filename, doc_matters.language)); +} +#+END_SRC + +*** copy + +#+name: source_sisupod_copy +#+BEGIN_SRC d +debug(sisupod) { + writeln(__LINE__, ": ", + // doc_matters.environment["pwd"], "/", + doc_matters.source_filename, " -> ", + // doc_matters.environment["pwd"], "/", + pth_sisupod.fn_doc( + doc_matters.source_filename, + doc_matters.language + )); +} +if (exists(doc_matters.source_filename)) { + copy( + doc_matters.source_filename, + pth_sisupod.fn_doc( + doc_matters.source_filename, + doc_matters.language + )); +} +if (doc_matters.file_insert_list.length > 0) { + foreach (insert_file; doc_matters.file_insert_list) { debug(sisupod) { - writeln(__LINE__, ": ", - // doc_matters.environment["pwd"], "/", - doc_matters.source_filename, " -> ", - // doc_matters.environment["pwd"], "/", - pth_sisupod.fn_doc(doc_matters.source_filename, "en") - ); - } - // need to extract language code directories (from directory structure or filenames & have a default) - if (!exists(pth_sisupod.doc_lng(doc_matters.source_filename, "en"))) { - mkdirRecurse(pth_sisupod.doc_lng(doc_matters.source_filename, "en")); - } - if (exists(doc_matters.source_filename)) { - copy(doc_matters.source_filename, - pth_sisupod.fn_doc(doc_matters.source_filename, "en")); - } - if (doc_matters.file_insert_list.length > 0) { - foreach (insert_file; doc_matters.file_insert_list) { - debug(sisupod) { - writeln( - // doc_matters.environment["pwd"], "/", - insert_file, " -> ", - // doc_matters.environment["pwd"], "/", - pth_sisupod.fn_doc(doc_matters.source_filename, "en") - ); - } - if (exists(insert_file)) { - copy(insert_file, - pth_sisupod.fn_doc(doc_matters.source_filename, "en")); - } - } + writeln( + insert_file, " -> ", + pth_sisupod.fn_doc_insert( + doc_matters.source_filename, + insert_file, + doc_matters.language + )); } - foreach (image; doc_matters.image_list) { - debug(sisupod) { - writeln( - // doc_matters.environment["pwd"], "/", - "_sisu/image/", image, " -> ", - // doc_matters.environment["pwd"], "/", - pth_sisupod.image(doc_matters.source_filename), "/", image - ); - } - if (exists("_sisu/image/"~ image)) { - copy(("_sisu/image/"~ image), - (pth_sisupod.image(doc_matters.source_filename) ~ "/" ~ image)); - } + if (exists(insert_file)) { + copy( + insert_file, + pth_sisupod.fn_doc_insert( + doc_matters.source_filename, + insert_file, + doc_matters.language + )); } } - catch (ErrnoException ex) { - // Handle error +} +foreach (image; doc_matters.image_list) { + debug(sisupod) { + writeln( + "_sisu/image/", image, " -> ", + pth_sisupod.image(doc_matters.source_filename), "/", image + ); + } + if (exists("_sisu/image/"~ image)) { + copy( + ("_sisu/image/"~ image), + (pth_sisupod.image(doc_matters.source_filename) ~ "/" ~ image) + ); } } #+END_SRC @@ -601,42 +604,13 @@ template outputHTML() { #+END_SRC **** scroll :scroll: -***** output file +***** switch (sections & objects) format html output #+name: output_html_scroll #+BEGIN_SRC d -void scroll_write_output_file(Fn,C)( - Fn fn_src, - C doc, -) { - debug(asserts){ - static assert(is(typeof(fn_src) == string)); - static assert(is(typeof(doc) == string[])); - } - mixin SiSUpaths; - auto pth_html = HtmlPaths(); - try { - if (!exists(pth_html.base)) { - mkdirRecurse(pth_html.base); - } - auto f = File(pth_html.fn_scroll(fn_src), "w"); - foreach (o; doc) { - f.writeln(o); - } - } - catch (ErrnoException ex) { - // Handle error - } -} -#+END_SRC - -***** (sections & objects) switch (for html output format) - -#+name: output_html_scroll -#+BEGIN_SRC d -void scroll(C,T)( - auto ref const C contents, - auto ref T doc_matters, +void scroll(D,I)( + auto ref const D doc_abstraction, + auto ref I doc_matters, ) { mixin SiSUrgxInit; auto xhtml_format = outputXHTMLs(); @@ -644,8 +618,9 @@ void scroll(C,T)( string[] doc_html; string[] doc; foreach (part; doc_matters.keys_seq_scroll) { - foreach (obj; contents[part]) { - if (obj.use == "frontmatter") { + foreach (obj; doc_abstraction[part]) { + switch (obj.use) { + case "frontmatter": switch (obj.is_of) { case "para": switch (obj.is_a) { @@ -664,11 +639,12 @@ void scroll(C,T)( break; default: if ((doc_matters.opt_action_bool["debug"])) { - writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); + writeln(__FILE__, ":", __LINE__, ": ", obj.is_of); } break; } - } else if (obj.use == "body") { + break; + case "body": switch (obj.is_of) { case "para": switch (obj.is_a) { @@ -720,7 +696,8 @@ void scroll(C,T)( } break; } - } else if (obj.use == "backmatter") { + break; + case "backmatter": switch (obj.is_of) { case "para": switch (obj.is_a) { @@ -751,61 +728,63 @@ void scroll(C,T)( break; default: if ((doc_matters.opt_action_bool["debug"])) { - writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); + writeln(__FILE__, ":", __LINE__, ": ", obj.is_of); } break; } + break; + case "comment": + break; + default: + if ((doc_matters.opt_action_bool["debug"])) { + writeln(__FILE__, ":", __LINE__, ": ", obj.use); + } + break; } } } doc = xhtml_format.scroll_head(doc_matters.dochead_meta) ~ doc_html ~ xhtml_format.tail; - scroll_write_output_file(doc_matters.source_filename, doc); + scroll_write_output(doc_matters.source_filename, doc); } #+END_SRC -**** seg :seg: -***** output files +***** write output file -#+name: output_html_seg +#+name: output_html_scroll #+BEGIN_SRC d -void seg_write_output_files(M,C)( - M doc_matters, - C doc_html, +void scroll_write_output(Fn,C)( + Fn fn_src, + C doc, ) { debug(asserts){ - static assert(is(typeof(doc_html) == string[][string])); + static assert(is(typeof(fn_src) == string)); + static assert(is(typeof(doc) == string[])); } - mixin SiSUrgxInit; - auto rgx = Rgx(); mixin SiSUpaths; auto pth_html = HtmlPaths(); - auto xhtml_format = outputXHTMLs(); - auto m = matchFirst(doc_matters.source_filename, rgx.src_fn); try { - if (!exists(pth_html.seg(doc_matters.source_filename))) { - mkdirRecurse(pth_html.seg(doc_matters.source_filename)); + if (!exists(pth_html.base)) { + mkdirRecurse(pth_html.base); } - foreach (seg_filename; doc_matters.segnames) { - auto f = File(pth_html.fn_seg(doc_matters.source_filename, seg_filename), "w"); - foreach (docseg; doc_html[seg_filename]) { - f.writeln(docseg); - } - f.writeln(xhtml_format.tail); // needed for each lev4 + auto f = File(pth_html.fn_scroll(fn_src), "w"); + foreach (o; doc) { + f.writeln(o); } } catch (ErrnoException ex) { - // handle error + // Handle error } } #+END_SRC -***** (sections & objects) switch (for html output format) +**** seg :seg: +***** switch (sections & objects) format html output #+name: output_html_seg #+BEGIN_SRC d -void seg(C,M)( - auto ref const C contents, - auto ref M doc_matters, +void seg(D,I)( + auto ref const D doc_abstraction, + auto ref I doc_matters, ) { mixin SiSUrgxInit; auto rgx = Rgx(); @@ -815,7 +794,7 @@ void seg(C,M)( string segment_filename; string[] top_level_headings = ["","","",""]; foreach (part; doc_matters.keys_seq_seg) { - foreach (obj; contents[part]) { + foreach (obj; doc_abstraction[part]) { if (obj.is_a == "heading") { // all headings: frontmatter, body & backmatter switch (obj.heading_lev_markup) { case 0: .. case 3: @@ -840,13 +819,13 @@ void seg(C,M)( top_level_headings[3] = ""; goto default; default: - top_level_headings[obj.heading_lev_markup] = xhtml_format.heading(obj); // should probably have different css tagging (fontsize etc) + top_level_headings[obj.heading_lev_markup] = xhtml_format.heading(obj); break; } break; case 4: segment_filename = obj.segment_anchor_tag; - doc_html[segment_filename] ~= xhtml_format.seg_head(doc_matters.dochead_meta); // consider placing seg_head here as can more easily populate it with lev4 info + doc_html[segment_filename] ~= xhtml_format.seg_head(doc_matters.dochead_meta); foreach (top_level_heading; top_level_headings) { doc_html[segment_filename] ~= top_level_heading; } @@ -855,107 +834,171 @@ void seg(C,M)( case 5: .. case 7: doc_html[segment_filename] ~= xhtml_format.heading(obj); break; - default: + case 8: .. case 9: // unused numbers, if remain check if ((doc_matters.opt_action_bool["debug"])) { - writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); - } - break; - } - } else if (obj.use == "frontmatter") { - switch (obj.is_of) { - case "para": - switch (obj.is_a) { - case "toc": - doc_html[segment_filename] ~= xhtml_format.toc(obj); - break; - default: - // writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); - break; + writeln(__FILE__, ":", __LINE__, ": ", obj.is_a, ": ", obj.heading_lev_markup); + writeln(__FILE__, ":", __LINE__, ": ", obj.text); // check } break; default: - // writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); + if ((doc_matters.opt_action_bool["debug"])) { + writeln(__FILE__, ":", __LINE__, ": ", obj.is_a, ": ", obj.heading_lev_markup); + } break; } - } else if (obj.use == "body") { - switch (obj.is_of) { - case "para": - switch (obj.is_a) { + } else { + switch (obj.use) { + case "frontmatter": + switch (obj.is_of) { case "para": - doc_html[segment_filename] ~= xhtml_format.para(obj); + switch (obj.is_a) { + case "toc": + doc_html[segment_filename] ~= xhtml_format.toc(obj); + break; + default: + if ((doc_matters.opt_action_bool["debug"])) { + writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); + } + break; + } break; default: - // writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); + if ((doc_matters.opt_action_bool["debug"])) { + writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); + } break; } break; - case "block": - switch (obj.is_a) { - case "poem": // double check why both poem & verse - break; - case "verse": - doc_html[segment_filename] ~= xhtml_format.nugget(obj); - break; - case "group": - doc_html[segment_filename] ~= xhtml_format.nugget(obj); + case "body": + switch (obj.is_of) { + case "para": + switch (obj.is_a) { + case "para": + doc_html[segment_filename] ~= xhtml_format.para(obj); + break; + default: + if ((doc_matters.opt_action_bool["debug"])) { + writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); + } + break; + } break; case "block": - doc_html[segment_filename] ~= xhtml_format.nugget(obj); - break; - case "quote": - doc_html[segment_filename] ~= xhtml_format.nugget(obj); - break; - case "table": - doc_html[segment_filename] ~= xhtml_format.para(obj); - break; - case "code": - doc_html[segment_filename] ~= xhtml_format.code(obj); + switch (obj.is_a) { + case "poem": + break; + case "verse": + doc_html[segment_filename] ~= xhtml_format.nugget(obj); + break; + case "group": + doc_html[segment_filename] ~= xhtml_format.nugget(obj); + break; + case "block": + doc_html[segment_filename] ~= xhtml_format.nugget(obj); + break; + case "quote": + doc_html[segment_filename] ~= xhtml_format.nugget(obj); + break; + case "table": + doc_html[segment_filename] ~= xhtml_format.para(obj); + break; + case "code": + doc_html[segment_filename] ~= xhtml_format.code(obj); + break; + default: + if ((doc_matters.opt_action_bool["debug"])) { + writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); + } + break; + } break; default: if ((doc_matters.opt_action_bool["debug"])) { - writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); + writeln(__FILE__, ":", __LINE__, ": ", obj.is_of); } break; } break; - default: - // writeln(__FILE__, ":", __LINE__, ": ", obj.is_of); - break; - } - } else if (obj.use == "backmatter") { - switch (obj.is_of) { - case "para": - switch (obj.is_a) { - case "endnote": - doc_html[segment_filename] ~= xhtml_format.endnote(obj); - break; - case "glossary": - doc_html[segment_filename] ~= xhtml_format.para(obj); - break; - case "bibliography": - doc_html[segment_filename] ~= xhtml_format.para(obj); - break; - case "bookindex": - doc_html[segment_filename] ~= xhtml_format.para(obj); - break; - case "blurb": - doc_html[segment_filename] ~= xhtml_format.para(obj); + case "backmatter": + switch (obj.is_of) { + case "para": + switch (obj.is_a) { + case "endnote": + doc_html[segment_filename] ~= xhtml_format.endnote(obj); + break; + case "glossary": + doc_html[segment_filename] ~= xhtml_format.para(obj); + break; + case "bibliography": + doc_html[segment_filename] ~= xhtml_format.para(obj); + break; + case "bookindex": + doc_html[segment_filename] ~= xhtml_format.para(obj); + break; + case "blurb": + doc_html[segment_filename] ~= xhtml_format.para(obj); + break; + default: + if ((doc_matters.opt_action_bool["debug"])) { + writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); + } + break; + } break; default: - // writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); + if ((doc_matters.opt_action_bool["debug"])) { + writeln(__FILE__, ":", __LINE__, ": ", obj.is_of); + } break; } break; + case "comment": + break; default: if ((doc_matters.opt_action_bool["debug"])) { - writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); + writeln(__FILE__, ":", __LINE__, ": ", obj.use); } break; } } } } - seg_write_output_files(doc_matters, doc_html); + seg_write_output(doc_matters, doc_html); +} +#+END_SRC + +***** write output files + +#+name: output_html_seg +#+BEGIN_SRC d +void seg_write_output(M,C)( + M doc_matters, + C doc_html, +) { + debug(asserts){ + static assert(is(typeof(doc_html) == string[][string])); + } + mixin SiSUrgxInit; + auto rgx = Rgx(); + mixin SiSUpaths; + auto pth_html = HtmlPaths(); + auto xhtml_format = outputXHTMLs(); + auto m = matchFirst(doc_matters.source_filename, rgx.src_fn); + try { + if (!exists(pth_html.seg(doc_matters.source_filename))) { + mkdirRecurse(pth_html.seg(doc_matters.source_filename)); + } + foreach (seg_filename; doc_matters.segnames) { + auto f = File(pth_html.fn_seg(doc_matters.source_filename, seg_filename), "w"); + foreach (docseg; doc_html[seg_filename]) { + f.writeln(docseg); + } + f.writeln(xhtml_format.tail); // needed for each lev4 + } + } + catch (ErrnoException ex) { + // handle error + } } #+END_SRC @@ -2287,7 +2330,7 @@ template outputEPub() { #+END_SRC **** epub special files :format: -***** fixed +***** static ****** mimetype (file) #+name: output_epub_fixed @@ -2322,7 +2365,7 @@ string epub_container_xml() { #+name: output_epub_constructs #+BEGIN_SRC d -string epub_oebps_content(C,M)(C contents, M doc_matters) { +string epub_oebps_content(D,I)(D doc_abstraction, I doc_matters) { string uuid = "18275d951861c77f78acd05672c9906924c59f18a2e0ba06dad95959693e9bd8"; // TODO shared elsewhere string content = format(q"¶ @@ -2357,7 +2400,7 @@ string epub_oebps_content(C,M)(C contents, M doc_matters) { uuid, ); foreach (sect; doc_matters.keys_seq_seg) { - foreach (obj; contents[sect]) { + foreach (obj; doc_abstraction[sect]) { } } return content; @@ -2368,7 +2411,7 @@ string epub_oebps_content(C,M)(C contents, M doc_matters) { #+name: output_epub_constructs #+BEGIN_SRC d -string epub_oebps_toc(C,M)(C contents, M doc_matters) { +string epub_oebps_toc(D,I)(D doc_abstraction, I doc_matters) { int counter = 0; string uuid = "18275d951861c77f78acd05672c9906924c59f18a2e0ba06dad95959693e9bd8"; // TODO shared elsewhere auto markup = InlineMarkup(); @@ -2401,7 +2444,7 @@ string epub_oebps_toc(C,M)(C contents, M doc_matters) { (doc_matters.dochead_meta["creator"]["author"].empty) ? "" : doc_matters.dochead_meta["creator"]["author"], // author ); foreach (sect; doc_matters.keys_seq_seg) { - foreach (obj; contents[sect]) { + foreach (obj; doc_abstraction[sect]) { if (obj.is_a == "heading") { foreach_reverse (k; 0 .. 7) { switch (obj.dom_markedup[k]) { @@ -2446,13 +2489,14 @@ obj.segment_anchor_tag, // lev < 4 [no link]; lev == 4 [filename] markup.xhtml } #+END_SRC -**** build (sections & objects) switch (for epub xhtml output format) +**** seg :seg: +***** switch (sections & objects) format epub xhtml output #+name: output_epub_xhtml_seg #+BEGIN_SRC d -void outputEPub(C,T)( - auto ref const C contents, - auto ref T doc_matters, +void outputEPub(D,I)( + auto ref const D doc_abstraction, + auto ref I doc_matters, ) { mixin SiSUrgxInit; auto xhtml_format = outputXHTMLs(); @@ -2464,10 +2508,10 @@ void outputEPub(C,T)( string[] top_level_headings = ["","","",""]; auto mimetypes = epub_mimetypes; auto meta_inf_container_xml = epub_container_xml; - auto oebps_toc_ncx = epub_oebps_toc(contents, doc_matters); - auto oebps_content_opf = epub_oebps_content(contents, doc_matters); + auto oebps_toc_ncx = epub_oebps_toc(doc_abstraction, doc_matters); + auto oebps_content_opf = epub_oebps_content(doc_abstraction, doc_matters); foreach (part; doc_matters.keys_seq_seg) { - foreach (obj; contents[part]) { + foreach (obj; doc_abstraction[part]) { if (obj.is_a == "heading") { switch (obj.heading_lev_markup) { case 0: .. case 3: @@ -2507,100 +2551,129 @@ void outputEPub(C,T)( case 5: .. case 7: doc_epub[segment_filename] ~= xhtml_format.heading(obj); break; - default: + case 8: .. case 9: // unused numbers, if remain check if ((doc_matters.opt_action_bool["debug"])) { - writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); - } - break; - } - } else if (obj.use == "frontmatter") { - switch (obj.is_of) { - case "para": - switch (obj.is_a) { - case "toc": - doc_epub[segment_filename] ~= xhtml_format.toc(obj); - break; - default: - // writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); - break; + writeln(__FILE__, ":", __LINE__, ": ", obj.is_a, ": ", obj.heading_lev_markup); + writeln(__FILE__, ":", __LINE__, ": ", obj.text); // check } break; default: - // writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); + if ((doc_matters.opt_action_bool["debug"])) { + writeln(__FILE__, ":", __LINE__, ": ", obj.is_a, ": ", obj.heading_lev_markup); + } break; } - } else if (obj.use == "body") { - switch (obj.is_of) { - case "para": - switch (obj.is_a) { + } else { + switch (obj.use) { + case "frontmatter": + switch (obj.is_of) { case "para": - doc_epub[segment_filename] ~= xhtml_format.para(obj); + switch (obj.is_a) { + case "toc": + doc_epub[segment_filename] ~= xhtml_format.toc(obj); + break; + default: + if ((doc_matters.opt_action_bool["debug"])) { + writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); + } + break; + } break; default: - // writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); + if ((doc_matters.opt_action_bool["debug"])) { + writeln(__FILE__, ":", __LINE__, ": ", obj.is_of); + } break; } break; - case "block": - switch (obj.is_a) { - case "poem": // double check why both poem & verse - break; - case "verse": - doc_epub[segment_filename] ~= xhtml_format.nugget(obj); - break; - case "group": - doc_epub[segment_filename] ~= xhtml_format.nugget(obj); + case "body": + switch (obj.is_of) { + case "para": + switch (obj.is_a) { + case "para": + doc_epub[segment_filename] ~= xhtml_format.para(obj); + break; + default: + if ((doc_matters.opt_action_bool["debug"])) { + writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); + } + break; + } break; case "block": - doc_epub[segment_filename] ~= xhtml_format.nugget(obj); - break; - case "quote": - doc_epub[segment_filename] ~= xhtml_format.nugget(obj); - break; - case "table": - doc_epub[segment_filename] ~= xhtml_format.para(obj); // - break; - case "code": - doc_epub[segment_filename] ~= xhtml_format.code(obj); + switch (obj.is_a) { + case "poem": // double check why both poem & verse + break; + case "verse": + doc_epub[segment_filename] ~= xhtml_format.nugget(obj); + break; + case "group": + doc_epub[segment_filename] ~= xhtml_format.nugget(obj); + break; + case "block": + doc_epub[segment_filename] ~= xhtml_format.nugget(obj); + break; + case "quote": + doc_epub[segment_filename] ~= xhtml_format.nugget(obj); + break; + case "table": + doc_epub[segment_filename] ~= xhtml_format.para(obj); // + break; + case "code": + doc_epub[segment_filename] ~= xhtml_format.code(obj); + break; + default: + if ((doc_matters.opt_action_bool["debug"])) { + writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); + } + break; + } break; default: if ((doc_matters.opt_action_bool["debug"])) { - writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); + writeln(__FILE__, ":", __LINE__, ": ", obj.is_of); } break; } break; - default: - // writeln(__FILE__, ":", __LINE__, ": ", obj.is_of); - break; - } - } else if (obj.use == "backmatter") { - switch (obj.is_of) { - case "para": - switch (obj.is_a) { - case "endnote": - doc_epub[segment_filename] ~= xhtml_format.endnote(obj); - break; - case "glossary": - doc_epub[segment_filename] ~= xhtml_format.para(obj); - break; - case "bibliography": - doc_epub[segment_filename] ~= xhtml_format.para(obj); - break; - case "bookindex": - doc_epub[segment_filename] ~= xhtml_format.para(obj); - break; - case "blurb": - doc_epub[segment_filename] ~= xhtml_format.para(obj); + case "backmatter": + switch (obj.is_of) { + case "para": + switch (obj.is_a) { + case "endnote": + doc_epub[segment_filename] ~= xhtml_format.endnote(obj); + break; + case "glossary": + doc_epub[segment_filename] ~= xhtml_format.para(obj); + break; + case "bibliography": + doc_epub[segment_filename] ~= xhtml_format.para(obj); + break; + case "bookindex": + doc_epub[segment_filename] ~= xhtml_format.para(obj); + break; + case "blurb": + doc_epub[segment_filename] ~= xhtml_format.para(obj); + break; + default: + if ((doc_matters.opt_action_bool["debug"])) { + writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); + } + break; + } break; default: - // writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); + if ((doc_matters.opt_action_bool["debug"])) { + writeln(__FILE__, ":", __LINE__, ": ", obj.is_of); + } break; } break; + case "comment": + break; default: if ((doc_matters.opt_action_bool["debug"])) { - writeln(__FILE__, ":", __LINE__, ": ", obj.is_a); + writeln(__FILE__, ":", __LINE__, ": ", obj.use); } break; } @@ -2618,7 +2691,7 @@ void outputEPub(C,T)( } #+END_SRC -**** output files +**** write output files #+name: output_epub_xhtml_seg #+BEGIN_SRC d @@ -2671,6 +2744,12 @@ void epub_write_output_files(C,EpD,Mt,Mic,Ot,Oc)( /+ OEBPS/content.opf +/ f = File(pth_epub.fn_oebps_content_opf(doc_matters.source_filename), "w"); f.writeln(oebps_content_opf); + foreach (image; doc_matters.image_list) { + if (exists("_sisu/image/"~ image)) { + copy(("_sisu/image/"~ image), + ((pth_epub.doc_oebps_image(doc_matters.source_filename)) ~ "/" ~ image)); + } + } } catch (ErrnoException ex) { // Handle error diff --git a/org/sdp.org b/org/sdp.org index 032709f..46bd97a 100644 --- a/org/sdp.org +++ b/org/sdp.org @@ -575,6 +575,15 @@ struct DocumentMatters { string _k = fn_src; return _k; } + auto language() { + string _k; + if (auto m = match(fn_src, rgx.language_code_and_filename)) { + _k = m.captures[1]; + } else { + _k = "en"; + } + return _k; + } auto file_insert_list() { string[] _k = _0_header_1_body_content_2_insert_filelist_tuple[2]; return _k; -- cgit v1.2.3