diff options
Diffstat (limited to 'src/sdp')
-rw-r--r-- | src/sdp/abstraction.d | 8 | ||||
-rw-r--r-- | src/sdp/ao_abstract_doc_source.d | 40 | ||||
-rw-r--r-- | src/sdp/ao_defaults.d | 7 | ||||
-rw-r--r-- | src/sdp/ao_rgx.d | 8 | ||||
-rw-r--r-- | src/sdp/defaults.d | 186 | ||||
-rw-r--r-- | src/sdp/output_epub3.d | 60 | ||||
-rw-r--r-- | src/sdp/output_html.d | 24 | ||||
-rw-r--r-- | src/sdp/output_hub.d | 44 | ||||
-rw-r--r-- | src/sdp/output_xhtmls.d | 38 | ||||
-rw-r--r-- | src/sdp/paths_output.d | 287 | ||||
-rw-r--r-- | src/sdp/paths_source.d | 59 | ||||
-rw-r--r-- | src/sdp/source_sisupod.d | 103 |
12 files changed, 541 insertions, 323 deletions
diff --git a/src/sdp/abstraction.d b/src/sdp/abstraction.d index 714ab41..d6124a0 100644 --- a/src/sdp/abstraction.d +++ b/src/sdp/abstraction.d @@ -11,7 +11,8 @@ template SiSUabstraction() { ao_read_config_files, ao_read_source_files, ao_rgx, - output_hub; + output_hub, + paths_source; /+ sdlang http://sdlang.org +/ import sdlang; // sdlang.d /+ std +/ @@ -91,6 +92,11 @@ template SiSUabstraction() { string[string][string] _k = _make_and_meta[makeMeta.meta]; return _k; } + auto src_path_info() { + string _pwd = env["pwd"]; + auto _k = SiSUpathsSRC!()(_pwd, fn_src); + return _k; + } auto source_filename() { string _k = fn_src; return _k; diff --git a/src/sdp/ao_abstract_doc_source.d b/src/sdp/ao_abstract_doc_source.d index 24fcd48..f7eca53 100644 --- a/src/sdp/ao_abstract_doc_source.d +++ b/src/sdp/ao_abstract_doc_source.d @@ -363,8 +363,9 @@ template SiSUdocAbstraction() { ); } line = (line).replaceAll(rgx.true_dollar, "$$$$"); - // dollar represented as $$ needed to stop submatching on $ - // (substitutions using ${identifiers} must take into account (i.e. happen earlier)) + /+ dollar represented as $$ needed to stop submatching on $ + (substitutions using ${identifiers} must take into account (i.e. happen earlier)) + +/ debug(source) { // source lines writeln(line); } @@ -414,7 +415,6 @@ template SiSUdocAbstraction() { writeln(__LINE__); writeln(line); } - // _glossary_block_(line, type); type["glossary_section"] = State.on; type["biblio_section"] = State.off; type["blurb_section"] = State.off; @@ -618,7 +618,6 @@ template SiSUdocAbstraction() { "code block status: none or closed" ); if (type["blocks"] == TriState.closing) { - // blocks closed, unless followed by book index debug(check) { // block writeln(__LINE__); writeln(line); @@ -668,14 +667,13 @@ template SiSUdocAbstraction() { && ((type["para"] == State.off) && (type["heading"] == State.off))) { /+ heading make set +/ - _heading_make_set_(line, line_occur, heading_match_rgx, type); + line = _heading_make_set_(line, line_occur, heading_match_rgx, type); } /+ TODO node info: all headings identified at this point, - extract node info here?? - how long can it wait? - should be incorporated in composite objects - should happen before endnote links set (they need to be moved down?) - // node_construct.node_emitter_heading segment anchor tag +/ if (line.matchFirst(rgx.heading)) { /+ heading match +/ @@ -791,7 +789,6 @@ template SiSUdocAbstraction() { writeln(segment_anchor_tag_that_object_belongs_to); } the_document_body_section ~= comp_obj_heading; - // track previous heading and make assertions debug(objectrelated1) { // check writeln(line); } @@ -850,7 +847,6 @@ template SiSUdocAbstraction() { line == null, "line variable should be empty, should not occur" ); - // check what happens when paragraph separated by 2 newlines } } // close else for line empty } // close else for not the above @@ -959,7 +955,6 @@ template SiSUdocAbstraction() { comp_obj_heading_.parent_ocn = 1; comp_obj_heading_.parent_lev_markup = 0; the_bibliography_section ~= comp_obj_heading_; - // --- comp_obj_heading_ = comp_obj_heading_.init; comp_obj_heading_.use = "backmatter"; comp_obj_heading_.is_of = "para"; @@ -1454,7 +1449,6 @@ template SiSUdocAbstraction() { foreach (ref obj; the_bookindex_section["scroll"]) { if (obj.is_a == "heading") { debug(dom) { - // writeln(obj.text); } if (obj.heading_lev_markup == 4) { obj.segname_prev = html_segnames[obj.ptr_html_segnames - 1]; @@ -1540,7 +1534,6 @@ template SiSUdocAbstraction() { comp_obj_heading_.use = "empty"; comp_obj_heading_.is_of = "para"; comp_obj_heading_.is_a = "heading"; - // comp_obj_heading_.text = "(skip) this is the DOM tail"; comp_obj_heading_.ocn = 0; comp_obj_para.obj_cite_number = ""; comp_obj_heading_.segment_anchor_tag = ""; @@ -1892,6 +1885,7 @@ template SiSUdocAbstraction() { debug(quote) { // quote (curly) close writeln(line); } + an_object[an_object_key] = an_object[an_object_key].stripRight; type["blocks"] = TriState.closing; type["quote"] = TriState.closing; type["curly_quote"] = TriState.off; @@ -1906,6 +1900,7 @@ template SiSUdocAbstraction() { debug(quote) { // quote (tic) close writeln(line); } + an_object[an_object_key] = an_object[an_object_key].stripRight; type["blocks"] = TriState.closing; type["quote"] = TriState.closing; type["tic_quote"] = TriState.off; @@ -1933,6 +1928,7 @@ template SiSUdocAbstraction() { debug(group) { writeln(line); } + an_object[an_object_key] = an_object[an_object_key].stripRight; type["blocks"] = TriState.closing; type["group"] = TriState.closing; type["curly_group"] = TriState.off; @@ -1947,6 +1943,7 @@ template SiSUdocAbstraction() { debug(group) { writeln(line); } + an_object[an_object_key] = an_object[an_object_key].stripRight; type["blocks"] = TriState.closing; type["group"] = TriState.closing; type["tic_group"] = TriState.off; @@ -1974,6 +1971,7 @@ template SiSUdocAbstraction() { debug(block) { // block (curly) close writeln(line); } + an_object[an_object_key] = an_object[an_object_key].stripRight; type["blocks"] = TriState.closing; type["block"] = TriState.closing; type["curly_block"] = TriState.off; @@ -1988,6 +1986,7 @@ template SiSUdocAbstraction() { debug(block) { writeln(line); } + an_object[an_object_key] = an_object[an_object_key].stripRight; type["blocks"] = TriState.closing; type["block"] = TriState.closing; type["tic_block"] = TriState.off; @@ -2078,6 +2077,7 @@ template SiSUdocAbstraction() { ocn_emit(type["ocn_status"]); type["verse_new"] = State.off; } else if (line.matchFirst(rgx.newline_eol_delimiter_only)) { + processing["verse"] = processing["verse"].stripRight; verse_line = TriState.off; type["verse_new"] = State.on; } @@ -2170,6 +2170,7 @@ template SiSUdocAbstraction() { ocn_emit(type["ocn_status"]); type["verse_new"] = State.off; } else if (line.matchFirst(rgx.newline_eol_delimiter_only)) { + processing["verse"] = processing["verse"].stripRight; type["verse_new"] = State.on; verse_line = TriState.off; } @@ -2232,6 +2233,9 @@ template SiSUdocAbstraction() { debug(code) { // code (curly) close writeln(line); } + an_object[an_object_key] = an_object[an_object_key] + .replaceFirst(rgx.newline_eol_delimiter_only, "") + .stripRight; type["blocks"] = TriState.closing; type["code"] = TriState.closing; type["curly_code"] = TriState.off; @@ -2246,6 +2250,9 @@ template SiSUdocAbstraction() { debug(code) { // code (tic) close writeln(line); } + an_object[an_object_key] = an_object[an_object_key] + .replaceFirst(rgx.newline_eol_delimiter_only, "") + .stripRight; type["blocks"] = TriState.closing; type["code"] = TriState.closing; type["tic_code"] = TriState.off; @@ -2464,7 +2471,6 @@ template SiSUdocAbstraction() { header_tag_value=""; } } - // void _table_closed_make_special_notation_table_( char[] line, return ref string[string] an_object, @@ -2513,7 +2519,6 @@ template SiSUdocAbstraction() { string[string] obj_cite_number_poem, string[string][string] dochead_make_aa, ) { - // line.empty, post contents, empty variables --------------- assert( line.empty, "line should be empty" @@ -2966,6 +2971,7 @@ template SiSUdocAbstraction() { } } } + return line; } auto _heading_matched_(L,C,O,K,Lv,Lc,T,Me)( return ref L line, @@ -3748,7 +3754,6 @@ template SiSUdocAbstraction() { switch (obj_["is"]) { case "heading": static __gshared string anchor_tag = ""; - // TODO WORK ON, you still need to ensure that level 1 anchor_tags are unique obj_txt["munge"]=_configured_auto_heading_numbering_and_segment_anchor_tags(obj_txt["munge"], obj_, dochead_make_aa); obj_txt["munge"]=_make_segment_anchor_tags_if_none_provided(obj_txt["munge"], obj_["lev"]); if (auto m = obj_txt["munge"].match(rgx.heading_anchor_tag)) { @@ -4955,9 +4960,10 @@ template SiSUdocAbstraction() { static assert(is(typeof(bib_arr_json) == JSONValue[])); } foreach (bibent; biblio_unordered) { - // update bib to include deemed_author, needed for: - // sort_bibliography_array_by_deemed_author_year_title - // either: sort on multiple fields, or; create such sort field + /+ update bib to include deemed_author, needed for: + sort_bibliography_array_by_deemed_author_year_title + either: sort on multiple fields, or; create such sort field + +/ JSONValue j = parseJSON(bibent); if (!empty(j["fulltitle"].str)) { if (!empty(j["author_raw"].str)) { diff --git a/src/sdp/ao_defaults.d b/src/sdp/ao_defaults.d index 21352e2..0f1ba2a 100644 --- a/src/sdp/ao_defaults.d +++ b/src/sdp/ao_defaults.d @@ -309,7 +309,7 @@ template SiSUnode() { } int[string] node_metadata_heading_int() { auto _node = [ - "ocn" : 0, + "ocn" : 0, // decide whether to use or keep? "ptr_doc_object" : 0, "ptr_html_segnames" : 0, "ptr_heading" : 0, @@ -325,6 +325,7 @@ template SiSUnode() { "is" : "", "ocn" : "", "attrib" : "", + // "segment_anchor_tag" : "", ]; return _node; } @@ -334,6 +335,10 @@ template SiSUnode() { "indent_base" : 0, "indent_hang" : 0, "bullet" : 0, // bool (0|1) + // "ptr_doc_object" : 0, + // "ptr_html_segnames" : 0, + // "parent_ocn" : 0, + // "parent_lev_markup" : 9, ]; return _node; } diff --git a/src/sdp/ao_rgx.d b/src/sdp/ao_rgx.d index 0844a5f..8c73423 100644 --- a/src/sdp/ao_rgx.d +++ b/src/sdp/ao_rgx.d @@ -89,8 +89,8 @@ template SiSUrgxInit() { static block_open = ctRegex!("^((code([.][a-z][0-9a-z_]+)?|poem|group|block|quote|table)[{].*?$)|^`{3} (code([.][a-z][0-9a-z_]+)?|poem|group|block|quote|table)|^[{]table(~h)?(?P<columns>(?:[ ]+[0-9]+;)+)[}]"); static block_poem_open = ctRegex!("^((poem[{].*?$)|`{3} poem)"); /+ blocked markup tics +/ - static block_tic_open = ctRegex!("^`{3} (code([.][a-z][0-9a-z_]+)?|poem|group|block|quote|table)"); - static block_tic_code_open = ctRegex!("^`{3} (?:code)(?:[.]([a-z][0-9a-z_]+))?(?:[ ]+([#]))?"); + static block_tic_open = ctRegex!("^`{3} (code([.][a-z][0-9a-z_]+)?|poem|group|block|quote|table)"); // what of numbered code? + static block_tic_code_open = ctRegex!("^`{3} (?:code)(?:[.]([a-z][0-9a-z_]+))?(?:[ ]+([#]))?"); // extract additional info static block_tic_poem_open = ctRegex!("^`{3} (poem)"); static block_tic_group_open = ctRegex!("^`{3} (group)"); static block_tic_block_open = ctRegex!("^`{3} (block)"); @@ -99,7 +99,7 @@ template SiSUrgxInit() { static block_tic_close = ctRegex!("^(`{3})$","m"); /+ blocked markup curly +/ static block_curly_open = ctRegex!(`^((code([.][a-z][0-9a-z_]+)?|poem|group|block|quote|table)[{].*?$)`); - static block_curly_code_open = ctRegex!(`^(?:code(?:[.]([a-z][0-9a-z_]+))?[{]([#]?)\s*$)`); + static block_curly_code_open = ctRegex!(`^(?:code(?:[.]([a-z][0-9a-z_]+))?[{]([#]?)\s*$)`); // extract additional info static block_curly_code_close = ctRegex!(`^([}]code)`); static block_curly_poem_open = ctRegex!(`^(poem[{].*?$)`); static block_curly_poem_close = ctRegex!(`^([}]poem)`); @@ -182,7 +182,7 @@ template SiSUrgxInit() { 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)$"); + 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)$"); static newline = ctRegex!("\n", "mg"); static strip_br = ctRegex!("^<br>\n|<br>\n*$"); static space = ctRegex!(`[ ]`, "mg"); diff --git a/src/sdp/defaults.d b/src/sdp/defaults.d index 537b4ba..bbfd8d8 100644 --- a/src/sdp/defaults.d +++ b/src/sdp/defaults.d @@ -2,192 +2,6 @@ default settings +/ -template SiSUpaths() { - struct DirPaths { - string base_filename(string fn_src) { - return baseName(stripExtension(fn_src)); - } - } - struct SiSUpodPaths { - string base_filename(string fn_src) { - return baseName(stripExtension(fn_src)); - } - string sisupod_filename(string fn_src) { - return "sisupod".chainPath(base_filename(fn_src) ~ ".zip").array; - } - string base(string fn_src) { - return "sisupod".chainPath(base_filename(fn_src)).array; - } - } - struct SiSUpodPathsZipped { - auto spod_pths = SiSUpodPaths(); - string base_filename(string fn_src) { - return spod_pths.base_filename(fn_src); - } - string sisupod_filename(string fn_src) { - return spod_pths.sisupod_filename(fn_src); - } - string base(string fn_src) { - return spod_pths.base(fn_src); - } - auto doc_root(string fn_src) { - return "doc"; - } - auto doc(string fn_src) { - return doc_root(fn_src); - } - auto doc_lng(string fn_src, string lng) { - return doc_root(fn_src).chainPath(lng).array; - } - auto conf(string fn_src) { - return doc_root(fn_src).chainPath("_sisu").array; - } - auto image(string fn_src) { - return conf(fn_src).chainPath("image").array; - } - auto css(string fn_src) { - return conf(fn_src).chainPath("css").array; - } - auto fn_doc(string fn_src, string lng) { - return (doc_lng(fn_src, lng)).chainPath(baseName(fn_src)).array; - } - auto fn_doc_insert(string fn_src, string fn_insert, string lng) { - return (doc_lng(fn_src, lng)).chainPath(baseName(fn_insert)).array; - } - } - struct SiSUpodPathsFilesystemArchive { - auto spod_pths = SiSUpodPaths(); - string base_filename(string fn_src) { - return spod_pths.base_filename(fn_src); - } - string sisupod_filename(string fn_src) { - return spod_pths.sisupod_filename(fn_src); - } - string base(string fn_src) { - return spod_pths.base(fn_src); - } - auto doc_root(string fn_src) { - return base(fn_src).chainPath("doc").array; - } - auto doc(string fn_src) { - return doc_root(fn_src); - } - auto doc_lng(string fn_src, string lng) { - return doc_root(fn_src).chainPath(lng).array; - } - auto conf(string fn_src) { - return doc_root(fn_src).chainPath("_sisu").array; - } - auto image(string fn_src) { - return conf(fn_src).chainPath("image").array; - } - auto css(string fn_src) { - return conf(fn_src).chainPath("css").array; - } - auto fn_doc(string fn_src, string lng) { - return (doc_lng(fn_src, lng)).chainPath(baseName(fn_src)).array; - } - auto fn_doc_insert(string fn_src, string fn_insert, string lng) { - return (doc_lng(fn_src, lng)).chainPath(baseName(fn_insert)).array; - } - } - struct HtmlPaths { - string base_filename(string fn_src) { - return baseName(stripExtension(fn_src)); - } - string base() { - return "en".chainPath("html").array; - } - string seg(string fn_src) { - return base.chainPath(base_filename(fn_src)).array; - } - string fn_scroll(string fn_src) { - return base.chainPath(base_filename(fn_src) ~ ".html").array; - } - string fn_seg(string fn_src, string seg_filename) { - return seg(fn_src).chainPath(seg_filename ~ ".html").array; - } - } - struct Epub3paths { - string dirtop() { - return "".chainPath("").array; - } - string base_filename(string fn_src) { - return baseName(stripExtension(fn_src)); - } - string base() { - return "en".chainPath("epub3").array; - } - string epub_file(string fn_src) { - return base.chainPath(base_filename(fn_src) ~ ".epub").array; - } - string docdir(string fn_src) { - return base.chainPath(base_filename(fn_src)).array; - } - string doc_meta_inf(string fn_src) { - return dirtop.chainPath("META-INF").array; - } - string doc_oebps(string fn_src) { - return dirtop.chainPath("OEBPS").array; - } - string doc_oebps_css(string fn_src) { - return doc_oebps(fn_src).chainPath("css").array; - } - string doc_oebps_image(string fn_src) { - return doc_oebps(fn_src).chainPath("image").array; - } - string fn_mimetypes(string fn_src) { - return dirtop.chainPath("mimetypes").array; - } - string fn_dmi_container_xml(string fn_src) { - return doc_meta_inf(fn_src).chainPath("container.xml").array; - } - string fn_oebps_toc_nav_xhtml(string fn_src) { - return doc_oebps(fn_src).chainPath("toc_nav.xhtml").array; - } - string fn_oebps_toc_ncx(string fn_src) { - return doc_oebps(fn_src).chainPath("toc.ncx").array; - } - string fn_oebps_content_opf(string fn_src) { - return doc_oebps(fn_src).chainPath("content.opf").array; - } - string fn_oebps_content_xhtml(string fn_src, string seg_filename) { - return doc_oebps(fn_src).chainPath(seg_filename ~ ".xhtml").array; - } - debug(epub_output) { - string dbg_doc_meta_inf(string fn_src) { - return docdir(fn_src).chainPath("META-INF").array; - } - string dbg_doc_oebps(string fn_src) { - return docdir(fn_src).chainPath("OEBPS").array; - } - string dbg_doc_oebps_css(string fn_src) { - return doc_oebps(fn_src).chainPath("css").array; - } - string dbg_doc_oebps_image(string fn_src) { - return doc_oebps(fn_src).chainPath("image").array; - } - string dbg_fn_mimetypes(string fn_src) { - return docdir(fn_src).chainPath("mimetypes").array; - } - string dbg_fn_dmi_container_xml(string fn_src) { - return doc_meta_inf(fn_src).chainPath("container.xml").array; - } - string dbg_fn_oebps_toc_nav_xhtml(string fn_src) { - return doc_oebps(fn_src).chainPath("toc_nav.xhtml").array; - } - string dbg_fn_oebps_toc_ncx(string fn_src) { - return doc_oebps(fn_src).chainPath("toc.ncx").array; - } - string dbg_fn_oebps_content_opf(string fn_src) { - return doc_oebps(fn_src).chainPath("content.opf").array; - } - string dbg_fn_oebps_content_xhtml(string fn_src, string seg_filename) { - return doc_oebps(fn_src).chainPath(seg_filename ~ ".xhtml").array; - } - } - } -} template InternalMarkup() { struct InlineMarkup { auto en_a_o = "【"; auto en_a_c = "】"; // endnote en_a_o: '~{'; en_a_c: '}~'; diff --git a/src/sdp/output_epub3.d b/src/sdp/output_epub3.d index 314fe64..f16b25b 100644 --- a/src/sdp/output_epub3.d +++ b/src/sdp/output_epub3.d @@ -25,7 +25,8 @@ template outputEPub3() { create_zip_file, defaults, output_rgx, - output_xhtmls; + output_xhtmls, + paths_output; mixin InternalMarkup; mixin outputXHTMLs; string epub3_mimetypes() { @@ -45,6 +46,7 @@ template outputEPub3() { return o; } string epub3_oebps_content(D,I,P)(D doc_abstraction, I doc_matters, P parts) { + auto pth_epub3 = SiSUpathsEPUB!()(doc_matters.src_path_info, doc_matters.language); string uuid = "18275d951861c77f78acd05672c9906924c59f18a2e0ba06dad95959693e9bd8"; // TODO sort uuid in doc_matters! string content = format(q"¶ <?xml version='1.0' encoding='utf-8'?> <package xmlns="http://www.idpf.org/2007/opf" version="2.0" unique-identifier="EPB-UUID"> @@ -70,7 +72,7 @@ template outputEPub3() { <!-- NCX epub2 navigation --> <item id="ncx" href="toc.ncx" media-type="application/x-dtbncx+xml" /> <!-- CSS Style Sheets --> - <item id="main-css" href="css/xhtml.css" media-type="text/css" /> + <link rel="stylesheet" href="%s" type="text/css" id="main-css" /> <!-- nav epub3 navigation --> <item id="nav" href="toc_nav.xhtml" media-type="application/xhtml+xml" properties="nav" /> ¶", @@ -91,16 +93,19 @@ template outputEPub3() { uuid, uuid, uuid, + (pth_epub3.fn_oebps_css(doc_matters.source_filename)).chompPrefix("OEBPS/"), ); content ~= " " ~ "<!-- Content Documents -->" ~ "\n "; content ~= parts["manifest_documents"]; // TODO sort jpg & png content ~= " " ~ "<!-- Images -->" ~ "\n "; foreach (image; doc_matters.image_list) { - content ~= format(q"¶ <item id="%s" href="image/%s" media-type="image/png" /> + content ~= format(q"¶ <item id="%s" href="%s/%s" media-type="image/%s" /> ¶", - image, // strip image type, remove .png .jpg suffix, use in media-type="image/" + image.baseName.stripExtension, + (pth_epub3.doc_oebps_image(doc_matters.source_filename)).chompPrefix("OEBPS/"), image, + image.extension.chompPrefix("."), ); } content ~= " " ~ "</manifest>" ~ "\n "; @@ -208,9 +213,12 @@ template outputEPub3() { foreach_reverse (k; 0 .. 7) { switch (obj.dom_markedup[k]) { case DomTags.close : + // writeln(markup.indent_by_spaces_provided(k), "</", k, ">"); // --debug dom tags toc ~= "</navPoint>"; break; case DomTags.close_and_open : + // writeln(markup.indent_by_spaces_provided(k), "</", k, ">"); // --debug dom tags + // writeln(markup.indent_by_spaces_provided(k), "<", k, ">", obj.text); // --debug dom tags ++counter; toc ~= "</navPoint>"; toc ~= format(q"¶<navPoint class="chapter" id="navpoint" playOrder="%s"> @@ -224,6 +232,7 @@ template outputEPub3() { ); break; case DomTags.open : + // writeln(markup.indent_by_spaces_provided(k), "<", k, ">", obj.text); // --debug dom tags ++counter; toc ~= format(q"¶<navPoint class="chapter" id="navpoint" playOrder="%s"> <navLabel> @@ -375,7 +384,7 @@ template outputEPub3() { doc_epub3[segment_filename] ~= to!string(t[0]); doc_epub3_endnotes[segment_filename] ~= t[1]; break; - case "poem": + case "poem": // double check why both poem & verse break; case "verse": auto t = xhtml_format.verse_seg(obj, suffix); @@ -530,22 +539,29 @@ template outputEPub3() { static assert(is(typeof(oebps_toc_ncx) == string)); static assert(is(typeof(oebps_content_opf) == string)); } - mixin SiSUpaths; - auto pth_epub3 = Epub3paths(); + auto src_path_info = doc_matters.src_path_info; + string fn_rel_pth = doc_matters.source_filename; + string lng = doc_matters.language; + auto pth_epub3 = SiSUpathsEPUB!()(src_path_info, lng); auto xhtml_format = outputXHTMLs(); /+ zip file +/ auto fn_epub = pth_epub3.epub_file(doc_matters.source_filename); auto zip = new ZipArchive(); // ZipArchive zip = new ZipArchive(); /+ zip archive member files +/ try { - if (!exists(pth_epub3.doc_meta_inf(doc_matters.source_filename))) { - pth_epub3.doc_meta_inf(doc_matters.source_filename).mkdirRecurse; + if (!exists(pth_epub3.base)) { + pth_epub3.base.mkdirRecurse; } - if (!exists(pth_epub3.doc_oebps_css(doc_matters.source_filename))) { - pth_epub3.doc_oebps_css(doc_matters.source_filename).mkdirRecurse; - } - if (!exists(pth_epub3.doc_oebps_image(doc_matters.source_filename))) { - pth_epub3.doc_oebps_image(doc_matters.source_filename).mkdirRecurse; + debug(epub_output) { + if (!exists(pth_epub3.dbg_doc_meta_inf(doc_matters.source_filename))) { + pth_epub3.dbg_doc_meta_inf(doc_matters.source_filename).mkdirRecurse; + } + if (!exists(pth_epub3.dbg_doc_oebps_css(doc_matters.source_filename))) { + pth_epub3.dbg_doc_oebps_css(doc_matters.source_filename).mkdirRecurse; + } + if (!exists(pth_epub3.dbg_doc_oebps_image(doc_matters.source_filename))) { + pth_epub3.dbg_doc_oebps_image(doc_matters.source_filename).mkdirRecurse; + } } { /+ OEBPS/[segments].xhtml (the document contents) +/ foreach (seg_filename; doc_matters.segnames) { @@ -630,7 +646,7 @@ template outputEPub3() { /+ create the zip file +/ createZipFile!()(fn_epub, zip.build()); } - { /+ TODO OEBPS/toc.ncx (navigation toc epub2) +/ + { /+ OEBPS/toc.ncx (navigation toc epub2) +/ debug(epub_output) { fn_dbg = pth_epub3.dbg_fn_oebps_toc_ncx(doc_matters.source_filename); File(fn_dbg, "w").writeln(oebps_toc_ncx); @@ -647,7 +663,7 @@ template outputEPub3() { /+ create the zip file +/ createZipFile!()(fn_epub, zip.build()); } - { /+ TODO OEBPS/content.opf (doc manifest) +/ + { /+ OEBPS/content.opf (doc manifest) +/ debug(epub_output) { fn_dbg = pth_epub3.dbg_fn_oebps_content_opf(doc_matters.source_filename); File(fn_dbg, "w").writeln(oebps_content_opf); @@ -666,19 +682,19 @@ template outputEPub3() { } { /+ OEBPS/_sisu/image (images) +/ foreach (image; doc_matters.image_list) { - if (exists("_sisu/image/"~ image)) { - ("_sisu/image/"~ image) - .copy((pth_epub3.doc_oebps_image(doc_matters.source_filename)) ~ "/" ~ image); + if (exists(doc_matters.src_path_info.image_root ~ "/" ~ image)) { + (doc_matters.src_path_info.image_root ~ "/" ~ image) + .copy((pth_epub3.dbg_doc_oebps_image(doc_matters.source_filename)) ~ "/" ~ image); } } foreach (image; doc_matters.image_list) { debug(epub_images) { writeln( - "_sisu/image/", image, " -> ", - pth_epub3.doc_oebps_image(doc_matters.source_filename), "/", image + doc_matters.src_path_info.image_root, image, " -> ", + pth_epub3.dbg_doc_oebps_image(doc_matters.source_filename), "/", image ); } - auto fn_src = "_sisu/image/"~ image; + auto fn_src = doc_matters.src_path_info.image_root ~ image; auto fn_out = pth_epub3.doc_oebps_image(doc_matters.source_filename).to!string ~ "/" ~ image; if (exists(fn_src)) { { diff --git a/src/sdp/output_html.d b/src/sdp/output_html.d index 431b81c..d5b1a22 100644 --- a/src/sdp/output_html.d +++ b/src/sdp/output_html.d @@ -25,7 +25,8 @@ template outputHTML() { create_zip_file, defaults, output_rgx, - output_xhtmls; + output_xhtmls, + paths_output; mixin outputXHTMLs; void scroll(D,I)( @@ -167,18 +168,20 @@ template outputHTML() { } } doc = xhtml_format.scroll_head(doc_matters.dochead_meta) ~ doc_html ~ xhtml_format.tail; - scroll_write_output(doc_matters.source_filename, doc); + scroll_write_output(doc_matters, doc); } - void scroll_write_output(Fn,C)( - Fn fn_src, + void scroll_write_output(M,C)( + M doc_matters, C doc, ) { debug(asserts) { - static assert(is(typeof(fn_src) == string)); static assert(is(typeof(doc) == string[])); } - mixin SiSUpaths; - auto pth_html = HtmlPaths(); + string fn_src = doc_matters.source_filename; + auto src_path_info = doc_matters.src_path_info; + string fn_rel_pth = doc_matters.source_filename; + string lng = doc_matters.language; + auto pth_html = SiSUpathsHTML!()(src_path_info, lng); try { if (!exists(pth_html.base)) { pth_html.base.mkdirRecurse; @@ -240,6 +243,7 @@ template outputHTML() { segment_filename = obj.segment_anchor_tag; doc_html[segment_filename] ~= xhtml_format.seg_head(doc_matters.dochead_meta); foreach (top_level_heading; top_level_headings) { + // writeln(top_level_heading); doc_html[segment_filename] ~= top_level_heading; } auto t = xhtml_format.heading_seg(obj, suffix); @@ -413,8 +417,10 @@ template outputHTML() { } mixin SiSUoutputRgxInit; auto rgx = Rgx(); - mixin SiSUpaths; - auto pth_html = HtmlPaths(); + auto src_path_info = doc_matters.src_path_info; + string fn_rel_pth = doc_matters.source_filename; + string lng = doc_matters.language; + auto pth_html = SiSUpathsHTML!()(src_path_info, lng); auto xhtml_format = outputXHTMLs(); auto m = doc_matters.source_filename.matchFirst(rgx.src_fn); try { diff --git a/src/sdp/output_hub.d b/src/sdp/output_hub.d index 9e4f971..c38b8e5 100644 --- a/src/sdp/output_hub.d +++ b/src/sdp/output_hub.d @@ -29,47 +29,55 @@ template outputHub() { source_sisupod, create_zip_file, output_rgx, - output_xhtmls; + output_xhtmls, + paths_output; void outputHub(D,I)(D doc_abstraction, I doc_matters) { mixin SiSUoutputRgxInit; auto rgx = Rgx(); if ((doc_matters.opt_action_bool["verbose"])) { writeln(doc_matters.keys_seq.seg); } - if (doc_matters.opt_action_bool["source"]) { - /+ mixin outputSource; +/ - writeln("source"); - } - if (doc_matters.opt_action_bool["sisupod"]) { - if ((doc_matters.opt_action_bool["verbose"])) {write("sisupod source processing... ");} + if ((doc_matters.opt_action_bool["source"]) + || (doc_matters.opt_action_bool["sisupod"])) { + if ((doc_matters.opt_action_bool["verbose"]) + && (doc_matters.opt_action_bool["source"])) + { write("sisu source processing... "); } + if ((doc_matters.opt_action_bool["verbose"]) + && (doc_matters.opt_action_bool["sisupod"])) + { write("sisupod source processing... "); } SiSUpod!()(doc_matters); - if ((doc_matters.opt_action_bool["verbose"])) {writeln("sisupod done");} + if ((doc_matters.opt_action_bool["verbose"]) + && (doc_matters.opt_action_bool["source"])) + { writeln("sisu source done"); } + if ((doc_matters.opt_action_bool["verbose"]) + && (doc_matters.opt_action_bool["sisupod"])) + { writeln("sisupod done"); } } if (doc_matters.opt_action_bool["text"]) { /+ mixin outputText; +/ writeln("text processing"); } if (doc_matters.opt_action_bool["html"]) { - if ((doc_matters.opt_action_bool["verbose"])) {write("html scroll processing... ");} + if ((doc_matters.opt_action_bool["verbose"])) { write("html scroll processing... "); } outputHTML!().scroll(doc_abstraction, doc_matters); - if ((doc_matters.opt_action_bool["verbose"])) {writeln("html scroll done");} - if ((doc_matters.opt_action_bool["verbose"])) {write("html seg processing... ");} + if ((doc_matters.opt_action_bool["verbose"])) { writeln("html scroll done"); } + if ((doc_matters.opt_action_bool["verbose"])) { write("html seg processing... "); } outputHTML!().seg(doc_abstraction, doc_matters); - if ((doc_matters.opt_action_bool["verbose"])) {writeln("html seg done");} + if ((doc_matters.opt_action_bool["verbose"])) { writeln("html seg done"); } } else if (doc_matters.opt_action_bool["html_seg"]) { - if ((doc_matters.opt_action_bool["verbose"])) {write("html seg processing... ");} + if ((doc_matters.opt_action_bool["verbose"])) { write("html seg processing... "); } outputHTML!().seg(doc_abstraction, doc_matters); - if ((doc_matters.opt_action_bool["verbose"])) {writeln("html seg done");} + if ((doc_matters.opt_action_bool["verbose"])) { writeln("html seg done"); } } else if (doc_matters.opt_action_bool["html_scroll"]) { - if ((doc_matters.opt_action_bool["verbose"])) {write("html scroll processing... ");} + if ((doc_matters.opt_action_bool["verbose"])) { write("html scroll processing... "); } outputHTML!().scroll(doc_abstraction, doc_matters); - if ((doc_matters.opt_action_bool["verbose"])) {writeln("html scroll done");} + if ((doc_matters.opt_action_bool["verbose"])) { writeln("html scroll done"); } } if (doc_matters.opt_action_bool["epub"]) { - if ((doc_matters.opt_action_bool["verbose"])) {write("epub3 processing... ");} + if ((doc_matters.opt_action_bool["verbose"])) { write("epub3 processing... "); } outputEPub3!()(doc_abstraction, doc_matters); // epub.css_write; - if ((doc_matters.opt_action_bool["verbose"])) {writeln("epub3 done");} + if ((doc_matters.opt_action_bool["verbose"])) { writeln("epub3 done"); } } if (doc_matters.opt_action_bool["pdf"]) { /+ mixin outputPDF; +/ diff --git a/src/sdp/output_xhtmls.d b/src/sdp/output_xhtmls.d index 804b82f..b85123e 100644 --- a/src/sdp/output_xhtmls.d +++ b/src/sdp/output_xhtmls.d @@ -25,7 +25,8 @@ template outputXHTMLs() { create_zip_file, defaults, output_rgx, - output_xhtmls; + output_xhtmls, + paths_output; mixin SiSUoutputRgxInit; struct outputXHTMLs { auto rgx = Rgx(); @@ -146,7 +147,6 @@ template outputXHTMLs() { string o; o = format(q"¶ <a name="bottom" id="bottom"></a> <a name="end" id="end"></a> - </div> </body> </html>¶"); return o; @@ -204,7 +204,7 @@ template outputXHTMLs() { if (obj.inline_notes_reg) { _txt = (_txt).replaceAll( rgx.inline_notes_delimiter_al_regular_number_note, - ("<a href=\"#note_$1\"><note id=\"noteref_$1\"> <sup>$1</sup> </note></a>") + ("<a href=\"#note_$1\"><note id=\"noteref_$1\"> <sup>$1</sup> </note></a>") ); } debug(markup_endnotes) { @@ -251,7 +251,7 @@ template outputXHTMLs() { } _txt = (_txt).replaceAll( rgx.inline_notes_delimiter_al_regular_number_note, - ("<a href=\"#note_$1\"><note id=\"noteref_$1\"> <sup>$1</sup> </note></a>") + ("<a href=\"#note_$1\"><note id=\"noteref_$1\"> <sup>$1</sup> </note></a>") ); } else if (_txt.match(rgx.inline_notes_delimiter_al_regular_number_note)) { debug(markup) { @@ -305,14 +305,19 @@ template outputXHTMLs() { string _txt, ) { auto tags = _xhtml_anchor_tags(obj.anchor_tags); + string _horizontal_rule = "<hr />"; + if (obj.heading_lev_markup == 0) { + _horizontal_rule = ""; + } string o; if (obj.obj_cite_number.empty) { - o = format(q"¶<br /><hr /><br /> + o = format(q"¶%s <div class="substance"> <h%s class="%s">%s %s </h%s> </div>¶", + _horizontal_rule, obj.heading_lev_markup, obj.is_a, tags, @@ -320,13 +325,14 @@ template outputXHTMLs() { obj.heading_lev_markup, ); } else { - o = format(q"¶<br /><hr /><br /> + o = format(q"¶%s <div class="substance"> <label class="ocn"><a href="#%s" class="lnkocn">%s</a></label> <h%s class="%s" id="%s"><a name="%s"></a>%s %s </h%s> </div>¶", + _horizontal_rule, obj.obj_cite_number, obj.obj_cite_number, obj.heading_lev_markup, @@ -541,25 +547,21 @@ template outputXHTMLs() { string o; if (obj.obj_cite_number.empty) { o = format(q"¶ <div class="substance"> - <p class="%s"> - %s - </p> + <p class="%s">%s</p> </div>¶", obj.is_a, - _txt + _txt.stripRight ); } else { o = format(q"¶ <div class="substance"> <label class="ocn"><a href="#%s" class="lnkocn">%s</a></label> - <p class="%s" id="%s"> - %s - </p> + <p class="%s" id="%s">%s</p> </div>¶", obj.obj_cite_number, obj.obj_cite_number, obj.is_a, obj.obj_cite_number, - _txt + _txt.stripRight ); } return o; @@ -600,9 +602,7 @@ template outputXHTMLs() { string o; if (obj.obj_cite_number.empty) { o = format(q"¶ <div class="substance"> - <p class="%s"> - %s - </p> + <p class="%s">%s</p> </div>¶", obj.is_a, _txt @@ -610,9 +610,7 @@ template outputXHTMLs() { } else { o = format(q"¶ <div class="substance"> <label class="ocn"><a href="#%s" class="lnkocn">%s</a></label> - <p class="%s" id="%s"> - %s - </p> + <p class="%s" id="%s">%s</p> </div>¶", obj.obj_cite_number, obj.obj_cite_number, diff --git a/src/sdp/paths_output.d b/src/sdp/paths_output.d new file mode 100644 index 0000000..9c91384 --- /dev/null +++ b/src/sdp/paths_output.d @@ -0,0 +1,287 @@ +/++ + default settings ++/ +import std.array, + std.path, + std.regex, + std.stdio; +import ao_rgx; +template SiSUpathsSisupod() { + mixin SiSUrgxInit; + auto rgx = Rgx(); + string base_dir = "sisupod"; + string suffix = ".zip"; + auto SiSUpathsSisupod()() { + struct _PathsStruct { + string base_filename(string fn_src) { + return fn_src.baseName.stripExtension; + } + string sisupod_filename(string fn_src) { + return base_dir.chainPath(base_filename(fn_src) ~ suffix).array; + } + string base(string fn_src) { + return base_dir.chainPath(base_filename(fn_src)).array; + } + } + return _PathsStruct(); + } +} +template SiSUpathsSisupodZipped() { + mixin SiSUrgxInit; + auto rgx = Rgx(); + auto SiSUpathsSisupodZipped(Ps,Lng)( + Ps src_pth_info, + Lng lng, + ) { + struct _PathsStruct { + auto spod_pths = SiSUpathsSisupod!()(); // SiSUpodPaths(); + string base_filename(string fn_src) { + return spod_pths.base_filename(fn_src); + } + string sisupod_filename(string fn_src) { + return spod_pths.sisupod_filename(fn_src); + } + string base(string fn_src) { + return spod_pths.base(fn_src); + } + auto pod_root(string fn_src) { + return "sisudoc"; + } + auto text_root(string fn_src) { + return pod_root(fn_src).chainPath("text").array; + } + auto media_root(string fn_src) { + return pod_root(fn_src).chainPath("docmedia").array; + } + auto conf_root(string fn_src) { + return pod_root(fn_src).chainPath("conf").array; + } + auto doc(string fn_src) { + return text_root(fn_src); // or pod_root? + } + auto doc_lng(string fn_src) { + return text_root(fn_src).chainPath(lng).array; + } + auto image_root(string fn_src) { + return media_root(fn_src).chainPath("image").array; + } + auto css(string fn_src) { + return conf_root(fn_src).chainPath("css").array; + } + auto fn_doc(string fn_src) { + return (doc_lng(fn_src)).chainPath(fn_src.baseName).array; + } + auto fn_doc_insert(string fn_src, string fn_insert) { + return (doc_lng(fn_src)).chainPath(fn_insert.baseName).array; + } + } + return _PathsStruct(); + } +} +template SiSUpathsSisupodFileSystem() { + mixin SiSUrgxInit; + auto rgx = Rgx(); + auto SiSUpathsSisupodFileSystem(Ps,Lng)( + Ps src_pth_info, + Lng lng, + ) { + struct _PathsStruct { + auto spod_pths = SiSUpathsSisupod!()(); // SiSUpodPaths(); + string base_filename(string fn_src) { + return spod_pths.base_filename(fn_src); + } + string sisupod_filename(string fn_src) { + return spod_pths.sisupod_filename(fn_src); + } + string base(string fn_src) { + return spod_pths.base(fn_src); + } + auto pod_root(string fn_src) { + return base(fn_src).chainPath("sisudoc").array; + } + auto text_root(string fn_src) { + return pod_root(fn_src).chainPath("text").array; + } + auto media_root(string fn_src) { + return pod_root(fn_src).chainPath("docmedia").array; + } + auto conf_root(string fn_src) { + return pod_root(fn_src).chainPath("conf").array; + } + auto doc(string fn_src) { + return pod_root(fn_src); + } + auto doc_lng(string fn_src) { + return text_root(fn_src).chainPath(lng).array; + } + auto image_root(string fn_src) { + return media_root(fn_src).chainPath("image").array; + } + auto css(string fn_src) { + return conf_root(fn_src).chainPath("css").array; + } + auto fn_doc(string fn_src) { + return (doc_lng(fn_src)).chainPath(fn_src.baseName).array; + } + auto fn_doc_insert(string fn_src, string fn_insert) { + return (doc_lng(fn_src)).chainPath(fn_insert.baseName).array; + } + } + return _PathsStruct(); + } +} +template SiSUoutPaths() { + auto SiSUoutPaths(Ps,Lng)( + Ps src_pth_info, + Lng lng, + ) { + struct _PathsStruct { + string output_root() { + return "sisugen"; + } + string output_base() { + return output_root.chainPath(lng).array; + } + } + return _PathsStruct(); + } +} +template SiSUpathsHTML() { + mixin SiSUrgxInit; + auto rgx = Rgx(); + auto SiSUpathsHTML(Ps,Lng)( + Ps src_pth_info, + Lng lng, + ) { + auto out_pth = SiSUoutPaths!()(src_pth_info, lng); + string base_dir = "html"; + string suffix = ".html"; + struct _PathsStruct { + string base_filename(string fn_src) { + return fn_src.baseName.stripExtension; + } + string base() { + return (out_pth.output_base).chainPath(base_dir).array; + } + string image() { + return (out_pth.output_root).chainPath("image").array; + } + string css() { + return (out_pth.output_root).chainPath("css").array; + } + string fn_css() { + return css.chainPath("html.css").array; + } + string seg(string fn_src) { + return base.chainPath(base_filename(fn_src)).array; + } + string fn_scroll(string fn_src) { + return base.chainPath(base_filename(fn_src) ~ suffix).array; + } + string fn_seg(string fn_src, string seg_filename) { + return seg(fn_src).chainPath(seg_filename ~ suffix).array; + } + } + return _PathsStruct(); + } +} +template SiSUpathsEPUB() { + mixin SiSUrgxInit; + auto rgx = Rgx(); + auto SiSUpathsEPUB(Ps,Lng)( + Ps src_pth_info, + Lng lng, + ) { + auto out_pth = SiSUoutPaths!()(src_pth_info, lng); + string base_dir = "epub"; + struct _PathsStruct { + string base() { + return (out_pth.output_base).chainPath(base_dir).array; + } + string base_filename(string fn_src) { + return fn_src.baseName.stripExtension; + } + string epub_file(string fn_src) { + return base.chainPath(base_filename(fn_src) ~ ".epub").array; + } + string dirtop() { + return "".chainPath("").array; + } + string doc_meta_inf(string fn_src) { + return dirtop.chainPath("META-INF").array; + } + string doc_oebps(string fn_src) { + return dirtop.chainPath("OEBPS").array; + } + string doc_oebps_css(string fn_src) { + return doc_oebps(fn_src).chainPath("css").array; + } + string doc_oebps_image(string fn_src) { + return doc_oebps(fn_src).chainPath("image").array; + } + string fn_mimetypes(string fn_src) { + return dirtop.chainPath("mimetypes").array; + } + string fn_dmi_container_xml(string fn_src) { + return doc_meta_inf(fn_src).chainPath("container.xml").array; + } + string fn_oebps_toc_nav_xhtml(string fn_src) { + return doc_oebps(fn_src).chainPath("toc_nav.xhtml").array; + } + string fn_oebps_toc_ncx(string fn_src) { + return doc_oebps(fn_src).chainPath("toc.ncx").array; + } + string fn_oebps_content_opf(string fn_src) { + return doc_oebps(fn_src).chainPath("content.opf").array; + } + string fn_oebps_content_xhtml(string fn_src, string seg_filename) { + return doc_oebps(fn_src).chainPath(seg_filename ~ ".xhtml").array; + } + string fn_oebps_css(string fn_src) { + return doc_oebps_css(fn_src).chainPath("epub.css").array; + } + debug(epub_output) { + string dbg_docdir(string fn_src) { + return base.chainPath(base_filename(fn_src)).array; + } + string dbg_docdir_oebps(string fn_src) { + return dbg_docdir(fn_src).chainPath("OEBPS").array; + } + string dbg_doc_meta_inf(string fn_src) { + return dbg_docdir(fn_src).chainPath("META-INF").array; + } + string dbg_doc_oebps(string fn_src) { + return dbg_docdir(fn_src).chainPath("OEBPS").array; + } + string dbg_doc_oebps_css(string fn_src) { + return dbg_doc_oebps(fn_src).chainPath("css").array; + } + string dbg_doc_oebps_image(string fn_src) { + return dbg_doc_oebps(fn_src).chainPath("image").array; + } + string dbg_fn_mimetypes(string fn_src) { + return dbg_docdir(fn_src).chainPath("mimetypes").array; + } + string dbg_fn_dmi_container_xml(string fn_src) { + return dbg_doc_meta_inf(fn_src).chainPath("container.xml").array; + } + string dbg_fn_oebps_toc_nav_xhtml(string fn_src) { + return dbg_docdir_oebps(fn_src).chainPath("toc_nav.xhtml").array; + } + string dbg_fn_oebps_toc_ncx(string fn_src) { + return dbg_docdir_oebps(fn_src).chainPath("toc.ncx").array; + } + string dbg_fn_oebps_content_opf(string fn_src) { + return dbg_docdir_oebps(fn_src).chainPath("content.opf").array; + } + string dbg_fn_oebps_content_xhtml(string fn_src, string seg_filename) { + return dbg_docdir_oebps(fn_src).chainPath(seg_filename ~ ".xhtml").array; + } + string dbg_fn_oebps_css(string fn_src) { + return dbg_doc_oebps_css(fn_src).chainPath("epub.css").array; + } + } + } + return _PathsStruct(); + } +} diff --git a/src/sdp/paths_source.d b/src/sdp/paths_source.d new file mode 100644 index 0000000..f60949d --- /dev/null +++ b/src/sdp/paths_source.d @@ -0,0 +1,59 @@ +/++ + read configuration files<BR> + - read config files<BR> + ao_config_files.d ++/ +import std.array, + std.path, + std.regex, + std.stdio; +import ao_rgx; +template SiSUpathsSRC() { + mixin SiSUrgxInit; + auto rgx = Rgx(); + auto SiSUpathsSRC(D,Fn)( + D _pwd, + Fn _fn_src, + ) { + struct SisuSrcPaths { + auto pwd() { + return _pwd; + } + auto language() { + // use command line info as well? + string _k; + if (auto m = _fn_src.match(rgx.language_code_and_filename)) { + _k = m.captures[1]; + } else { + _k = "en"; + } + return _k; + } + auto doc_root() { + return "sisudoc"; + } + auto text_root() { + return doc_root.chainPath("text").array; + } + auto media_root() { + return doc_root.chainPath("docmedia").array; + } + auto conf_root() { + return doc_root.chainPath("conf").array; + } + auto image_root() { + return media_root.chainPath("image").array; + } + auto doc_src_fn_with_path_for_text_root_and_lng() { + return text_root.chainPath(language).array; + } + auto doc_src_with_relative_path() { + return pwd.chainPath(_fn_src).array; + } + auto doc_src_fn() { + return _fn_src.baseName.array; + } + } + return SisuSrcPaths(); + } +} diff --git a/src/sdp/source_sisupod.d b/src/sdp/source_sisupod.d index cf15348..9b48ddb 100644 --- a/src/sdp/source_sisupod.d +++ b/src/sdp/source_sisupod.d @@ -25,60 +25,70 @@ template SiSUpod() { create_zip_file, defaults, output_rgx, - output_xhtmls; + output_xhtmls, + paths_output; void SiSUpod(T)(T doc_matters) { debug(asserts) { // static assert(is(typeof(doc_matters) == tuple)); } mixin SiSUoutputRgxInit; - mixin SiSUpaths; - auto pth_sisupod = SiSUpodPathsZipped(); - auto pth_sisupod_filesystem = SiSUpodPathsFilesystemArchive(); + string pwd = doc_matters.environment["pwd"]; + auto src_path_info = doc_matters.src_path_info; + string lng = doc_matters.language; + auto pth_sisudoc_src = doc_matters.src_path_info; + auto pth_sisupod = SiSUpathsSisupodZipped!()(src_path_info, lng); + auto pth_sisupod_filesystem = SiSUpathsSisupodFileSystem!()(src_path_info, lng); mixin SiSUlanguageCodes; auto lang = Lang(); auto rgx = Rgx(); assert (doc_matters.source_filename.match(rgx.src_fn)); try { /+ create directory structure +/ - if (!exists(pth_sisupod_filesystem.doc(doc_matters.source_filename))) { - pth_sisupod_filesystem.doc(doc_matters.source_filename).mkdirRecurse; - } - if (!exists(pth_sisupod_filesystem.conf(doc_matters.source_filename))) { - pth_sisupod_filesystem.conf(doc_matters.source_filename).mkdirRecurse; - } - if (!exists(pth_sisupod_filesystem.css(doc_matters.source_filename))) { - pth_sisupod_filesystem.css(doc_matters.source_filename).mkdirRecurse; - } - if (!exists(pth_sisupod_filesystem.image(doc_matters.source_filename))) { - pth_sisupod_filesystem.image(doc_matters.source_filename).mkdirRecurse; - } - if (!exists(pth_sisupod_filesystem.doc_lng(doc_matters.source_filename, doc_matters.language))) { - pth_sisupod_filesystem.doc_lng(doc_matters.source_filename, doc_matters.language).mkdirRecurse; + if (doc_matters.opt_action_bool["source"]) { + if (!exists(pth_sisupod_filesystem.text_root(doc_matters.source_filename))) { + pth_sisupod_filesystem.text_root(doc_matters.source_filename).mkdirRecurse; + } + if (!exists(pth_sisupod_filesystem.conf_root(doc_matters.source_filename))) { + pth_sisupod_filesystem.conf_root(doc_matters.source_filename).mkdirRecurse; + } + if (!exists(pth_sisupod_filesystem.media_root(doc_matters.source_filename))) { + pth_sisupod_filesystem.media_root(doc_matters.source_filename).mkdirRecurse; + } + if (!exists(pth_sisupod_filesystem.css(doc_matters.source_filename))) { + pth_sisupod_filesystem.css(doc_matters.source_filename).mkdirRecurse; + } + if (!exists(pth_sisupod_filesystem.image_root(doc_matters.source_filename))) { + pth_sisupod_filesystem.image_root(doc_matters.source_filename).mkdirRecurse; + } + if (!exists(pth_sisupod_filesystem.doc_lng(doc_matters.source_filename))) { + pth_sisupod_filesystem.doc_lng(doc_matters.source_filename).mkdirRecurse; + } } debug(sisupod) { writeln(__LINE__, ": ", doc_matters.source_filename, " -> ", pth_sisupod_filesystem.fn_doc( doc_matters.source_filename, - doc_matters.language )); } - auto zip = new ZipArchive(); + auto zip = new ZipArchive(); // ZipArchive zip = new ZipArchive(); auto fn_sisupod = pth_sisupod.sisupod_filename(doc_matters.source_filename); { /+ bundle images +/ foreach (image; doc_matters.image_list) { debug(sisupodimages) { writeln( - "_sisu/image/", image, " -> ", - pth_sisupod.image(doc_matters.source_filename), "/", image + pth_sisudoc_src.image_root.to!string, "/", image, " -> ", + pth_sisupod.image_root(doc_matters.source_filename), "/", image ); } - auto fn_src = "_sisu/image/"~ image; - auto fn_out = pth_sisupod.image(doc_matters.source_filename).to!string ~ "/" ~ image; - auto fn_out_filesystem = pth_sisupod_filesystem.image(doc_matters.source_filename).to!string ~ "/" ~ image; + auto fn_src = pth_sisudoc_src.image_root.to!string ~ "/" ~ image; + auto fn_out = pth_sisupod.image_root(doc_matters.source_filename).to!string ~ "/" ~ image; + auto fn_out_filesystem = pth_sisupod_filesystem.image_root(doc_matters.source_filename).to!string ~ "/" ~ image; if (exists(fn_src)) { - fn_src.copy(fn_out_filesystem); - { + if (doc_matters.opt_action_bool["source"]) { + fn_src.copy(fn_out_filesystem); + } + if (doc_matters.opt_action_bool["sisupod"]) { auto zip_arc_member_file = new ArchiveMember(); zip_arc_member_file.name = fn_out; auto zip_data = new OutBuffer(); @@ -91,12 +101,14 @@ template SiSUpod() { } } { /+ bundle sisu_document_make +/ - auto fn_src = "_sisu/sisu_document_make"; // check (_sisu/sisu_document_make) - auto fn_out = pth_sisupod.conf(doc_matters.source_filename).to!string ~ "/" ~ "sisu_document_make"; - auto fn_out_filesystem = pth_sisupod_filesystem.conf(doc_matters.source_filename).to!string ~ "/" ~ "sisu_document_make"; + auto fn_src = pth_sisudoc_src.conf_root.to!string ~ "/" ~ "sisu_document_make"; // check (_sisu/sisu_document_make) + auto fn_out = pth_sisupod.conf_root(doc_matters.source_filename).to!string ~ "/" ~ "sisu_document_make"; + auto fn_out_filesystem = pth_sisupod_filesystem.conf_root(doc_matters.source_filename).to!string ~ "/" ~ "sisu_document_make"; if (exists(fn_src)) { - fn_src.copy(fn_out_filesystem); - { + if (doc_matters.opt_action_bool["source"]) { + fn_src.copy(fn_out_filesystem); + } + if (doc_matters.opt_action_bool["sisupod"]) { auto zip_arc_member_file = new ArchiveMember(); zip_arc_member_file.name = fn_out; auto zip_data = new OutBuffer(); @@ -109,11 +121,13 @@ template SiSUpod() { } { /+ bundle primary file +/ auto fn_src = doc_matters.source_filename; - auto fn_out = pth_sisupod.fn_doc(doc_matters.source_filename, doc_matters.language).to!string; - auto fn_out_filesystem = pth_sisupod_filesystem.fn_doc(doc_matters.source_filename, doc_matters.language).to!string; + auto fn_out = pth_sisupod.fn_doc(doc_matters.source_filename).to!string; + auto fn_out_filesystem = pth_sisupod_filesystem.fn_doc(doc_matters.source_filename).to!string; if (exists(fn_src)) { - fn_src.copy(fn_out_filesystem); - { + if (doc_matters.opt_action_bool["source"]) { + fn_src.copy(fn_out_filesystem); + } + if (doc_matters.opt_action_bool["sisupod"]) { auto zip_arc_member_file = new ArchiveMember(); zip_arc_member_file.name = fn_out; auto zip_data = new OutBuffer(); @@ -133,23 +147,22 @@ template SiSUpod() { pth_sisupod.fn_doc_insert( doc_matters.source_filename, insert_file, - doc_matters.language )); } auto fn_src = insert_file; auto fn_out = pth_sisupod.fn_doc_insert( doc_matters.source_filename, insert_file, - doc_matters.language ).to!string; auto fn_out_filesystem = pth_sisupod_filesystem.fn_doc_insert( doc_matters.source_filename, insert_file, - doc_matters.language ).to!string; if (exists(fn_src)) { - fn_src.copy(fn_out_filesystem); - { + if (doc_matters.opt_action_bool["source"]) { + fn_src.copy(fn_out_filesystem); + } + if (doc_matters.opt_action_bool["sisupod"]) { auto zip_arc_member_file = new ArchiveMember(); zip_arc_member_file.name = insert_file; auto zip_data = new OutBuffer(); @@ -178,20 +191,20 @@ template SiSUpod() { catch (ZipException ex) { // Handle errors } - if (doc_matters.source_filename == "en/the_wealth_of_networks.yochai_benkler.sst") { + if (doc_matters.source_filename == "sisudoc/text/en/the_wealth_of_networks.yochai_benkler.sst") { assert( ((data).sha256Of).toHexString - == "DDE0013C13C6A4F06D4BE72087E2CDEF47697CA38A6A2D65BA7207DB6B144271", + == "626F83A31ED82F42CF528E922C1643498A137ABA3F2E5AFF8A379EA79EA22A1E", "\nsisupod: sha256 value for " ~ doc_matters.source_filename ~ " has changed, is now: " ~ ((data).sha256Of).toHexString ); } - if (doc_matters.source_filename == "en/sisu_markup_stress_test.sst") { + if (doc_matters.source_filename == "sisudoc/text/en/sisu_markup_stress_test.sst") { assert( ((data).sha256Of).toHexString - == "112C0AEDD2518A1803D91A7CF5785274A3116C0779A631782D0C0813B212C68A", + == "AAE0C87AB3F6D5F7385AEEA6EE661F56D40475CFE87AD930C78C9FE07FFB0D91", "\nsisupod: sha256 value for " ~ doc_matters.source_filename ~ " has changed, is now: " |