From 1d68345250b0fd26d3ea657ed28899dccaa324df Mon Sep 17 00:00:00 2001 From: Ralph Amissah Date: Wed, 8 Nov 2017 20:02:48 -0500 Subject: process filesystem/unzipped sisupod.zip - src pod dir structure changes - notes - the plan is to have a src manifest of related .sst or .ssm files that can be pointed to for processing - multilingual documents [ponder persistence for multilingual documents] - in the case of multilingual documents, there will be multiple source documents on list with different language codes, and to build this list, persistence is required - inserted documents (from master .ssm or .sst) must track document root so inserts can be located, else not found - consider a commandline -o --output path specifier - steps - auto create filelist - for single source file - for multilinugual source files - process document by pointing at filelist (rather than file) - if necessary manually create filelist (for multilinugual source) - keep document root for document inserts (.ssi) process filesystem/unzipped sisupod.zip - source/sisupod path/dir structure representation changes --- src/sdp/meta/rgx.d | 4 + src/sdp/output/paths_output.d | 320 +++++++++++++++++++++++++++++----------- src/sdp/output/rgx.d | 4 + src/sdp/output/source_sisupod.d | 137 +++++++++-------- src/sdp/sdp.d | 32 +++- 5 files changed, 346 insertions(+), 151 deletions(-) (limited to 'src') diff --git a/src/sdp/meta/rgx.d b/src/sdp/meta/rgx.d index 90cf116..13b9e9f 100644 --- a/src/sdp/meta/rgx.d +++ b/src/sdp/meta/rgx.d @@ -197,6 +197,10 @@ static template SiSUrgxInit() { static nbsp_and_space = ctRegex!(` [ ]`, "mg"); static nbsp_char_and_space = ctRegex!(`░[ ]`, "mg"); static src_pth = ctRegex!(`^(?P[a-zA-Z0-9._-]+/)*(?P[a-zA-Z0-9._-]+[.]ss[tm])$`); + static src_pth_contents = ctRegex!(`^(?P[a-zA-Z0-9._-]+/)*(?P[a-zA-Z0-9._-]+)/sisudoc[.]txt$`); + static src_pth_zip = ctRegex!(`^(?P[a-zA-Z0-9._-]+/)*(?P[a-zA-Z0-9._-]+[.]zip)$`); + static src_pth_unzip_pod = ctRegex!(`^(?Pmedia/text/[a-z]{2}/)*(?P[a-zA-Z0-9._-]+[.]ss[im])$`); + static src_pth_types = ctRegex!(`^(?P[a-zA-Z0-9._-]+/)*(?P(?P[a-zA-Z0-9._-]+[.]ss[tm])|(?P[a-zA-Z0-9._-]+/sisudoc[.]txt)|(?P[a-zA-Z0-9._-]+[.]zip))$`); static src_fn = ctRegex!(`^([a-zA-Z0-9._-]+/)*(?P(?P[a-zA-Z0-9._-]+)[.](?Pss[tm]))$`); static src_fn_master = ctRegex!(`^(?P[a-zA-Z0-9._-]+/)*(?P[a-zA-Z0-9._-]+[.]ssm)$`); diff --git a/src/sdp/output/paths_output.d b/src/sdp/output/paths_output.d index 2204965..a5ea0d9 100644 --- a/src/sdp/output/paths_output.d +++ b/src/sdp/output/paths_output.d @@ -10,131 +10,283 @@ import sdp.meta.rgx; template SiSUpathsSisupod() { mixin SiSUrgxInit; static auto rgx = Rgx(); - string _base_dir = "sisupod"; + string _base_dir_pod = "sisupod"; + string _base_dir_doc = "sisudoc"; string _suffix = ".zip"; auto SiSUpathsSisupod()() { struct _PathsStruct { string base_filename(string fn_src) { - return fn_src.baseName.stripExtension; + auto pth = fn_src.baseName.stripExtension; + return pth; } string sisupod_dir() { - return _base_dir; + auto pth = _base_dir_pod; + return pth; + } + string sisudoc_dir() { + auto pth = _base_dir_doc; + return pth; } string sisupod_filename(string fn_src) { - return _base_dir.chainPath(base_filename(fn_src) ~ _suffix).array; + string pth = _base_dir_pod.chainPath(base_filename(fn_src) ~ _suffix).array; + return pth; } - string base(string fn_src) { - return _base_dir.chainPath(base_filename(fn_src)).array; + string base_filesystem(string fn_src) { + string pth = _base_dir_pod.chainPath(base_filename(fn_src)).array; + assert(pth == _base_dir_pod ~ "/" ~ base_filename(fn_src), + pth ~ " == " ~ _base_dir_pod ~ "/" ~ base_filename(fn_src) ~ "?"); + return pth; + } + string base_pod(string fn_src) { + string pth = _base_dir_pod.chainPath(base_filename(fn_src)).array; // change this + return pth; } } return _PathsStruct(); } } -template SiSUpathsSisupodZipped() { + +template SiSUpathsSisupods() { mixin SiSUrgxInit; static auto rgx = Rgx(); - auto SiSUpathsSisupodZipped(Ps,Lng)( + string _base_dir_pod = "sisupod"; + string _base_dir_doc = "sisudoc"; + string _suffix = ".zip"; + auto SiSUpathsSisupods(Ps,Lng)( Ps src_pth_info, Lng lng, ) { - struct _PathsStruct { - auto spod_pths = SiSUpathsSisupod!()(); - string sisupod_dir() { - return spod_pths.sisupod_dir; - } - 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); + struct _PodPaths { + string base_filename_(string fn_src) { + auto pth = fn_src.baseName.stripExtension; + return pth; + } + string sisupod_dir_() { + auto pth = _base_dir_pod; + return pth; + } + string sisudoc_dir_() { + auto pth = _base_dir_doc; + return pth; + } + string sisupod_filename_(string fn_src) { + string pth = _base_dir_pod.chainPath(base_filename_(fn_src) ~ _suffix).array; + return pth; + } + string base_filesystem_(string fn_src) { + string pth = _base_dir_pod.chainPath(base_filename_(fn_src)).array; + assert(pth == _base_dir_pod ~ "/" ~ base_filename_(fn_src), + pth ~ " == " ~ _base_dir_pod ~ "/" ~ base_filename_(fn_src) ~ "?"); + return pth; + } + string base_pod_(string fn_src) { + string pth = _base_dir_pod.chainPath(base_filename_(fn_src)).array; // change this + return pth; + } + auto base_filename(string fn_src) { + auto pth_1_ = base_filename_(fn_src); + auto pth_2_ = base_filename_(fn_src); + struct _pods { + auto zpod() { + return pth_1_; + } + auto filesystem_open_zpod() { + return pth_2_; + } + } + return _pods(); + } + auto sisupod_filename(string fn_src) { + auto pth_1_ = sisupod_filename_(fn_src); + auto pth_2_ = sisupod_filename_(fn_src); + struct _pods { + auto zpod() { + return pth_1_; + } + auto filesystem_open_zpod() { + return pth_2_; + } + } + return _pods(); + } + auto base(string fn_src) { + auto pth_1_ = ""; + auto pth_2_ = base_filesystem_(fn_src); + struct _pods { + auto zpod() { + return pth_1_; + } + auto filesystem_open_zpod() { + return pth_2_; + } + } + return _pods(); } auto pod_root(string fn_src) { - return "sisudoc"; - } - auto media_root(string fn_src) { - return pod_root(fn_src).chainPath("media").array; + auto pth_1_ = ""; + auto pth_2_ = base(fn_src).filesystem_open_zpod.chainPath("").array; // "sisudoc" + struct _pods { + auto zpod() { + return pth_1_; + } + auto filesystem_open_zpod() { + return pth_2_; + } + } + return _pods(); } auto conf_root(string fn_src) { - return pod_root(fn_src).chainPath("conf").array; - } - auto text_root(string fn_src) { - return media_root(fn_src).chainPath("text").array; - } - auto doc(string fn_src) { - return text_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 pod_root_ = pod_root(fn_src); + auto pth_1_ = "conf"; + auto pth_2_ = pod_root(fn_src).filesystem_open_zpod.chainPath("conf").array; + struct _pods { + auto zpod() { + return pth_1_; + } + auto filesystem_open_zpod() { + assert(pod_root_.filesystem_open_zpod.chainPath(zpod).array == pth_2_); + return pth_2_; + } + } + return _pods(); } 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; - static auto rgx = Rgx(); - auto SiSUpathsSisupodFileSystem(Ps,Lng)( - Ps src_pth_info, - Lng lng, - ) { - struct _PathsStruct { - auto spod_pths = SiSUpathsSisupod!()(); - 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 pod_root_ = pod_root(fn_src); + auto pth_1_ = conf_root(fn_src).zpod.chainPath("css").array; + auto pth_2_ = conf_root(fn_src).filesystem_open_zpod.chainPath("css").array; + struct _pods { + auto zpod() { + return pth_1_; + } + auto filesystem_open_zpod() { + assert(pod_root_.filesystem_open_zpod.chainPath(zpod).array == pth_2_); + return pth_2_; + } + } + return _pods(); } auto media_root(string fn_src) { - return pod_root(fn_src).chainPath("media").array; - } - auto conf_root(string fn_src) { - return pod_root(fn_src).chainPath("conf").array; + auto pod_root_ = pod_root(fn_src); + auto pth_1_ = "media"; + auto pth_2_ = pod_root(fn_src).filesystem_open_zpod.chainPath("media").array; + struct _pods { + auto zpod() { + return pth_1_; + } + auto filesystem_open_zpod() { + assert(pod_root_.filesystem_open_zpod.chainPath(zpod).array == pth_2_); + return pth_2_; + } + } + return _pods(); } auto text_root(string fn_src) { - return media_root(fn_src).chainPath("text").array; + auto pod_root_ = pod_root(fn_src); + auto pth_1_ = media_root(fn_src).zpod.chainPath("text").array; + auto pth_2_ = media_root(fn_src).filesystem_open_zpod.chainPath("text").array; + struct _pods { + auto zpod() { + return pth_1_; + } + auto filesystem_open_zpod() { + assert(pod_root_.filesystem_open_zpod.chainPath(zpod).array == pth_2_); + return pth_2_; + } + } + return _pods(); } auto doc(string fn_src) { - return pod_root(fn_src); + auto pod_root_ = pod_root(fn_src); + auto pth_1_ = text_root(fn_src).zpod; + auto pth_2_ = text_root(fn_src).filesystem_open_zpod; + struct _pods { + auto zpod() { + return pth_1_; + } + auto filesystem_open_zpod() { + assert(pod_root_.filesystem_open_zpod.chainPath(zpod).array == pth_2_); + return pth_2_; + } + } + return _pods(); } auto doc_lng(string fn_src) { - return text_root(fn_src).chainPath(lng).array; + auto pod_root_ = pod_root(fn_src); + auto pth_1_ = text_root(fn_src).zpod.chainPath(lng).array; + auto pth_2_ = text_root(fn_src).filesystem_open_zpod.chainPath(lng).array; + struct _pods { + auto zpod() { + return pth_1_; + } + auto filesystem_open_zpod() { + assert(pod_root_.filesystem_open_zpod.chainPath(zpod).array == pth_2_); + return pth_2_; + } + } + return _pods(); } 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 pod_root_ = pod_root(fn_src); + auto pth_1_ = media_root(fn_src).zpod.chainPath("image").array; + auto pth_2_ = media_root(fn_src).filesystem_open_zpod.chainPath("image").array; + struct _pods { + auto zpod() { + return pth_1_; + } + auto filesystem_open_zpod() { + assert(pod_root_.filesystem_open_zpod.chainPath(zpod).array == pth_2_); + return pth_2_; + } + } + return _pods(); + } + auto fn_pod_filelist(string fn_src) { + auto pod_root_ = pod_root(fn_src); + auto pth_1_ = "sisudoc.txt"; + auto pth_2_ = pod_root(fn_src).filesystem_open_zpod.chainPath("sisudoc.txt").array; + struct _pods { + auto zpod() { + return pth_1_; + } + auto filesystem_open_zpod() { + assert(pod_root_.filesystem_open_zpod.chainPath(zpod).array == pth_2_); + return pth_2_; + } + } + return _pods(); } auto fn_doc(string fn_src) { - return (doc_lng(fn_src)).chainPath(fn_src.baseName).array; + auto pod_root_ = pod_root(fn_src); + auto pth_1_ = doc_lng(fn_src).zpod.chainPath(fn_src.baseName).array; + auto pth_2_ = doc_lng(fn_src).filesystem_open_zpod.chainPath(fn_src.baseName).array; + struct _pods { + auto zpod() { + return pth_1_; + } + auto filesystem_open_zpod() { + assert(pod_root_.filesystem_open_zpod.chainPath(zpod).array == pth_2_); + return pth_2_; + } + } + return _pods(); } auto fn_doc_insert(string fn_src, string fn_insert) { - return (doc_lng(fn_src)).chainPath(fn_insert.baseName).array; + auto pod_root_ = pod_root(fn_src); + auto pth_1_ = doc_lng(fn_src).zpod.chainPath(fn_insert.baseName).array; + auto pth_2_ = doc_lng(fn_src).filesystem_open_zpod.chainPath(fn_insert.baseName).array; + struct _pods { + auto zpod() { + return pth_1_; + } + auto filesystem_open_zpod() { + assert(pod_root_.filesystem_open_zpod.chainPath(zpod).array == pth_2_); + return pth_2_; + } + } + return _pods(); } } - return _PathsStruct(); + return _PodPaths(); } } template SiSUoutPaths() { diff --git a/src/sdp/output/rgx.d b/src/sdp/output/rgx.d index 343561b..1c0f4d3 100644 --- a/src/sdp/output/rgx.d +++ b/src/sdp/output/rgx.d @@ -16,6 +16,10 @@ static template SiSUoutputRgxInit() { static nbsp_and_space = ctRegex!(` [ ]`, "mg"); static nbsp_char_and_space = ctRegex!(`░[ ]`, "mg"); static src_pth = ctRegex!(`^(?P[a-zA-Z0-9._-]+/)*(?P[a-zA-Z0-9._-]+[.]ss[tm])$`); + static src_pth_contents = ctRegex!(`^(?P[a-zA-Z0-9._-]+/)*(?P[a-zA-Z0-9._-]+)/sisudoc[.]txt$`); + static src_pth_zip = ctRegex!(`^(?P[a-zA-Z0-9._-]+/)*(?P[a-zA-Z0-9._-]+[.]zip)$`); + static src_pth_unzip_pod = ctRegex!(`^(?Pmedia/text/[a-z]{2}/)*(?P[a-zA-Z0-9._-]+[.]ss[im])$`); + static src_pth_types = ctRegex!(`^(?P[a-zA-Z0-9._-]+/)*(?P(?P[a-zA-Z0-9._-]+[.]ss[tm])|(?P[a-zA-Z0-9._-]+/sisudoc[.]txt)|(?P[a-zA-Z0-9._-]+[.]zip))$`); static src_fn = ctRegex!(`^([a-zA-Z0-9._-]+/)*(?P(?P[a-zA-Z0-9._-]+)[.](?Pss[tm]))$`); static src_fn_master = ctRegex!(`^(?P[a-zA-Z0-9._-]+/)*(?P[a-zA-Z0-9._-]+[.]ssm)$`); diff --git a/src/sdp/output/source_sisupod.d b/src/sdp/output/source_sisupod.d index 9c83905..d83ae87 100644 --- a/src/sdp/output/source_sisupod.d +++ b/src/sdp/output/source_sisupod.d @@ -19,137 +19,145 @@ template SiSUpod() { 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); + auto pths_sisupod = SiSUpathsSisupods!()(src_path_info, lng); mixin SiSUlanguageCodes; auto lang = Lang(); static auto rgx = Rgx(); assert (doc_matters.source_filename.match(rgx.src_fn)); try { /+ create directory structure +/ - if (!exists(pth_sisupod.sisupod_dir)) { + if (!exists(pths_sisupod.sisupod_dir_())) { // used both by sisupod zipped (& sisupod filesystem (unzipped) which makes its own recursive dirs) - pth_sisupod.sisupod_dir.mkdirRecurse; + pths_sisupod.sisupod_dir_().mkdirRecurse; } if (doc_matters.opt_action["source"]) { - if (!exists(pth_sisupod_filesystem.text_root(doc_matters.source_filename))) { - pth_sisupod_filesystem.text_root(doc_matters.source_filename).mkdirRecurse; + if (!exists(pths_sisupod.text_root(doc_matters.source_filename).filesystem_open_zpod)) { + pths_sisupod.text_root(doc_matters.source_filename).filesystem_open_zpod.mkdirRecurse; } - if (!exists(pth_sisupod_filesystem.conf_root(doc_matters.source_filename))) { - pth_sisupod_filesystem.conf_root(doc_matters.source_filename).mkdirRecurse; + if (!exists(pths_sisupod.conf_root(doc_matters.source_filename).filesystem_open_zpod)) { + pths_sisupod.conf_root(doc_matters.source_filename).filesystem_open_zpod.mkdirRecurse; } - if (!exists(pth_sisupod_filesystem.media_root(doc_matters.source_filename))) { - pth_sisupod_filesystem.media_root(doc_matters.source_filename).mkdirRecurse; + if (!exists(pths_sisupod.media_root(doc_matters.source_filename).filesystem_open_zpod)) { + pths_sisupod.media_root(doc_matters.source_filename).filesystem_open_zpod.mkdirRecurse; } - if (!exists(pth_sisupod_filesystem.css(doc_matters.source_filename))) { - pth_sisupod_filesystem.css(doc_matters.source_filename).mkdirRecurse; + if (!exists(pths_sisupod.css(doc_matters.source_filename).filesystem_open_zpod)) { + pths_sisupod.css(doc_matters.source_filename).filesystem_open_zpod.mkdirRecurse; } - if (!exists(pth_sisupod_filesystem.image_root(doc_matters.source_filename))) { - pth_sisupod_filesystem.image_root(doc_matters.source_filename).mkdirRecurse; + if (!exists(pths_sisupod.image_root(doc_matters.source_filename).filesystem_open_zpod)) { + pths_sisupod.image_root(doc_matters.source_filename).filesystem_open_zpod.mkdirRecurse; } - if (!exists(pth_sisupod_filesystem.doc_lng(doc_matters.source_filename))) { - pth_sisupod_filesystem.doc_lng(doc_matters.source_filename).mkdirRecurse; + if (!exists(pths_sisupod.doc_lng(doc_matters.source_filename).filesystem_open_zpod)) { + pths_sisupod.doc_lng(doc_matters.source_filename).filesystem_open_zpod.mkdirRecurse; } } debug(sisupod) { writeln(__LINE__, ": ", doc_matters.source_filename, " -> ", - pth_sisupod_filesystem.fn_doc(doc_matters.source_filename) + pths_sisupod.fn_doc(doc_matters.source_filename).filesystem_open_zpod ); } auto zip = new ZipArchive(); - auto fn_sisupod = pth_sisupod.sisupod_filename(doc_matters.source_filename); + auto fn_sisupod = pths_sisupod.sisupod_filename(doc_matters.source_filename).zpod; { /+ bundle images +/ foreach (image; doc_matters.image_list) { debug(sisupodimages) { writeln( pth_sisudoc_src.image_root.to!string, "/", image, " -> ", - pth_sisupod.image_root(doc_matters.source_filename), "/", image + pths_sisupod.image_root(doc_matters.source_filename).zpod, "/", 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)) { + auto fn_src_in = pth_sisudoc_src.image_root.to!string ~ "/" ~ image; + auto fn_src_out_sisupod_zip_base = pths_sisupod.image_root(doc_matters.source_filename).zpod.to!string ~ "/" ~ image; + auto fn_src_out_filesystem = pths_sisupod.image_root(doc_matters.source_filename).filesystem_open_zpod.to!string ~ "/" ~ image; + if (exists(fn_src_in)) { if (doc_matters.opt_action["source"]) { - fn_src.copy(fn_out_filesystem); + fn_src_in.copy(fn_src_out_filesystem); } if (doc_matters.opt_action["sisupod"]) { auto zip_arc_member_file = new ArchiveMember(); - zip_arc_member_file.name = fn_out; + zip_arc_member_file.name = fn_src_out_sisupod_zip_base; auto zip_data = new OutBuffer(); - zip_data.write(cast(char[]) ((fn_src).read)); + zip_data.write(cast(char[]) ((fn_src_in).read)); zip_arc_member_file.expandedData = zip_data.toBytes(); zip.addMember(zip_arc_member_file); } } } - } - { /+ bundle 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)) { + } { /+ bundle sisu_document_make +/ + auto fn_src_in = pth_sisudoc_src.conf_root.to!string ~ "/" ~ "sisu_document_make"; // check (_sisu/sisu_document_make) + auto fn_src_out_sisupod_zip_base = pths_sisupod.conf_root(doc_matters.source_filename).zpod.to!string ~ "/" ~ "sisu_document_make"; + auto fn_src_out_filesystem = pths_sisupod.conf_root(doc_matters.source_filename).filesystem_open_zpod.to!string ~ "/" ~ "sisu_document_make"; + if (exists(fn_src_in)) { if (doc_matters.opt_action["source"]) { - fn_src.copy(fn_out_filesystem); + fn_src_in.copy(fn_src_out_filesystem); } if (doc_matters.opt_action["sisupod"]) { auto zip_arc_member_file = new ArchiveMember(); - zip_arc_member_file.name = fn_out; + zip_arc_member_file.name = fn_src_out_sisupod_zip_base; auto zip_data = new OutBuffer(); - zip_data.write((fn_src).readText); + zip_data.write((fn_src_in).readText); zip_arc_member_file.expandedData = zip_data.toBytes(); zip.addMember(zip_arc_member_file); } } - } - { /+ bundle primary file +/ - auto fn_src = doc_matters.source_filename; - 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)) { + } { /+ TODO bundle primary file +/ + auto fn_src_in = doc_matters.source_filename; + auto fn_src_out_sisupod_zip_base = pths_sisupod.fn_doc(doc_matters.source_filename).zpod.to!string; + auto fn_src_out_filesystem = pths_sisupod.fn_doc(doc_matters.source_filename).filesystem_open_zpod.to!string; // needed without root path: + auto fn_src_out_inside_pod = pths_sisupod.fn_doc(doc_matters.source_filename).zpod.to!string; // needed without root path: + string[] filelist_src_out_sisupod_arr; + string[] filelist_src_zpod_arr; + if (exists(fn_src_in)) { + filelist_src_out_sisupod_arr ~= fn_src_out_sisupod_zip_base; + filelist_src_zpod_arr ~= fn_src_out_inside_pod; if (doc_matters.opt_action["source"]) { - fn_src.copy(fn_out_filesystem); + auto filelist = File(pths_sisupod.fn_pod_filelist(doc_matters.source_filename).filesystem_open_zpod, "w"); + foreach (source_pth_and_fn; filelist_src_zpod_arr) { + filelist.writeln(source_pth_and_fn); + } + fn_src_in.copy(fn_src_out_filesystem); } if (doc_matters.opt_action["sisupod"]) { auto zip_arc_member_file = new ArchiveMember(); - zip_arc_member_file.name = fn_out; + zip_arc_member_file.name = fn_src_out_sisupod_zip_base; auto zip_data = new OutBuffer(); - zip_data.write((fn_src).readText); + zip_data.write((fn_src_in).readText); zip_arc_member_file.expandedData = zip_data.toBytes(); zip.addMember(zip_arc_member_file); } } - } - { /+ bundle insert files +/ + } { /+ bundle insert files +/ if (doc_matters.file_insert_list.length > 0) { foreach (insert_file; doc_matters.file_insert_list) { debug(sisupod) { writeln( insert_file, " -> ", - pth_sisupod.fn_doc_insert( + pths_sisupod.fn_doc_insert( doc_matters.source_filename, insert_file, - )); + ).zpod + ); } - auto fn_src = insert_file; - auto fn_out = pth_sisupod.fn_doc_insert( - doc_matters.source_filename, - insert_file, - ).to!string; - auto fn_out_filesystem = pth_sisupod_filesystem.fn_doc_insert( - doc_matters.source_filename, - insert_file, - ).to!string; - if (exists(fn_src)) { + auto fn_src_in = insert_file; + auto fn_src_out_sisupod_zip_base = + pths_sisupod.fn_doc_insert( + doc_matters.source_filename, + insert_file, + ).zpod.to!string; + auto fn_src_out_filesystem = + pths_sisupod.fn_doc_insert( + doc_matters.source_filename, + insert_file, + ).filesystem_open_zpod.to!string; + if (exists(fn_src_in)) { if (doc_matters.opt_action["source"]) { - fn_src.copy(fn_out_filesystem); + fn_src_in.copy(fn_src_out_filesystem); } if (doc_matters.opt_action["sisupod"]) { auto zip_arc_member_file = new ArchiveMember(); - zip_arc_member_file.name = fn_out; + zip_arc_member_file.name = fn_src_out_sisupod_zip_base; auto zip_data = new OutBuffer(); - zip_data.write((fn_src).readText); + zip_data.write((fn_src_in).readText); zip_arc_member_file.expandedData = zip_data.toBytes(); zip.addMember(zip_arc_member_file); createZipFile!()(fn_sisupod, zip.build()); @@ -157,10 +165,9 @@ template SiSUpod() { } } } - } - { - auto fn_src = doc_matters.source_filename; - if (exists(fn_src)) { + } { + auto fn_src_in = doc_matters.source_filename; + if (exists(fn_src_in)) { if (doc_matters.opt_action["sisupod"]) { createZipFile!()(fn_sisupod, zip.build()); } diff --git a/src/sdp/sdp.d b/src/sdp/sdp.d index 0075de8..c861d1d 100755 --- a/src/sdp/sdp.d +++ b/src/sdp/sdp.d @@ -145,6 +145,33 @@ void main(string[] args) { flag_action ~= " " ~ arg; // flags not taken by getopt } else if (arg.match(rgx.src_pth)) { fns_src ~= arg; // gather input markup source file names for processing + } else if (arg.match(rgx.src_pth_contents)) { + import std.file, + std.path; + string contents_location_; + try { + if (exists(arg)) { + contents_location_ = arg.readText; + } + } + catch (ErrnoException ex) { + } + catch (FileException ex) { + // Handle errors + } + auto contents_locations_arr = + (cast(char[]) contents_location_).split; + auto tmp_dir_ = (arg).dirName.array; + foreach (contents_location; contents_locations_arr) { + assert(contents_location.match(rgx.src_pth), + "not a recognised file: " ~ + contents_location + ); + auto contents_location_pth_ = (contents_location).to!string; + fns_src ~= (((tmp_dir_).chainPath(contents_location_pth_)).array).to!(char[]); + } + } else if (arg.match(rgx.src_pth_zip)) { + // fns_src ~= arg; // gather input markup source file names for processing } else { // anything remaining, unused arg_unrecognized ~= " " ~ arg; } @@ -178,8 +205,9 @@ void main(string[] args) { } } enforce( - fn_src.match(rgx.src_pth), - "not a sisu markup filename" + fn_src.match(rgx.src_pth_types), + "not a sisu markup filename: <<" ~ + fn_src ~ ">>" ); auto t = SiSUabstraction!()(fn_src, opts, env); static assert(!isTypeTuple!(t)); -- cgit v1.2.3