aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorRalph Amissah <ralph.amissah@gmail.com>2020-04-04 17:25:56 -0400
committerRalph Amissah <ralph.amissah@gmail.com>2020-05-20 11:27:25 -0400
commitdb96528baa55151826442f61ddfea2cd006ef68d (patch)
tree1325fd983b466d8157248648b6ef8a33beee5a93
parentsql, sqlite internal site links (diff)
config, where used without document processing
-rw-r--r--org/default_paths.org41
-rw-r--r--org/default_regex.org4
-rw-r--r--org/in_source_files.org13
-rw-r--r--org/out_sqlite.org80
-rw-r--r--org/out_xmls.org12
-rw-r--r--org/output_hub.org14
-rw-r--r--org/output_show.org118
-rw-r--r--org/spine.org149
-rw-r--r--src/doc_reform/io_in/paths_source.d41
-rw-r--r--src/doc_reform/io_in/read_config_files.d13
-rw-r--r--src/doc_reform/io_out/hub.d14
-rw-r--r--src/doc_reform/io_out/rgx.d4
-rw-r--r--src/doc_reform/io_out/sqlite.d80
-rw-r--r--src/doc_reform/io_out/xmls.d12
-rw-r--r--src/doc_reform/meta/metadoc.d24
-rw-r--r--src/doc_reform/meta/metadoc_show_config.d109
-rw-r--r--src/doc_reform/meta/metadoc_show_make.d2
-rw-r--r--src/doc_reform/meta/metadoc_show_metadata.d2
-rw-r--r--src/doc_reform/meta/metadoc_show_summary.d2
-rw-r--r--src/doc_reform/meta/rgx.d4
-rwxr-xr-xsrc/doc_reform/spine.d113
21 files changed, 574 insertions, 277 deletions
diff --git a/org/default_paths.org b/org/default_paths.org
index 20dae9e..3af1019 100644
--- a/org/default_paths.org
+++ b/org/default_paths.org
@@ -49,7 +49,7 @@ template PodManifest() {
mixin spineRgxIn;
static auto rgx = RgxI();
@safe auto PodManifest(O)(
- O _opt_actions,
+ O _opt_action,
string _pth=""
) {
struct ManifestFile_ {
@@ -71,10 +71,10 @@ template PodManifest() {
_manifest_path = m.captures["podpath"];
}
} else {
- if (_opt_actions.verbose || _opt_actions.very_verbose || _opt_actions.debug_do) {
+ if (_opt_action.verbose || _opt_action.very_verbose || _opt_action.debug_do) {
writeln("WARNING, src is not a pod, issue with manifest_path: ", _pth); // remove? unless can distinguish pod
}
- _manifest_path = null; // _manifest_path = "";
+ _manifest_path = "";
}
return _manifest_path;
}
@@ -126,13 +126,13 @@ template PathMatters() {
static auto rgx = RgxI();
static auto mkup = InlineMarkup();
@safe auto PathMatters(O,E)(
- O _opt_actions,
+ O _opt_action,
E _env,
string _pth,
string _fns = "",
char[][] _manifest_fn_list = [[]],
) {
- @safe auto _manifested = PodManifest!()(_opt_actions, _pth);
+ @safe auto _manifested = PodManifest!()(_opt_action, _pth);
struct ManifestMatters_ {
auto env() {
auto _env = _env;
@@ -149,7 +149,7 @@ template PathMatters() {
@safe auto opt() {
struct Opt_ {
auto action() {
- return _opt_actions;
+ return _opt_action;
}
}
return Opt_();
@@ -208,7 +208,7 @@ template PathMatters() {
}
@safe auto src() {
string _fns = _fns; // required here by dmd & not by ldc (for D:2078)
- auto _opt_actions = _opt_actions;
+ auto _opt_action = _opt_action;
auto _env = _env;
struct SRC_ {
@safe bool is_pod() {
@@ -323,7 +323,7 @@ template PathMatters() {
assert(_dir == absolute_path_to_src
.match(rgx.src_base_parent_dir_name).captures["dir"]);
}
- if (_opt_actions.debug_do) {
+ if (_opt_action.debug_do) {
writeln("--> (base_dir) ", _dir);
}
return _dir;
@@ -355,7 +355,7 @@ template PathMatters() {
} else {
_dir = ((path_and_fn.chainPath("../../")).asNormalizedPath).array;
}
- if (_opt_actions.debug_do) {
+ if (_opt_action.debug_do) {
writeln("--> (base_dir_path) ", _dir);
}
return _dir;
@@ -401,7 +401,7 @@ template PathMatters() {
} else {
_dir = (absolute_path_to_src).match(rgx.src_base_parent_dir_name).captures["dir"];
}
- if (_opt_actions.debug_do) {
+ if (_opt_action.debug_do) {
writeln("--> (base_parent_dir) ", _dir);
}
return _dir;
@@ -437,10 +437,10 @@ template PathMatters() {
struct Out_ {
@safe auto path() {
auto _output_path = _env["pwd"];
- if ((_opt_actions.output_dir_set.length > 0)
- && isValidPath(_opt_actions.output_dir_set)
+ if ((_opt_action.output_dir_set.length > 0)
+ && isValidPath(_opt_action.output_dir_set)
) {
- _output_path = ((_opt_actions.output_dir_set).asNormalizedPath).array;
+ _output_path = ((_opt_action.output_dir_set).asNormalizedPath).array;
if (!exists(_output_path)) {
try {
_output_path.mkdirRecurse;
@@ -468,10 +468,10 @@ template PathMatters() {
#+NAME: template_paths_src
#+BEGIN_SRC d
-template ConfigFilePaths() {
+template configFilePaths() {
mixin spineRgxIn;
static auto rgx = RgxI();
- @safe auto ConfigFilePaths(M,E)(
+ @safe auto configFilePaths(M,E)(
M _manifested,
E _env,
string _cli_config_path_set = ""
@@ -524,10 +524,9 @@ template ConfigFilePaths() {
_dr_doc_conf_pwd_d,
];
}
- } else {
- _possible_config_path_locations = [
- _cli_config_path_set
- ];
+ } else if (_cli_config_path_set.isDir) {
+ _possible_config_path_locations = [_cli_config_path_set ];
+ // } else if (_cli_config_path_set.isFile) { // use file, taken care of elsewhere
}
/+ FIX clean up conf paths ↑
(compare pwd to doc path location, and build config path)
@@ -549,10 +548,10 @@ template ConfigFilePaths() {
_possible_config_path_locations = [
_dot_pwd,
_underscore_pwd,
+ _collection_root_a,
+ _collection_root_b,
_dot_home,
"/etc/dr",
- _collection_root_a, // set priority higher?
- _collection_root_b // set priority higher?
];
} else {
/+ config document (& or local site) on filesystem +/
diff --git a/org/default_regex.org b/org/default_regex.org
index 67d259a..a768a65 100644
--- a/org/default_regex.org
+++ b/org/default_regex.org
@@ -480,8 +480,8 @@ static inline_link_empty = ctRegex!(`┥(?P<text>.+
static inline_link_number = ctRegex!(`┥(?P<text>.+?)┝┤(?P<num>[0-9]+)├`, "mg"); // not used
static inline_link_number_only = ctRegex!(`(?P<linked_text>┥.+?┝)┤(?P<num>[0-9]+)├`, "mg");
static inline_link_stow_uri = ctRegex!(`┥(?P<text>.+?)┝┤(?P<link>[^ 0-9#┥┝┤├][^ 0-9┥┝┤├]+)├`, "mg"); // will not stow (stowed links) or object number internal links
-static inline_link_hash = ctRegex!(`┥(?P<text>.+?)┝┤(?P<link>#(?P<segname>\S+?))├`, "mg");
-static inline_link_seg_and_hash = ctRegex!(`┥(?P<text>.+?)┝┤(?P<link>[^/]+?#(?P<segname>.+?))├`, "mg");
+static inline_link_hash = ctRegex!(`┥(?P<text>.+?)┝┤(?P<link>#(?P<hash>\S+?))├`, "mg");
+static inline_link_seg_and_hash = ctRegex!(`┥(?P<text>.+?)┝┤(?P<link>(?P<seg>[^/#├]*)#(?P<hash>.+?))├`, "mg");
static inline_link_clean = ctRegex!(`┤(?:.+?)├|[┥┝]`, "mg");
static inline_link_toc_to_backmatter = ctRegex!(`┤#(?P<link>endnotes|bibliography|bookindex|glossary|blurb)├`, "mg");
static url = ctRegex!(`https?://`, "mg");
diff --git a/org/in_source_files.org b/org/in_source_files.org
index eb813db..05e9889 100644
--- a/org/in_source_files.org
+++ b/org/in_source_files.org
@@ -56,7 +56,7 @@ import
#+NAME: meta_config_file_hub
#+BEGIN_SRC d
template readConfigSite() {
- @system final auto readConfigSite(C)(C _conf_file_details) {
+ @system final auto readConfigSite(C,O)(C _conf_file_details, O _opt_action) {
mixin spineRgxIn;
static auto rgx = RgxI();
string conf_filename = "NONE";
@@ -114,6 +114,9 @@ webserv:
try {
if (exists(conf_file)) {
if (conf_file.getLinkAttributes.attrIsFile) {
+ if (_opt_action.verbose || _opt_action.very_verbose || _opt_action.debug_do) {
+ writeln("config file used: \"", conf_file, "\" (cli flag settings override config file's individual settings)");
+ }
config_file_str = conf_file.readText;
break;
}
@@ -137,7 +140,7 @@ webserv:
config_file_str = default_config_file_str;
}
}
- if (config_file_str.length == 0) { /+ create dummy default config file +/
+ if (config_file_str.length == 0) { /+ use dummy default config file +/
writeln("WARNING config file NOT found, default provided");
conf_filename = "VIRTUAL";
config_file_str = default_config_file_str;
@@ -176,7 +179,7 @@ static template readConfigDoc() {
static auto rgx = RgxI();
string config_file_str;
string conf_filename = "NONE";
- auto _conf_file_details = ConfigFilePaths!()(_manifested, _env);
+ auto _conf_file_details = configFilePaths!()(_manifested, _env);
string[] possible_config_path_locations = _conf_file_details.possible_config_path_locations.dr_document_make;
foreach(conf_fn; [_conf_file_details.config_filename_document]) {
foreach(pth; possible_config_path_locations) {
@@ -228,7 +231,7 @@ static template configReadSiteYAML() {
<<imports_spine>>;
@safe final YAMLDocument configReadSiteYAML(M,E)(M _manifested, E _env) {
string _configuration = configReadInSiteYAML!()(_manifested, _env);
- auto _conf_file_details = ConfigFilePaths!()(_manifested, _env);
+ auto _conf_file_details = configFilePaths!()(_manifested, _env);
string _conf_yaml_fn = _conf_file_details.config_filename_site;
YAMLDocument _yaml_conf = configYAML!()(_configuration, _conf_yaml_fn);
return _yaml_conf;
@@ -240,7 +243,7 @@ static template configReadDocYAML() {
<<imports_spine>>;
@safe final YAMLDocument configReadDocYAML(M,E)(M _manifested, E _env) {
string _configuration = configReadInDocYAML!()(_manifested, _env);
- auto _conf_file_details = ConfigFilePaths!()(_manifested, _env);
+ auto _conf_file_details = configFilePaths!()(_manifested, _env);
string _conf_yaml_fn = _conf_file_details.config_filename_document;
YAMLDocument _yaml_conf = configYAML!()(_configuration, _conf_yaml_fn);
return _yaml_conf;
diff --git a/org/out_sqlite.org b/org/out_sqlite.org
index e886fbd..b5c2532 100644
--- a/org/out_sqlite.org
+++ b/org/out_sqlite.org
@@ -272,7 +272,7 @@ template SQLiteInsertDocObjectsLoop() {
#+NAME: sqlite_tables_create
#+BEGIN_SRC d
template SQLiteTablesCreate() {
- void SQLiteTablesCreate(E,O)(E env, O opt_action) {
+ void SQLiteTablesCreate(E,O,C)(E env, O opt_action, C config) {
import d2sqlite3;
template SQLiteTablesReCreate() {
string SQLiteTablesReCreate()() {
@@ -290,13 +290,32 @@ template SQLiteTablesCreate() {
}
if (opt_action.sqlite_db_create) {
string _db_statement;
- auto pth_sqlite = spinePathsSQLite!()(opt_action.sqlite_filename, opt_action.output_dir_set);
- pth_sqlite.base.mkdirRecurse;
- auto db = Database(pth_sqlite.sqlite_file);
- {
- _db_statement ~= SQLiteTablesReCreate!()();
+ string db_filename = (opt_action.sqlite_filename.length > 0)
+ ? opt_action.sqlite_filename
+ : (config.conf.w_srv_db_sqlite.length > 0)
+ ? config.conf.w_srv_db_sqlite
+ : "";
+ string output_path = (opt_action.output_dir_set.length > 0)
+ ? opt_action.output_dir_set
+ : (config.conf.output_path.length > 0)
+ ? config.conf.output_path
+ : "";
+ if (db_filename.length > 0 && output_path.length > 0) {
+ if ((opt_action.verbose)) {
+ writeln("db name & path: ", config.conf.output_path, "/sqlite/", db_filename);
+ }
+ auto pth_sqlite = spinePathsSQLite!()(db_filename, output_path);
+ pth_sqlite.base.mkdirRecurse;
+ auto db = Database(pth_sqlite.sqlite_file);
+ {
+ _db_statement ~= SQLiteTablesReCreate!()();
+ }
+ SQLiteDbRun!()(db, _db_statement, opt_action, "TABLE RE-CREATE");
+ } else {
+ writeln("must provide db name & output root path either on the command line or in configuration file");
+ writeln("db name: ", db_filename);
+ writeln("output root path (path less /sqlite which is added: ", config.conf.output_path);
}
- SQLiteDbRun!()(db, _db_statement, opt_action, "TABLE RE-CREATE");
}
}
}
@@ -307,15 +326,31 @@ template SQLiteTablesCreate() {
#+NAME: sqlite_tables_drop
#+BEGIN_SRC d
template SQLiteDbDrop() {
- void SQLiteDbDrop(O)(O opt_action) {
+ void SQLiteDbDrop(O,C)(O opt_action, C config) {
writeln("db drop");
if ((opt_action.sqlite_db_drop)) {
- auto pth_sqlite = spinePathsSQLite!()(opt_action.sqlite_filename, opt_action.output_dir_set);
- writeln("remove(", pth_sqlite.sqlite_file, ")");
- try {
- remove(pth_sqlite.sqlite_file);
- } catch (FileException ex) {
- // handle error
+ string db_filename = (opt_action.sqlite_filename.length > 0)
+ ? opt_action.sqlite_filename
+ : (config.conf.w_srv_db_sqlite.length > 0)
+ ? config.conf.w_srv_db_sqlite
+ : "";
+ string output_path = (opt_action.output_dir_set.length > 0)
+ ? opt_action.output_dir_set
+ : (config.conf.output_path.length > 0)
+ ? config.conf.output_path
+ : "";
+ if (db_filename.length > 0 && output_path.length > 0) {
+ auto pth_sqlite = spinePathsSQLite!()(db_filename, output_path);
+ writeln("remove(", pth_sqlite.sqlite_file, ")");
+ try {
+ remove(pth_sqlite.sqlite_file);
+ } catch (FileException ex) {
+ // handle error
+ }
+ } else {
+ writeln("must provide db name & output root path either on the command line or in configuration file");
+ writeln("db name: ", db_filename);
+ writeln("output root path (path less /sqlite which is added: ", config.conf.output_path);
}
}
}
@@ -605,9 +640,9 @@ string inline_links(M,O)(
}
auto pth_html = spinePathsHTML!()(doc_matters.output_path, doc_matters.src.language);
if (_xml_type == "seg") {
- foreach (m; _txt.match(rgx.inline_link_seg_and_hash)) {
- if (m.captures["segname"] in doc_matters.has.tag_associations) {
- if (m.captures["segname"] == doc_matters.has.tag_associations[(m.captures["segname"])]["seg_lv4"]) {
+ foreach (m; _txt.matchAll(rgx.inline_link_seg_and_hash)) {
+ if (m.captures["hash"] in doc_matters.has.tag_associations) {
+ if (m.captures["hash"] == doc_matters.has.tag_associations[(m.captures["hash"])]["seg_lv4"]) {
_txt = _txt.replaceFirst(
rgx.inline_link_seg_and_hash,
"┥$1┝┤"
@@ -624,9 +659,9 @@ string inline_links(M,O)(
~ "/"
~ doc_matters.src.filename_base
~ "/"
- ~ doc_matters.has.tag_associations[(m.captures["segname"])]["seg_lv4"]
+ ~ doc_matters.has.tag_associations[(m.captures["hash"])]["seg_lv4"]
~ ".html"
- ~ "#" ~ "$3"
+ ~ "#" ~ m.captures["hash"]
~ "├"
);
}
@@ -634,9 +669,9 @@ string inline_links(M,O)(
if (!(doc_matters.opt.action.quiet)) {
writeln(
"WARNING on internal document links, anchor to link <<"
- ~ m.captures["segname"]
+ ~ m.captures["hash"]
~ ">> not found in document, "
- ~ "anchor: " ~ m.captures["segname"]
+ ~ "anchor: " ~ m.captures["hash"]
~ " document: " ~ doc_matters.src.filename
);
}
@@ -650,7 +685,7 @@ string inline_links(M,O)(
~ doc_matters.conf_make_meta.conf.w_srv_data_root_url_html
~ "/"
~ pth_html.tail_fn_scroll(doc_matters.src.filename)
- ~ "#" ~ "$3"
+ ~ "#" ~ m.captures["hash"]
~ "├"
);
}
@@ -1869,7 +1904,6 @@ writeln(doc_matters.conf_make_meta.meta.classify_topic_register_arr);
#+NAME: sqlite_formatted_insertions_topic_register
#+BEGIN_SRC d
if (doc_matters.conf_make_meta.meta.classify_topic_register_arr.length > 0) {
-
string _insert_topics;
foreach (topic; doc_matters.conf_make_meta.meta.classify_topic_register_arr) {
string[] subject_tree = topic.split(mkup.sep);
diff --git a/org/out_xmls.org b/org/out_xmls.org
index da5b640..acd2b79 100644
--- a/org/out_xmls.org
+++ b/org/out_xmls.org
@@ -499,10 +499,10 @@ import
if (_xml_type == "seg" || _xml_type == "epub") {
seg_lvs = (_xml_type == "epub") ? "seg_lv1_to_4" : "seg_lv4";
foreach (m; _txt.match(rgx.inline_link_hash)) {
- if (m.captures[3] in doc_matters.has.tag_associations) {
+ if (m.captures["hash"] in doc_matters.has.tag_associations) {
if (
- m.captures[3]
- == doc_matters.has.tag_associations[(m.captures[3])][seg_lvs]
+ m.captures["hash"]
+ == doc_matters.has.tag_associations[(m.captures["hash"])][seg_lvs]
) {
_txt = _txt.replaceFirst(
rgx.inline_link_hash,
@@ -512,7 +512,7 @@ import
_txt = _txt.replaceFirst(
rgx.inline_link_hash,
"┥$1┝┤"
- ~ doc_matters.has.tag_associations[(m.captures[3])][seg_lvs]
+ ~ doc_matters.has.tag_associations[(m.captures["hash"])][seg_lvs]
~ _suffix ~ "#" ~ "$3"
~ "├"
);
@@ -521,9 +521,9 @@ import
if (!(doc_matters.opt.action.quiet)) {
writeln(
"WARNING on internal document links, anchor to link <<"
- ~ m.captures[3]
+ ~ m.captures["hash"]
~ ">> not found in document, "
- ~ "anchor: " ~ m.captures[3]
+ ~ "anchor: " ~ m.captures["hash"]
~ " document: " ~ doc_matters.src.filename
);
}
diff --git a/org/output_hub.org b/org/output_hub.org
index 560cc2e..ba39e2e 100644
--- a/org/output_hub.org
+++ b/org/output_hub.org
@@ -58,7 +58,7 @@ template outputHub() {
}
template outputHubOp() {
<<output_imports>>
- @system void outputHubOp(E,O,M)(E env, O opt_action, M make_and_meta_struct) {
+ @system void outputHubOp(E,O,C)(E env, O opt_action, C config) {
mixin spineRgxOut;
static auto rgx = RgxO();
<<output_options_op>>
@@ -226,7 +226,7 @@ if ((opt_action.sqlite_db_drop)) {
writeln("sqlite drop db...");
}
import doc_reform.io_out.sqlite;
- SQLiteDbDrop!()(opt_action);
+ SQLiteDbDrop!()(opt_action, config);
if ((opt_action.very_verbose)) {
writeln("sqlite drop db done");
}
@@ -243,7 +243,7 @@ if ((opt_action.sqlite_db_create)) {
writeln("sqlite create table...");
}
import doc_reform.io_out.sqlite;
- SQLiteTablesCreate!()(env, opt_action);
+ SQLiteTablesCreate!()(env, opt_action, config);
if ((opt_action.very_verbose)) {
writeln("sqlite create table done");
}
@@ -257,20 +257,20 @@ if ((opt_action.sqlite_db_create)) {
if ((opt_action.cgi_search_form_codegen)) {
if ((opt_action.verbose)) {
string _sqlite_db_fn = (opt_action.sqlite_filename.empty)
- ? make_and_meta_struct.conf.w_srv_db_sqlite
+ ? config.conf.w_srv_db_sqlite
: opt_action.sqlite_filename;
string _cgi_search_script = (opt_action.cgi_sqlite_search_filename.empty)
- ? make_and_meta_struct.conf.w_srv_cgi_search_script
+ ? config.conf.w_srv_cgi_search_script
: opt_action.cgi_sqlite_search_filename;
string _cgi_search_script_raw_fn_d = (opt_action.cgi_sqlite_search_filename_d.empty)
- ? make_and_meta_struct.conf.w_srv_cgi_search_script_raw_fn_d
+ ? config.conf.w_srv_cgi_search_script_raw_fn_d
: opt_action.cgi_sqlite_search_filename_d;
auto pth_sqlite_cgi = spinePathsSQLiteCGI!()(_cgi_search_script_raw_fn_d, _cgi_search_script, opt_action.output_dir_set);
writeln("sqlite cgi search form...");
writeln(" ", pth_sqlite_cgi.search_form_path_out);
}
import doc_reform.io_out.cgi_sqlite_search_form;
- CGIsearchSQLite!()(env, opt_action, make_and_meta_struct);
+ CGIsearchSQLite!()(env, opt_action, config);
if ((opt_action.very_verbose)) {
writeln("sqlite cgi search form done");
}
diff --git a/org/output_show.org b/org/output_show.org
index 3a1832b..0030b63 100644
--- a/org/output_show.org
+++ b/org/output_show.org
@@ -72,7 +72,7 @@ foreach (k; doc_matters.has.keys_seq.seg) {
#+NAME: meta_metadoc_show_summary_document
#+BEGIN_SRC d
writefln(
- "%s\n\"%s\", %s\n%s [%s]\n%s\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%s",
+ "%s\n\"%s\", %s\n%s [%s]\n%s\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\n%s",
markup.repeat_character_by_number_provided("-", char_repeat_number),
doc_matters.conf_make_meta.meta.title_full,
doc_matters.conf_make_meta.meta.creator_author,
@@ -131,10 +131,97 @@ writefln(
* show config
** _module template_ show config
+*** _show site config
--show-config (show config)
#+BEGIN_SRC d :tangle "../src/doc_reform/meta/metadoc_show_config.d"
module doc_reform.meta.metadoc_show_config;
+template spineShowSiteConfig() {
+ @safe void spineShowSiteConfig(O,T)(
+ O opt_action,
+ T config,
+ ) {
+ <<metadoc_show_summary_imports>>
+ <<metadoc_show_imports_shared>>
+ mixin InternalMarkup;
+ auto markup = InlineMarkup();
+ auto char_repeat_number = 66;
+ if (opt_action.show_config) {
+ <<meta_metadoc_show_site_config>>
+ }
+ }
+}
+#+END_SRC
+
+*** show site config
+
+#+NAME: meta_metadoc_show_site_config
+#+BEGIN_SRC d
+writefln(
+ "\n%s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n",
+ markup.repeat_character_by_number_provided("-", char_repeat_number),
+ "- webserv domain name:",
+ config.conf.w_srv_domain,
+ "- webserv doc root (part):",
+ config.conf.w_srv_data_root_part,
+ "- webserv doc path:",
+ config.conf.w_srv_data_root_path,
+ "- webserv images (location):",
+ config.conf.w_srv_images_root_part,
+ "- webserv doc root url:",
+ config.conf.w_srv_data_root_url,
+ "- webserv cgi domain (host):",
+ config.conf.w_srv_cgi_domain,
+ "- webserv cgi host path:",
+ config.conf.w_srv_cgi_bin_path,
+ "- webserv cgi host (part):",
+ config.conf.w_srv_cgi_bin_part,
+ "- webserv cgi search script:",
+ config.conf.w_srv_cgi_search_script,
+ "- webserv cgi search script in d:",
+ config.conf.w_srv_cgi_search_script_raw_fn_d,
+ "- webserv cgi port:",
+ config.conf.w_srv_cgi_port,
+ "- webserv cgi user:",
+ config.conf.w_srv_cgi_user,
+ "- webserv cgi url:",
+ config.conf.w_srv_cgi_bin_url,
+ "- webserv cgi action:",
+ config.conf.w_srv_cgi_action,
+ // "- webserv cgi file links:",
+ // config.conf.w_srv_cgi_file_links,
+ "- webserv sqlite db:",
+ config.conf.w_srv_db_sqlite,
+ "- output path:",
+ config.conf.output_path,
+ "- processing concordance max:",
+ config.conf.processing_concord_max,
+ // "- flag act0:",
+ // config.conf.flag_act0,
+ "- default papersize:",
+ config.conf.default_papersize,
+ "- default text wrap:",
+ config.conf.default_text_wrap,
+ "- default emphasis markup symbol:",
+ config.conf.default_emphasis,
+ "- default language:",
+ config.conf.default_language,
+ "- default hash digest:",
+ config.conf.default_digest,
+ "- search flag:",
+ config.conf.search_flag,
+ "- search action:",
+ config.conf.search_action,
+ "- search db:",
+ config.conf.search_db,
+ "- search title:",
+ config.conf.search_title,
+);
+#+END_SRC
+
+*** show (per document) config
+
+#+BEGIN_SRC d :tangle "../src/doc_reform/meta/metadoc_show_config.d"
template spineShowConfig() {
@safe void spineShowConfig(T)(
T doc_matters,
@@ -160,7 +247,7 @@ template spineShowConfig() {
#+NAME: meta_metadoc_show_config
#+BEGIN_SRC d
writefln(
- "%s\n\"%s\", %s\n%s\n%s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n",
+ "%s\n\"%s\", %s\n%s\n%s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n",
markup.repeat_character_by_number_provided("-", char_repeat_number),
doc_matters.conf_make_meta.meta.title_full,
doc_matters.conf_make_meta.meta.creator_author,
@@ -202,26 +289,8 @@ writefln(
doc_matters.conf_make_meta.conf.output_path,
"- processing concordance max:",
doc_matters.conf_make_meta.conf.processing_concord_max,
- "- flag act0:",
- doc_matters.conf_make_meta.conf.flag_act0,
- "- flag act1:",
- doc_matters.conf_make_meta.conf.flag_act1,
- "- flag act2:",
- doc_matters.conf_make_meta.conf.flag_act2,
- "- flag act3:",
- doc_matters.conf_make_meta.conf.flag_act3,
- "- flag act4:",
- doc_matters.conf_make_meta.conf.flag_act4,
- "- flag act5:",
- doc_matters.conf_make_meta.conf.flag_act5,
- "- flag act6:",
- doc_matters.conf_make_meta.conf.flag_act6,
- "- flag act7:",
- doc_matters.conf_make_meta.conf.flag_act7,
- "- flag act8:",
- doc_matters.conf_make_meta.conf.flag_act8,
- "- flag act9:",
- doc_matters.conf_make_meta.conf.flag_act9,
+ // "- flag act0:",
+ // doc_matters.conf_make_meta.conf.flag_act0,
"- default papersize:",
doc_matters.conf_make_meta.conf.default_papersize,
"- default text wrap:",
@@ -274,7 +343,7 @@ template spineShowMake() {
#+NAME: meta_metadoc_show_make
#+BEGIN_SRC d
writefln(
- "%s\n\"%s\", %s\n%s\n%s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n",
+ "%s\n\"%s\", %s\n%s\n%s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n",
markup.repeat_character_by_number_provided("-", char_repeat_number),
doc_matters.conf_make_meta.meta.title_full,
doc_matters.conf_make_meta.meta.creator_author,
@@ -313,7 +382,6 @@ writefln(
);
#+END_SRC
-
* show metadata
** _module template_ show metadata
--show-metadata (show document metadata)
@@ -345,7 +413,7 @@ template spineShowMetaData() {
#+NAME: meta_metadoc_show_metadata
#+BEGIN_SRC d
writefln(
- "%s\n\"%s\", %s\n%s\n%s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n",
+ "%s\n\"%s\", %s\n%s\n%s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n",
markup.repeat_character_by_number_provided("-", char_repeat_number),
doc_matters.conf_make_meta.meta.title_full,
doc_matters.conf_make_meta.meta.creator_author,
diff --git a/org/spine.org b/org/spine.org
index 253720f..f530703 100644
--- a/org/spine.org
+++ b/org/spine.org
@@ -98,7 +98,6 @@ string program_name = "spine";
<<spine_mixin>>
<<spine_init>>
<<spine_args>>
- <<spine_do_selected>>
if (_manifests.length > 1 // _manifests[0] initialized dummy element
&& _opt_action.abstraction) {
if (_opt_action.parallelise) { // see else
@@ -425,7 +424,9 @@ auto helpInfo = getopt(args,
"abstraction", "--abstraction document abstraction ", &opts["abstraction"],
"assert", "--assert set optional assertions on", &opts["assertions"],
"cgi-search-form-codegen", "--cgi-search-form-codegen pre-compiled d code search of specified db", &opts["cgi-search-form-codegen"],
+ "cgi-sqlite-search-filename", "--cgi-sqlite-search-filename=[filename]", &settings["cgi-sqlite-search-filename"],
"concordance", "--concordance file for document", &opts["concordance"],
+ "config", "--config=/path/to/config/file/including/filename", &settings["config"],
"dark", "--dark alternative dark theme", &opts["dark"],
"debug", "--debug", &opts["debug"],
"digest", "--digest hash digest for each object", &opts["digest"],
@@ -438,6 +439,7 @@ auto helpInfo = getopt(args,
"html-link-search", "--html-link-search html embedded search submission", &opts["html-link-search"],
"html-seg", "--html-seg process html output", &opts["html-seg"],
"html-scroll", "--html-seg process html output", &opts["html-scroll"],
+ "lang", "--lang=[lang code e.g. =en or =en,es]", &settings["lang"],
"latex", "--latex output for pdfs", &opts["latex"],
"latex-color-links", "--latex-color-links mono or color links for pdfs", &opts["latex-color-links"],
"light", "--light default light theme", &opts["light"],
@@ -446,8 +448,9 @@ auto helpInfo = getopt(args,
"ocn-off", "--ocn-off object cite numbers", &opts["ocn-off"],
"odf", "--odf open document format text (--odt)", &opts["odf"],
"odt", "--odt open document format text", &opts["odt"],
+ "output", "--output=/path/to/output/dir specify where to place output", &settings["output"],
"parallel", "--parallel parallelisation", &opts["parallel"],
- "parallel-subprocesses", "--parallel-subprocesses nested parallelisation", &opts["parallel-subprocesses"],
+ "parallel-subprocesses", "--parallel-subprocesses nested parallelisation", &opts["parallel-subprocesses"],
"quiet|q", "--quiet output to terminal", &opts["quiet"],
"pdf", "--pdf latex output for pdfs", &opts["pdf"],
"pdf-color-links", "--pdf-color-links mono or color links for pdfs", &opts["pdf-color-links"],
@@ -477,16 +480,12 @@ auto helpInfo = getopt(args,
"section-biblio", "--section-biblio process document biblio (default)", &opts["section_biblio"],
"section-bookindex", "--section-bookindex process document bookindex (default)", &opts["section_bookindex"],
"section-blurb", "--section-blurb process document blurb (default)", &opts["section_blurb"],
+ "sqlite-db-filename", "--sqlite-db-filename=[filename].sql.db", &settings["sqlite-filename"],
"backmatter", "--section-backmatter process document backmatter (default)", &opts["backmatter"],
"skip-output", "--skip-output", &opts["skip-output"],
"theme-dark", "--theme-dark alternative dark theme", &opts["theme-dark"],
"theme-light", "--theme-light default light theme", &opts["theme-light"],
"workon", "--workon (reserved for some matters under development & testing)", &opts["workon"],
- "cgi-sqlite-search-filename", "--cgi-sqlite-search-filename=[filename]", &settings["cgi-sqlite-search-filename"],
- "config", "--config=/path/to/config/file/including/filename", &settings["config"],
- "output", "--output=/path/to/output/dir specify where to place output", &settings["output"],
- "sqlite-db-filename", "--sqlite-db-filename=[filename].sql.db", &settings["sqlite-db-filename"],
- "lang", "--lang=[lang code e.g. =en or =en,es]", &settings["lang"],
);
if (helpInfo.helpWanted) {
defaultGetoptPrinter("Some information about the program.", helpInfo.options);
@@ -753,6 +752,28 @@ struct OptActions {
|| sqlite_update
) ? true : false;
}
+ @trusted bool require_processing_files() {
+ return (
+ opts["abstraction"]
+ || epub
+ || html
+ || html_seg
+ || html_scroll
+ || latex
+ || odt
+ || manifest
+ || pod
+ || show_make
+ || show_metadata
+ || show_summary
+ || source
+ || source_or_pod
+ || sqlite_discrete
+ || sqlite_update
+ || text
+ || xhtml
+ ) ? true : false;
+ }
@trusted bool meta_processing_general() {
return (
opts["abstraction"]
@@ -811,39 +832,71 @@ auto _env = [
];
#+END_SRC
-*** opt actions on processing files & file paths (pods, src etc.)
+*** get/read site config
#+NAME: spine_args
#+BEGIN_SRC d
auto _manifested = PathMatters!()(_opt_action, _env, "");
auto _manifests = [ _manifested ];
-auto _conf_file_details = ConfigFilePaths!()(_manifested, _env, _opt_action.config_path_set);
-ConfComposite _make_and_meta_struct;
-if (_opt_action.config_path_set.empty) {
+auto _conf_file_details = configFilePaths!()(_manifested, _env, _opt_action.config_path_set);
+ConfComposite _config;
+if (
+ _opt_action.require_processing_files
+ && _opt_action.config_path_set.empty
+) {
foreach(arg; args[1..$]) {
if (!(arg.match(rgx.flag_action))) { /+ cli markup source path +/ // get first input markup source file names for processing
_manifested = PathMatters!()(_opt_action, _env, arg);
{ /+ local site config +/
- _conf_file_details = ConfigFilePaths!()(_manifested, _env, _opt_action.config_path_set);
- auto _config_local_site_struct = readConfigSite!()(_conf_file_details);
+ _conf_file_details = configFilePaths!()(_manifested, _env, _opt_action.config_path_set);
+ auto _config_local_site_struct = readConfigSite!()(_conf_file_details, _opt_action);
import doc_reform.meta.conf_make_meta_yaml;
- _make_and_meta_struct = _config_local_site_struct.configParseYAMLreturnSpineStruct!()(_make_and_meta_struct, _manifested); // - get local site config
+ _config = _config_local_site_struct.configParseYAMLreturnSpineStruct!()(_config, _manifested); // - get local site config
break;
}
}
}
-} else {
- { /+ local site config +/
- auto _config_local_site_struct = readConfigSite!()(_conf_file_details);
- import doc_reform.meta.conf_make_meta_yaml;
- _make_and_meta_struct = _config_local_site_struct.configParseYAMLreturnSpineStruct!()(_make_and_meta_struct, _manifested); // - get local site config
+} else { /+ local site config +/
+ auto _config_local_site_struct = readConfigSite!()(_conf_file_details, _opt_action);
+ import doc_reform.meta.conf_make_meta_yaml;
+ _config = _config_local_site_struct.configParseYAMLreturnSpineStruct!()(_config, _manifested); // - get local site config
+}
+if (_opt_action.show_config) {
+ import doc_reform.meta.metadoc_show_config;
+ spineShowSiteConfig!()(_opt_action, _config);
+}
+#+END_SRC
+
+*** use config for operations that do not require file processing
+
+#+NAME: spine_args
+#+BEGIN_SRC d
+if (!(_opt_action.skip_output)) {
+ if ((_opt_action.debug_do)
+ || (_opt_action.very_verbose)
+ ) {
+ writeln("step0 commence → (without processing files)");
+ }
+ outputHubOp!()(_env, _opt_action, _config);
+ if ((_opt_action.debug_do)
+ || (_opt_action.very_verbose)
+ ) {
+ writeln("- step0 complete");
}
}
-foreach(arg; args[1..$]) { // refigure how args relate to _opt_action, need path from _opt_action or args early _manifested too late, work on (search for PathMatters and .harvest,
- auto _manifest_start = PodManifest!()(_opt_action, arg);
+#+END_SRC
+
+*** opt action on processing files (loop args)
+
+#+NAME: spine_args
+#+BEGIN_SRC d
+ConfComposite _make_and_meta_struct = _config;
+destroy(_config);
+foreach(arg; args[1..$]) {
if (arg.match(rgx.flag_action)) { /+ cli instruction, flag do +/
flag_action ~= " " ~ arg; // flags not taken by getopt
- } else { /+ cli, assumed to be path to source files +/
+ } else if (_opt_action.require_processing_files) { /+ cli, assumed to be path to source files +/
+ auto _manifest_start = PodManifest!()(_opt_action, arg);
if ( /+ pod files +/
!(arg.match(rgx.src_pth_sst_or_ssm))
&& _manifest_start.pod_manifest_file_with_path
@@ -1005,25 +1058,6 @@ foreach(arg; args[1..$]) { // refigure how args relate to _opt_action, need path
}
#+END_SRC
-*** opt actions independent of processing files (no files no processing loop)
-
-#+NAME: spine_do_selected
-#+BEGIN_SRC d
-if (!(_opt_action.skip_output)) {
- if ((_opt_action.debug_do)
- || (_opt_action.very_verbose)
- ) {
- writeln("step0 commence → (without processing files)");
- }
- outputHubOp!()(_env, _opt_action, _make_and_meta_struct);
- if ((_opt_action.debug_do)
- || (_opt_action.very_verbose)
- ) {
- writeln("- step0 complete");
- }
-}
-#+END_SRC
-
** _2. processing: (loop each file)_ [+2] :loop:files:
*** scope (loop) :scope:
@@ -1100,8 +1134,7 @@ if (doc_matters.opt.action.verbose
#+NAME: spine_each_file_do_debugs_checkdoc
#+BEGIN_SRC d
/+ ↓ debugs +/
-if (doc_matters.opt.action.show_metadata
-) {
+if (doc_matters.opt.action.show_metadata) {
import doc_reform.meta.metadoc_show_metadata;
spineShowMetaData!()(doc_matters);
}
@@ -1113,8 +1146,7 @@ if (doc_matters.opt.action.show_metadata
#+NAME: spine_each_file_do_debugs_checkdoc
#+BEGIN_SRC d
/+ ↓ debugs +/
-if (doc_matters.opt.action.show_make
-) {
+if (doc_matters.opt.action.show_make) {
import doc_reform.meta.metadoc_show_make;
spineShowMake!()(doc_matters);
}
@@ -1126,8 +1158,7 @@ if (doc_matters.opt.action.show_make
#+NAME: spine_each_file_do_debugs_checkdoc
#+BEGIN_SRC d
/+ ↓ debugs +/
-if (doc_matters.opt.action.show_config
-) {
+if (doc_matters.opt.action.show_config) {
import doc_reform.meta.metadoc_show_config;
spineShowConfig!()(doc_matters);
}
@@ -1504,13 +1535,31 @@ struct DocumentMatters {
@safe auto sqlite() {
struct SQLite_ {
@safe string filename() {
- return _opt_action.sqlite_filename;
+ string _fn = "";
+ if (_opt_action.sqlite_filename.length > 0) {
+ _fn = _opt_action.sqlite_filename;
+ } else if (_make_and_meta_struct.conf.w_srv_db_sqlite.length > 0) {
+ _fn = _make_and_meta_struct.conf.w_srv_db_sqlite;
+ }
+ return _fn;
}
@safe string cgi_filename() {
- return _opt_action.cgi_sqlite_search_filename;
+ string _fn = "";
+ if (_opt_action.cgi_sqlite_search_filename.length > 0) {
+ _fn = _opt_action.cgi_sqlite_search_filename;
+ } else if (_make_and_meta_struct.conf.w_srv_cgi_search_script.length > 0) {
+ _fn = _make_and_meta_struct.conf.w_srv_cgi_search_script;
+ }
+ return _fn;
}
@safe string cgi_filename_d() {
- return _opt_action.cgi_sqlite_search_filename_d;
+ string _fn = "";
+ if (_opt_action.cgi_sqlite_search_filename_d.length > 0) {
+ _fn = _opt_action.cgi_sqlite_search_filename_d;
+ } else if (_make_and_meta_struct.conf.w_srv_cgi_search_script_raw_fn_d.length > 0) {
+ _fn = _make_and_meta_struct.conf.w_srv_cgi_search_script_raw_fn_d;
+ }
+ return _fn;
}
}
return SQLite_();
diff --git a/src/doc_reform/io_in/paths_source.d b/src/doc_reform/io_in/paths_source.d
index 0cf0478..432b484 100644
--- a/src/doc_reform/io_in/paths_source.d
+++ b/src/doc_reform/io_in/paths_source.d
@@ -18,7 +18,7 @@ template PodManifest() {
mixin spineRgxIn;
static auto rgx = RgxI();
@safe auto PodManifest(O)(
- O _opt_actions,
+ O _opt_action,
string _pth=""
) {
struct ManifestFile_ {
@@ -40,10 +40,10 @@ template PodManifest() {
_manifest_path = m.captures["podpath"];
}
} else {
- if (_opt_actions.verbose || _opt_actions.very_verbose || _opt_actions.debug_do) {
+ if (_opt_action.verbose || _opt_action.very_verbose || _opt_action.debug_do) {
writeln("WARNING, src is not a pod, issue with manifest_path: ", _pth); // remove? unless can distinguish pod
}
- _manifest_path = null; // _manifest_path = "";
+ _manifest_path = "";
}
return _manifest_path;
}
@@ -73,13 +73,13 @@ template PathMatters() {
static auto rgx = RgxI();
static auto mkup = InlineMarkup();
@safe auto PathMatters(O,E)(
- O _opt_actions,
+ O _opt_action,
E _env,
string _pth,
string _fns = "",
char[][] _manifest_fn_list = [[]],
) {
- @safe auto _manifested = PodManifest!()(_opt_actions, _pth);
+ @safe auto _manifested = PodManifest!()(_opt_action, _pth);
struct ManifestMatters_ {
auto env() {
auto _env = _env;
@@ -96,7 +96,7 @@ template PathMatters() {
@safe auto opt() {
struct Opt_ {
auto action() {
- return _opt_actions;
+ return _opt_action;
}
}
return Opt_();
@@ -155,7 +155,7 @@ template PathMatters() {
}
@safe auto src() {
string _fns = _fns; // required here by dmd & not by ldc (for D:2078)
- auto _opt_actions = _opt_actions;
+ auto _opt_action = _opt_action;
auto _env = _env;
struct SRC_ {
@safe bool is_pod() {
@@ -270,7 +270,7 @@ template PathMatters() {
assert(_dir == absolute_path_to_src
.match(rgx.src_base_parent_dir_name).captures["dir"]);
}
- if (_opt_actions.debug_do) {
+ if (_opt_action.debug_do) {
writeln("--> (base_dir) ", _dir);
}
return _dir;
@@ -302,7 +302,7 @@ template PathMatters() {
} else {
_dir = ((path_and_fn.chainPath("../../")).asNormalizedPath).array;
}
- if (_opt_actions.debug_do) {
+ if (_opt_action.debug_do) {
writeln("--> (base_dir_path) ", _dir);
}
return _dir;
@@ -348,7 +348,7 @@ template PathMatters() {
} else {
_dir = (absolute_path_to_src).match(rgx.src_base_parent_dir_name).captures["dir"];
}
- if (_opt_actions.debug_do) {
+ if (_opt_action.debug_do) {
writeln("--> (base_parent_dir) ", _dir);
}
return _dir;
@@ -384,10 +384,10 @@ template PathMatters() {
struct Out_ {
@safe auto path() {
auto _output_path = _env["pwd"];
- if ((_opt_actions.output_dir_set.length > 0)
- && isValidPath(_opt_actions.output_dir_set)
+ if ((_opt_action.output_dir_set.length > 0)
+ && isValidPath(_opt_action.output_dir_set)
) {
- _output_path = ((_opt_actions.output_dir_set).asNormalizedPath).array;
+ _output_path = ((_opt_action.output_dir_set).asNormalizedPath).array;
if (!exists(_output_path)) {
try {
_output_path.mkdirRecurse;
@@ -409,10 +409,10 @@ template PathMatters() {
return ManifestMatters_();
}
}
-template ConfigFilePaths() {
+template configFilePaths() {
mixin spineRgxIn;
static auto rgx = RgxI();
- @safe auto ConfigFilePaths(M,E)(
+ @safe auto configFilePaths(M,E)(
M _manifested,
E _env,
string _cli_config_path_set = ""
@@ -465,10 +465,9 @@ template ConfigFilePaths() {
_dr_doc_conf_pwd_d,
];
}
- } else {
- _possible_config_path_locations = [
- _cli_config_path_set
- ];
+ } else if (_cli_config_path_set.isDir) {
+ _possible_config_path_locations = [_cli_config_path_set ];
+ // } else if (_cli_config_path_set.isFile) { // use file, taken care of elsewhere
}
/+ FIX clean up conf paths ↑
(compare pwd to doc path location, and build config path)
@@ -490,10 +489,10 @@ template ConfigFilePaths() {
_possible_config_path_locations = [
_dot_pwd,
_underscore_pwd,
+ _collection_root_a,
+ _collection_root_b,
_dot_home,
"/etc/dr",
- _collection_root_a, // set priority higher?
- _collection_root_b // set priority higher?
];
} else {
/+ config document (& or local site) on filesystem +/
diff --git a/src/doc_reform/io_in/read_config_files.d b/src/doc_reform/io_in/read_config_files.d
index 69c2f55..9180c20 100644
--- a/src/doc_reform/io_in/read_config_files.d
+++ b/src/doc_reform/io_in/read_config_files.d
@@ -12,7 +12,7 @@ import
doc_reform.meta.rgx;
template readConfigSite() {
- @system final auto readConfigSite(C)(C _conf_file_details) {
+ @system final auto readConfigSite(C,O)(C _conf_file_details, O _opt_action) {
mixin spineRgxIn;
static auto rgx = RgxI();
string conf_filename = "NONE";
@@ -70,6 +70,9 @@ webserv:
try {
if (exists(conf_file)) {
if (conf_file.getLinkAttributes.attrIsFile) {
+ if (_opt_action.verbose || _opt_action.very_verbose || _opt_action.debug_do) {
+ writeln("config file used: \"", conf_file, "\" (cli flag settings override config file's individual settings)");
+ }
config_file_str = conf_file.readText;
break;
}
@@ -93,7 +96,7 @@ webserv:
config_file_str = default_config_file_str;
}
}
- if (config_file_str.length == 0) { /+ create dummy default config file +/
+ if (config_file_str.length == 0) { /+ use dummy default config file +/
writeln("WARNING config file NOT found, default provided");
conf_filename = "VIRTUAL";
config_file_str = default_config_file_str;
@@ -128,7 +131,7 @@ static template readConfigDoc() {
static auto rgx = RgxI();
string config_file_str;
string conf_filename = "NONE";
- auto _conf_file_details = ConfigFilePaths!()(_manifested, _env);
+ auto _conf_file_details = configFilePaths!()(_manifested, _env);
string[] possible_config_path_locations = _conf_file_details.possible_config_path_locations.dr_document_make;
foreach(conf_fn; [_conf_file_details.config_filename_document]) {
foreach(pth; possible_config_path_locations) {
@@ -176,7 +179,7 @@ static template configReadSiteYAML() {
doc_reform.io_in.paths_source;
@safe final YAMLDocument configReadSiteYAML(M,E)(M _manifested, E _env) {
string _configuration = configReadInSiteYAML!()(_manifested, _env);
- auto _conf_file_details = ConfigFilePaths!()(_manifested, _env);
+ auto _conf_file_details = configFilePaths!()(_manifested, _env);
string _conf_yaml_fn = _conf_file_details.config_filename_site;
YAMLDocument _yaml_conf = configYAML!()(_configuration, _conf_yaml_fn);
return _yaml_conf;
@@ -190,7 +193,7 @@ static template configReadDocYAML() {
doc_reform.io_in.paths_source;
@safe final YAMLDocument configReadDocYAML(M,E)(M _manifested, E _env) {
string _configuration = configReadInDocYAML!()(_manifested, _env);
- auto _conf_file_details = ConfigFilePaths!()(_manifested, _env);
+ auto _conf_file_details = configFilePaths!()(_manifested, _env);
string _conf_yaml_fn = _conf_file_details.config_filename_document;
YAMLDocument _yaml_conf = configYAML!()(_configuration, _conf_yaml_fn);
return _yaml_conf;
diff --git a/src/doc_reform/io_out/hub.d b/src/doc_reform/io_out/hub.d
index 50ee897..2220d33 100644
--- a/src/doc_reform/io_out/hub.d
+++ b/src/doc_reform/io_out/hub.d
@@ -115,7 +115,7 @@ template outputHubOp() {
doc_reform.io_out.xmls,
doc_reform.io_out.create_zip_file,
doc_reform.io_out.paths_output;
- @system void outputHubOp(E,O,M)(E env, O opt_action, M make_and_meta_struct) {
+ @system void outputHubOp(E,O,C)(E env, O opt_action, C config) {
mixin spineRgxOut;
static auto rgx = RgxO();
if ((opt_action.sqlite_db_drop)) {
@@ -123,7 +123,7 @@ template outputHubOp() {
writeln("sqlite drop db...");
}
import doc_reform.io_out.sqlite;
- SQLiteDbDrop!()(opt_action);
+ SQLiteDbDrop!()(opt_action, config);
if ((opt_action.very_verbose)) {
writeln("sqlite drop db done");
}
@@ -134,7 +134,7 @@ template outputHubOp() {
writeln("sqlite create table...");
}
import doc_reform.io_out.sqlite;
- SQLiteTablesCreate!()(env, opt_action);
+ SQLiteTablesCreate!()(env, opt_action, config);
if ((opt_action.very_verbose)) {
writeln("sqlite create table done");
}
@@ -142,20 +142,20 @@ template outputHubOp() {
if ((opt_action.cgi_search_form_codegen)) {
if ((opt_action.verbose)) {
string _sqlite_db_fn = (opt_action.sqlite_filename.empty)
- ? make_and_meta_struct.conf.w_srv_db_sqlite
+ ? config.conf.w_srv_db_sqlite
: opt_action.sqlite_filename;
string _cgi_search_script = (opt_action.cgi_sqlite_search_filename.empty)
- ? make_and_meta_struct.conf.w_srv_cgi_search_script
+ ? config.conf.w_srv_cgi_search_script
: opt_action.cgi_sqlite_search_filename;
string _cgi_search_script_raw_fn_d = (opt_action.cgi_sqlite_search_filename_d.empty)
- ? make_and_meta_struct.conf.w_srv_cgi_search_script_raw_fn_d
+ ? config.conf.w_srv_cgi_search_script_raw_fn_d
: opt_action.cgi_sqlite_search_filename_d;
auto pth_sqlite_cgi = spinePathsSQLiteCGI!()(_cgi_search_script_raw_fn_d, _cgi_search_script, opt_action.output_dir_set);
writeln("sqlite cgi search form...");
writeln(" ", pth_sqlite_cgi.search_form_path_out);
}
import doc_reform.io_out.cgi_sqlite_search_form;
- CGIsearchSQLite!()(env, opt_action, make_and_meta_struct);
+ CGIsearchSQLite!()(env, opt_action, config);
if ((opt_action.very_verbose)) {
writeln("sqlite cgi search form done");
}
diff --git a/src/doc_reform/io_out/rgx.d b/src/doc_reform/io_out/rgx.d
index 5024319..e98f118 100644
--- a/src/doc_reform/io_out/rgx.d
+++ b/src/doc_reform/io_out/rgx.d
@@ -51,8 +51,8 @@ static template spineRgxOut() {
static inline_link_number = ctRegex!(`┥(?P<text>.+?)┝┤(?P<num>[0-9]+)├`, "mg"); // not used
static inline_link_number_only = ctRegex!(`(?P<linked_text>┥.+?┝)┤(?P<num>[0-9]+)├`, "mg");
static inline_link_stow_uri = ctRegex!(`┥(?P<text>.+?)┝┤(?P<link>[^ 0-9#┥┝┤├][^ 0-9┥┝┤├]+)├`, "mg"); // will not stow (stowed links) or object number internal links
- static inline_link_hash = ctRegex!(`┥(?P<text>.+?)┝┤(?P<link>#(?P<segname>\S+?))├`, "mg");
- static inline_link_seg_and_hash = ctRegex!(`┥(?P<text>.+?)┝┤(?P<link>[^/]+?#(?P<segname>.+?))├`, "mg");
+ static inline_link_hash = ctRegex!(`┥(?P<text>.+?)┝┤(?P<link>#(?P<hash>\S+?))├`, "mg");
+ static inline_link_seg_and_hash = ctRegex!(`┥(?P<text>.+?)┝┤(?P<link>(?P<seg>[^/#├]*)#(?P<hash>.+?))├`, "mg");
static inline_link_clean = ctRegex!(`┤(?:.+?)├|[┥┝]`, "mg");
static inline_link_toc_to_backmatter = ctRegex!(`┤#(?P<link>endnotes|bibliography|bookindex|glossary|blurb)├`, "mg");
static url = ctRegex!(`https?://`, "mg");
diff --git a/src/doc_reform/io_out/sqlite.d b/src/doc_reform/io_out/sqlite.d
index 392d8b0..99a6b5d 100644
--- a/src/doc_reform/io_out/sqlite.d
+++ b/src/doc_reform/io_out/sqlite.d
@@ -301,9 +301,9 @@ template SQLiteFormatAndLoadObject() {
}
auto pth_html = spinePathsHTML!()(doc_matters.output_path, doc_matters.src.language);
if (_xml_type == "seg") {
- foreach (m; _txt.match(rgx.inline_link_seg_and_hash)) {
- if (m.captures["segname"] in doc_matters.has.tag_associations) {
- if (m.captures["segname"] == doc_matters.has.tag_associations[(m.captures["segname"])]["seg_lv4"]) {
+ foreach (m; _txt.matchAll(rgx.inline_link_seg_and_hash)) {
+ if (m.captures["hash"] in doc_matters.has.tag_associations) {
+ if (m.captures["hash"] == doc_matters.has.tag_associations[(m.captures["hash"])]["seg_lv4"]) {
_txt = _txt.replaceFirst(
rgx.inline_link_seg_and_hash,
"┥$1┝┤"
@@ -320,9 +320,9 @@ template SQLiteFormatAndLoadObject() {
~ "/"
~ doc_matters.src.filename_base
~ "/"
- ~ doc_matters.has.tag_associations[(m.captures["segname"])]["seg_lv4"]
+ ~ doc_matters.has.tag_associations[(m.captures["hash"])]["seg_lv4"]
~ ".html"
- ~ "#" ~ "$3"
+ ~ "#" ~ m.captures["hash"]
~ "├"
);
}
@@ -330,9 +330,9 @@ template SQLiteFormatAndLoadObject() {
if (!(doc_matters.opt.action.quiet)) {
writeln(
"WARNING on internal document links, anchor to link <<"
- ~ m.captures["segname"]
+ ~ m.captures["hash"]
~ ">> not found in document, "
- ~ "anchor: " ~ m.captures["segname"]
+ ~ "anchor: " ~ m.captures["hash"]
~ " document: " ~ doc_matters.src.filename
);
}
@@ -346,7 +346,7 @@ template SQLiteFormatAndLoadObject() {
~ doc_matters.conf_make_meta.conf.w_srv_data_root_url_html
~ "/"
~ pth_html.tail_fn_scroll(doc_matters.src.filename)
- ~ "#" ~ "$3"
+ ~ "#" ~ m.captures["hash"]
~ "├"
);
}
@@ -1143,7 +1143,6 @@ template SQLiteInsertMetadata() {
SQLinsertDelimiter!()(doc_matters.conf_make_meta.conf.w_srv_data_root_url_html)
);
if (doc_matters.conf_make_meta.meta.classify_topic_register_arr.length > 0) {
-
string _insert_topics;
foreach (topic; doc_matters.conf_make_meta.meta.classify_topic_register_arr) {
string[] subject_tree = topic.split(mkup.sep);
@@ -1386,7 +1385,7 @@ template SQLiteInsertDocObjectsLoop() {
}
}
template SQLiteTablesCreate() {
- void SQLiteTablesCreate(E,O)(E env, O opt_action) {
+ void SQLiteTablesCreate(E,O,C)(E env, O opt_action, C config) {
import d2sqlite3;
template SQLiteTablesReCreate() {
string SQLiteTablesReCreate()() {
@@ -1545,26 +1544,61 @@ template SQLiteTablesCreate() {
}
if (opt_action.sqlite_db_create) {
string _db_statement;
- auto pth_sqlite = spinePathsSQLite!()(opt_action.sqlite_filename, opt_action.output_dir_set);
- pth_sqlite.base.mkdirRecurse;
- auto db = Database(pth_sqlite.sqlite_file);
- {
- _db_statement ~= SQLiteTablesReCreate!()();
+ string db_filename = (opt_action.sqlite_filename.length > 0)
+ ? opt_action.sqlite_filename
+ : (config.conf.w_srv_db_sqlite.length > 0)
+ ? config.conf.w_srv_db_sqlite
+ : "";
+ string output_path = (opt_action.output_dir_set.length > 0)
+ ? opt_action.output_dir_set
+ : (config.conf.output_path.length > 0)
+ ? config.conf.output_path
+ : "";
+ if (db_filename.length > 0 && output_path.length > 0) {
+ if ((opt_action.verbose)) {
+ writeln("db name & path: ", config.conf.output_path, "/sqlite/", db_filename);
+ }
+ auto pth_sqlite = spinePathsSQLite!()(db_filename, output_path);
+ pth_sqlite.base.mkdirRecurse;
+ auto db = Database(pth_sqlite.sqlite_file);
+ {
+ _db_statement ~= SQLiteTablesReCreate!()();
+ }
+ SQLiteDbRun!()(db, _db_statement, opt_action, "TABLE RE-CREATE");
+ } else {
+ writeln("must provide db name & output root path either on the command line or in configuration file");
+ writeln("db name: ", db_filename);
+ writeln("output root path (path less /sqlite which is added: ", config.conf.output_path);
}
- SQLiteDbRun!()(db, _db_statement, opt_action, "TABLE RE-CREATE");
}
}
}
template SQLiteDbDrop() {
- void SQLiteDbDrop(O)(O opt_action) {
+ void SQLiteDbDrop(O,C)(O opt_action, C config) {
writeln("db drop");
if ((opt_action.sqlite_db_drop)) {
- auto pth_sqlite = spinePathsSQLite!()(opt_action.sqlite_filename, opt_action.output_dir_set);
- writeln("remove(", pth_sqlite.sqlite_file, ")");
- try {
- remove(pth_sqlite.sqlite_file);
- } catch (FileException ex) {
- // handle error
+ string db_filename = (opt_action.sqlite_filename.length > 0)
+ ? opt_action.sqlite_filename
+ : (config.conf.w_srv_db_sqlite.length > 0)
+ ? config.conf.w_srv_db_sqlite
+ : "";
+ string output_path = (opt_action.output_dir_set.length > 0)
+ ? opt_action.output_dir_set
+ : (config.conf.output_path.length > 0)
+ ? config.conf.output_path
+ : "";
+ if (db_filename.length > 0 && output_path.length > 0) {
+ auto pth_sqlite = spinePathsSQLite!()(db_filename, output_path);
+ writeln("remove(", pth_sqlite.sqlite_file, ")");
+ try {
+ remove(pth_sqlite.sqlite_file);
+ } catch (FileException ex) {
+ // handle error
+ }
+ } else {
+ writeln("must provide db name & output root path either on the command line or in configuration file");
+ writeln("db name: ", db_filename);
+ writeln("output root path (path less /sqlite which is added: ", config.conf.output_path);
}
}
}
diff --git a/src/doc_reform/io_out/xmls.d b/src/doc_reform/io_out/xmls.d
index 7649d40..c13d31f 100644
--- a/src/doc_reform/io_out/xmls.d
+++ b/src/doc_reform/io_out/xmls.d
@@ -364,10 +364,10 @@ template outputXHTMLs() {
if (_xml_type == "seg" || _xml_type == "epub") {
seg_lvs = (_xml_type == "epub") ? "seg_lv1_to_4" : "seg_lv4";
foreach (m; _txt.match(rgx.inline_link_hash)) {
- if (m.captures[3] in doc_matters.has.tag_associations) {
+ if (m.captures["hash"] in doc_matters.has.tag_associations) {
if (
- m.captures[3]
- == doc_matters.has.tag_associations[(m.captures[3])][seg_lvs]
+ m.captures["hash"]
+ == doc_matters.has.tag_associations[(m.captures["hash"])][seg_lvs]
) {
_txt = _txt.replaceFirst(
rgx.inline_link_hash,
@@ -377,7 +377,7 @@ template outputXHTMLs() {
_txt = _txt.replaceFirst(
rgx.inline_link_hash,
"┥$1┝┤"
- ~ doc_matters.has.tag_associations[(m.captures[3])][seg_lvs]
+ ~ doc_matters.has.tag_associations[(m.captures["hash"])][seg_lvs]
~ _suffix ~ "#" ~ "$3"
~ "├"
);
@@ -386,9 +386,9 @@ template outputXHTMLs() {
if (!(doc_matters.opt.action.quiet)) {
writeln(
"WARNING on internal document links, anchor to link <<"
- ~ m.captures[3]
+ ~ m.captures["hash"]
~ ">> not found in document, "
- ~ "anchor: " ~ m.captures[3]
+ ~ "anchor: " ~ m.captures["hash"]
~ " document: " ~ doc_matters.src.filename
);
}
diff --git a/src/doc_reform/meta/metadoc.d b/src/doc_reform/meta/metadoc.d
index cf74e23..5c45c96 100644
--- a/src/doc_reform/meta/metadoc.d
+++ b/src/doc_reform/meta/metadoc.d
@@ -184,13 +184,31 @@ template spineAbstraction() {
@safe auto sqlite() {
struct SQLite_ {
@safe string filename() {
- return _opt_action.sqlite_filename;
+ string _fn = "";
+ if (_opt_action.sqlite_filename.length > 0) {
+ _fn = _opt_action.sqlite_filename;
+ } else if (_make_and_meta_struct.conf.w_srv_db_sqlite.length > 0) {
+ _fn = _make_and_meta_struct.conf.w_srv_db_sqlite;
+ }
+ return _fn;
}
@safe string cgi_filename() {
- return _opt_action.cgi_sqlite_search_filename;
+ string _fn = "";
+ if (_opt_action.cgi_sqlite_search_filename.length > 0) {
+ _fn = _opt_action.cgi_sqlite_search_filename;
+ } else if (_make_and_meta_struct.conf.w_srv_cgi_search_script.length > 0) {
+ _fn = _make_and_meta_struct.conf.w_srv_cgi_search_script;
+ }
+ return _fn;
}
@safe string cgi_filename_d() {
- return _opt_action.cgi_sqlite_search_filename_d;
+ string _fn = "";
+ if (_opt_action.cgi_sqlite_search_filename_d.length > 0) {
+ _fn = _opt_action.cgi_sqlite_search_filename_d;
+ } else if (_make_and_meta_struct.conf.w_srv_cgi_search_script_raw_fn_d.length > 0) {
+ _fn = _make_and_meta_struct.conf.w_srv_cgi_search_script_raw_fn_d;
+ }
+ return _fn;
}
}
return SQLite_();
diff --git a/src/doc_reform/meta/metadoc_show_config.d b/src/doc_reform/meta/metadoc_show_config.d
index 630fe0c..c642cb9 100644
--- a/src/doc_reform/meta/metadoc_show_config.d
+++ b/src/doc_reform/meta/metadoc_show_config.d
@@ -1,4 +1,89 @@
module doc_reform.meta.metadoc_show_config;
+template spineShowSiteConfig() {
+ @safe void spineShowSiteConfig(O,T)(
+ O opt_action,
+ T config,
+ ) {
+ import
+ doc_reform.meta.defaults,
+ doc_reform.meta.rgx;
+ import
+ std.array,
+ std.exception,
+ std.regex,
+ std.stdio,
+ std.string,
+ std.typecons,
+ std.uni,
+ std.utf,
+ std.conv : to;
+ mixin InternalMarkup;
+ auto markup = InlineMarkup();
+ auto char_repeat_number = 66;
+ if (opt_action.show_config) {
+ writefln(
+ "\n%s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n",
+ markup.repeat_character_by_number_provided("-", char_repeat_number),
+ "- webserv domain name:",
+ config.conf.w_srv_domain,
+ "- webserv doc root (part):",
+ config.conf.w_srv_data_root_part,
+ "- webserv doc path:",
+ config.conf.w_srv_data_root_path,
+ "- webserv images (location):",
+ config.conf.w_srv_images_root_part,
+ "- webserv doc root url:",
+ config.conf.w_srv_data_root_url,
+ "- webserv cgi domain (host):",
+ config.conf.w_srv_cgi_domain,
+ "- webserv cgi host path:",
+ config.conf.w_srv_cgi_bin_path,
+ "- webserv cgi host (part):",
+ config.conf.w_srv_cgi_bin_part,
+ "- webserv cgi search script:",
+ config.conf.w_srv_cgi_search_script,
+ "- webserv cgi search script in d:",
+ config.conf.w_srv_cgi_search_script_raw_fn_d,
+ "- webserv cgi port:",
+ config.conf.w_srv_cgi_port,
+ "- webserv cgi user:",
+ config.conf.w_srv_cgi_user,
+ "- webserv cgi url:",
+ config.conf.w_srv_cgi_bin_url,
+ "- webserv cgi action:",
+ config.conf.w_srv_cgi_action,
+ // "- webserv cgi file links:",
+ // config.conf.w_srv_cgi_file_links,
+ "- webserv sqlite db:",
+ config.conf.w_srv_db_sqlite,
+ "- output path:",
+ config.conf.output_path,
+ "- processing concordance max:",
+ config.conf.processing_concord_max,
+ // "- flag act0:",
+ // config.conf.flag_act0,
+ "- default papersize:",
+ config.conf.default_papersize,
+ "- default text wrap:",
+ config.conf.default_text_wrap,
+ "- default emphasis markup symbol:",
+ config.conf.default_emphasis,
+ "- default language:",
+ config.conf.default_language,
+ "- default hash digest:",
+ config.conf.default_digest,
+ "- search flag:",
+ config.conf.search_flag,
+ "- search action:",
+ config.conf.search_action,
+ "- search db:",
+ config.conf.search_db,
+ "- search title:",
+ config.conf.search_title,
+ );
+ }
+ }
+}
template spineShowConfig() {
@safe void spineShowConfig(T)(
T doc_matters,
@@ -31,7 +116,7 @@ template spineShowConfig() {
}
if (doc_matters.opt.action.show_config) {
writefln(
- "%s\n\"%s\", %s\n%s\n%s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n",
+ "%s\n\"%s\", %s\n%s\n%s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n",
markup.repeat_character_by_number_provided("-", char_repeat_number),
doc_matters.conf_make_meta.meta.title_full,
doc_matters.conf_make_meta.meta.creator_author,
@@ -73,26 +158,8 @@ template spineShowConfig() {
doc_matters.conf_make_meta.conf.output_path,
"- processing concordance max:",
doc_matters.conf_make_meta.conf.processing_concord_max,
- "- flag act0:",
- doc_matters.conf_make_meta.conf.flag_act0,
- "- flag act1:",
- doc_matters.conf_make_meta.conf.flag_act1,
- "- flag act2:",
- doc_matters.conf_make_meta.conf.flag_act2,
- "- flag act3:",
- doc_matters.conf_make_meta.conf.flag_act3,
- "- flag act4:",
- doc_matters.conf_make_meta.conf.flag_act4,
- "- flag act5:",
- doc_matters.conf_make_meta.conf.flag_act5,
- "- flag act6:",
- doc_matters.conf_make_meta.conf.flag_act6,
- "- flag act7:",
- doc_matters.conf_make_meta.conf.flag_act7,
- "- flag act8:",
- doc_matters.conf_make_meta.conf.flag_act8,
- "- flag act9:",
- doc_matters.conf_make_meta.conf.flag_act9,
+ // "- flag act0:",
+ // doc_matters.conf_make_meta.conf.flag_act0,
"- default papersize:",
doc_matters.conf_make_meta.conf.default_papersize,
"- default text wrap:",
diff --git a/src/doc_reform/meta/metadoc_show_make.d b/src/doc_reform/meta/metadoc_show_make.d
index 854552a..ea533d0 100644
--- a/src/doc_reform/meta/metadoc_show_make.d
+++ b/src/doc_reform/meta/metadoc_show_make.d
@@ -31,7 +31,7 @@ template spineShowMake() {
}
if (doc_matters.opt.action.show_make) {
writefln(
- "%s\n\"%s\", %s\n%s\n%s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n",
+ "%s\n\"%s\", %s\n%s\n%s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n",
markup.repeat_character_by_number_provided("-", char_repeat_number),
doc_matters.conf_make_meta.meta.title_full,
doc_matters.conf_make_meta.meta.creator_author,
diff --git a/src/doc_reform/meta/metadoc_show_metadata.d b/src/doc_reform/meta/metadoc_show_metadata.d
index 05758b6..f7068c3 100644
--- a/src/doc_reform/meta/metadoc_show_metadata.d
+++ b/src/doc_reform/meta/metadoc_show_metadata.d
@@ -31,7 +31,7 @@ template spineShowMetaData() {
}
if (doc_matters.opt.action.show_metadata) {
writefln(
- "%s\n\"%s\", %s\n%s\n%s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n%30-s%10-s\n",
+ "%s\n\"%s\", %s\n%s\n%s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n",
markup.repeat_character_by_number_provided("-", char_repeat_number),
doc_matters.conf_make_meta.meta.title_full,
doc_matters.conf_make_meta.meta.creator_author,
diff --git a/src/doc_reform/meta/metadoc_show_summary.d b/src/doc_reform/meta/metadoc_show_summary.d
index f774a6d..2c2202c 100644
--- a/src/doc_reform/meta/metadoc_show_summary.d
+++ b/src/doc_reform/meta/metadoc_show_summary.d
@@ -52,7 +52,7 @@ template spineMetaDocSummary() {
}
}
writefln(
- "%s\n\"%s\", %s\n%s [%s]\n%s\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%s",
+ "%s\n\"%s\", %s\n%s [%s]\n%s\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\n%s",
markup.repeat_character_by_number_provided("-", char_repeat_number),
doc_matters.conf_make_meta.meta.title_full,
doc_matters.conf_make_meta.meta.creator_author,
diff --git a/src/doc_reform/meta/rgx.d b/src/doc_reform/meta/rgx.d
index d4dd201..a5a153e 100644
--- a/src/doc_reform/meta/rgx.d
+++ b/src/doc_reform/meta/rgx.d
@@ -217,8 +217,8 @@ static template spineRgxIn() {
static inline_link_number = ctRegex!(`┥(?P<text>.+?)┝┤(?P<num>[0-9]+)├`, "mg"); // not used
static inline_link_number_only = ctRegex!(`(?P<linked_text>┥.+?┝)┤(?P<num>[0-9]+)├`, "mg");
static inline_link_stow_uri = ctRegex!(`┥(?P<text>.+?)┝┤(?P<link>[^ 0-9#┥┝┤├][^ 0-9┥┝┤├]+)├`, "mg"); // will not stow (stowed links) or object number internal links
- static inline_link_hash = ctRegex!(`┥(?P<text>.+?)┝┤(?P<link>#(?P<segname>\S+?))├`, "mg");
- static inline_link_seg_and_hash = ctRegex!(`┥(?P<text>.+?)┝┤(?P<link>[^/]+?#(?P<segname>.+?))├`, "mg");
+ static inline_link_hash = ctRegex!(`┥(?P<text>.+?)┝┤(?P<link>#(?P<hash>\S+?))├`, "mg");
+ static inline_link_seg_and_hash = ctRegex!(`┥(?P<text>.+?)┝┤(?P<link>(?P<seg>[^/#├]*)#(?P<hash>.+?))├`, "mg");
static inline_link_clean = ctRegex!(`┤(?:.+?)├|[┥┝]`, "mg");
static inline_link_toc_to_backmatter = ctRegex!(`┤#(?P<link>endnotes|bibliography|bookindex|glossary|blurb)├`, "mg");
static url = ctRegex!(`https?://`, "mg");
diff --git a/src/doc_reform/spine.d b/src/doc_reform/spine.d
index 3a64726..7539149 100755
--- a/src/doc_reform/spine.d
+++ b/src/doc_reform/spine.d
@@ -184,7 +184,9 @@ string program_name = "spine";
"abstraction", "--abstraction document abstraction ", &opts["abstraction"],
"assert", "--assert set optional assertions on", &opts["assertions"],
"cgi-search-form-codegen", "--cgi-search-form-codegen pre-compiled d code search of specified db", &opts["cgi-search-form-codegen"],
+ "cgi-sqlite-search-filename", "--cgi-sqlite-search-filename=[filename]", &settings["cgi-sqlite-search-filename"],
"concordance", "--concordance file for document", &opts["concordance"],
+ "config", "--config=/path/to/config/file/including/filename", &settings["config"],
"dark", "--dark alternative dark theme", &opts["dark"],
"debug", "--debug", &opts["debug"],
"digest", "--digest hash digest for each object", &opts["digest"],
@@ -197,6 +199,7 @@ string program_name = "spine";
"html-link-search", "--html-link-search html embedded search submission", &opts["html-link-search"],
"html-seg", "--html-seg process html output", &opts["html-seg"],
"html-scroll", "--html-seg process html output", &opts["html-scroll"],
+ "lang", "--lang=[lang code e.g. =en or =en,es]", &settings["lang"],
"latex", "--latex output for pdfs", &opts["latex"],
"latex-color-links", "--latex-color-links mono or color links for pdfs", &opts["latex-color-links"],
"light", "--light default light theme", &opts["light"],
@@ -205,8 +208,9 @@ string program_name = "spine";
"ocn-off", "--ocn-off object cite numbers", &opts["ocn-off"],
"odf", "--odf open document format text (--odt)", &opts["odf"],
"odt", "--odt open document format text", &opts["odt"],
+ "output", "--output=/path/to/output/dir specify where to place output", &settings["output"],
"parallel", "--parallel parallelisation", &opts["parallel"],
- "parallel-subprocesses", "--parallel-subprocesses nested parallelisation", &opts["parallel-subprocesses"],
+ "parallel-subprocesses", "--parallel-subprocesses nested parallelisation", &opts["parallel-subprocesses"],
"quiet|q", "--quiet output to terminal", &opts["quiet"],
"pdf", "--pdf latex output for pdfs", &opts["pdf"],
"pdf-color-links", "--pdf-color-links mono or color links for pdfs", &opts["pdf-color-links"],
@@ -236,16 +240,12 @@ string program_name = "spine";
"section-biblio", "--section-biblio process document biblio (default)", &opts["section_biblio"],
"section-bookindex", "--section-bookindex process document bookindex (default)", &opts["section_bookindex"],
"section-blurb", "--section-blurb process document blurb (default)", &opts["section_blurb"],
+ "sqlite-db-filename", "--sqlite-db-filename=[filename].sql.db", &settings["sqlite-filename"],
"backmatter", "--section-backmatter process document backmatter (default)", &opts["backmatter"],
"skip-output", "--skip-output", &opts["skip-output"],
"theme-dark", "--theme-dark alternative dark theme", &opts["theme-dark"],
"theme-light", "--theme-light default light theme", &opts["theme-light"],
"workon", "--workon (reserved for some matters under development & testing)", &opts["workon"],
- "cgi-sqlite-search-filename", "--cgi-sqlite-search-filename=[filename]", &settings["cgi-sqlite-search-filename"],
- "config", "--config=/path/to/config/file/including/filename", &settings["config"],
- "output", "--output=/path/to/output/dir specify where to place output", &settings["output"],
- "sqlite-db-filename", "--sqlite-db-filename=[filename].sql.db", &settings["sqlite-db-filename"],
- "lang", "--lang=[lang code e.g. =en or =en,es]", &settings["lang"],
);
if (helpInfo.helpWanted) {
defaultGetoptPrinter("Some information about the program.", helpInfo.options);
@@ -505,6 +505,28 @@ string program_name = "spine";
|| sqlite_update
) ? true : false;
}
+ @trusted bool require_processing_files() {
+ return (
+ opts["abstraction"]
+ || epub
+ || html
+ || html_seg
+ || html_scroll
+ || latex
+ || odt
+ || manifest
+ || pod
+ || show_make
+ || show_metadata
+ || show_summary
+ || source
+ || source_or_pod
+ || sqlite_discrete
+ || sqlite_update
+ || text
+ || xhtml
+ ) ? true : false;
+ }
@trusted bool meta_processing_general() {
return (
opts["abstraction"]
@@ -556,33 +578,53 @@ string program_name = "spine";
];
auto _manifested = PathMatters!()(_opt_action, _env, "");
auto _manifests = [ _manifested ];
- auto _conf_file_details = ConfigFilePaths!()(_manifested, _env, _opt_action.config_path_set);
- ConfComposite _make_and_meta_struct;
- if (_opt_action.config_path_set.empty) {
+ auto _conf_file_details = configFilePaths!()(_manifested, _env, _opt_action.config_path_set);
+ ConfComposite _config;
+ if (
+ _opt_action.require_processing_files
+ && _opt_action.config_path_set.empty
+ ) {
foreach(arg; args[1..$]) {
if (!(arg.match(rgx.flag_action))) { /+ cli markup source path +/ // get first input markup source file names for processing
_manifested = PathMatters!()(_opt_action, _env, arg);
{ /+ local site config +/
- _conf_file_details = ConfigFilePaths!()(_manifested, _env, _opt_action.config_path_set);
- auto _config_local_site_struct = readConfigSite!()(_conf_file_details);
+ _conf_file_details = configFilePaths!()(_manifested, _env, _opt_action.config_path_set);
+ auto _config_local_site_struct = readConfigSite!()(_conf_file_details, _opt_action);
import doc_reform.meta.conf_make_meta_yaml;
- _make_and_meta_struct = _config_local_site_struct.configParseYAMLreturnSpineStruct!()(_make_and_meta_struct, _manifested); // - get local site config
+ _config = _config_local_site_struct.configParseYAMLreturnSpineStruct!()(_config, _manifested); // - get local site config
break;
}
}
}
- } else {
- { /+ local site config +/
- auto _config_local_site_struct = readConfigSite!()(_conf_file_details);
- import doc_reform.meta.conf_make_meta_yaml;
- _make_and_meta_struct = _config_local_site_struct.configParseYAMLreturnSpineStruct!()(_make_and_meta_struct, _manifested); // - get local site config
+ } else { /+ local site config +/
+ auto _config_local_site_struct = readConfigSite!()(_conf_file_details, _opt_action);
+ import doc_reform.meta.conf_make_meta_yaml;
+ _config = _config_local_site_struct.configParseYAMLreturnSpineStruct!()(_config, _manifested); // - get local site config
+ }
+ if (_opt_action.show_config) {
+ import doc_reform.meta.metadoc_show_config;
+ spineShowSiteConfig!()(_opt_action, _config);
+ }
+ if (!(_opt_action.skip_output)) {
+ if ((_opt_action.debug_do)
+ || (_opt_action.very_verbose)
+ ) {
+ writeln("step0 commence → (without processing files)");
+ }
+ outputHubOp!()(_env, _opt_action, _config);
+ if ((_opt_action.debug_do)
+ || (_opt_action.very_verbose)
+ ) {
+ writeln("- step0 complete");
}
}
- foreach(arg; args[1..$]) { // refigure how args relate to _opt_action, need path from _opt_action or args early _manifested too late, work on (search for PathMatters and .harvest,
- auto _manifest_start = PodManifest!()(_opt_action, arg);
+ ConfComposite _make_and_meta_struct = _config;
+ destroy(_config);
+ foreach(arg; args[1..$]) {
if (arg.match(rgx.flag_action)) { /+ cli instruction, flag do +/
flag_action ~= " " ~ arg; // flags not taken by getopt
- } else { /+ cli, assumed to be path to source files +/
+ } else if (_opt_action.require_processing_files) { /+ cli, assumed to be path to source files +/
+ auto _manifest_start = PodManifest!()(_opt_action, arg);
if ( /+ pod files +/
!(arg.match(rgx.src_pth_sst_or_ssm))
&& _manifest_start.pod_manifest_file_with_path
@@ -731,19 +773,6 @@ string program_name = "spine";
}
}
}
- if (!(_opt_action.skip_output)) {
- if ((_opt_action.debug_do)
- || (_opt_action.very_verbose)
- ) {
- writeln("step0 commence → (without processing files)");
- }
- outputHubOp!()(_env, _opt_action, _make_and_meta_struct);
- if ((_opt_action.debug_do)
- || (_opt_action.very_verbose)
- ) {
- writeln("- step0 complete");
- }
- }
if (_manifests.length > 1 // _manifests[0] initialized dummy element
&& _opt_action.abstraction) {
if (_opt_action.parallelise) { // see else
@@ -795,20 +824,17 @@ string program_name = "spine";
spineMetaDocSummary!()(doc_abstraction, doc_matters);
}
/+ ↓ debugs +/
- if (doc_matters.opt.action.show_metadata
- ) {
+ if (doc_matters.opt.action.show_metadata) {
import doc_reform.meta.metadoc_show_metadata;
spineShowMetaData!()(doc_matters);
}
/+ ↓ debugs +/
- if (doc_matters.opt.action.show_make
- ) {
+ if (doc_matters.opt.action.show_make) {
import doc_reform.meta.metadoc_show_make;
spineShowMake!()(doc_matters);
}
/+ ↓ debugs +/
- if (doc_matters.opt.action.show_config
- ) {
+ if (doc_matters.opt.action.show_config) {
import doc_reform.meta.metadoc_show_config;
spineShowConfig!()(doc_matters);
}
@@ -910,20 +936,17 @@ string program_name = "spine";
spineMetaDocSummary!()(doc_abstraction, doc_matters);
}
/+ ↓ debugs +/
- if (doc_matters.opt.action.show_metadata
- ) {
+ if (doc_matters.opt.action.show_metadata) {
import doc_reform.meta.metadoc_show_metadata;
spineShowMetaData!()(doc_matters);
}
/+ ↓ debugs +/
- if (doc_matters.opt.action.show_make
- ) {
+ if (doc_matters.opt.action.show_make) {
import doc_reform.meta.metadoc_show_make;
spineShowMake!()(doc_matters);
}
/+ ↓ debugs +/
- if (doc_matters.opt.action.show_config
- ) {
+ if (doc_matters.opt.action.show_config) {
import doc_reform.meta.metadoc_show_config;
spineShowConfig!()(doc_matters);
}