From 51fd56020424dcca50c4b8cfb3877640a6a9656b Mon Sep 17 00:00:00 2001
From: Ralph Amissah <ralph@amissah.com>
Date: Sat, 16 Dec 2017 17:18:01 -0500
Subject: target config file locations, refine

---
 org/default_paths.org            | 14 ++++++++++++--
 org/meta_read_source_files.org   | 36 ++++++++++++++++++------------------
 org/sdp.org                      | 15 +++++++++------
 src/sdp/meta/metadoc.d           |  6 +++---
 src/sdp/meta/read_config_files.d | 36 ++++++++++++++++++------------------
 src/sdp/output/paths_source.d    | 14 ++++++++++++--
 src/sdp/sdp.d                    |  9 ++++++---
 7 files changed, 78 insertions(+), 52 deletions(-)

diff --git a/org/default_paths.org b/org/default_paths.org
index 93711dc..dfaf362 100644
--- a/org/default_paths.org
+++ b/org/default_paths.org
@@ -135,12 +135,16 @@ template PodMatters() {
         string[] _image_dirs;
         return _image_dirs;
       }
-      auto src_fn() {
+      auto src_path_and_fn() {
         return _fns;
       }
+      auto src_fn() {
+        auto _fn = (src_path_and_fn).match(rgx.src_pth_sst_or_ssm).captures["filename"];
+        return _fn;
+      }
       auto src_lng() {
         string _k;
-        if (auto m = (src_fn).match(rgx.language_code_and_filename)) {
+        if (auto m = (src_path_and_fn).match(rgx.language_code_and_filename)) {
           _k = m.captures[1];
         } else {
           _k = "en";
@@ -199,6 +203,9 @@ template ConfigFilePaths() {
     E   _env,
   ) {
     struct ConfFilePaths {
+      auto config_filename_document() {
+        return "config_document";
+      }
       auto possible_config_path_locations_document() {
         /+ FIX clean up conf paths ↓ +/
         /+ config local site (file system only, not in pod) +/
@@ -242,6 +249,9 @@ template ConfigFilePaths() {
         +/
         return _possible_config_path_locations;
       }
+      auto config_filename_site() {
+        return "config_local_site";
+      }
       auto possible_config_path_locations_local_site() {
         /+ FIX clean up conf paths ↓ +/
         /+ config local site (file system only, not in pod) +/
diff --git a/org/meta_read_source_files.org b/org/meta_read_source_files.org
index 69d70d7..3c92560 100644
--- a/org/meta_read_source_files.org
+++ b/org/meta_read_source_files.org
@@ -47,15 +47,13 @@ module sdp.meta.read_config_files;
 #+BEGIN_SRC d
 static template configInSite() {
   <<imports_std>>
-  final string configInSite(M,E,C)(M manifest, E env, C conf_sdl) {
-    auto possible_config_path_locations = ConfigFilePaths!()(manifest, env).possible_config_path_locations_local_site;
+  final string configInSite(M,E)(M manifest, E env) {
+    auto conf_file_details = ConfigFilePaths!()(manifest, env);
+    string conf_sdl = conf_file_details.config_filename_site;
+    auto possible_config_path_locations = conf_file_details.possible_config_path_locations_local_site;
     string config_file_str;
     foreach(pth; possible_config_path_locations) {
-      auto conf_file = format(
-        "%s/%s",
-        pth,
-        conf_sdl,
-      );
+      auto conf_file = asNormalizedPath(chainPath(to!string(pth), conf_sdl)).array;
       if (config_file_str.length > 0) {
         break;
       }
@@ -82,15 +80,13 @@ static template configInSite() {
 #+BEGIN_SRC d
 static template configInDoc() {
   <<imports_std>>
-  final string configInDoc(M,E,C)(M manifest, E env, C conf_sdl) {
-    auto possible_config_path_locations = ConfigFilePaths!()(manifest, env).possible_config_path_locations_document;
+  final string configInDoc(M,E)(M manifest, E env) {
+    auto conf_file_details = ConfigFilePaths!()(manifest, env);
+    string conf_sdl = conf_file_details.config_filename_document;
+    auto possible_config_path_locations = conf_file_details.possible_config_path_locations_document;
     string config_file_str;
     foreach(pth; possible_config_path_locations) {
-      auto conf_file = format(
-        "%s/%s",
-        pth,
-        conf_sdl,
-      );
+      auto conf_file = asNormalizedPath(chainPath(to!string(pth), conf_sdl)).array;
       if (config_file_str.length > 0) {
         break;
       }
@@ -175,8 +171,10 @@ Read in sdl config file name given, and return sdl root
 
 #+name: meta_config_file_sdlang_hub_site
 #+BEGIN_SRC d
-final auto configReadSite(M,E,C)(M manifest, E env, C conf_sdl) {
-  auto configuration = configInSite!()(manifest, env, conf_sdl);
+final auto configReadSite(M,E)(M manifest, E env) {
+  auto configuration = configInSite!()(manifest, env);
+  auto conf_file_details = ConfigFilePaths!()(manifest, env);
+  string conf_sdl = conf_file_details.config_filename_site;
   auto sdl_root = ConfigSDLang!()(configuration, conf_sdl);
   return sdl_root;
 }
@@ -184,8 +182,10 @@ final auto configReadSite(M,E,C)(M manifest, E env, C conf_sdl) {
 
 #+name: meta_config_file_sdlang_hub_doc
 #+BEGIN_SRC d
-final auto configReadDoc(M,E,C)(M manifest, E env, C conf_sdl) {
-  auto configuration = configInDoc!()(manifest, env, conf_sdl);
+final auto configReadDoc(M,E)(M manifest, E env) {
+  auto configuration = configInDoc!()(manifest, env);
+  auto conf_file_details = ConfigFilePaths!()(manifest, env);
+  string conf_sdl = conf_file_details.config_filename_document;
   auto sdl_root = ConfigSDLang!()(configuration, conf_sdl);
   return sdl_root;
 }
diff --git a/org/sdp.org b/org/sdp.org
index 011fd85..d874489 100644
--- a/org/sdp.org
+++ b/org/sdp.org
@@ -492,9 +492,10 @@ foreach(arg; args[1..$]) {
   _manifest_start = PodManifest!()(arg);
   if (arg.match(rgx.flag_action)) {
     flag_action ~= " " ~ arg;   // flags not taken by getopt
-  } else if (arg.match(rgx.src_pth_sst_or_ssm)) {
-    _manifests ~= PodMatters!()(_opt_action, _env, arg, arg); // gather input markup source file names for processing
-  } else if (_manifest_start.pod_manifest_file_with_path) {
+  } else if (
+    !(arg.match(rgx.src_pth_sst_or_ssm))
+    && _manifest_start.pod_manifest_file_with_path
+  ) {
     string contents_location_raw_;
     string contents_location_;
     string sisudoc_txt_ = _manifest_start.pod_manifest_file_with_path;
@@ -540,6 +541,8 @@ foreach(arg; args[1..$]) {
         _manifests ~= _manifest_matter; // TODO how to capture?
       }
     }
+  } else if (arg.match(rgx.src_pth_sst_or_ssm)) {
+    _manifests ~= PodMatters!()(_opt_action, _env, arg, arg); // gather input markup source file names for processing
   } else if (arg.match(rgx.src_pth_zip)) {
     // fns_src ~= arg;             // gather input markup source file names for processing
   } else {                      // anything remaining, unused
@@ -552,8 +555,8 @@ foreach(arg; args[1..$]) {
 
 #+NAME: sdp_conf_files
 #+BEGIN_SRC d
-auto sdl_root_config_document = configReadDoc!()(_manifest, _env, "config_document"); // document config file
-auto sdl_root_config_local_site = configReadSite!()(_manifest, _env, "config_local_site"); // local site config
+auto sdl_root_config_document = configReadDoc!()(_manifest, _env); // document config file
+auto sdl_root_config_local_site = configReadSite!()(_manifest, _env); // local site config
 auto conf_files_composite_make = confFilesSDLtoStruct!()(sdl_root_config_document, sdl_root_config_local_site);
 #+END_SRC
 
@@ -733,7 +736,7 @@ debug(steps) {
   );
 }
 auto _header_body_insertfilelist_imagelist =
-  SiSUrawMarkupContent!()(_opt_action, _manifest.src_fn);
+  SiSUrawMarkupContent!()(_opt_action, _manifest.src_path_and_fn);
 static assert(!isTypeTuple!(_header_body_insertfilelist_imagelist));
 static assert(_header_body_insertfilelist_imagelist.length==4);
 debug(steps) {
diff --git a/src/sdp/meta/metadoc.d b/src/sdp/meta/metadoc.d
index eed9f55..44807b2 100644
--- a/src/sdp/meta/metadoc.d
+++ b/src/sdp/meta/metadoc.d
@@ -36,8 +36,8 @@ template SiSUabstraction() {
     O _opt_action,
     M _manifest,
   ){
-    auto sdl_root_config_document = configReadDoc!()(_manifest, _env, "config_document"); // document config file
-    auto sdl_root_config_local_site = configReadSite!()(_manifest, _env, "config_local_site"); // local site config
+    auto sdl_root_config_document = configReadDoc!()(_manifest, _env); // document config file
+    auto sdl_root_config_local_site = configReadSite!()(_manifest, _env); // local site config
     auto conf_files_composite_make = confFilesSDLtoStruct!()(sdl_root_config_document, sdl_root_config_local_site);
     /+ ↓ read file (filename with path) +/
     /+ ↓ file tuple of header and content +/
@@ -47,7 +47,7 @@ template SiSUabstraction() {
       );
     }
     auto _header_body_insertfilelist_imagelist =
-      SiSUrawMarkupContent!()(_opt_action, _manifest.src_fn);
+      SiSUrawMarkupContent!()(_opt_action, _manifest.src_path_and_fn);
     static assert(!isTypeTuple!(_header_body_insertfilelist_imagelist));
     static assert(_header_body_insertfilelist_imagelist.length==4);
     debug(steps) {
diff --git a/src/sdp/meta/read_config_files.d b/src/sdp/meta/read_config_files.d
index d816619..57aba7f 100644
--- a/src/sdp/meta/read_config_files.d
+++ b/src/sdp/meta/read_config_files.d
@@ -10,15 +10,13 @@ static template configInSite() {
     sdp.output.paths_source,
     std.file,
     std.path;
-  final string configInSite(M,E,C)(M manifest, E env, C conf_sdl) {
-    auto possible_config_path_locations = ConfigFilePaths!()(manifest, env).possible_config_path_locations_local_site;
+  final string configInSite(M,E)(M manifest, E env) {
+    auto conf_file_details = ConfigFilePaths!()(manifest, env);
+    string conf_sdl = conf_file_details.config_filename_site;
+    auto possible_config_path_locations = conf_file_details.possible_config_path_locations_local_site;
     string config_file_str;
     foreach(pth; possible_config_path_locations) {
-      auto conf_file = format(
-        "%s/%s",
-        pth,
-        conf_sdl,
-      );
+      auto conf_file = asNormalizedPath(chainPath(to!string(pth), conf_sdl)).array;
       if (config_file_str.length > 0) {
         break;
       }
@@ -45,15 +43,13 @@ static template configInDoc() {
     sdp.output.paths_source,
     std.file,
     std.path;
-  final string configInDoc(M,E,C)(M manifest, E env, C conf_sdl) {
-    auto possible_config_path_locations = ConfigFilePaths!()(manifest, env).possible_config_path_locations_document;
+  final string configInDoc(M,E)(M manifest, E env) {
+    auto conf_file_details = ConfigFilePaths!()(manifest, env);
+    string conf_sdl = conf_file_details.config_filename_document;
+    auto possible_config_path_locations = conf_file_details.possible_config_path_locations_document;
     string config_file_str;
     foreach(pth; possible_config_path_locations) {
-      auto conf_file = format(
-        "%s/%s",
-        pth,
-        conf_sdl,
-      );
+      auto conf_file = asNormalizedPath(chainPath(to!string(pth), conf_sdl)).array;
       if (config_file_str.length > 0) {
         break;
       }
@@ -105,8 +101,10 @@ static template configReadSite() {
     std.file,
     std.path;
   
-  final auto configReadSite(M,E,C)(M manifest, E env, C conf_sdl) {
-    auto configuration = configInSite!()(manifest, env, conf_sdl);
+  final auto configReadSite(M,E)(M manifest, E env) {
+    auto configuration = configInSite!()(manifest, env);
+    auto conf_file_details = ConfigFilePaths!()(manifest, env);
+    string conf_sdl = conf_file_details.config_filename_site;
     auto sdl_root = ConfigSDLang!()(configuration, conf_sdl);
     return sdl_root;
   }
@@ -118,8 +116,10 @@ static template configReadDoc() {
     std.file,
     std.path;
   
-  final auto configReadDoc(M,E,C)(M manifest, E env, C conf_sdl) {
-    auto configuration = configInDoc!()(manifest, env, conf_sdl);
+  final auto configReadDoc(M,E)(M manifest, E env) {
+    auto configuration = configInDoc!()(manifest, env);
+    auto conf_file_details = ConfigFilePaths!()(manifest, env);
+    string conf_sdl = conf_file_details.config_filename_document;
     auto sdl_root = ConfigSDLang!()(configuration, conf_sdl);
     return sdl_root;
   }
diff --git a/src/sdp/output/paths_source.d b/src/sdp/output/paths_source.d
index b81448c..1330606 100644
--- a/src/sdp/output/paths_source.d
+++ b/src/sdp/output/paths_source.d
@@ -98,12 +98,16 @@ template PodMatters() {
         string[] _image_dirs;
         return _image_dirs;
       }
-      auto src_fn() {
+      auto src_path_and_fn() {
         return _fns;
       }
+      auto src_fn() {
+        auto _fn = (src_path_and_fn).match(rgx.src_pth_sst_or_ssm).captures["filename"];
+        return _fn;
+      }
       auto src_lng() {
         string _k;
-        if (auto m = (src_fn).match(rgx.language_code_and_filename)) {
+        if (auto m = (src_path_and_fn).match(rgx.language_code_and_filename)) {
           _k = m.captures[1];
         } else {
           _k = "en";
@@ -156,6 +160,9 @@ template ConfigFilePaths() {
     E   _env,
   ) {
     struct ConfFilePaths {
+      auto config_filename_document() {
+        return "config_document";
+      }
       auto possible_config_path_locations_document() {
         /+ FIX clean up conf paths ↓ +/
         /+ config local site (file system only, not in pod) +/
@@ -199,6 +206,9 @@ template ConfigFilePaths() {
         +/
         return _possible_config_path_locations;
       }
+      auto config_filename_site() {
+        return "config_local_site";
+      }
       auto possible_config_path_locations_local_site() {
         /+ FIX clean up conf paths ↓ +/
         /+ config local site (file system only, not in pod) +/
diff --git a/src/sdp/sdp.d b/src/sdp/sdp.d
index 418eb1f..8434841 100755
--- a/src/sdp/sdp.d
+++ b/src/sdp/sdp.d
@@ -309,9 +309,10 @@ void main(string[] args) {
     _manifest_start = PodManifest!()(arg);
     if (arg.match(rgx.flag_action)) {
       flag_action ~= " " ~ arg;   // flags not taken by getopt
-    } else if (arg.match(rgx.src_pth_sst_or_ssm)) {
-      _manifests ~= PodMatters!()(_opt_action, _env, arg, arg); // gather input markup source file names for processing
-    } else if (_manifest_start.pod_manifest_file_with_path) {
+    } else if (
+      !(arg.match(rgx.src_pth_sst_or_ssm))
+      && _manifest_start.pod_manifest_file_with_path
+    ) {
       string contents_location_raw_;
       string contents_location_;
       string sisudoc_txt_ = _manifest_start.pod_manifest_file_with_path;
@@ -357,6 +358,8 @@ void main(string[] args) {
           _manifests ~= _manifest_matter; // TODO how to capture?
         }
       }
+    } else if (arg.match(rgx.src_pth_sst_or_ssm)) {
+      _manifests ~= PodMatters!()(_opt_action, _env, arg, arg); // gather input markup source file names for processing
     } else if (arg.match(rgx.src_pth_zip)) {
       // fns_src ~= arg;             // gather input markup source file names for processing
     } else {                      // anything remaining, unused
-- 
cgit v1.2.3