aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorRalph Amissah <ralph@amissah.com>2017-11-27 20:35:14 -0500
committerRalph Amissah <ralph@amissah.com>2019-04-10 15:14:14 -0400
commit6dc69228f20b3566320b52966b3782d633171e71 (patch)
tree893201ffbd3bbd6c1ccb595be2af8354593cb49a
parent0.20.1 struct for opt_actions (diff)
0.20.2 paths, config & manifest files
-rw-r--r--org/default_paths.org209
-rw-r--r--org/default_regex.org10
-rw-r--r--org/imports.org1
-rw-r--r--org/meta_read_source_files.org25
-rw-r--r--org/sdp.org20
-rw-r--r--src/sdp/meta/read_config_files.d27
-rw-r--r--src/sdp/meta/read_source_files.d1
-rw-r--r--src/sdp/meta/rgx.d10
-rw-r--r--src/sdp/output/package.d1
-rw-r--r--src/sdp/output/paths_output.d282
-rw-r--r--src/sdp/output/paths_source.d353
-rw-r--r--src/sdp/output/rgx.d10
-rwxr-xr-xsrc/sdp/sdp.d18
-rw-r--r--views/version.txt2
14 files changed, 541 insertions, 428 deletions
diff --git a/org/default_paths.org b/org/default_paths.org
index cb1826d..805e8a9 100644
--- a/org/default_paths.org
+++ b/org/default_paths.org
@@ -26,84 +26,97 @@
+/
module sdp.output.paths_source;
import std.array,
+ std.file,
std.path,
std.regex,
- std.stdio;
+ std.stdio,
+ std.conv : to;
import sdp.meta.rgx;
-template SiSUpathsSRC() {
+<<template_paths_src>>
+<<template_paths_sisupod>>
+<<template_paths_sisupod_shallow>>
+<<template_paths_sisupods>>
+#+END_SRC
+
+** _manifest_ :manifest:
+
+#+name: template_paths_src
+#+BEGIN_SRC d
+template ManifestFile() {
mixin SiSUrgxInit;
static auto rgx = Rgx();
- auto SiSUpathsSRC(D,Fn)(
- D _pwd,
- Fn _fn_src_and_relative_path,
+ auto ManifestFile(P)(
+ P _pth,
) {
- struct SisuSrcPaths {
- auto pwd() {
- return _pwd;
- }
- auto language() {
- // use command line info as well?
- string _k;
- if (auto m = _fn_src_and_relative_path.match(rgx.language_code_and_filename)) {
- _k = m.captures[1];
+ struct ManifestFile_ {
+ auto manifest_file() {
+ string _manifest_file = "sisudoc.txt";
+ return _manifest_file;
+ }
+ auto manifest_file_and_path() {
+ string _manifest_file_and_path;
+ if (isValidPath(_pth) && _pth.isDir
+ && ((_pth.chainPath(manifest_file).array).isFile)) {
+ _manifest_file_and_path = _pth.chainPath(manifest_file).array;
+ } else if (_pth.match(rgx.src_pth_contents)
+ && (_pth.isFile)) {
+ _manifest_file_and_path = _pth;
} else {
- _k = "xx"; // original default was "en" but is not known
+ // _manifest_file_and_path = "";
}
- return _k;
- }
- auto doc_root() {
- return "sisudoc";
- }
- auto media_root() {
- return doc_root.chainPath("media").array;
- }
- auto conf_root() {
- return doc_root.chainPath("conf").array;
- }
- auto text_root() {
- return media_root.chainPath("text").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_and_relative_path).array;
- }
- auto doc_src_fn() {
- return _fn_src_and_relative_path.baseName.array;
+ return _manifest_file_and_path;
}
}
- return SisuSrcPaths();
+ return ManifestFile_();
}
}
#+END_SRC
-* 1. output paths :module:sdp:paths_output:
-** 0. module template
+** _config_ :config:
-#+BEGIN_SRC d :tangle ../src/sdp/output/paths_output.d
-/++
- default settings
-+/
-module sdp.output.paths_output;
-import std.array,
- std.path,
- std.regex,
- std.stdio;
-import sdp.meta.rgx;
-<<template_paths_sisupod>>
-<<template_paths_sisupod_shallow>>
-<<template_paths_sisupods>>
-<<template_paths_out>>
-<<template_paths_html>>
-<<template_paths_epub>>
-<<template_paths_sqlite>>
+#+name: template_paths_src
+#+BEGIN_SRC d
+template ConfigFilePaths() {
+ mixin SiSUrgxInit;
+ static auto rgx = Rgx();
+ auto ConfigFilePaths(E)(
+ E _env,
+ ) {
+ struct ConfFilePaths {
+ auto possible_config_path_locations() {
+ /+ FIX clean up conf paths ↓ +/
+ string _sisudoc_conf_pwd = chainPath(to!string(_env["pwd"]), "sisudoc/conf").array;
+ string _sisudoc_conf_pwd_a = chainPath(to!string(_env["pwd"]), "conf").array;
+ string _sisudoc_conf_pwd_b = chainPath(to!string(_env["pwd"]), "../conf").array;
+ string _sisudoc_conf_pwd_c = chainPath(to!string(_env["pwd"]), "../../conf").array;
+ string _sisudoc_conf_pwd_d = chainPath(to!string(_env["pwd"]), "../../../conf").array;
+ /+ FIX clean up conf paths ↑
+ (compare pwd to doc path location, and build config path)
+ +/
+ string _dot_pwd = chainPath(to!string(_env["pwd"]), ".sisu").array;
+ string _underscore_pwd = chainPath(to!string(_env["pwd"]), "_sisu").array;
+ string _dot_home = chainPath(to!string(_env["home"]), ".sisu").array;
+ string[] _possible_config_path_locations = [
+ _sisudoc_conf_pwd,
+ _sisudoc_conf_pwd_a,
+ _sisudoc_conf_pwd_b,
+ _sisudoc_conf_pwd_c,
+ _sisudoc_conf_pwd_d,
+ _dot_pwd,
+ _underscore_pwd,
+ _dot_home,
+ "/etc/sisu"
+ ];
+ return _possible_config_path_locations;
+ }
+ }
+ return ConfFilePaths();
+ }
+}
#+END_SRC
-** _sisupod_ (output bundled source) :sisupod:
+** _sisupod_ (including generated bundled source) :sisupod:
+*** notes
tree sisupod
sisupod
@@ -148,6 +161,61 @@ filelist for processing [things to ponder]
- if necessary manually create filelist (for multilinugual source)
- keep document root for document inserts (.ssi)
+*** manual source
+
+#+name: template_paths_src
+#+BEGIN_SRC d
+template SiSUpathsSRC() {
+ mixin SiSUrgxInit;
+ static auto rgx = Rgx();
+ auto SiSUpathsSRC(D,Fn)(
+ D _pwd,
+ Fn _fn_src_and_relative_path,
+ ) {
+ struct SisuSrcPaths {
+ auto pwd() {
+ return _pwd;
+ }
+ auto language() {
+ // use command line info as well?
+ string _k;
+ if (auto m = _fn_src_and_relative_path.match(rgx.language_code_and_filename)) {
+ _k = m.captures[1];
+ } else { /+ unknown until doc_meta read, (could provide & use command line info?) +/
+ _k = "xx"; // original default was "en" but is not known
+ }
+ return _k;
+ }
+ auto doc_root() {
+ return "sisudoc";
+ }
+ auto media_root() {
+ return doc_root.chainPath("media").array;
+ }
+ auto conf_root() {
+ return doc_root.chainPath("conf").array;
+ }
+ auto text_root() {
+ return media_root.chainPath("text").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_and_relative_path).array;
+ }
+ auto doc_src_fn() {
+ return _fn_src_and_relative_path.baseName.array;
+ }
+ }
+ return SisuSrcPaths();
+ }
+}
+#+END_SRC
+
*** pod archive base
#+name: template_paths_sisupod
@@ -441,6 +509,25 @@ template SiSUpathsSisupods() {
}
#+END_SRC
+* 1. output paths :module:sdp:paths_output:
+** 0. module template
+
+#+BEGIN_SRC d :tangle ../src/sdp/output/paths_output.d
+/++
+ default settings
++/
+module sdp.output.paths_output;
+import std.array,
+ std.path,
+ std.regex,
+ std.stdio;
+import sdp.meta.rgx;
+<<template_paths_out>>
+<<template_paths_html>>
+<<template_paths_epub>>
+<<template_paths_sqlite>>
+#+END_SRC
+
** shared out path, base directory :out:
#+name: template_paths_out
diff --git a/org/default_regex.org b/org/default_regex.org
index 9a17633..334b025 100644
--- a/org/default_regex.org
+++ b/org/default_regex.org
@@ -411,13 +411,13 @@ static nbsp_char_and_space = ctRegex!(`░[ ]`, "mg")
#+name: prgmkup_rgx
#+BEGIN_SRC d
-static src_pth = ctRegex!(`^(?P<path>(?:[a-zA-Z0-9._-]+/)*)(?P<filename>[a-zA-Z0-9._-]+[.]ss[tm])$`);
-static src_pth_contents = ctRegex!(`^(?P<path>(?:[a-zA-Z0-9._-]+/)*)(?P<filename>[a-zA-Z0-9._-]+)/sisudoc[.]txt$`);
-static src_pth_zip = ctRegex!(`^(?P<path>(?:[a-zA-Z0-9._-]+/)*)(?P<filename>[a-zA-Z0-9._-]+[.]zip)$`);
+static src_pth = ctRegex!(`^(?P<path>[/]?(?:[a-zA-Z0-9._-]+/)*)(?P<filename>[a-zA-Z0-9._-]+[.]ss[tm])$`);
+static src_pth_contents = ctRegex!(`^(?P<path>[/]?(?:[a-zA-Z0-9._-]+/)*)(?P<filename>[a-zA-Z0-9._-]+)/sisudoc[.]txt$`);
+static src_pth_zip = ctRegex!(`^(?P<path>[/]?(?:[a-zA-Z0-9._-]+/)*)(?P<filename>[a-zA-Z0-9._-]+[.]zip)$`);
static src_pth_unzip_pod = ctRegex!(`^(?P<path>media/text/[a-z]{2}/)*(?P<filename>[a-zA-Z0-9._-]+[.]ss[im])$`);
-static src_pth_types = ctRegex!(`^(?P<path>[a-zA-Z0-9._-]+/)*(?P<gotfile>(?P<filename>[a-zA-Z0-9._-]+[.]ss[tm])|(?P<filelist>[a-zA-Z0-9._-]+/sisudoc[.]txt)|(?P<filezip>[a-zA-Z0-9._-]+[.]zip))$`);
+static src_pth_types = ctRegex!(`^(?P<path>[/]?[a-zA-Z0-9._-]+/)*(?P<gotfile>(?P<filename>[a-zA-Z0-9._-]+[.]ss[tm])|(?P<filelist>[a-zA-Z0-9._-]+/sisudoc[.]txt)|(?P<filezip>[a-zA-Z0-9._-]+[.]zip))$`);
static src_fn =
- ctRegex!(`^([a-zA-Z0-9._-]+/)*(?P<fn_src>(?P<fn_base>[a-zA-Z0-9._-]+)[.](?P<fn_src_suffix>ss[tm]))$`);
+ ctRegex!(`^([/]?(?:[a-zA-Z0-9._-]+/)*)(?P<fn_src>(?P<fn_base>[a-zA-Z0-9._-]+)[.](?P<fn_src_suffix>ss[tm]))$`);
static src_fn_master = ctRegex!(`^(?P<path>[a-zA-Z0-9._-]+/)*(?P<filename>[a-zA-Z0-9._-]+[.]ssm)$`);
static src_fn_text = ctRegex!(`^(?P<path>[a-zA-Z0-9._-]+/)*(?P<filename>[a-zA-Z0-9._-]+[.]sst)$`);
static src_fn_insert = ctRegex!(`^(?P<path>[a-zA-Z0-9._-]+/)*(?P<filename>[a-zA-Z0-9._-]+[.]ssi)$`);
diff --git a/org/imports.org b/org/imports.org
index bc1ce3e..3fd71a2 100644
--- a/org/imports.org
+++ b/org/imports.org
@@ -73,6 +73,7 @@ public import
// std.uni,
std.utf;
public import
+ sdp.output.paths_source,
sdp.output.defaults,
sdp.output.paths_output,
sdp.output.rgx;
diff --git a/org/meta_read_source_files.org b/org/meta_read_source_files.org
index 5e32b1f..6b44dfb 100644
--- a/org/meta_read_source_files.org
+++ b/org/meta_read_source_files.org
@@ -21,6 +21,7 @@
#+BEGIN_SRC d
import
sdp.meta,
+ sdp.output.paths_source,
std.file,
std.path;
#+END_SRC
@@ -47,29 +48,7 @@ module sdp.meta.read_config_files;
static template configIn() {
<<imports_std>>
final string configIn(C,E)(C conf_sdl, E env) {
- /+ FIX clean up conf paths ↓ +/
- string sisudoc_conf_pwd = chainPath(to!string(env["pwd"]), "sisudoc/conf").array;
- string sisudoc_conf_pwd_a = chainPath(to!string(env["pwd"]), "conf").array;
- string sisudoc_conf_pwd_b = chainPath(to!string(env["pwd"]), "../conf").array;
- string sisudoc_conf_pwd_c = chainPath(to!string(env["pwd"]), "../../conf").array;
- string sisudoc_conf_pwd_d = chainPath(to!string(env["pwd"]), "../../../conf").array;
- /+ FIX clean up conf paths ↑
- (compare pwd to doc path location, and build config path)
- +/
- string dot_pwd = chainPath(to!string(env["pwd"]), ".sisu").array;
- string underscore_pwd = chainPath(to!string(env["pwd"]), "_sisu").array;
- string dot_home = chainPath(to!string(env["home"]), ".sisu").array;
- string[] possible_config_path_locations = [
- sisudoc_conf_pwd,
- sisudoc_conf_pwd_a,
- sisudoc_conf_pwd_b,
- sisudoc_conf_pwd_c,
- sisudoc_conf_pwd_d,
- dot_pwd,
- underscore_pwd,
- dot_home,
- "/etc/sisu"
- ];
+ auto possible_config_path_locations = ConfigFilePaths!()(env).possible_config_path_locations;
string config_file_str;
foreach(pth; possible_config_path_locations) {
auto conf_file = format(
diff --git a/org/sdp.org b/org/sdp.org
index a6e552f..e6b26fc 100644
--- a/org/sdp.org
+++ b/org/sdp.org
@@ -26,7 +26,7 @@ struct Version {
int minor;
int patch;
}
-enum ver = Version(0, 20, 1);
+enum ver = Version(0, 20, 2);
#+END_SRC
#+NAME: version_txt
@@ -485,21 +485,19 @@ auto _opt_action = OptActions();
#+NAME: sdp_args
#+BEGIN_SRC d
foreach(arg; args[1..$]) {
+ auto _manifest = ManifestFile!()(arg);
if (arg.match(rgx.flag_action)) {
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)
- || ((arg.isDir) && ((arg.chainPath("sisudoc.txt").array).isFile))
- ) {
+ } else if (_manifest.manifest_file_and_path) {
string contents_location_;
- string sisudoc_txt_;
- if ((arg.chainPath("sisudoc.txt").array).isFile) {
- sisudoc_txt_ = arg.chainPath("sisudoc.txt").array;
- } else if (arg.match(rgx.src_pth_contents)) {
- sisudoc_txt_ = arg;
- } else {
- }
+ string sisudoc_txt_ = _manifest.manifest_file_and_path;
+ enforce(
+ exists(sisudoc_txt_)!=0,
+ "file not found: «" ~
+ sisudoc_txt_ ~ "»"
+ );
try {
if (exists(sisudoc_txt_)) {
contents_location_ = sisudoc_txt_.readText;
diff --git a/src/sdp/meta/read_config_files.d b/src/sdp/meta/read_config_files.d
index 012ccb6..369d9c2 100644
--- a/src/sdp/meta/read_config_files.d
+++ b/src/sdp/meta/read_config_files.d
@@ -7,32 +7,11 @@ module sdp.meta.read_config_files;
static template configIn() {
import
sdp.meta,
+ sdp.output.paths_source,
std.file,
std.path;
final string configIn(C,E)(C conf_sdl, E env) {
- /+ FIX clean up conf paths ↓ +/
- string sisudoc_conf_pwd = chainPath(to!string(env["pwd"]), "sisudoc/conf").array;
- string sisudoc_conf_pwd_a = chainPath(to!string(env["pwd"]), "conf").array;
- string sisudoc_conf_pwd_b = chainPath(to!string(env["pwd"]), "../conf").array;
- string sisudoc_conf_pwd_c = chainPath(to!string(env["pwd"]), "../../conf").array;
- string sisudoc_conf_pwd_d = chainPath(to!string(env["pwd"]), "../../../conf").array;
- /+ FIX clean up conf paths ↑
- (compare pwd to doc path location, and build config path)
- +/
- string dot_pwd = chainPath(to!string(env["pwd"]), ".sisu").array;
- string underscore_pwd = chainPath(to!string(env["pwd"]), "_sisu").array;
- string dot_home = chainPath(to!string(env["home"]), ".sisu").array;
- string[] possible_config_path_locations = [
- sisudoc_conf_pwd,
- sisudoc_conf_pwd_a,
- sisudoc_conf_pwd_b,
- sisudoc_conf_pwd_c,
- sisudoc_conf_pwd_d,
- dot_pwd,
- underscore_pwd,
- dot_home,
- "/etc/sisu"
- ];
+ auto possible_config_path_locations = ConfigFilePaths!()(env).possible_config_path_locations;
string config_file_str;
foreach(pth; possible_config_path_locations) {
auto conf_file = format(
@@ -67,6 +46,7 @@ static template ConfigSDLang() {
import sdlang;
import
sdp.meta,
+ sdp.output.paths_source,
std.file,
std.path;
auto ConfigSDLang(string configuration, string conf_sdl_filename) {
@@ -86,6 +66,7 @@ static template ConfigSDLang() {
static template configRead() {
import
sdp.meta,
+ sdp.output.paths_source,
std.file,
std.path;
diff --git a/src/sdp/meta/read_source_files.d b/src/sdp/meta/read_source_files.d
index 0443ded..ccda78c 100644
--- a/src/sdp/meta/read_source_files.d
+++ b/src/sdp/meta/read_source_files.d
@@ -9,6 +9,7 @@ static template SiSUrawMarkupContent() {
sdp.meta.rgx;
import
sdp.meta,
+ sdp.output.paths_source,
std.file,
std.path;
mixin SiSUrgxInit;
diff --git a/src/sdp/meta/rgx.d b/src/sdp/meta/rgx.d
index bf1b175..70f48bb 100644
--- a/src/sdp/meta/rgx.d
+++ b/src/sdp/meta/rgx.d
@@ -196,13 +196,13 @@ static template SiSUrgxInit() {
static nbsp_chars_line_start = ctRegex!(`^░+`, "mg");
static nbsp_and_space = ctRegex!(`&nbsp;[ ]`, "mg");
static nbsp_char_and_space = ctRegex!(`░[ ]`, "mg");
- static src_pth = ctRegex!(`^(?P<path>(?:[a-zA-Z0-9._-]+/)*)(?P<filename>[a-zA-Z0-9._-]+[.]ss[tm])$`);
- static src_pth_contents = ctRegex!(`^(?P<path>(?:[a-zA-Z0-9._-]+/)*)(?P<filename>[a-zA-Z0-9._-]+)/sisudoc[.]txt$`);
- static src_pth_zip = ctRegex!(`^(?P<path>(?:[a-zA-Z0-9._-]+/)*)(?P<filename>[a-zA-Z0-9._-]+[.]zip)$`);
+ static src_pth = ctRegex!(`^(?P<path>[/]?(?:[a-zA-Z0-9._-]+/)*)(?P<filename>[a-zA-Z0-9._-]+[.]ss[tm])$`);
+ static src_pth_contents = ctRegex!(`^(?P<path>[/]?(?:[a-zA-Z0-9._-]+/)*)(?P<filename>[a-zA-Z0-9._-]+)/sisudoc[.]txt$`);
+ static src_pth_zip = ctRegex!(`^(?P<path>[/]?(?:[a-zA-Z0-9._-]+/)*)(?P<filename>[a-zA-Z0-9._-]+[.]zip)$`);
static src_pth_unzip_pod = ctRegex!(`^(?P<path>media/text/[a-z]{2}/)*(?P<filename>[a-zA-Z0-9._-]+[.]ss[im])$`);
- static src_pth_types = ctRegex!(`^(?P<path>[a-zA-Z0-9._-]+/)*(?P<gotfile>(?P<filename>[a-zA-Z0-9._-]+[.]ss[tm])|(?P<filelist>[a-zA-Z0-9._-]+/sisudoc[.]txt)|(?P<filezip>[a-zA-Z0-9._-]+[.]zip))$`);
+ static src_pth_types = ctRegex!(`^(?P<path>[/]?[a-zA-Z0-9._-]+/)*(?P<gotfile>(?P<filename>[a-zA-Z0-9._-]+[.]ss[tm])|(?P<filelist>[a-zA-Z0-9._-]+/sisudoc[.]txt)|(?P<filezip>[a-zA-Z0-9._-]+[.]zip))$`);
static src_fn =
- ctRegex!(`^([a-zA-Z0-9._-]+/)*(?P<fn_src>(?P<fn_base>[a-zA-Z0-9._-]+)[.](?P<fn_src_suffix>ss[tm]))$`);
+ ctRegex!(`^([/]?(?:[a-zA-Z0-9._-]+/)*)(?P<fn_src>(?P<fn_base>[a-zA-Z0-9._-]+)[.](?P<fn_src_suffix>ss[tm]))$`);
static src_fn_master = ctRegex!(`^(?P<path>[a-zA-Z0-9._-]+/)*(?P<filename>[a-zA-Z0-9._-]+[.]ssm)$`);
static src_fn_text = ctRegex!(`^(?P<path>[a-zA-Z0-9._-]+/)*(?P<filename>[a-zA-Z0-9._-]+[.]sst)$`);
static src_fn_insert = ctRegex!(`^(?P<path>[a-zA-Z0-9._-]+/)*(?P<filename>[a-zA-Z0-9._-]+[.]ssi)$`);
diff --git a/src/sdp/output/package.d b/src/sdp/output/package.d
index 58a6ae8..84bdfce 100644
--- a/src/sdp/output/package.d
+++ b/src/sdp/output/package.d
@@ -15,6 +15,7 @@ public import
// std.uni,
std.utf;
public import
+ sdp.output.paths_source,
sdp.output.defaults,
sdp.output.paths_output,
sdp.output.rgx;
diff --git a/src/sdp/output/paths_output.d b/src/sdp/output/paths_output.d
index a5ea0d9..accfcaf 100644
--- a/src/sdp/output/paths_output.d
+++ b/src/sdp/output/paths_output.d
@@ -7,288 +7,6 @@ import std.array,
std.regex,
std.stdio;
import sdp.meta.rgx;
-template SiSUpathsSisupod() {
- mixin SiSUrgxInit;
- static auto rgx = Rgx();
- string _base_dir_pod = "sisupod";
- string _base_dir_doc = "sisudoc";
- string _suffix = ".zip";
- auto SiSUpathsSisupod()() {
- struct _PathsStruct {
- 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;
- }
- }
- return _PathsStruct();
- }
-}
-
-template SiSUpathsSisupods() {
- mixin SiSUrgxInit;
- static auto rgx = Rgx();
- string _base_dir_pod = "sisupod";
- string _base_dir_doc = "sisudoc";
- string _suffix = ".zip";
- auto SiSUpathsSisupods(Ps,Lng)(
- Ps src_pth_info,
- Lng lng,
- ) {
- 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) {
- 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) {
- 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) {
- 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) {
- 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) {
- 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) {
- 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) {
- 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) {
- 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) {
- 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) {
- 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 _PodPaths();
- }
-}
template SiSUoutPaths() {
auto SiSUoutPaths(Ps,Lng)(
Ps src_pth_info,
diff --git a/src/sdp/output/paths_source.d b/src/sdp/output/paths_source.d
index a242a33..1fd87e5 100644
--- a/src/sdp/output/paths_source.d
+++ b/src/sdp/output/paths_source.d
@@ -5,10 +5,77 @@
+/
module sdp.output.paths_source;
import std.array,
+ std.file,
std.path,
std.regex,
- std.stdio;
+ std.stdio,
+ std.conv : to;
import sdp.meta.rgx;
+template ManifestFile() {
+ mixin SiSUrgxInit;
+ static auto rgx = Rgx();
+ auto ManifestFile(P)(
+ P _pth,
+ ) {
+ struct ManifestFile_ {
+ auto manifest_file() {
+ string _manifest_file = "sisudoc.txt";
+ return _manifest_file;
+ }
+ auto manifest_file_and_path() {
+ string _manifest_file_and_path;
+ if (isValidPath(_pth) && _pth.isDir
+ && ((_pth.chainPath(manifest_file).array).isFile)) {
+ _manifest_file_and_path = _pth.chainPath(manifest_file).array;
+ } else if (_pth.match(rgx.src_pth_contents)
+ && (_pth.isFile)) {
+ _manifest_file_and_path = _pth;
+ } else {
+ // _manifest_file_and_path = "";
+ }
+ return _manifest_file_and_path;
+ }
+ }
+ return ManifestFile_();
+ }
+}
+template ConfigFilePaths() {
+ mixin SiSUrgxInit;
+ static auto rgx = Rgx();
+ auto ConfigFilePaths(E)(
+ E _env,
+ ) {
+ struct ConfFilePaths {
+ auto possible_config_path_locations() {
+ /+ FIX clean up conf paths ↓ +/
+ string _sisudoc_conf_pwd = chainPath(to!string(_env["pwd"]), "sisudoc/conf").array;
+ string _sisudoc_conf_pwd_a = chainPath(to!string(_env["pwd"]), "conf").array;
+ string _sisudoc_conf_pwd_b = chainPath(to!string(_env["pwd"]), "../conf").array;
+ string _sisudoc_conf_pwd_c = chainPath(to!string(_env["pwd"]), "../../conf").array;
+ string _sisudoc_conf_pwd_d = chainPath(to!string(_env["pwd"]), "../../../conf").array;
+ /+ FIX clean up conf paths ↑
+ (compare pwd to doc path location, and build config path)
+ +/
+ string _dot_pwd = chainPath(to!string(_env["pwd"]), ".sisu").array;
+ string _underscore_pwd = chainPath(to!string(_env["pwd"]), "_sisu").array;
+ string _dot_home = chainPath(to!string(_env["home"]), ".sisu").array;
+ string[] _possible_config_path_locations = [
+ _sisudoc_conf_pwd,
+ _sisudoc_conf_pwd_a,
+ _sisudoc_conf_pwd_b,
+ _sisudoc_conf_pwd_c,
+ _sisudoc_conf_pwd_d,
+ _dot_pwd,
+ _underscore_pwd,
+ _dot_home,
+ "/etc/sisu"
+ ];
+ return _possible_config_path_locations;
+ }
+ }
+ return ConfFilePaths();
+ }
+}
template SiSUpathsSRC() {
mixin SiSUrgxInit;
static auto rgx = Rgx();
@@ -25,7 +92,7 @@ template SiSUpathsSRC() {
string _k;
if (auto m = _fn_src_and_relative_path.match(rgx.language_code_and_filename)) {
_k = m.captures[1];
- } else {
+ } else { /+ unknown until doc_meta read, (could provide & use command line info?) +/
_k = "xx"; // original default was "en" but is not known
}
return _k;
@@ -58,3 +125,285 @@ template SiSUpathsSRC() {
return SisuSrcPaths();
}
}
+template SiSUpathsSisupod() {
+ mixin SiSUrgxInit;
+ static auto rgx = Rgx();
+ string _base_dir_pod = "sisupod";
+ string _base_dir_doc = "sisudoc";
+ string _suffix = ".zip";
+ auto SiSUpathsSisupod()() {
+ struct _PathsStruct {
+ 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;
+ }
+ }
+ return _PathsStruct();
+ }
+}
+
+template SiSUpathsSisupods() {
+ mixin SiSUrgxInit;
+ static auto rgx = Rgx();
+ string _base_dir_pod = "sisupod";
+ string _base_dir_doc = "sisudoc";
+ string _suffix = ".zip";
+ auto SiSUpathsSisupods(Ps,Lng)(
+ Ps src_pth_info,
+ Lng lng,
+ ) {
+ 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) {
+ 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) {
+ 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) {
+ 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) {
+ 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) {
+ 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) {
+ 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) {
+ 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) {
+ 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) {
+ 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) {
+ 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 _PodPaths();
+ }
+}
diff --git a/src/sdp/output/rgx.d b/src/sdp/output/rgx.d
index dbd1528..c9f0175 100644
--- a/src/sdp/output/rgx.d
+++ b/src/sdp/output/rgx.d
@@ -15,13 +15,13 @@ static template SiSUoutputRgxInit() {
static nbsp_chars_line_start = ctRegex!(`^░+`, "mg");
static nbsp_and_space = ctRegex!(`&nbsp;[ ]`, "mg");
static nbsp_char_and_space = ctRegex!(`░[ ]`, "mg");
- static src_pth = ctRegex!(`^(?P<path>(?:[a-zA-Z0-9._-]+/)*)(?P<filename>[a-zA-Z0-9._-]+[.]ss[tm])$`);
- static src_pth_contents = ctRegex!(`^(?P<path>(?:[a-zA-Z0-9._-]+/)*)(?P<filename>[a-zA-Z0-9._-]+)/sisudoc[.]txt$`);
- static src_pth_zip = ctRegex!(`^(?P<path>(?:[a-zA-Z0-9._-]+/)*)(?P<filename>[a-zA-Z0-9._-]+[.]zip)$`);
+ static src_pth = ctRegex!(`^(?P<path>[/]?(?:[a-zA-Z0-9._-]+/)*)(?P<filename>[a-zA-Z0-9._-]+[.]ss[tm])$`);
+ static src_pth_contents = ctRegex!(`^(?P<path>[/]?(?:[a-zA-Z0-9._-]+/)*)(?P<filename>[a-zA-Z0-9._-]+)/sisudoc[.]txt$`);
+ static src_pth_zip = ctRegex!(`^(?P<path>[/]?(?:[a-zA-Z0-9._-]+/)*)(?P<filename>[a-zA-Z0-9._-]+[.]zip)$`);
static src_pth_unzip_pod = ctRegex!(`^(?P<path>media/text/[a-z]{2}/)*(?P<filename>[a-zA-Z0-9._-]+[.]ss[im])$`);
- static src_pth_types = ctRegex!(`^(?P<path>[a-zA-Z0-9._-]+/)*(?P<gotfile>(?P<filename>[a-zA-Z0-9._-]+[.]ss[tm])|(?P<filelist>[a-zA-Z0-9._-]+/sisudoc[.]txt)|(?P<filezip>[a-zA-Z0-9._-]+[.]zip))$`);
+ static src_pth_types = ctRegex!(`^(?P<path>[/]?[a-zA-Z0-9._-]+/)*(?P<gotfile>(?P<filename>[a-zA-Z0-9._-]+[.]ss[tm])|(?P<filelist>[a-zA-Z0-9._-]+/sisudoc[.]txt)|(?P<filezip>[a-zA-Z0-9._-]+[.]zip))$`);
static src_fn =
- ctRegex!(`^([a-zA-Z0-9._-]+/)*(?P<fn_src>(?P<fn_base>[a-zA-Z0-9._-]+)[.](?P<fn_src_suffix>ss[tm]))$`);
+ ctRegex!(`^([/]?(?:[a-zA-Z0-9._-]+/)*)(?P<fn_src>(?P<fn_base>[a-zA-Z0-9._-]+)[.](?P<fn_src_suffix>ss[tm]))$`);
static src_fn_master = ctRegex!(`^(?P<path>[a-zA-Z0-9._-]+/)*(?P<filename>[a-zA-Z0-9._-]+[.]ssm)$`);
static src_fn_text = ctRegex!(`^(?P<path>[a-zA-Z0-9._-]+/)*(?P<filename>[a-zA-Z0-9._-]+[.]sst)$`);
static src_fn_insert = ctRegex!(`^(?P<path>[a-zA-Z0-9._-]+/)*(?P<filename>[a-zA-Z0-9._-]+[.]ssi)$`);
diff --git a/src/sdp/sdp.d b/src/sdp/sdp.d
index ac022ba..a9f63e2 100755
--- a/src/sdp/sdp.d
+++ b/src/sdp/sdp.d
@@ -300,21 +300,19 @@ void main(string[] args) {
}
auto _opt_action = OptActions();
foreach(arg; args[1..$]) {
+ auto _manifest = ManifestFile!()(arg);
if (arg.match(rgx.flag_action)) {
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)
- || ((arg.isDir) && ((arg.chainPath("sisudoc.txt").array).isFile))
- ) {
+ } else if (_manifest.manifest_file_and_path) {
string contents_location_;
- string sisudoc_txt_;
- if ((arg.chainPath("sisudoc.txt").array).isFile) {
- sisudoc_txt_ = arg.chainPath("sisudoc.txt").array;
- } else if (arg.match(rgx.src_pth_contents)) {
- sisudoc_txt_ = arg;
- } else {
- }
+ string sisudoc_txt_ = _manifest.manifest_file_and_path;
+ enforce(
+ exists(sisudoc_txt_)!=0,
+ "file not found: «" ~
+ sisudoc_txt_ ~ "»"
+ );
try {
if (exists(sisudoc_txt_)) {
contents_location_ = sisudoc_txt_.readText;
diff --git a/views/version.txt b/views/version.txt
index 1dc7d0d..4be6543 100644
--- a/views/version.txt
+++ b/views/version.txt
@@ -4,7 +4,7 @@ struct Version {
int minor;
int patch;
}
-enum ver = Version(0, 20, 1);
+enum ver = Version(0, 20, 2);
version (Posix) {
version (DigitalMars) {
} else version (LDC) {