diff options
Diffstat (limited to 'src/sdp')
-rw-r--r-- | src/sdp/meta/metadoc.d | 12 | ||||
-rw-r--r-- | src/sdp/meta/read_config_files.d | 8 | ||||
-rw-r--r-- | src/sdp/meta/read_source_files.d | 6 | ||||
-rw-r--r-- | src/sdp/meta/rgx.d | 2 | ||||
-rw-r--r-- | src/sdp/output/paths_source.d | 87 | ||||
-rw-r--r-- | src/sdp/output/rgx.d | 2 | ||||
-rw-r--r-- | src/sdp/output/source_sisupod.d | 4 | ||||
-rwxr-xr-x | src/sdp/sdp.d | 6 |
8 files changed, 85 insertions, 42 deletions
diff --git a/src/sdp/meta/metadoc.d b/src/sdp/meta/metadoc.d index e3947e5..8fafc24 100644 --- a/src/sdp/meta/metadoc.d +++ b/src/sdp/meta/metadoc.d @@ -31,14 +31,14 @@ template SiSUabstraction() { enum makeMeta { make, meta } enum docAbst { doc_abstraction, section_keys, segnames, segnames_0_4, images } static auto rgx = Rgx(); - auto SiSUabstraction(M,O,E)( - M _manifest, - O _opt_action, + auto SiSUabstraction(E,O,M)( E _env, + O _opt_action, + M _manifest, ){ - auto sdl_root_config_share = configRead!()("config_share", _env); - auto sdl_root_config_local = configRead!()("config_local", _env); - auto conf_files_composite_make = confFilesSDLtoStruct!()(sdl_root_config_share, sdl_root_config_local); + auto sdl_root_config_document = configRead!()(_manifest, _env, "config_document"); // document config file + auto sdl_root_config_local_site = configRead!()(_manifest, _env, "config_local_site"); // 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 +/ debug(steps) { diff --git a/src/sdp/meta/read_config_files.d b/src/sdp/meta/read_config_files.d index 369d9c2..b3c7f1b 100644 --- a/src/sdp/meta/read_config_files.d +++ b/src/sdp/meta/read_config_files.d @@ -10,8 +10,8 @@ static template configIn() { sdp.output.paths_source, std.file, std.path; - final string configIn(C,E)(C conf_sdl, E env) { - auto possible_config_path_locations = ConfigFilePaths!()(env).possible_config_path_locations; + final string configIn(M,E,C)(M manifest, E env, C conf_sdl) { + auto possible_config_path_locations = ConfigFilePaths!()(manifest, env).possible_config_path_locations; string config_file_str; foreach(pth; possible_config_path_locations) { auto conf_file = format( @@ -70,8 +70,8 @@ static template configRead() { std.file, std.path; - final auto configRead(C,E)(C conf_sdl, E env) { - auto configuration = configIn!()(conf_sdl, env); + final auto configRead(M,E,C)(M manifest, E env, C conf_sdl) { + auto configuration = configIn!()(manifest, env, conf_sdl); auto sdl_root = ConfigSDLang!()(configuration, conf_sdl); return sdl_root; } diff --git a/src/sdp/meta/read_source_files.d b/src/sdp/meta/read_source_files.d index 2fce0be..95a9dbe 100644 --- a/src/sdp/meta/read_source_files.d +++ b/src/sdp/meta/read_source_files.d @@ -115,7 +115,7 @@ static template SiSUrawMarkupContent() { auto markupSourceReadIn(in string fn_src) { static auto rgx = Rgx(); enforce( - fn_src.match(rgx.src_pth), + fn_src.match(rgx.src_pth_sst_or_ssm), "not a sisu markup filename: «" ~ fn_src ~ "»" ); @@ -161,7 +161,7 @@ static template SiSUrawMarkupContent() { mixin SiSUrgxInitFlags; char[][] contents_insert; auto type1 = flags_type_init; - auto fn_pth_full = fn_src.match(rgx.src_pth); + auto fn_pth_full = fn_src.match(rgx.src_pth_sst_or_ssm); auto markup_src_file_path = fn_pth_full.captures[1]; foreach (line; markup_sourcefile_insert_content) { if (type1["curly_code"] == 1) { @@ -260,7 +260,7 @@ static template SiSUrawMarkupContent() { mixin SiSUrgxInitFlags; char[][] contents; auto type = flags_type_init; - auto fn_pth_full = fn_src.match(rgx.src_pth); + auto fn_pth_full = fn_src.match(rgx.src_pth_sst_or_ssm); auto markup_src_file_path = fn_pth_full.captures[1]; char[][] contents_insert; string[] _images =[]; diff --git a/src/sdp/meta/rgx.d b/src/sdp/meta/rgx.d index 73f7bfe..37db8e7 100644 --- a/src/sdp/meta/rgx.d +++ b/src/sdp/meta/rgx.d @@ -196,7 +196,7 @@ static template SiSUrgxInit() { static nbsp_chars_line_start = ctRegex!(`^░+`, "mg"); static nbsp_and_space = ctRegex!(` [ ]`, "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_sst_or_ssm = 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._-]+)/sisupod[.]manifest$`); 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])$`); diff --git a/src/sdp/output/paths_source.d b/src/sdp/output/paths_source.d index 0a8b447..4f8eb54 100644 --- a/src/sdp/output/paths_source.d +++ b/src/sdp/output/paths_source.d @@ -117,9 +117,16 @@ template PodMatters() { ) { _output_path = asNormalizedPath(_opt_actions.output_dir_set).array; if (!exists(_output_path)) { - _output_path.mkdirRecurse; + try { + _output_path.mkdirRecurse; + } + catch (Exception ex) { + // Handle error + } } - assert(_output_path.isDir); + assert(_output_path.isDir, + "not a directory: " ~ _output_path); + // TODO always test that is a directory and it is writable } return _output_path; } @@ -144,34 +151,70 @@ template PodMatters() { template ConfigFilePaths() { mixin SiSUrgxInit; static auto rgx = Rgx(); - auto ConfigFilePaths(E)( + auto ConfigFilePaths(M,E)( + M _manifest, 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; + /+ config local site (file system only, not in pod) +/ + string _dot_pwd; + string _underscore_pwd; + string _dot_home; + /+ config document (& or local site) on filesystem +/ + string _sisudoc_conf_pwd; // think about + string _sisudoc_conf_pwd_a; + string _sisudoc_conf_pwd_b; + string _sisudoc_conf_pwd_c; + string _sisudoc_conf_pwd_d; + /+ config document in pod +/ + string _sisudoc_conf_pod; + string _sisudoc_conf_pod_text; + /+ return paths +/ + string[] _possible_config_path_locations; + if (_manifest.is_pod) { + /+ config document in pod +/ + _sisudoc_conf_pod = asNormalizedPath(chainPath( + to!string(_env["pwd"]), + _manifest.pod_manifest_path ~ "/conf" + )).array; + _sisudoc_conf_pod_text = asNormalizedPath(chainPath( + to!string(_env["pwd"]), + _manifest.pod_manifest_path ~ "/media/text/" ~ _manifest.src_lng ~ "/conf" + )).array; + /+ return paths +/ + _possible_config_path_locations = [ + _sisudoc_conf_pod_text, + _sisudoc_conf_pod, + ]; + } else { + /+ config local site (file system only, not in pod) +/ + _dot_pwd = asNormalizedPath(chainPath(to!string(_env["pwd"]), ".sisu")).array; + _underscore_pwd = asNormalizedPath(chainPath(to!string(_env["pwd"]), "_sisu")).array; + _dot_home = asNormalizedPath(chainPath(to!string(_env["home"]), ".sisu")).array; + /+ config document (& or local site) on filesystem +/ + _sisudoc_conf_pwd = asNormalizedPath(chainPath(to!string(_env["pwd"]), "sisudoc/conf")).array; // think about + _sisudoc_conf_pwd_a = asNormalizedPath(chainPath(to!string(_env["pwd"]), "conf")).array; + _sisudoc_conf_pwd_b = asNormalizedPath(chainPath(to!string(_env["pwd"]), "../conf")).array; + _sisudoc_conf_pwd_c = asNormalizedPath(chainPath(to!string(_env["pwd"]), "../../conf")).array; + _sisudoc_conf_pwd_d = asNormalizedPath(chainPath(to!string(_env["pwd"]), "../../../conf")).array; + /+ return paths +/ + _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" + ]; + } /+ 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; } } diff --git a/src/sdp/output/rgx.d b/src/sdp/output/rgx.d index 9daaa3b..3e03620 100644 --- a/src/sdp/output/rgx.d +++ b/src/sdp/output/rgx.d @@ -15,7 +15,7 @@ static template SiSUoutputRgxInit() { static nbsp_chars_line_start = ctRegex!(`^░+`, "mg"); static nbsp_and_space = ctRegex!(` [ ]`, "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_sst_or_ssm = 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._-]+)/sisupod[.]manifest$`); 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])$`); diff --git a/src/sdp/output/source_sisupod.d b/src/sdp/output/source_sisupod.d index 20eaf39..0d529b6 100644 --- a/src/sdp/output/source_sisupod.d +++ b/src/sdp/output/source_sisupod.d @@ -190,7 +190,7 @@ template SiSUpod() { catch (ZipException ex) { // Handle errors } - if (doc_matters.source_filename == "sisudoc/text/en/the_wealth_of_networks.yochai_benkler.sst") { + if (doc_matters.source_filename == "sisudoc/media/text/en/the_wealth_of_networks.yochai_benkler.sst") { assert( ((data).sha256Of).toHexString == "626F83A31ED82F42CF528E922C1643498A137ABA3F2E5AFF8A379EA79EA22A1E", @@ -200,7 +200,7 @@ template SiSUpod() { ~ ((data).sha256Of).toHexString ); } - if (doc_matters.source_filename == "sisudoc/text/en/sisu_markup_stress_test.sst") { + if (doc_matters.source_filename == "sisudoc/media/text/en/sisu_markup_stress_test.sst") { assert( ((data).sha256Of).toHexString == "AAE0C87AB3F6D5F7385AEEA6EE661F56D40475CFE87AD930C78C9FE07FFB0D91", diff --git a/src/sdp/sdp.d b/src/sdp/sdp.d index f4d738f..418eb1f 100755 --- a/src/sdp/sdp.d +++ b/src/sdp/sdp.d @@ -309,7 +309,7 @@ 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)) { + } 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) { string contents_location_raw_; @@ -343,7 +343,7 @@ void main(string[] args) { (cast(char[]) contents_location_).split; auto tmp_dir_ = (sisudoc_txt_).dirName.array; foreach (contents_location; contents_locations_arr) { - assert(contents_location.match(rgx.src_pth), + assert(contents_location.match(rgx.src_pth_sst_or_ssm), "not a recognised file: «" ~ contents_location ~ "»" ); @@ -393,7 +393,7 @@ void main(string[] args) { "not a sisu markup filename: «" ~ manifest.src_fn ~ "»" ); - auto t = SiSUabstraction!()(manifest, _opt_action, _env); + auto t = SiSUabstraction!()(_env, _opt_action, manifest); static assert(!isTypeTuple!(t)); static assert(t.length==2); auto doc_abstraction = t[dAM.abstraction]; |