aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/sisudoc
diff options
context:
space:
mode:
Diffstat (limited to 'src/sisudoc')
-rw-r--r--src/sisudoc/io_in/paths_source.d26
-rw-r--r--src/sisudoc/io_in/read_config_files.d54
-rw-r--r--src/sisudoc/io_in/read_source_files.d31
-rw-r--r--src/sisudoc/io_out/create_zip_file.d9
-rw-r--r--src/sisudoc/io_out/epub3.d28
-rw-r--r--src/sisudoc/io_out/html.d30
-rw-r--r--src/sisudoc/io_out/html_snippet.d18
-rw-r--r--src/sisudoc/io_out/hub.d24
-rw-r--r--src/sisudoc/io_out/latex.d63
-rw-r--r--src/sisudoc/io_out/metadata.d24
-rw-r--r--src/sisudoc/io_out/odt.d54
-rw-r--r--src/sisudoc/io_out/package.d36
-rw-r--r--src/sisudoc/io_out/paths_output.d63
-rw-r--r--src/sisudoc/io_out/rgx.d8
-rw-r--r--src/sisudoc/io_out/skel.d268
-rw-r--r--src/sisudoc/io_out/source_pod.d92
-rw-r--r--src/sisudoc/io_out/sqlite.d25
-rw-r--r--src/sisudoc/io_out/text.d470
-rw-r--r--src/sisudoc/io_out/xmls.d26
-rw-r--r--src/sisudoc/meta/conf_make_meta_json.d28
-rw-r--r--src/sisudoc/meta/conf_make_meta_structs.d26
-rw-r--r--src/sisudoc/meta/conf_make_meta_yaml.d62
-rw-r--r--src/sisudoc/meta/doc_debugs.d34
-rw-r--r--src/sisudoc/meta/metadoc.d26
-rw-r--r--src/sisudoc/meta/metadoc_curate.d24
-rw-r--r--src/sisudoc/meta/metadoc_curate_authors.d20
-rw-r--r--src/sisudoc/meta/metadoc_curate_topics.d20
-rw-r--r--src/sisudoc/meta/metadoc_from_src.d40
-rw-r--r--src/sisudoc/meta/metadoc_from_src_functions.d37
-rw-r--r--src/sisudoc/meta/metadoc_object_setter.d96
-rw-r--r--src/sisudoc/meta/metadoc_show_config.d56
-rw-r--r--src/sisudoc/meta/metadoc_show_make.d28
-rw-r--r--src/sisudoc/meta/metadoc_show_metadata.d28
-rw-r--r--src/sisudoc/meta/metadoc_show_summary.d30
-rw-r--r--src/sisudoc/meta/package.d24
-rw-r--r--src/sisudoc/meta/rgx.d18
-rw-r--r--src/sisudoc/meta/rgx_yaml.d (renamed from src/sisudoc/meta/rgx_yaml_tags.d)0
-rw-r--r--src/sisudoc/share/defaults.d4
-rwxr-xr-xsrc/sisudoc/spine.d361
39 files changed, 1561 insertions, 750 deletions
diff --git a/src/sisudoc/io_in/paths_source.d b/src/sisudoc/io_in/paths_source.d
index d5fafa3..2c0d545 100644
--- a/src/sisudoc/io_in/paths_source.d
+++ b/src/sisudoc/io_in/paths_source.d
@@ -54,16 +54,14 @@
+/
module sisudoc.io_in.paths_source;
@safe:
-import
- std.array,
- std.file,
- std.path,
- std.regex,
- std.stdio,
- std.conv : to;
-import
- sisudoc.meta.defaults,
- sisudoc.meta.rgx_files;
+import std.array;
+import std.file;
+import std.path;
+import std.regex;
+import std.stdio;
+import std.conv : to;
+import sisudoc.meta.defaults;
+import sisudoc.meta.rgx_files;
template PodManifest() {
mixin spineRgxFiles;
static auto rgx_files = RgxFiles();
@@ -90,8 +88,10 @@ template PodManifest() {
_manifest_path = m.captures["podpath"];
}
} else {
- if (_opt_action.vox_gt1 || _opt_action.debug_do) {
- writeln("WARNING, src is not a pod, issue with manifest_path: ", _pth); // remove? unless can distinguish pod
+ if (_opt_action.vox_gt_3 || _opt_action.debug_do) {
+ if (exists(_pth) == 0 && (_pth.isFile)) {
+ writeln("WARNING, src file is not .sst or .ssm (nor is it a pod directory): ", _pth); // remove? unless can distinguish pod
+ }
}
_manifest_path = "";
}
@@ -108,7 +108,7 @@ template PodManifest() {
_k = pod_manifest_path;
}
if (exists(_k)==0) {
- writeln("ERROR >> Processing Skipped! Manifest not found: ", _k);
+ // writeln("ERROR >> Processing Skipped! Manifest not found: ", _k);
_k = null;
}
return _k;
diff --git a/src/sisudoc/io_in/read_config_files.d b/src/sisudoc/io_in/read_config_files.d
index 8da08f5..531dc72 100644
--- a/src/sisudoc/io_in/read_config_files.d
+++ b/src/sisudoc/io_in/read_config_files.d
@@ -54,14 +54,12 @@
+/
module sisudoc.io_in.read_config_files;
@safe:
-import
- std.file,
- std.path;
-import
- sisudoc.meta,
- sisudoc.io_in.paths_source,
- sisudoc.meta.rgx_files,
- sisudoc.meta.rgx;
+import std.file;
+import std.path;
+import sisudoc.meta;
+import sisudoc.io_in.paths_source;
+import sisudoc.meta.rgx_files;
+import sisudoc.meta.rgx;
template readConfigSite() {
@system final auto readConfigSite(Cf,O,Cfg)(Cf _conf_file_details, O _opt_action, Cfg _cfg) {
mixin spineRgxIn;
@@ -140,7 +138,7 @@ webserv:
try {
if (exists(conf_file)) {
if (conf_file.getLinkAttributes.attrIsFile) {
- if (_opt_action.vox_gt1 || _opt_action.debug_do) {
+ if (_opt_action.vox_gt_2 || _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;
@@ -190,14 +188,12 @@ webserv:
}
}
static template readConfigDoc() {
- import
- std.file,
- std.path;
- import
- sisudoc.meta,
- sisudoc.io_in.paths_source,
- sisudoc.meta.rgx_files,
- sisudoc.meta.rgx;
+ import std.file;
+ import std.path;
+ import sisudoc.meta;
+ import sisudoc.io_in.paths_source;
+ import sisudoc.meta.rgx_files;
+ import sisudoc.meta.rgx;
@system final auto readConfigDoc(M,E)(M _manifested, E _env) {
mixin spineRgxIn;
static auto rgx = RgxI();
@@ -246,14 +242,12 @@ static template readConfigDoc() {
}
}
static template configReadSiteYAML() {
- import
- std.file,
- std.path;
- import
- sisudoc.meta,
- sisudoc.io_in.paths_source,
- sisudoc.meta.rgx_files,
- sisudoc.meta.rgx;
+ import std.file;
+ import std.path;
+ import sisudoc.meta;
+ import sisudoc.io_in.paths_source;
+ import sisudoc.meta.rgx_files;
+ import sisudoc.meta.rgx;
final YAMLDocument configReadSiteYAML(M,E)(M _manifested, E _env) {
string _configuration = configReadInSiteYAML!()(_manifested, _env);
auto _conf_file_details = configFilePaths!()(_manifested, _env);
@@ -263,12 +257,10 @@ static template configReadSiteYAML() {
}
}
static template configReadDocYAML() {
- import
- std.file,
- std.path;
- import
- sisudoc.meta,
- sisudoc.io_in.paths_source;
+ import std.file;
+ import std.path;
+ import sisudoc.meta;
+ import sisudoc.io_in.paths_source;
final YAMLDocument configReadDocYAML(M,E)(M _manifested, E _env) {
string _configuration = configReadInDocYAML!()(_manifested, _env);
auto _conf_file_details = configFilePaths!()(_manifested, _env);
diff --git a/src/sisudoc/io_in/read_source_files.d b/src/sisudoc/io_in/read_source_files.d
index c683d1e..428c119 100644
--- a/src/sisudoc/io_in/read_source_files.d
+++ b/src/sisudoc/io_in/read_source_files.d
@@ -55,15 +55,13 @@
module sisudoc.io_in.read_source_files;
@safe:
template spineRawMarkupContent() {
- import
- std.digest.sha,
- std.file,
- std.path;
- import
- sisudoc.meta,
- sisudoc.io_in.paths_source,
- sisudoc.meta.rgx_files,
- sisudoc.meta.rgx;
+ import std.digest.sha;
+ import std.file;
+ import std.path;
+ import sisudoc.meta;
+ import sisudoc.io_in.paths_source;
+ import sisudoc.meta.rgx_files;
+ import sisudoc.meta.rgx;
mixin spineRgxIn;
static auto rgx = RgxI();
mixin spineRgxFiles;
@@ -132,7 +130,7 @@ template spineRawMarkupContent() {
sourcefile_body_content = _cii.contents;
insert_file_list_get = _cii.insert_files.dup;
images_list_get = _cii.images.dup;
- } else if (_opt_action.source || _opt_action.pod) {
+ } else if (_opt_action.source_or_pod) {
auto ins = Inserts();
ST_contents_inserts_images _cii
= ins.scan_master_src_for_insert_files_and_import_content(_opt_action, sourcefile_body_content, fn_src);
@@ -157,9 +155,8 @@ template spineRawMarkupContent() {
}
}
struct MarkupRawUnit {
- import
- std.digest.sha,
- std.file;
+ import std.digest.sha;
+ import std.file;
final private string readInMarkupSource(in char[] fn_src) {
enforce(
exists(fn_src) != 0,
@@ -297,7 +294,7 @@ template spineRawMarkupContent() {
markup_sourcesubfile_insert_content.length
);
}
- if (_opt_action.source || _opt_action.pod) {
+ if (_opt_action.source_or_pod) {
_images ~= _extract_images(markup_sourcesubfile_insert_content);
}
auto ins = Inserts();
@@ -313,7 +310,7 @@ template spineRawMarkupContent() {
+/
} else {
contents_insert ~= line; // images to extract for image list?
- if (_opt_action.source || _opt_action.pod) {
+ if (_opt_action.source_or_pod) {
string[] _image_linelist = _extract_images(line);
if (_image_linelist.length > 0) {
_images ~= _image_linelist;
@@ -392,7 +389,7 @@ template spineRawMarkupContent() {
fn_src_insert.to!string
);
contents ~= contents_insert_st.insert_contents;
- if (_opt_action.source || _opt_action.pod) {
+ if (_opt_action.source_or_pod) {
string[] _image_linelist = _extract_images(contents_insert_st.images);
if (_image_linelist.length > 0) {
_images ~= _image_linelist;
@@ -410,7 +407,7 @@ template spineRawMarkupContent() {
+/
} else {
contents ~= line;
- if (_opt_action.source || _opt_action.pod) {
+ if (_opt_action.source_or_pod) {
string[] _image_linelist = _extract_images(line);
if (_image_linelist.length > 0) {
_images ~= _image_linelist;
diff --git a/src/sisudoc/io_out/create_zip_file.d b/src/sisudoc/io_out/create_zip_file.d
index e468253..7bd58bc 100644
--- a/src/sisudoc/io_out/create_zip_file.d
+++ b/src/sisudoc/io_out/create_zip_file.d
@@ -50,11 +50,10 @@
module sisudoc.io_out.create_zip_file;
@safe:
template createZipFile() {
- import
- std.file,
- std.outbuffer,
- std.string,
- std.zip;
+ import std.file;
+ import std.outbuffer;
+ import std.string;
+ import std.zip;
void createZipFile(
string zip_file_name,
void[] compressed_zip_data,
diff --git a/src/sisudoc/io_out/epub3.d b/src/sisudoc/io_out/epub3.d
index 610d6b8..c8ca757 100644
--- a/src/sisudoc/io_out/epub3.d
+++ b/src/sisudoc/io_out/epub3.d
@@ -50,19 +50,17 @@
module sisudoc.io_out.epub3;
@safe:
template outputEPub3() {
- import
- std.file,
- std.outbuffer,
- std.uri,
- std.zip,
- std.conv : to;
- import
- sisudoc.io_out,
- sisudoc.io_out.rgx,
- sisudoc.io_out.rgx_xhtml,
- sisudoc.io_out.create_zip_file,
- sisudoc.io_out.xmls,
- sisudoc.io_out.xmls_css;
+ import std.file;
+ import std.outbuffer;
+ import std.uri;
+ import std.zip;
+ import std.conv : to;
+ import sisudoc.io_out;
+ import sisudoc.io_out.rgx;
+ import sisudoc.io_out.rgx_xhtml;
+ import sisudoc.io_out.create_zip_file;
+ import sisudoc.io_out.xmls;
+ import sisudoc.io_out.xmls_css;
mixin InternalMarkup;
mixin outputXHTMLs;
static auto rgx = RgxO();
@@ -739,7 +737,7 @@ template outputEPub3() {
foreach (image; doc_matters.srcs.image_list) {
{ /+ debug +/
if (doc_matters.opt.action.debug_do_epub) {
- if (doc_matters.opt.action.vox_gt2) {
+ if (doc_matters.opt.action.vox_gt_3) {
writeln(
doc_matters.src.image_dir_path, "/", image, " -> ",
pth_epub3.dbg_doc_oebps_image(doc_matters.src.filename), "/", image
@@ -786,7 +784,7 @@ template outputEPub3() {
} catch (ErrnoException ex) {
// Handle error
}
- if (doc_matters.opt.action.vox_gt0) {
+ if (doc_matters.opt.action.vox_gt_1) {
writeln(" ", fn_epub);
}
debug(epub_archive) {
diff --git a/src/sisudoc/io_out/html.d b/src/sisudoc/io_out/html.d
index 6d3129a..fc9ef54 100644
--- a/src/sisudoc/io_out/html.d
+++ b/src/sisudoc/io_out/html.d
@@ -50,19 +50,17 @@
module sisudoc.io_out.html;
@safe:
template outputHTML() {
- import
- std.file,
- std.outbuffer,
- std.uri,
- std.conv : to;
- import
- sisudoc.io_out,
- sisudoc.io_out.rgx,
- sisudoc.meta.rgx_files,
- sisudoc.io_out.rgx_xhtml,
- sisudoc.io_out.create_zip_file,
- sisudoc.io_out.xmls,
- sisudoc.io_out.xmls_css;
+ import std.file;
+ import std.outbuffer;
+ import std.uri;
+ import std.conv : to;
+ import sisudoc.io_out;
+ import sisudoc.io_out.rgx;
+ import sisudoc.meta.rgx_files;
+ import sisudoc.io_out.rgx_xhtml;
+ import sisudoc.io_out.create_zip_file;
+ import sisudoc.io_out.xmls;
+ import sisudoc.io_out.xmls_css;
mixin outputXHTMLs;
void scroll(D)(D doc) {
mixin spineRgxOut;
@@ -264,7 +262,7 @@ template outputHTML() {
} catch (ErrnoException ex) {
// Handle error
}
- if (doc_matters.opt.action.vox_gt0) {
+ if (doc_matters.opt.action.vox_gt_1) {
writeln(" ", pth_html.fn_scroll(doc_matters.src.filename));
}
}
@@ -547,7 +545,7 @@ template outputHTML() {
} catch (ErrnoException ex) {
// handle error
}
- if (doc_matters.opt.action.vox_gt0) {
+ if (doc_matters.opt.action.vox_gt_1) {
writeln(" ", pth_html.fn_seg(doc_matters.src.filename, "toc"));
}
}
@@ -595,7 +593,7 @@ template outputHTML() {
if (exists(fn_src_in)) {
fn_src_in.copy(fn_src_out);
} else {
- if (doc_matters.opt.action.vox_gt0) {
+ if (doc_matters.opt.action.vox_gt_1) {
writeln("WARNING image not found: ", fn_src_in);
}
}
diff --git a/src/sisudoc/io_out/html_snippet.d b/src/sisudoc/io_out/html_snippet.d
index 9cc9259..7f1edea 100644
--- a/src/sisudoc/io_out/html_snippet.d
+++ b/src/sisudoc/io_out/html_snippet.d
@@ -50,16 +50,14 @@
module sisudoc.io_out.html_snippet;
@safe:
template htmlSnippet() {
- import
- std.file,
- std.outbuffer,
- std.format,
- std.uri,
- std.conv : to;
- import
- sisudoc.io_out.rgx,
- sisudoc.meta.rgx_files,
- sisudoc.io_out.rgx_xhtml;
+ import std.file;
+ import std.outbuffer;
+ import std.format;
+ import std.uri;
+ import std.conv : to;
+ import sisudoc.io_out.rgx;
+ import sisudoc.meta.rgx_files;
+ import sisudoc.io_out.rgx_xhtml;
auto format_html_blank_page_guide_home()(
string css_style,
string home_url,
diff --git a/src/sisudoc/io_out/hub.d b/src/sisudoc/io_out/hub.d
index 8c41ce5..f98be01 100644
--- a/src/sisudoc/io_out/hub.d
+++ b/src/sisudoc/io_out/hub.d
@@ -62,7 +62,7 @@ template outputHub() {
@system void outputHub(D)(D doc) {
mixin Msg;
auto msg = Msg!()(doc.matters);
- enum outTask { source_or_pod, sqlite, sqlite_multi, latex, odt, epub, html_scroll, html_seg, html_stuff }
+ enum outTask { source_or_pod, sqlite, sqlite_multi, latex, odt, epub, html_scroll, html_seg, html_stuff, text, skel }
void Scheduled(D)(int sched, D doc) {
auto msg = Msg!()(doc.matters);
if (sched == outTask.source_or_pod) {
@@ -118,6 +118,12 @@ template outputHub() {
outputLaTeX!()(doc.abstraction, doc.matters);
msg.vv("latex done");
}
+ if (sched == outTask.text) {
+ msg.v("text processing... ");
+ import sisudoc.io_out.text;
+ outputText!()(doc.abstraction, doc.matters);
+ msg.vv("text done");
+ }
if (sched == outTask.odt) {
msg.v("odf:odt processing... ");
import sisudoc.io_out.odt;
@@ -130,8 +136,14 @@ template outputHub() {
doc.SQLiteHubDiscreteBuildTablesAndPopulate!();
msg.vv("sqlite done");
}
+ if (sched == outTask.skel) {
+ msg.v("skel processing... ");
+ import sisudoc.io_out.skel;
+ outputSkel!()(doc.abstraction, doc.matters);
+ msg.vv("skel done");
+ }
}
- if (doc.matters.opt.action.vox_gt0) { writeln(doc.matters.src.filename_base); }
+ if (doc.matters.opt.action.vox_gt_1) { writeln(doc.matters.src.filename_base); }
if (!(doc.matters.opt.action.parallelise_subprocesses)) {
foreach(schedule; doc.matters.opt.action.output_task_scheduler) {
Scheduled!()(schedule, doc);
@@ -203,23 +215,23 @@ template outputHubOp() {
sisudoc.io_out.paths_output;
@system void outputHubOp(E,O,C)(E env, O opt_action, C config) {
if ((opt_action.sqlite_db_drop)) {
- if ((opt_action.vox_gt1)) {
+ if ((opt_action.vox_gt_2)) {
writeln("sqlite drop db...");
}
import sisudoc.io_out.sqlite;
SQLiteDbDrop!()(opt_action, config);
- if ((opt_action.vox_gt2)) {
+ if ((opt_action.vox_gt_3)) {
writeln("sqlite drop db done");
}
}
if ((opt_action.sqlite_db_create)) {
- if ((opt_action.vox_gt1)) {
+ if ((opt_action.vox_gt_2)) {
auto pth_sqlite_db = spinePathsSQLite!()(opt_action.cgi_sqlite_search_filename, opt_action.output_dir_set);
writeln("sqlite create table...");
}
import sisudoc.io_out.sqlite;
SQLiteTablesCreate!()(env, opt_action, config);
- if ((opt_action.vox_gt2)) {
+ if ((opt_action.vox_gt_3)) {
writeln("sqlite create table done");
}
}
diff --git a/src/sisudoc/io_out/latex.d b/src/sisudoc/io_out/latex.d
index d26d502..96511c4 100644
--- a/src/sisudoc/io_out/latex.d
+++ b/src/sisudoc/io_out/latex.d
@@ -50,9 +50,8 @@
module sisudoc.io_out.latex;
@safe:
template paperLaTeX() {
- import
- std.format,
- std.conv : to;
+ import std.format;
+ import std.conv : to;
auto paperLaTeX() {
string mm(uint mmi) {
string _mm = format(q"┃%smm┃", mmi.to!string);
@@ -319,15 +318,13 @@ template paperLaTeX() {
}
}
template outputLaTeX() {
- import
- std.file,
- std.outbuffer,
- std.uri,
- std.conv : to;
- import
- sisudoc.io_out,
- sisudoc.io_out.rgx,
- sisudoc.io_out.rgx_latex;
+ import std.file;
+ import std.outbuffer;
+ import std.uri;
+ import std.conv : to;
+ import sisudoc.io_out;
+ import sisudoc.io_out.rgx;
+ import sisudoc.io_out.rgx_latex;
mixin spineRgxOut;
static auto rgx = RgxO();
mixin spineRgxLSC;
@@ -780,6 +777,24 @@ template outputLaTeX() {
}
return _txt.strip;
}
+ string quote(O,M)(
+ string _txt,
+ O obj,
+ M doc_matters,
+ ) {
+ if (obj.metainfo.is_a == "quote") {
+ string _tex_para;
+ _tex_para = q"┃\ocn{%s}\objBlockOpen
+"%s"
+\objBlockClose
+┃";
+ _txt = format(_tex_para,
+ obj.metainfo.object_number,
+ _txt.nbsp_char.footnotes.split(rgx.br_linebreaks_newlines).join("\\br\n").strip
+ ).strip;
+ }
+ return _txt;
+ }
string group(O,M)(
string _txt,
O obj,
@@ -793,7 +808,7 @@ template outputLaTeX() {
┃";
_txt = format(_tex_para,
obj.metainfo.object_number,
- _txt.footnotes.split(rgx.br_line_spaced).join("\\brl{1}").strip // provides more control (more noise, not as tidy)
+ _txt.footnotes.split(rgx.br_line_spaced).join(" \\brl{1} ").strip // provides more control (more noise, not as tidy)
// _txt.footnotes.split(rgx.br_line_spaced).join("") // this works using a line-space, looks tidy, keep ref.
).strip;
}
@@ -1210,7 +1225,9 @@ template outputLaTeX() {
case "block":
switch (obj.metainfo.is_a) {
case "quote":
- goto default; // TODO
+ _txt = _txt.quote(obj, doc_matters)
+ .links_and_images(obj, doc_matters);
+ goto default;
case "group": /+ (hardspaces not honored) [remove any hardspace marker] +/
_txt = _txt.group(obj, doc_matters)
.links_and_images(obj, doc_matters);
@@ -1297,7 +1314,7 @@ template outputLaTeX() {
default:
{ /+ debug +/
if (doc_matters.opt.action.debug_do_latex
- && doc_matters.opt.action.vox_gt1) {
+ && doc_matters.opt.action.vox_gt_2) {
writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_of_part);
writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_a);
writeln(__FILE__, ":", __LINE__, ": ", obj.text);
@@ -1335,7 +1352,7 @@ template outputLaTeX() {
try {
{ /+ debug +/
if (doc_matters.opt.action.debug_do_latex
- && doc_matters.opt.action.vox_gt1) {
+ && doc_matters.opt.action.vox_gt_2) {
writeln(latex_content.head);
writeln(latex_content.content);
writeln(latex_content.tail);
@@ -1344,7 +1361,7 @@ template outputLaTeX() {
if (!exists(pth_latex.latex_path_stuff)) {
(pth_latex.latex_path_stuff).mkdirRecurse;
}
- if (doc_matters.opt.action.vox_gt0) {
+ if (doc_matters.opt.action.vox_gt_1) {
writeln(" ", pth_latex.latex_file_with_path(paper_size_orientation));
}
{
@@ -1411,7 +1428,7 @@ template outputLaTeX() {
string content;
string tail;
}
- auto latex = LaTeX();
+ LaTeX latex = LaTeX();
foreach (paper_size_orientation; doc_matters.conf_make_meta.conf.set_papersize) {
latex.head = latex_head(doc_matters, paper_size_orientation);
latex.content = latex_body(doc_abstraction, doc_matters, paper_size_orientation);
@@ -1487,9 +1504,8 @@ template outputLaTeXstyInit() {
}
}
template outputLaTeXstyStatic() {
- import
- std.format,
- std.conv : to;
+ import std.format;
+ import std.conv : to;
string outputLaTeXstyStatic(
bool generated_by,
string name_version_and_compiler,
@@ -1730,9 +1746,8 @@ template outputLaTeXstyStatic() {
}
}
template outputLaTeXstyPaperSizeAndOrientation() {
- import
- std.format,
- std.conv : to;
+ import std.format;
+ import std.conv : to;
auto outputLaTeXstyPaperSizeAndOrientation(P)(
P doc_sty_info,
bool generated_by,
diff --git a/src/sisudoc/io_out/metadata.d b/src/sisudoc/io_out/metadata.d
index 4d540af..a89b31a 100644
--- a/src/sisudoc/io_out/metadata.d
+++ b/src/sisudoc/io_out/metadata.d
@@ -109,11 +109,10 @@ template outputMetadata() {
}
return o;
}
- import
- std.digest.crc,
- std.digest.sha,
- std.file,
- std.format;
+ import std.digest.crc;
+ import std.digest.sha;
+ import std.file;
+ import std.format;
import sisudoc.io_out;
mixin InternalMarkup;
char[] metadata_;
@@ -393,7 +392,7 @@ string theme_light_1 = format(q"┃
} catch (ErrnoException ex) {
// Handle error
}
- if (doc_matters.opt.action.vox_gt0) { writeln(" ", pth_html.fn_scroll("metadata." ~ doc_matters.src.filename)); }
+ if (doc_matters.opt.action.vox_gt_1) { writeln(" ", pth_html.fn_scroll("metadata." ~ doc_matters.src.filename)); }
}
static auto mkup = InlineMarkup();
import sisudoc.io_out.html_snippet;
@@ -418,6 +417,7 @@ string theme_light_1 = format(q"┃
}
auto pth_html = spinePathsHTML!()(doc_matters.output_path, doc_matters.src.language);
auto pth_epub = spinePathsEPUB!()(doc_matters.output_path, doc_matters.src.language);
+ auto pth_text = spinePathsText!()(doc_matters);
auto pth_pdf = spinePathsPDF!()(doc_matters);
auto pth_pod = spinePathsPods!()(doc_matters);
metadata_ ~= format(q"┃<body lang="en" xml:lang="en">
@@ -443,7 +443,7 @@ string theme_light_1 = format(q"┃
metadata_ ~= "</div>" ~ inline_search_form(doc_matters) ~ "</div><hr />";
if (!(doc_matters.conf_make_meta.meta.title_full.empty)) {
metadata_ ~= "<p class=\"lev0\">Title: <b><a href=\"" ~ doc_matters.src.filename_base ~ "/toc.html\">" ~ doc_matters.conf_make_meta.meta.title_full ~ "</a></b></p>";
- } else if (doc_matters.opt.action.debug_do || doc_matters.opt.action.vox_gt2) {
+ } else if (doc_matters.opt.action.debug_do || doc_matters.opt.action.vox_gt_3) {
writeln("ERROR no Title information provided in document header ", doc_matters.src.filename_base);
}
if (!(doc_matters.conf_make_meta.meta.creator_author.empty)) {
@@ -454,18 +454,18 @@ string theme_light_1 = format(q"┃
metadata_ ~= "<p class=\"lev1\">Author: <b>"
~ doc_matters.conf_make_meta.meta.creator_author ~ "</b></p>";
}
- } else if (doc_matters.opt.action.debug_do || doc_matters.opt.action.vox_gt2) {
+ } else if (doc_matters.opt.action.debug_do || doc_matters.opt.action.vox_gt_3) {
writeln("ERROR no Author information provided in document header ", doc_matters.src.filename_base);
}
metadata_ ~= "<p class=\"lev1\">Published: " ~ doc_matters.conf_make_meta.meta.date_published ~ "</p>";
if (!(doc_matters.conf_make_meta.meta.rights_copyright.empty)) {
metadata_ ~= "<p class=\"lev1\">Copyright: " ~ special_characters_text(doc_matters.conf_make_meta.meta.rights_copyright) ~ "</p>";
- } else if (doc_matters.opt.action.debug_do || doc_matters.opt.action.vox_gt2) {
+ } else if (doc_matters.opt.action.debug_do || doc_matters.opt.action.vox_gt_3) {
writeln("WARNING no Copyright information provided in document header ", doc_matters.src.filename_base);
}
if (!(doc_matters.conf_make_meta.meta.rights_license.empty)) {
metadata_ ~= "<p class=\"lev1\">License: " ~ special_characters_text(doc_matters.conf_make_meta.meta.rights_license) ~ "</p>";
- } else if (doc_matters.opt.action.debug_do || doc_matters.opt.action.vox_gt2) {
+ } else if (doc_matters.opt.action.debug_do || doc_matters.opt.action.vox_gt_3) {
writeln("WARNING no License information provided in document header ", doc_matters.src.filename_base);
}
if (!(doc_matters.conf_make_meta.meta.notes_summary.empty)) {
@@ -499,6 +499,10 @@ string theme_light_1 = format(q"┃
~ "." ~ doc_matters.src.language ~ ".letter.portrait.pdf\" class=\"lnkicon\">"
~ "&nbsp;□&nbsp;pdf&nbsp;(U.S.&nbsp;letter)&nbsp;</a>]&nbsp";
}
+ if (doc_matters.opt.action.html_link_text) {
+ metadata_ ~= "&nbsp;&nbsp;[<a href=\"../" ~ "text/" ~ doc_matters.src.filename_base ~ "." ~ doc_matters.src.language ~ ".txt\" class=\"lnkicon\">"
+ ~ "&nbsp;□&nbsp;txt&nbsp;</a>]&nbsp";
+ }
metadata_ ~= "</p>";
if (doc_matters.opt.action.html_link_markup_source) {
metadata_ ~= "<hr /><p class=\"lev1\">source: " ~ doc_matters.src.filename_base ~ "</p>";
diff --git a/src/sisudoc/io_out/odt.d b/src/sisudoc/io_out/odt.d
index 8740d44..c8f5fe9 100644
--- a/src/sisudoc/io_out/odt.d
+++ b/src/sisudoc/io_out/odt.d
@@ -50,20 +50,17 @@
module sisudoc.io_out.odt;
@safe:
template formatODT() {
- import
- sisudoc.io_out,
- sisudoc.io_out.rgx,
- sisudoc.io_out.rgx_xhtml;
- import
- std.file,
- std.outbuffer,
- std.uri,
- std.zip,
- std.conv : to;
- import
- sisudoc.io_out.create_zip_file,
- sisudoc.io_out.xmls,
- sisudoc.io_out.xmls_css;
+ import sisudoc.io_out;
+ import sisudoc.io_out.rgx;
+ import sisudoc.io_out.rgx_xhtml;
+ import std.file;
+ import std.outbuffer;
+ import std.uri;
+ import std.zip;
+ import std.conv : to;
+ import sisudoc.io_out.create_zip_file;
+ import sisudoc.io_out.xmls;
+ import sisudoc.io_out.xmls_css;
mixin spineRgxOut;
mixin spineRgxXHTML;
struct formatODT {
@@ -645,20 +642,17 @@ template formatODT() {
}
}
template outputODT() {
- import
- sisudoc.io_out,
- sisudoc.io_out.rgx,
- sisudoc.io_out.rgx_xhtml;
- import
- std.file,
- std.outbuffer,
- std.uri,
- std.zip,
- std.conv : to;
- import
- sisudoc.io_out.create_zip_file,
- sisudoc.io_out.xmls,
- sisudoc.io_out.xmls_css;
+ import sisudoc.io_out;
+ import sisudoc.io_out.rgx;
+ import sisudoc.io_out.rgx_xhtml;
+ import std.file;
+ import std.outbuffer;
+ import std.uri;
+ import std.zip;
+ import std.conv : to;
+ import sisudoc.io_out.create_zip_file;
+ import sisudoc.io_out.xmls;
+ import sisudoc.io_out.xmls_css;
mixin InternalMarkup;
mixin spineRgxOut;
mixin spineRgxXHTML;
@@ -886,7 +880,7 @@ template outputODT() {
default:
{ /+ debug +/
if (doc_matters.opt.action.debug_do
- && doc_matters.opt.action.vox_gt1) {
+ && doc_matters.opt.action.vox_gt_2) {
writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_of_part);
writeln(__FILE__, ":", __LINE__, ": ", obj.metainfo.is_a);
writeln(__FILE__, ":", __LINE__, ": ", obj.text);
@@ -2099,7 +2093,7 @@ template outputODT() {
}
}
}
- if (doc_matters.opt.action.vox_gt0) {
+ if (doc_matters.opt.action.vox_gt_1) {
writeln(" ", pth_odt.odt_file);
}
}
diff --git a/src/sisudoc/io_out/package.d b/src/sisudoc/io_out/package.d
index 1ab72b0..7cc69ff 100644
--- a/src/sisudoc/io_out/package.d
+++ b/src/sisudoc/io_out/package.d
@@ -48,22 +48,20 @@
+/
module sisudoc.io_out;
-public import
- std.algorithm,
- std.array,
- std.container,
- std.exception,
- std.path,
- std.process,
- std.range,
- std.regex,
- std.stdio,
- std.string,
- std.typecons,
- // std.uni,
- std.utf;
-public import
- sisudoc.share.defaults,
- sisudoc.io_in.paths_source,
- sisudoc.io_out.defaults,
- sisudoc.io_out.paths_output;
+public import std.algorithm;
+public import std.array;
+public import std.container;
+public import std.exception;
+public import std.path;
+public import std.process;
+public import std.range;
+public import std.regex;
+public import std.stdio;
+public import std.string;
+public import std.typecons;
+// public import std.uni;
+public import std.utf;
+public import sisudoc.share.defaults;
+public import sisudoc.io_in.paths_source;
+public import sisudoc.io_out.defaults;
+public import sisudoc.io_out.paths_output;
diff --git a/src/sisudoc/io_out/paths_output.d b/src/sisudoc/io_out/paths_output.d
index 72508fc..c3e677d 100644
--- a/src/sisudoc/io_out/paths_output.d
+++ b/src/sisudoc/io_out/paths_output.d
@@ -52,13 +52,11 @@
+/
module sisudoc.io_out.paths_output;
@safe:
-import
- std.array,
- std.path,
- std.regex,
- std.stdio;
-import
- sisudoc.meta.rgx_files;
+import std.array;
+import std.path;
+import std.regex;
+import std.stdio;
+import sisudoc.meta.rgx_files;
template spineOutPaths() {
auto spineOutPaths()(
string output_pth_root,
@@ -473,7 +471,7 @@ template spinePathsODT() {
auto spinePathsODT(M)(
M doc_matters,
) {
- auto out_pth = spineOutPaths!()( doc_matters.output_path, doc_matters.src.language);
+ auto out_pth = spineOutPaths!()(doc_matters.output_path, doc_matters.src.language);
string base_dir = "odf";
struct _PathsStruct {
string base_pth() { // dir will contain odt document file (also debug file tree)
@@ -670,3 +668,52 @@ template spinePathsSQLite() {
return _PathsStruct();
}
}
+
+template spinePathsText() {
+ import std.conv;
+ auto spinePathsText(M)(
+ M doc_matters,
+ ) {
+ auto out_pth = spineOutPaths!()(doc_matters.output_path, doc_matters.src.language);
+ string base_dir = "text";
+ struct _PathsStruct {
+ string base_pth() {
+ return (((out_pth.output_base).chainPath(base_dir)).asNormalizedPath).array;
+ }
+ string base_filename(string fn_src) {
+ return fn_src.baseName.stripExtension;
+ }
+ string text_file() {
+ return ((base_pth.chainPath(doc_matters.src.doc_uid_out ~ ".txt")).asNormalizedPath).array;
+ }
+ string dirtop() {
+ return "".chainPath("").array;
+ }
+ }
+ return _PathsStruct();
+ }
+}
+template spinePathsSkel() {
+ import std.conv;
+ auto spinePathsSkel(M)(
+ M doc_matters,
+ ) {
+ auto out_pth = spineOutPaths!()(doc_matters.output_path, doc_matters.src.language);
+ string base_dir = "skel";
+ struct _PathsStruct {
+ string base_pth() {
+ return (((out_pth.output_base).chainPath(base_dir)).asNormalizedPath).array;
+ }
+ string base_filename(string fn_src) {
+ return fn_src.baseName.stripExtension;
+ }
+ string skel_file() {
+ return ((base_pth.chainPath(doc_matters.src.doc_uid_out ~ ".skel")).asNormalizedPath).array;
+ }
+ string dirtop() {
+ return "".chainPath("").array;
+ }
+ }
+ return _PathsStruct();
+ }
+}
diff --git a/src/sisudoc/io_out/rgx.d b/src/sisudoc/io_out/rgx.d
index 9c70c1e..f54deda 100644
--- a/src/sisudoc/io_out/rgx.d
+++ b/src/sisudoc/io_out/rgx.d
@@ -78,9 +78,9 @@ static template spineRgxOut() {
static br_empty_line = ctRegex!(`\n[ ]*\n`, "mg");
static br_linebreaks_newlines = ctRegex!(`[\n┘┙]`, "mg");
static br_linebreaks = ctRegex!(`[┘┙]`, "mg");
- static br_line = ctRegex!(`┘`, "mg");
- static br_line_inline = ctRegex!(`┙`, "mg");
- static br_line_spaced = ctRegex!(`┚`, "mg");
+ static br_line = ctRegex!(`\s*┘\s*`, "mg");
+ static br_line_inline = ctRegex!(`\s*┙\s*`, "mg");
+ static br_line_spaced = ctRegex!(`\s*┚\s*`, "mg");
/+ quotation marks +/
static quotes_open_and_close = ctRegex!(`[“”]`, "mg");
/+ inline markup footnotes endnotes +/
@@ -95,6 +95,7 @@ static template spineRgxOut() {
static inline_al_delimiter_open_symbol_star = ctRegex!(`【[*]\s`, "m");
static inline_al_delimiter_open_symbol_plus = ctRegex!(`【[+]\s`, "m");
static inline_text_and_note_al_ = ctRegex!(`(.+?(?:【[*+]*\s+.+?】|.+))`, "mg");
+ static endnote_section_note = ctRegex!(`┥\s*⑆\^┨(?P<notenumber>\d+)\.┣\^┝┤(?P<link>¤?.+?)├.+`, "mg");
/+ inline markup links +/
static inline_image = ctRegex!(`(?P<pre>┥)☼(?P<imginf>(?P<img>[a-zA-Z0-9._-]+?\.(?:jpg|gif|png)),w(?P<width>\d+)h(?P<height>\d+))\s*(?P<post>.*?┝┤.*?├)`, "mg");
static inline_image_without_dimensions = ctRegex!(`(?P<pre>┥)☼(?P<imginf>(?P<img>[a-zA-Z0-9._-]+?\.(?:jpg|gif|png)),w(?P<width>0)h(?P<height>0))\s*(?P<post>.*?┝┤.*?├)`, "mg");
@@ -109,6 +110,7 @@ static template spineRgxOut() {
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 find_bookindex_ocn_link_and_comma = ctRegex!(`[, ]*┥.+?┝┤#?\S+?├`, "mg");
static url = ctRegex!(`https?://`, "mg");
static uri = ctRegex!(`(?:https?|git)://`, "mg");
static uri_identify_components = ctRegex!(`(?P<type>(?:https?|git)://)(?P<path>\S+?/)(?P<file>[^/]+)$`, "mg");
diff --git a/src/sisudoc/io_out/skel.d b/src/sisudoc/io_out/skel.d
new file mode 100644
index 0000000..b616695
--- /dev/null
+++ b/src/sisudoc/io_out/skel.d
@@ -0,0 +1,268 @@
+/+
+- Name: SisuDoc Spine, Doc Reform [a part of]
+ - Description: documents, structuring, processing, publishing, search
+ - static content generator
+
+ - Author: Ralph Amissah
+ [ralph.amissah@gmail.com]
+
+ - Copyright: (C) 2015 - 2025 Ralph Amissah, All Rights Reserved.
+
+ - License: AGPL 3 or later:
+
+ Spine (SiSU), a framework for document structuring, publishing and
+ search
+
+ Copyright (C) Ralph Amissah
+
+ This program is free software: you can redistribute it and/or modify it
+ under the terms of the GNU AFERO General Public License as published by the
+ Free Software Foundation, either version 3 of the License, or (at your
+ option) any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program. If not, see [https://www.gnu.org/licenses/].
+
+ If you have Internet connection, the latest version of the AGPL should be
+ available at these locations:
+ [https://www.fsf.org/licensing/licenses/agpl.html]
+ [https://www.gnu.org/licenses/agpl.html]
+
+ - Spine (by Doc Reform, related to SiSU) uses standard:
+ - docReform markup syntax
+ - standard SiSU markup syntax with modified headers and minor modifications
+ - docReform object numbering
+ - standard SiSU object citation numbering & system
+
+ - Homepages:
+ [https://www.sisudoc.org]
+ [https://www.doc-reform.org]
+
+ - Git
+ [https://git.sisudoc.org/]
+
++/
+module sisudoc.io_out.skel;
+@safe:
+template outputSkel() {
+ template munge() {
+ import std.stdio;
+ import std.conv;
+ void puts(string _obj_is) {
+ writeln(__FILE__, ":", __LINE__, ": ", _obj_is);
+ }
+ string newline = "\n";
+ string newlines = "\n\n";
+ string toc(O)(O obj) {
+ // puts(obj.metainfo.is_a);
+ // return "toc\n";
+ return obj.text ~ newline;
+ }
+ string heading(O)(O obj) {
+ /+
+ +/
+ // puts(obj.metainfo.is_a);
+ // return obj.metainfo.is_a;
+ return obj.text ~ newline ~ "「" ~ obj.metainfo.ocn.to!string ~ "」" ~ newlines;
+ }
+ string para(O)(O obj) {
+ /+
+ +/
+ // puts(obj.metainfo.is_a);
+ // return obj.metainfo.is_a;
+ return obj.text ~ newline ~ "「" ~ obj.metainfo.ocn.to!string ~ "」" ~ newlines;
+ }
+ string group(O)(O obj) {
+ /+
+ The "group" is different from the "block" mark in that "group" does not
+ preserve whitespace, the "block" mark does. The text falling within the
+ block is a single object.
+ +/
+ // puts(obj.metainfo.is_a);
+ // return obj.metainfo.is_a;
+ return obj.text ~ newline ~ "「" ~ obj.metainfo.ocn.to!string ~ "」" ~ newlines;
+ }
+ string block(O)(O obj) {
+ /+
+ The "block" is different from the "group" mark in that the "block" mark
+ (like the "poem" mark) preserves whitespace, the "group" mark does not.
+ The text falling within the "block" is a single object, which is different
+ from the "poem" mark where each identified verse is an object.
+ +/
+ // puts(obj.metainfo.is_a);
+ // return obj.metainfo.is_a;
+ return obj.text ~ newline ~ "「" ~ obj.metainfo.ocn.to!string ~ "」" ~ newlines;
+ }
+ string poem(O)(O obj) {
+ /+
+ The "poem" mark like the "block" preserves whitespace. Text followed by
+ two newlines are identified as verse and each verse is an object i.e. a
+ poem may consist of multiple verse each of which is identified as an
+ object, unlike a text "block" which is identified as a single object.
+ +/
+ // puts(obj.metainfo.is_a);
+ // return obj.metainfo.is_a;
+ // return obj.text ~ newline ~ "「" ~ obj.metainfo.ocn.to!string ~ "」" ~ newlines;
+ return obj.text ~ newlines;
+ }
+ string verse(O)(O obj) {
+ /+
+ See description of poem, the poem is demarkated but the verse is the
+ object.
+ +/
+ // puts(obj.metainfo.is_a);
+ // return obj.metainfo.is_a;
+ return obj.text ~ newline ~ "「" ~ obj.metainfo.ocn.to!string ~ "」" ~ newlines;
+ }
+ string code(O)(O obj) {
+ /+
+ "Code" blocks are a single text object, in which the original text is
+ preserved.
+ +/
+ // puts(obj.metainfo.is_a);
+ // return obj.metainfo.is_a;
+ return obj.text ~ newline ~ "「" ~ obj.metainfo.ocn.to!string ~ "」" ~ newlines;
+ }
+ string quote(O)(O obj) {
+ /+
+ +/
+ // puts(obj.metainfo.is_a);
+ // return obj.metainfo.is_a;
+ return obj.text ~ newline ~ "「" ~ obj.metainfo.ocn.to!string ~ "」" ~ newlines;
+ }
+ string table(O)(O obj) {
+ /+
+ +/
+ // puts(obj.metainfo.is_a);
+ // return obj.metainfo.is_a;
+ return obj.text ~ newline ~ "「" ~ obj.metainfo.ocn.to!string ~ "」" ~ newlines;
+ }
+ string endnote(O)(O obj) {
+ /+
+ +/
+ // puts(obj.metainfo.is_a);
+ // return obj.metainfo.is_a;
+ return obj.text ~ newlines;
+ }
+ string bookindex(O)(O obj) {
+ /+
+ +/
+ // puts(obj.metainfo.is_a);
+ // return obj.metainfo.is_a;
+ return obj.text ~ newlines;
+ }
+ string bibliography(O)(O obj) {
+ /+
+ +/
+ // puts(obj.metainfo.is_a);
+ // return obj.metainfo.is_a;
+ return obj.text ~ newlines;
+ }
+ string glossary(O)(O obj) {
+ /+
+ +/
+ // puts(obj.metainfo.is_a);
+ // return obj.metainfo.is_a;
+ return obj.text ~ newlines;
+ }
+ string blurb(O)(O obj) {
+ /+
+ +/
+ // puts(obj.metainfo.is_a);
+ // return obj.metainfo.is_a;
+ return obj.text ~ newlines;
+ }
+ string comment(O)(O obj) {
+ /+
+ +/
+ // puts(obj.metainfo.is_a);
+ // return obj.metainfo.is_a;
+ return obj.text ~ newlines;
+ }
+ }
+ template theDocument() {
+ import std.stdio;
+ import sisudoc.io_out;
+ // static auto rgx = RgxO();
+ string skel_head(M)(
+ M doc_matters,
+ ) {
+ return "head";
+ }
+ string skel_body(D,M)(
+ const D doc_abstraction,
+ M doc_matters,
+ ) {
+ string doc_object = "";
+ foreach (section; doc_matters.has.keys_seq.scroll) {
+ foreach (obj; doc_abstraction[section]) {
+ if (obj.metainfo.is_a == "toc") { doc_object ~= munge!().toc(obj); }
+ if (obj.metainfo.is_a == "heading") { doc_object ~= munge!().heading(obj); }
+ if (obj.metainfo.is_a == "para") { doc_object ~= munge!().para(obj); }
+ if (obj.metainfo.is_a == "group") { doc_object ~= munge!().group(obj); }
+ if (obj.metainfo.is_a == "block") { doc_object ~= munge!().block(obj); }
+ if (obj.metainfo.is_a == "poem") { doc_object ~= munge!().poem(obj); }
+ if (obj.metainfo.is_a == "verse") { doc_object ~= munge!().verse(obj); }
+ if (obj.metainfo.is_a == "code") { doc_object ~= munge!().code(obj); }
+ if (obj.metainfo.is_a == "quote") { doc_object ~= munge!().quote(obj); }
+ if (obj.metainfo.is_a == "table") { doc_object ~= munge!().table(obj); }
+ if (obj.metainfo.is_a == "endnote") { doc_object ~= munge!().endnote(obj); }
+ if (obj.metainfo.is_a == "bookindex") { doc_object ~= munge!().bookindex(obj); }
+ if (obj.metainfo.is_a == "bibliography") { doc_object ~= munge!().bibliography(obj); }
+ if (obj.metainfo.is_a == "glossary") { doc_object ~= munge!().glossary(obj); }
+ if (obj.metainfo.is_a == "blurb") { doc_object ~= munge!().blurb(obj); }
+ if (obj.metainfo.is_a == "comment") { doc_object ~= munge!().comment(obj); }
+ }
+ }
+ return doc_object;
+ }
+ string skel_tail(M)(
+ M doc_matters,
+ ) {
+ return "tail";
+ }
+ }
+ void outputSkel(D,M) (
+ const D doc_abstraction,
+ M doc_matters,
+ ) {
+ import std.stdio;
+ import sisudoc.io_out;
+ void skel_out(D,M)(
+ const D doc_abstraction,
+ M doc_matters,
+ ) {
+ struct Skel {
+ string head;
+ string content;
+ string tail;
+ }
+ auto skel = Skel();
+ skel.head = theDocument!().skel_head(doc_matters);
+ skel.content = theDocument!().skel_body(doc_abstraction, doc_matters);
+ skel.tail = theDocument!().skel_tail(doc_matters);
+ auto pth_skel = spinePathsSkel(doc_matters);
+ try {
+ import std.file;
+ if (!exists(pth_skel.base_pth)) {
+ (pth_skel.base_pth).mkdirRecurse;
+ }
+ } catch (ErrnoException ex) {
+ }
+ if (doc_matters.opt.action.vox_gt_1) {
+ writeln(" ", pth_skel.skel_file);
+ }
+ // writeln(pth_skel.base_pth);
+ auto f = File(pth_skel.skel_file, "w");
+ f.writeln(skel.head);
+ f.writeln(skel.content);
+ f.writeln(skel.tail);
+ }
+ skel_out(doc_abstraction, doc_matters);
+ }
+}
diff --git a/src/sisudoc/io_out/source_pod.d b/src/sisudoc/io_out/source_pod.d
index a6253ab..bfc2fac 100644
--- a/src/sisudoc/io_out/source_pod.d
+++ b/src/sisudoc/io_out/source_pod.d
@@ -50,18 +50,15 @@
module sisudoc.io_out.source_pod;
@system: // is not @safe: use: @system: or @trusted:
template spinePod() {
- import
- sisudoc.meta.rgx_files,
- sisudoc.io_out;
- import
- std.digest.sha,
- std.file,
- std.outbuffer,
- std.zip,
- std.conv : to;
- import
- sisudoc.io_out.create_zip_file,
- sisudoc.io_out.xmls;
+ import std.digest.sha;
+ import std.file;
+ import std.outbuffer;
+ import std.zip;
+ import std.conv : to;
+ import sisudoc.meta.rgx_files;
+ import sisudoc.io_out;
+ import sisudoc.io_out.create_zip_file;
+ import sisudoc.io_out.xmls;
void spinePod(T)(T doc_matters) {
debug(asserts) {
// static assert(is(typeof(doc_matters) == tuple));
@@ -73,7 +70,7 @@ template spinePod() {
auto lang = Lang();
static auto rgx_files = RgxFiles();
assert (doc_matters.src.filename.match(rgx_files.src_fn));
- if (doc_matters.opt.action.pod) {
+ if (doc_matters.opt.action.source_or_pod) {
try {
{
podArchive_directory_tree(doc_matters, pths_pod);
@@ -104,7 +101,7 @@ template spinePod() {
pths_pod.pod_dir_().mkdirRecurse;
}
if (doc_matters.opt.action.source_or_pod) {
- // if (doc_matters.opt.action.vox_gt0) { writeln(" ", pths_pod.fn_pod_filelist(doc_matters.src.filename).filesystem_open_zpod); }
+ // if (doc_matters.opt.action.vox_gt_1) { writeln(" ", pths_pod.fn_pod_filelist(doc_matters.src.filename).filesystem_open_zpod); }
if (!exists(pths_pod.text_root(doc_matters.src.filename).filesystem_open_zpod)) {
pths_pod.text_root(doc_matters.src.filename).filesystem_open_zpod.mkdirRecurse;
}
@@ -139,8 +136,8 @@ template spinePod() {
}
auto pod_zipMakeReady(M,P,S)(M doc_matters, P pths_pod, S _st) {
auto pth_dr_doc_src = doc_matters.src_path_info;
- if (doc_matters.opt.action.debug_do_pod && doc_matters.opt.action.vox_gt1) {
- writeln(__LINE__, ": ",
+ if (doc_matters.opt.action.vox_gt_3) { // correct
+ writeln(__LINE__, ":", __FILE__, ":\n",
doc_matters.src.filename, " -> ",
pths_pod.fn_doc(doc_matters.src.filename, doc_matters.src.language).filesystem_open_zpod
);
@@ -150,7 +147,7 @@ template spinePod() {
string[string][string] _digests;
{ // bundle images - get digest
foreach (image; doc_matters.srcs.image_list) {
- debug(podimages) {
+ if (doc_matters.opt.action.vox_gt_3) {
writeln(
pth_dr_doc_src.image_root.to!string, "/", image, " -> ",
pths_pod.image_root(doc_matters.src.filename).zpod, "/", image
@@ -173,11 +170,11 @@ template spinePod() {
if (doc_matters.opt.action.source_or_pod) {
fn_src_in.copy(fn_src_out_filesystem);
}
- if (doc_matters.opt.action.pod) {
+ if (doc_matters.opt.action.source_or_pod) {
zip = podArchive("file_path_bin", fn_src_in, fn_src_out_pod_zip_base, zip);
}
} else {
- if (doc_matters.opt.action.debug_do_pod && doc_matters.opt.action.vox_gt1) {
+ if (doc_matters.opt.action.debug_do_pod && doc_matters.opt.action.vox_gt_2) {
writeln("WARNING (io) src out NOT found (image): ", fn_src_in);
}
}
@@ -197,11 +194,11 @@ template spinePod() {
if (doc_matters.opt.action.source_or_pod) {
fn_src_in.copy(fn_src_out_filesystem);
}
- if (doc_matters.opt.action.pod) {
+ if (doc_matters.opt.action.source_or_pod) {
zip = podArchive("file_path_text", fn_src_in, fn_src_out_pod_zip_base, zip);
}
} else {
- if (doc_matters.opt.action.debug_do_pod && doc_matters.opt.action.vox_gt1) {
+ if (doc_matters.opt.action.debug_do_pod && doc_matters.opt.action.vox_gt_2) {
writeln("WARNING (io) src out NOT found (document make): ", fn_src_in);
}
}
@@ -225,7 +222,7 @@ template spinePod() {
= File(pths_pod.fn_pod_filelist(doc_matters.src.filename).filesystem_open_zpod, "w");
Node _pmy;
string _pm = "doc:\n filename: " ~ doc_matters.src.filename ~ "\n language: " ~ doc_matters.pod.manifest_list_of_languages.to!string ~ "\n";
- if (doc_matters.opt.action.debug_do_pod && doc_matters.opt.action.vox_gt1) {
+ if (doc_matters.opt.action.debug_do_pod && doc_matters.opt.action.vox_gt_2) {
try {
_pmy = Loader.fromString(_pm).load();
} catch (ErrnoException ex) {
@@ -242,7 +239,7 @@ template spinePod() {
if (doc_matters.opt.action.source_or_pod) {
pod_filelist_yaml_string.writeln(_pm);
}
- if (doc_matters.opt.action.pod) {
+ if (doc_matters.opt.action.source_or_pod) {
zip = podArchive("string", _pm, fn_src_out_pod_zip_base, zip);
}
}
@@ -262,11 +259,14 @@ template spinePod() {
string fn_src_out_filesystem_lng
= pths_pod.fn_doc(doc_matters.src.filename, _lang).filesystem_open_zpod.to!string;
string _sstm = (doc_matters.pod.manifest_path ~ "/media/text/" ~ _lang ~ "/" ~ doc_matters.src.filename);
- // writeln(_sstm);
- if (exists(_sstm)) { // what of language?
- debug(io) { writeln("(io debug) src in found: ", _sstm); }
+ string _pth_file_sstm;
+ if (exists(_sstm)) { _pth_file_sstm = _sstm;
+ } else if (exists(fn_src_in)) { _pth_file_sstm = fn_src_in;
+ }
+ if (exists(_pth_file_sstm)) { // what of language?
+ debug(io) { writeln("(io debug) src in found: ", _pth_file_sstm); }
{ // take DIGEST write to pod file digests.txt
- auto data = (cast(byte[]) (_sstm).read);
+ auto data = (cast(byte[]) (_pth_file_sstm).read);
_digests[_lang]["sstm"] ~= data.sha256Of.toHexString ~ "::" ~ data.length.to!string ~ " - " ~ doc_matters.src.filename ~ " - [" ~ _lang ~ "]";
// writeln(data.sha256Of.toHexString, "::", data.length, " - ", doc_matters.src.filename);
}
@@ -274,11 +274,11 @@ template spinePod() {
filelist_src_zpod_arr ~= fn_src_out_inside_pod;
string _pod_to_markup_file = doc_matters.src.pod_name ~ "/" ~ "media/text/" ~ _lang ~ "/" ~ doc_matters.src.filename;
if (doc_matters.opt.action.source_or_pod) {
- _sstm.copy(fn_src_out_filesystem_lng);
+ _pth_file_sstm.copy(fn_src_out_filesystem_lng);
}
- if (doc_matters.opt.action.pod) {
+ if (doc_matters.opt.action.source_or_pod) {
auto _rgx_sstm = regex(r"(?P<path_to_pod>\S+?)(?P<podname>[a-z_-]+)/(?P<from_root>media/text/)(?P<language>\S+?)/(?P<filename>\S+?\.ss[mt])");
- if (auto _x = _sstm.match(_rgx_sstm)){
+ if (auto _x = _pth_file_sstm.match(_rgx_sstm)){
if (doc_matters.src.lng == doc_matters.pod.manifest_list_of_languages[$-1]) { // again wait until all language versions of .ssm parsed
string _path_to_pod = _x.captures["path_to_pod"];
string _podname = _x.captures["podname"];
@@ -293,12 +293,12 @@ template spinePod() {
}
}
} else {
- zip = podArchive("file_path_text", _sstm, fn_src_out_pod_zip_base, zip);
+ zip = podArchive("file_path_text", _pth_file_sstm, fn_src_out_pod_zip_base, zip);
}
}
} else {
- if (doc_matters.opt.action.debug_do_pod && doc_matters.opt.action.vox_gt1) {
- writeln("WARNING (io) src in NOT found (markup source): ", _sstm);
+ if (doc_matters.opt.action.debug_do_pod && doc_matters.opt.action.vox_gt_2) {
+ writeln("WARNING (io) src in NOT found (markup source): \n", _sstm, "or in", fn_src_in);
}
}
}
@@ -342,11 +342,11 @@ template spinePod() {
).filesystem_open_zpod.to!string;
_pth_mkup_src_in.copy(fn_src_out_filesystem); // check why here, thought dealt with elsewhere
}
- if (doc_matters.opt.action.pod) {
+ if (doc_matters.opt.action.source_or_pod) {
zip = podArchive("file_path_text", _pth_mkup_src_in, _pth_mkup_src_out, zip);
}
} else {
- if (doc_matters.opt.action.debug_do_pod && doc_matters.opt.action.vox_gt1) {
+ if (doc_matters.opt.action.debug_do_pod && doc_matters.opt.action.vox_gt_2) {
writeln("WARNING (io) src out NOT found (insert file): ", _pth_mkup_src_in);
}
}
@@ -376,11 +376,11 @@ template spinePod() {
if (doc_matters.opt.action.source_or_pod) {
fn_src_in.copy(fn_src_out_filesystem);
}
- if (doc_matters.opt.action.pod) {
+ if (doc_matters.opt.action.source_or_pod) {
zip = podArchive("file_path_text", fn_src_in, fn_src_out_pod_zip_base, zip);
}
} else {
- if (doc_matters.opt.action.debug_do_pod && doc_matters.opt.action.vox_gt1) {
+ if (doc_matters.opt.action.debug_do_pod && doc_matters.opt.action.vox_gt_2) {
writeln("WARNING (io) src out NOT found (insert file): ", fn_src_in);
}
}
@@ -446,19 +446,19 @@ template spinePod() {
// Handle error
}
try {
- // if (doc_matters.opt.action.vox_gt1) { writeln(" ", pths_pod.pod_dir_(), "/", doc_matters.src.filename_base, ".digests.txt"); }
+ // if (doc_matters.opt.action.vox_gt_2) { writeln(" ", pths_pod.pod_dir_(), "/", doc_matters.src.filename_base, ".digests.txt"); }
string _digest_fn = pths_pod.pod_dir_() ~ "/" ~ doc_matters.src.filename_base ~ ".digests.txt";
- // if (doc_matters.opt.action.vox_gt1) { writeln(_digest_fn); }
+ // if (doc_matters.opt.action.vox_gt_2) { writeln(_digest_fn); }
auto f = File(_digest_fn, "w");
if (exists(fn_pod)) {
try {
auto data = (cast(byte[]) (fn_pod).read);
- // if (doc_matters.opt.action.vox_gt1) { writeln(" ", doc_matters.src.filename, " > ", doc_matters.src.filename_base, ".zip"); }
+ // if (doc_matters.opt.action.vox_gt_2) { writeln(" ", doc_matters.src.filename, " > ", doc_matters.src.filename_base, ".zip"); }
if (doc_matters.opt.action.pod) {
_zip_digest = (data.sha256Of.toHexString ~ "::" ~ data.length.to!string ~ " - " ~ doc_matters.src.filename_base ~ ".zip");
- if (doc_matters.opt.action.vox_gt0) { writeln(" ", _zip_digest); }
- if (doc_matters.opt.action.vox_gt0) { writeln(" ", pths_pod.pod_dir_(), "/", doc_matters.src.filename_base, "/"); }
- if (doc_matters.opt.action.vox_gt0) { writeln(" ", _digest_fn); }
+ if (doc_matters.opt.action.vox_gt_1) { writeln(" ", _zip_digest); }
+ if (doc_matters.opt.action.vox_gt_1) { writeln(" ", pths_pod.pod_dir_(), "/", doc_matters.src.filename_base, "/"); }
+ if (doc_matters.opt.action.vox_gt_1) { writeln(" ", _digest_fn); }
f.writeln(_zip_digest);
}
} catch (ErrnoException ex) {
@@ -468,18 +468,18 @@ template spinePod() {
foreach (_lang; doc_matters.pod.manifest_list_of_languages) {
if (_lang in _digests) {
if (("sstm" in _digests[_lang]) && (_digests[_lang]["sstm"].length > 0)) {
- // if (doc_matters.opt.action.vox_gt1) { writeln(_digests[_lang]["sstm"]); }
+ // if (doc_matters.opt.action.vox_gt_2) { writeln(_digests[_lang]["sstm"]); }
f.writeln(_digests[_lang]["sstm"]);
}
if (("ssi" in _digests[_lang]) && (_digests[_lang]["ssi"].length > 0)) {
- // if (doc_matters.opt.action.vox_gt1) { writeln(_digests[_lang]["ssi"]); }
+ // if (doc_matters.opt.action.vox_gt_2) { writeln(_digests[_lang]["ssi"]); }
f.writeln(_digests[_lang]["ssi"]);
}
}
}
if ("shared" in _digests) {
if (("images" in _digests["shared"]) && (_digests["shared"]["images"].length > 0)) {
- // if (doc_matters.opt.action.vox_gt1) { writeln(_digests["shared"]["images"]); }
+ // if (doc_matters.opt.action.vox_gt_2) { writeln(_digests["shared"]["images"]); }
f.writeln(_digests["shared"]["images"]);
}
}
diff --git a/src/sisudoc/io_out/sqlite.d b/src/sisudoc/io_out/sqlite.d
index 8776c9f..a62e658 100644
--- a/src/sisudoc/io_out/sqlite.d
+++ b/src/sisudoc/io_out/sqlite.d
@@ -48,13 +48,12 @@
+/
module sisudoc.io_out.sqlite;
-import
- sisudoc.io_out,
- sisudoc.io_out.rgx,
- sisudoc.io_out.rgx_xhtml;
-import
- std.file,
- std.uri;
+import sisudoc.io_out;
+import sisudoc.io_out.rgx;
+import sisudoc.io_out.rgx_xhtml;
+import std.file;
+import std.uri;
+// import std.digest.sha;
import std.conv : to;
import std.typecons : Nullable;
import d2sqlite3;
@@ -113,7 +112,7 @@ template SQLiteHubBuildTablesAndPopulate() {
_db_statement = [];
}
db.close;
- if (doc.matters.opt.action.vox_gt0) {
+ if (doc.matters.opt.action.vox_gt_1) {
writeln(" ", pth_sqlite.sqlite_file);
}
}
@@ -196,7 +195,7 @@ template SQLiteHubDiscreteBuildTablesAndPopulate() {
import core.runtime;
core.runtime.Runtime.terminate();
}
- if (doc.matters.opt.action.vox_gt0) {
+ if (doc.matters.opt.action.vox_gt_1) {
writeln(" ", pth_sqlite.sqlite_file(doc.matters.src.filename));
}
}
@@ -228,7 +227,7 @@ template SQLiteDbRun() {
{ /+ debug +/
if (opt_action.debug_do_sqlite) {
writeln(note);
- if (opt_action.vox_gt2) {
+ if (opt_action.vox_gt_3) {
writeln(db_statement);
}
}
@@ -481,7 +480,7 @@ template SQLiteFormatAndLoadObject() {
);
}
} else {
- if (doc_matters.opt.action.vox_gt0) {
+ if (doc_matters.opt.action.vox_gt_1) {
writeln(
"WARNING on internal document links, anchor to link <<"
~ m.captures["hash"]
@@ -1659,12 +1658,12 @@ template SQLiteTablesCreate() {
? config.conf.w_srv_db_sqlite_path
: "";
if (db_filename.length > 0 && db_path.length > 0) {
- if (opt_action.vox_gt2) {
+ if (opt_action.vox_gt_3) {
writeln("db name: ", db_filename);
writeln("db path: ", db_path);
writeln("db name & path: ", db_path, "/", db_filename);
}
- if (opt_action.vox_gt1) {
+ if (opt_action.vox_gt_2) {
writeln("attempting to create db: ", db_path, "/", db_filename);
}
auto pth_sqlite = spinePathsSQLite!()(db_filename, db_path);
diff --git a/src/sisudoc/io_out/text.d b/src/sisudoc/io_out/text.d
new file mode 100644
index 0000000..9401bae
--- /dev/null
+++ b/src/sisudoc/io_out/text.d
@@ -0,0 +1,470 @@
+/+
+- Name: SisuDoc Spine, Doc Reform [a part of]
+ - Description: documents, structuring, processing, publishing, search
+ - static content generator
+
+ - Author: Ralph Amissah
+ [ralph.amissah@gmail.com]
+
+ - Copyright: (C) 2015 - 2025 Ralph Amissah, All Rights Reserved.
+
+ - License: AGPL 3 or later:
+
+ Spine (SiSU), a framework for document structuring, publishing and
+ search
+
+ Copyright (C) Ralph Amissah
+
+ This program is free software: you can redistribute it and/or modify it
+ under the terms of the GNU AFERO General Public License as published by the
+ Free Software Foundation, either version 3 of the License, or (at your
+ option) any later version.
+
+ This program is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ more details.
+
+ You should have received a copy of the GNU General Public License along with
+ this program. If not, see [https://www.gnu.org/licenses/].
+
+ If you have Internet connection, the latest version of the AGPL should be
+ available at these locations:
+ [https://www.fsf.org/licensing/licenses/agpl.html]
+ [https://www.gnu.org/licenses/agpl.html]
+
+ - Spine (by Doc Reform, related to SiSU) uses standard:
+ - docReform markup syntax
+ - standard SiSU markup syntax with modified headers and minor modifications
+ - docReform object numbering
+ - standard SiSU object citation numbering & system
+
+ - Homepages:
+ [https://www.sisudoc.org]
+ [https://www.doc-reform.org]
+
+ - Git
+ [https://git.sisudoc.org/]
+
++/
+module sisudoc.io_out.text;
+@safe:
+template outputText() {
+ template munge() {
+ import sisudoc.io_out;
+ import sisudoc.io_out.rgx;
+ import std.stdio;
+ import std.conv;
+ import std.conv : to;
+ import std.typecons : Nullable;
+ mixin spineRgxOut;
+ static auto rgx = RgxO();
+ void puts(string _obj_is) {
+ writeln(__FILE__, ":", __LINE__, ": ", _obj_is);
+ }
+ string newline = "\n";
+ string newlines = "\n\n";
+ template special_characters_and_font_face() {
+ string code(string _txt){
+ _txt = _txt.replaceAll(rgx.nbsp_char, " ");
+ return _txt;
+ }
+ string general(string _txt) {
+ _txt = _txt
+ .replaceAll(rgx.nbsp_char, " ")
+ .replaceAll(rgx.br_line, "\n")
+ .replaceAll(rgx.br_line_inline, "\n")
+ .replaceAll(rgx.br_line_spaced, "\n\n")
+ .replaceAll(rgx.inline_strike, "-{$1}-")
+ .replaceAll(rgx.inline_insert, "+{$1}+")
+ .replaceAll(rgx.inline_cite, "\"{$1}\"")
+ .replaceAll(rgx.inline_emphasis, "!{$1}!")
+ .replaceAll(rgx.inline_bold, "*{$1}*")
+ .replaceAll(rgx.inline_italics, "/{$1}/")
+ .replaceAll(rgx.inline_underscore, "_{$1}_")
+ .replaceAll(rgx.inline_superscript, "^{$1}^")
+ .replaceAll(rgx.inline_subscript, ",{$1},")
+ .replaceAll(rgx.inline_mono, "#{$1}#");
+ return _txt;
+ }
+ string links_and_images(string _txt){
+ if (_txt.match(rgx.inline_link)) {
+ foreach (m; _txt.matchAll(rgx.inline_link)) {
+ _txt = (m.captures[3] == "0")
+ ? _txt.replaceFirst(rgx.inline_link, (m.captures[1]))
+ : _txt.replaceFirst(rgx.inline_link, (m.captures[1] ~ " ≫" ~ m.captures[3]));
+ }
+ }
+ if (_txt.matchFirst(rgx.inline_image)) {
+ foreach (m; _txt.matchAll(rgx.inline_image)) {
+ _txt = _txt.replaceFirst(rgx.inline_image, (m.captures[3]));
+ }
+ }
+ return _txt;
+ }
+ }
+ string generalMunge(O,M)(O obj, M doc_matters) {
+ string _txt = obj.text;
+ string _notes;
+ string _ocn;
+ string general_munge;
+ _ocn = (obj.metainfo.ocn == 0 || doc_matters.opt.action.ocn_off)
+ ? "" : "「" ~ obj.metainfo.ocn.to!string ~ "」" ~ newline;
+ if (_txt.matchFirst(rgx.inline_notes_al_gen)) {
+ foreach (m; _txt.matchAll(rgx.inline_notes_al_regular_number_note)) {
+ _notes ~= newlines ~ m["num"] ~ ". "
+ ~ special_characters_and_font_face!().general(m["note"].replaceAll(rgx.inline_link, ("$1")));
+ }
+ }
+ _txt = _txt.replaceAll(rgx.inline_notes_al_regular_number_note, "[$1]");
+ _txt = (obj.metainfo.is_a == "code")
+ ? special_characters_and_font_face!().code(_txt)
+ : special_characters_and_font_face!().general(_txt);
+ _txt = special_characters_and_font_face!().links_and_images(_txt);
+ general_munge = (obj.metainfo.is_a == "heading")
+ ? newline ~ _txt ~ _notes ~ newline ~ _ocn ~ newline
+ : _txt ~ _notes ~ newline ~ _ocn ~ newline;
+ return general_munge;
+ }
+ string toc(O,M)(O obj, M doc_matters) {
+ // puts(obj.metainfo.is_a);
+ // return "toc\n";
+ // _txt = _special_characters_and_font_face(obj.text);
+ string _txt = special_characters_and_font_face!().general(obj.text);
+ string _spaces;
+ switch (obj.attrib.indent_hang) {
+ case 1: _spaces = "";
+ break;
+ case 2: _spaces = ":";
+ break;
+ case 3: _spaces = "∴";
+ break;
+ case 4: _spaces = " ";
+ break;
+ case 5: _spaces = " ";
+ break;
+ case 6: _spaces = " ";
+ break;
+ case 7: _spaces = " ";
+ break;
+ case 8: _spaces = " ";
+ break;
+ default:
+ break;
+ }
+ _txt = (doc_matters.opt.action.ocn_off)
+ ? _txt.replaceAll(rgx.inline_link, (_spaces ~ "$1"))
+ : _txt.replaceAll(rgx.inline_link, (_spaces ~ "$1 ≫ $3"));
+ return _txt ~ newline;
+ }
+ string heading(O,M)(O obj, M doc_matters) {
+ // puts(obj.metainfo.is_a);
+ // return obj.metainfo.is_a;
+ string _general_munge = generalMunge(obj,doc_matters);
+ return _general_munge;
+ }
+ string para(O,M)(O obj, M doc_matters) {
+ // puts(obj.metainfo.is_a);
+ // return obj.metainfo.is_a;
+ string _general_munge = generalMunge(obj,doc_matters);
+ return _general_munge;
+ }
+ string group(O,M)(O obj, M doc_matters) {
+ /+
+ The "group" is different from the "block" mark in that "group" does not
+ preserve whitespace, the "block" mark does. The text falling within the
+ block is a single object.
+ +/
+ // puts(obj.metainfo.is_a);
+ // return obj.metainfo.is_a;
+ string _general_munge = generalMunge(obj,doc_matters);
+ return _general_munge;
+ }
+ string block(O,M)(O obj, M doc_matters) {
+ /+
+ The "block" is different from the "group" mark in that the "block" mark
+ (like the "poem" mark) preserves whitespace, the "group" mark does not.
+ The text falling within the "block" is a single object, which is different
+ from the "poem" mark where each identified verse is an object.
+ +/
+ // puts(obj.metainfo.is_a);
+ // return obj.metainfo.is_a;
+ string _general_munge = generalMunge(obj,doc_matters);
+ return _general_munge;
+ }
+ string poem(O,M)(O obj, M doc_matters) { // LATER
+ /+
+ The "poem" mark like the "block" preserves whitespace. Text followed by
+ two newlines are identified as verse and each verse is an object i.e. a
+ poem may consist of multiple verse each of which is identified as an
+ object, unlike a text "block" which is identified as a single object.
+ +/
+ // puts(obj.metainfo.is_a);
+ // return obj.metainfo.is_a;
+ return obj.text ~ newlines;
+ }
+ string verse(O,M)(O obj, M doc_matters) {
+ /+
+ See description of poem, the poem is demarkated but the verse is the
+ object.
+ +/
+ // puts(obj.metainfo.is_a);
+ // return obj.metainfo.is_a;
+ string _general_munge = generalMunge(obj,doc_matters);
+ return _general_munge;
+ }
+ string code(O,M)(O obj, M doc_matters) {
+ /+
+ "Code" blocks are a single text object, in which the original text is
+ preserved.
+ +/
+ // puts(obj.metainfo.is_a);
+ // return obj.metainfo.is_a;
+ string _general_munge = generalMunge(obj,doc_matters);
+ return _general_munge;
+ }
+ string quote(O,M)(O obj, M doc_matters) { // LATER
+ // puts(obj.metainfo.is_a);
+ // return obj.metainfo.is_a;
+ return obj.text ~ newline ~ "「" ~ obj.metainfo.ocn.to!string ~ "」" ~ newlines;
+ }
+ string table(O,M)(O obj, M doc_matters) {
+ // puts(obj.metainfo.is_a);
+ // return obj.metainfo.is_a;
+ auto tablarize(O)(
+ string _txt,
+ const O obj,
+ ) {
+ string[] _table_rows = (_txt).split(rgx.table_delimiter_row);
+ string[] _table_cols;
+ string _table = "";
+ string _tablenote = "";
+ int[] _col_width;
+ _col_width.length = obj.table.number_of_columns.to!ulong;
+ foreach(row_idx, row; _table_rows) {
+ _table_cols = row.split(rgx.table_delimiter_col);
+ _table ~= "";
+ foreach(col_idx, cell; _table_cols) {
+ if (!((_table_cols.length == 1)
+ && (_table_rows.length <= row_idx+2))) {
+ if (_col_width[col_idx] < (cell.length.to!int)) {
+ _col_width[col_idx] = cell.length.to!int;
+ }
+ }
+ }
+ }
+ foreach(row_idx, row; _table_rows) {
+ _table_cols = row.split(rgx.table_delimiter_col);
+ foreach(col_idx, cell; _table_cols) {
+ if ((_table_cols.length == 1)
+ && (_table_rows.length <= row_idx+2)) { // check row_idx+2 (rather than == ++row_idx)
+ _tablenote ~= cell ~ newline;
+ } else {
+ if (obj.table.column_aligns[col_idx] == "l") {
+ _table ~= format(q"┃%-*s%s┃",
+ _col_width[col_idx],
+ cell,
+ (_table_cols.length > (col_idx + 1)) ? " ┊ " : ""
+ );
+ } else {
+ _table ~= format(q"┃%*s%s┃",
+ _col_width[col_idx],
+ cell,
+ (_table_cols.length > (col_idx + 1)) ? " ┊ " : ""
+ );
+ }
+ _table = _table
+ .replaceAll(regex("\\s*$"), "");
+ }
+ }
+ _table ~= newline;
+ }
+ Tuple!(string, string) t = tuple(
+ _table,
+ _tablenote,
+ );
+ return t;
+ }
+ // string _txt = obj.text;
+ // writeln(obj.table.column_widths);
+ auto _t = tablarize(obj.text, obj);
+ string _txt = _t[0];
+ string _tablenote = _t[1];
+ return _txt ~ _tablenote ~ "「" ~ obj.metainfo.ocn.to!string ~ "」" ~ newlines;
+ }
+ string endnote(O,M)(O obj, M doc_matters) {
+ // puts(obj.metainfo.is_a);
+ // return obj.metainfo.is_a;
+ string _ocn;
+ _ocn = "「" ~ obj.metainfo.ocn.to!string ~ "」";
+ string _txt = obj.text;
+ string _parent_ocn;
+ _txt = _txt
+ .replaceAll(rgx.inline_link, ("$1")) // consider
+ .replaceFirst(rgx.inline_superscript, ("$1"));
+ _parent_ocn = (obj.metainfo.parent_ocn == 0 || doc_matters.opt.action.ocn_off)
+ ? "" : " ≫" ~ obj.metainfo.parent_ocn.to!string;
+ _txt = special_characters_and_font_face!().general(_txt) ~ _parent_ocn;
+ return _txt ~ newlines;
+ }
+ string bookindex(O,M)(O obj, M doc_matters) {
+ // puts(obj.metainfo.is_a);
+ // return obj.metainfo.is_a;
+ string _txt = obj.text;
+ _txt = (doc_matters.opt.action.ocn_off)
+ ? _txt.replaceAll(rgx.find_bookindex_ocn_link_and_comma, "")
+ .replaceAll(regex("\\s*\\\\"), "")
+ : _txt.replaceAll(rgx.inline_link, ("≫$1"))
+ .replaceAll(regex("\\s*\\\\"), "");
+ _txt = special_characters_and_font_face!().general(_txt);
+ return _txt ~ newlines;
+ }
+ string bibliography(O,M)(O obj, M doc_matters) {
+ // puts(obj.metainfo.is_a);
+ // return obj.metainfo.is_a;
+ string _txt = obj.text;
+ _txt = special_characters_and_font_face!().general(_txt);
+ return _txt ~ newlines;
+ // ALT:
+ // string _general_munge = generalMunge(obj,doc_matters);
+ // return _general_munge;
+ }
+ string glossary(O,M)(O obj, M doc_matters) {
+ // puts(obj.metainfo.is_a);
+ // return obj.metainfo.is_a;
+ string _txt = obj.text;
+ _txt = special_characters_and_font_face!().general(_txt);
+ return _txt;
+ }
+ string blurb(O,M)(O obj, M doc_matters) {
+ // puts(obj.metainfo.is_a);
+ // return obj.metainfo.is_a;
+ string _general_munge = generalMunge(obj,doc_matters);
+ return _general_munge;
+ }
+ string comment(O,M)(O obj, M doc_matters) { // LATER
+ /+
+ +/
+ // puts(obj.metainfo.is_a);
+ // return obj.metainfo.is_a;
+ return obj.text ~ newlines;
+ }
+ }
+ template theDocument() {
+ import std.stdio;
+ import sisudoc.io_out;
+ string text_head(M)(
+ M doc_matters,
+ ) {
+ return "head";
+ }
+ string text_body(D,M)(
+ const D doc_abstraction,
+ M doc_matters,
+ ) {
+ string doc_object = "";
+ foreach (section; doc_matters.has.keys_seq.scroll) {
+ foreach (obj; doc_abstraction[section]) {
+ if (obj.metainfo.is_a == "toc") { doc_object ~= munge!().toc(obj, doc_matters); }
+ if (obj.metainfo.is_a == "heading") { doc_object ~= munge!().heading(obj, doc_matters); }
+ if (obj.metainfo.is_a == "para") { doc_object ~= munge!().para(obj, doc_matters); }
+ if (obj.metainfo.is_a == "group") { doc_object ~= munge!().group(obj, doc_matters); }
+ if (obj.metainfo.is_a == "block") { doc_object ~= munge!().block(obj, doc_matters); }
+ if (obj.metainfo.is_a == "poem") { doc_object ~= munge!().poem(obj, doc_matters); } // CHECK
+ if (obj.metainfo.is_a == "verse") { doc_object ~= munge!().verse(obj, doc_matters); } // CHECK
+ if (obj.metainfo.is_a == "code") { doc_object ~= munge!().code(obj, doc_matters); }
+ if (obj.metainfo.is_a == "quote") { doc_object ~= munge!().quote(obj, doc_matters); } // LATER
+ if (obj.metainfo.is_a == "table") { doc_object ~= munge!().table(obj, doc_matters); }
+ if (obj.metainfo.is_a == "endnote") { doc_object ~= munge!().endnote(obj, doc_matters); }
+ if (obj.metainfo.is_a == "bookindex") { doc_object ~= munge!().bookindex(obj, doc_matters); } // CHECK
+ if (obj.metainfo.is_a == "bibliography") { doc_object ~= munge!().bibliography(obj, doc_matters); } // CHECK
+ if (obj.metainfo.is_a == "glossary") { doc_object ~= munge!().glossary(obj, doc_matters); } // CHECK
+ if (obj.metainfo.is_a == "blurb") { doc_object ~= munge!().blurb(obj, doc_matters); } // CHECK
+ if (obj.metainfo.is_a == "comment") { doc_object ~= munge!().comment(obj, doc_matters); } // LATER
+ }
+ }
+ return doc_object;
+ }
+ string text_tail(M)(
+ M doc_matters,
+ ) {
+ string metadata_;
+ if (doc_matters.opt.action.debug_do) {
+ writeln(doc_matters.src.filename_base);
+ writeln("Title: ", doc_matters.conf_make_meta.meta.title_full);
+ writeln(" Author: ", doc_matters.conf_make_meta.meta.creator_author);
+ writeln(" Published: ", doc_matters.conf_make_meta.meta.date_published);
+ writeln(" Copyright: ", doc_matters.conf_make_meta.meta.rights_copyright);
+ writeln(" License: ", doc_matters.conf_make_meta.meta.rights_license);
+ }
+ if (!(doc_matters.conf_make_meta.meta.title_full.empty)) {
+ metadata_ ~= "Title: " ~ doc_matters.conf_make_meta.meta.title_full ~ "\n\n";
+ } else if (doc_matters.opt.action.debug_do || doc_matters.opt.action.vox_gt_3) {
+ writeln("ERROR no Title information provided in document header ", doc_matters.src.filename_base);
+ }
+ if (!(doc_matters.conf_make_meta.meta.creator_author.empty)) {
+ if (doc_matters.opt.action.html_link_curate) {
+ metadata_ ~= "Author: " ~ doc_matters.conf_make_meta.meta.creator_author_surname.translate([' ' : "_"])
+ ~ doc_matters.conf_make_meta.meta.creator_author ~ "\n\n";
+ } else {
+ metadata_ ~= "Author: "
+ ~ doc_matters.conf_make_meta.meta.creator_author ~ "\n\n";
+ }
+ } else if (doc_matters.opt.action.debug_do || doc_matters.opt.action.vox_gt_3) {
+ writeln("ERROR no Author information provided in document header ", doc_matters.src.filename_base);
+ }
+ metadata_ ~= "Published: " ~ doc_matters.conf_make_meta.meta.date_published ~ "\n\n";
+ if (!(doc_matters.conf_make_meta.meta.rights_copyright.empty)) {
+ metadata_ ~= "Copyright: " ~ doc_matters.conf_make_meta.meta.rights_copyright ~ "\n\n";
+ } else if (doc_matters.opt.action.debug_do || doc_matters.opt.action.vox_gt_3) {
+ writeln("WARNING no Copyright information provided in document header ", doc_matters.src.filename_base);
+ }
+ if (!(doc_matters.conf_make_meta.meta.rights_license.empty)) {
+ metadata_ ~= "License: " ~ doc_matters.conf_make_meta.meta.rights_license ~ "\n\n";
+ } else if (doc_matters.opt.action.debug_do || doc_matters.opt.action.vox_gt_3) {
+ writeln("WARNING no License information provided in document header ", doc_matters.src.filename_base);
+ }
+ metadata_ ~= doc_matters.generator_program.project_name.strip ~ "\n";
+ metadata_ ~= doc_matters.generator_program.url_home.strip;
+ return metadata_;
+ }
+ }
+ void outputText(D,M) (
+ const D doc_abstraction,
+ M doc_matters,
+ ) {
+ import std.stdio;
+ import sisudoc.io_out;
+ void text_out(D,M)(
+ const D doc_abstraction,
+ M doc_matters,
+ ) {
+ struct Text {
+ string head;
+ string content;
+ string tail;
+ }
+ auto text = Text();
+ // text.head = theDocument!().text_head(doc_matters);
+ text.content = theDocument!().text_body(doc_abstraction, doc_matters);
+ text.tail = theDocument!().text_tail(doc_matters);
+ auto pth_text = spinePathsText(doc_matters);
+ try {
+ import std.file;
+ if (!exists(pth_text.base_pth)) {
+ (pth_text.base_pth).mkdirRecurse;
+ }
+ } catch (ErrnoException ex) {
+ }
+ if (doc_matters.opt.action.vox_gt_1) {
+ writeln(" ", pth_text.text_file);
+ }
+ // writeln(pth_text.base_pth);
+ auto f = File(pth_text.text_file, "w");
+ // f.writeln(text.head);
+ f.writeln(text.content);
+ f.writeln(text.tail);
+ }
+ text_out(doc_abstraction, doc_matters);
+ }
+}
diff --git a/src/sisudoc/io_out/xmls.d b/src/sisudoc/io_out/xmls.d
index 7fc5e51..bf52524 100644
--- a/src/sisudoc/io_out/xmls.d
+++ b/src/sisudoc/io_out/xmls.d
@@ -50,19 +50,17 @@
module sisudoc.io_out.xmls;
@safe:
template outputXHTMLs() {
- import
- std.file,
- std.outbuffer,
- std.uri,
- std.conv : to;
- import
- sisudoc.io_out,
- sisudoc.io_out.rgx,
- sisudoc.meta.rgx_files,
- sisudoc.io_out.rgx_xhtml,
- sisudoc.io_out.create_zip_file,
- sisudoc.io_out.xmls,
- sisudoc.io_out.xmls_css;
+ import std.file;
+ import std.outbuffer;
+ import std.uri;
+ import std.conv : to;
+ import sisudoc.io_out;
+ import sisudoc.io_out.rgx;
+ import sisudoc.meta.rgx_files;
+ import sisudoc.io_out.rgx_xhtml;
+ import sisudoc.io_out.create_zip_file;
+ import sisudoc.io_out.xmls;
+ import sisudoc.io_out.xmls_css;
mixin spineRgxOut;
mixin spineRgxXHTML;
struct outputXHTMLs {
@@ -577,7 +575,7 @@ string tail(M)(M doc_matters) {
);
}
} else {
- if (doc_matters.opt.action.vox_gt0) {
+ if (doc_matters.opt.action.vox_gt_1) {
writeln(
"WARNING on internal document links, anchor to link <<"
~ m.captures["hash"]
diff --git a/src/sisudoc/meta/conf_make_meta_json.d b/src/sisudoc/meta/conf_make_meta_json.d
index 44f2c5e..4e9e5cd 100644
--- a/src/sisudoc/meta/conf_make_meta_json.d
+++ b/src/sisudoc/meta/conf_make_meta_json.d
@@ -54,21 +54,19 @@
module sisudoc.meta.conf_make_meta_json;
@safe:
static template contentJSONtoSpineStruct() {
- import
- std.algorithm,
- std.array,
- std.exception,
- std.regex,
- std.stdio,
- std.string,
- std.typecons,
- std.utf,
- std.conv : to;
- import
- sisudoc.meta.conf_make_meta_structs,
- sisudoc.meta.conf_make_meta_json,
- sisudoc.meta.defaults,
- sisudoc.meta.rgx;
+ import std.algorithm;
+ import std.array;
+ import std.exception;
+ import std.regex;
+ import std.stdio;
+ import std.string;
+ import std.typecons;
+ import std.utf;
+ import std.conv : to;
+ import sisudoc.meta.conf_make_meta_structs;
+ import sisudoc.meta.conf_make_meta_json;
+ import sisudoc.meta.defaults;
+ import sisudoc.meta.rgx;
ConfComposite _struct_composite;
auto contentJSONtoSpineStruct(C,J,M)(C _struct_composite, J _json, M _manifested, string _identifier) {
mixin spineRgxIn;
diff --git a/src/sisudoc/meta/conf_make_meta_structs.d b/src/sisudoc/meta/conf_make_meta_structs.d
index 4738a57..9503c83 100644
--- a/src/sisudoc/meta/conf_make_meta_structs.d
+++ b/src/sisudoc/meta/conf_make_meta_structs.d
@@ -49,20 +49,18 @@
+/
module sisudoc.meta.conf_make_meta_structs;
@safe:
-import
- std.exception,
- std.json,
- std.path,
- std.regex,
- std.stdio,
- std.string,
- std.typecons,
- std.utf,
- std.conv : to;
-import
- sisudoc.meta.defaults,
- sisudoc.meta.rgx_yaml,
- sisudoc.meta.rgx;
+import std.exception;
+import std.json;
+import std.path;
+import std.regex;
+import std.stdio;
+import std.string;
+import std.typecons;
+import std.utf;
+import std.conv : to;
+import sisudoc.meta.defaults;
+import sisudoc.meta.rgx_yaml;
+import sisudoc.meta.rgx;
mixin spineRgxIn;
static auto rgx = RgxI();
mixin spineRgxYamlTags;
diff --git a/src/sisudoc/meta/conf_make_meta_yaml.d b/src/sisudoc/meta/conf_make_meta_yaml.d
index 98a92f9..4b56b51 100644
--- a/src/sisudoc/meta/conf_make_meta_yaml.d
+++ b/src/sisudoc/meta/conf_make_meta_yaml.d
@@ -54,22 +54,20 @@
module sisudoc.meta.conf_make_meta_yaml;
@safe:
template contentYAMLtoSpineStruct() {
- import
- std.algorithm,
- std.array,
- std.exception,
- std.path,
- std.regex,
- std.stdio,
- std.string,
- std.typecons,
- std.utf,
- std.conv : to;
- import
- sisudoc.meta.conf_make_meta_structs,
- sisudoc.meta.defaults,
- sisudoc.meta.rgx_yaml,
- sisudoc.meta.rgx;
+ import std.algorithm;
+ import std.array;
+ import std.exception;
+ import std.path;
+ import std.regex;
+ import std.stdio;
+ import std.string;
+ import std.typecons;
+ import std.utf;
+ import std.conv : to;
+ import sisudoc.meta.conf_make_meta_structs;
+ import sisudoc.meta.defaults;
+ import sisudoc.meta.rgx_yaml;
+ import sisudoc.meta.rgx;
ConfComposite _struct_composite;
@system ConfComposite contentYAMLtoSpineStruct(C,Y,M,O,Cfg)(
C _struct_composite,
@@ -896,9 +894,8 @@ template contentYAMLtoSpineStruct() {
}
template configParseYAMLreturnSpineStruct() {
import dyaml;
- import
- sisudoc.meta.conf_make_meta_structs,
- sisudoc.meta.conf_make_meta_json;
+ import sisudoc.meta.conf_make_meta_structs;
+ import sisudoc.meta.conf_make_meta_json;
mixin contentYAMLtoSpineStruct;
@system ConfComposite configParseYAMLreturnSpineStruct(T,M,O,Cfg)(
T _document_struct,
@@ -928,21 +925,18 @@ template configParseYAMLreturnSpineStruct() {
}
}
template docHeaderMakeAndMetaTupYamlExtractAndConvertToStruct() {
- import
- std.exception,
- std.regex,
- std.stdio,
- // std.traits,
- std.typecons,
- std.utf,
- std.conv : to;
- import
- dyaml;
- import
- sisudoc.meta.conf_make_meta_structs,
- sisudoc.meta.conf_make_meta_json,
- sisudoc.meta.rgx_yaml,
- sisudoc.meta.rgx;
+ import std.exception;
+ import std.regex;
+ import std.stdio;
+ // import std.traits;
+ import std.typecons;
+ import std.utf;
+ import std.conv : to;
+ import dyaml;
+ import sisudoc.meta.conf_make_meta_structs;
+ import sisudoc.meta.conf_make_meta_json;
+ import sisudoc.meta.rgx_yaml;
+ import sisudoc.meta.rgx;
mixin spineRgxIn;
mixin contentJSONtoSpineStruct;
static auto rgx = RgxI();
diff --git a/src/sisudoc/meta/doc_debugs.d b/src/sisudoc/meta/doc_debugs.d
index 35fd3de..b28ba2e 100644
--- a/src/sisudoc/meta/doc_debugs.d
+++ b/src/sisudoc/meta/doc_debugs.d
@@ -52,24 +52,22 @@
+/
module sisudoc.meta.doc_debugs;
template spineDebugs() {
- import
- sisudoc.meta.defaults,
- sisudoc.meta.rgx_files;
- import
- std.algorithm,
- std.array,
- std.container,
- std.exception,
- std.json,
- std.stdio,
- std.file,
- std.path,
- std.range,
- std.regex,
- std.string,
- std.typecons,
- std.utf,
- std.conv : to;
+ import sisudoc.meta.defaults;
+ import sisudoc.meta.rgx_files;
+ import std.algorithm;
+ import std.array;
+ import std.container;
+ import std.exception;
+ import std.json;
+ import std.stdio;
+ import std.file;
+ import std.path;
+ import std.range;
+ import std.regex;
+ import std.string;
+ import std.typecons;
+ import std.utf;
+ import std.conv : to;
auto spineDebugs(S,T)(
const S contents,
T doc_matters,
diff --git a/src/sisudoc/meta/metadoc.d b/src/sisudoc/meta/metadoc.d
index 5c3694e..ffe297e 100644
--- a/src/sisudoc/meta/metadoc.d
+++ b/src/sisudoc/meta/metadoc.d
@@ -50,20 +50,18 @@
module sisudoc.meta.metadoc;
@safe:
template spineAbstraction() {
- import
- std.datetime,
- std.digest.crc,
- std.digest.sha;
- import
- sisudoc.meta,
- sisudoc.meta.metadoc_from_src,
- sisudoc.meta.conf_make_meta_structs,
- sisudoc.meta.conf_make_meta_json,
- sisudoc.meta.defaults,
- sisudoc.io_in.paths_source,
- sisudoc.io_in.read_config_files,
- sisudoc.io_in.read_source_files,
- sisudoc.io_out.hub;
+ import std.datetime;
+ import std.digest.crc;
+ import std.digest.sha;
+ import sisudoc.meta;
+ import sisudoc.meta.metadoc_from_src;
+ import sisudoc.meta.conf_make_meta_structs;
+ import sisudoc.meta.conf_make_meta_json;
+ import sisudoc.meta.defaults;
+ import sisudoc.io_in.paths_source;
+ import sisudoc.io_in.read_config_files;
+ import sisudoc.io_in.read_source_files;
+ import sisudoc.io_out.hub;
mixin spineBiblio;
mixin outputHub;
enum makeMeta { make, meta }
diff --git a/src/sisudoc/meta/metadoc_curate.d b/src/sisudoc/meta/metadoc_curate.d
index bb7452a..da20b3e 100644
--- a/src/sisudoc/meta/metadoc_curate.d
+++ b/src/sisudoc/meta/metadoc_curate.d
@@ -54,19 +54,17 @@ template spineMetaDocCurate() {
T doc_matters,
H hvst,
) {
- import
- sisudoc.meta.defaults,
- sisudoc.meta.rgx;
- import
- std.array,
- std.exception,
- std.regex,
- std.stdio,
- std.string,
- std.typecons,
- std.uni,
- std.utf,
- std.conv : to;
+ import sisudoc.meta.defaults;
+ import sisudoc.meta.rgx;
+ import std.array;
+ import std.exception;
+ import std.regex;
+ import std.stdio;
+ import std.string;
+ import std.typecons;
+ import std.uni;
+ import std.utf;
+ import std.conv : to;
mixin InternalMarkup;
static auto mkup = InlineMarkup();
import sisudoc.io_out.paths_output;
diff --git a/src/sisudoc/meta/metadoc_curate_authors.d b/src/sisudoc/meta/metadoc_curate_authors.d
index c86d3e1..d8b5261 100644
--- a/src/sisudoc/meta/metadoc_curate_authors.d
+++ b/src/sisudoc/meta/metadoc_curate_authors.d
@@ -49,17 +49,15 @@
+/
module sisudoc.meta.metadoc_curate_authors;
@safe:
- import
- std.algorithm,
- std.array,
- std.exception,
- std.regex,
- std.stdio,
- std.string,
- std.conv : to;
- import
- sisudoc.meta.defaults,
- sisudoc.meta.rgx;
+ import std.algorithm;
+ import std.array;
+ import std.exception;
+ import std.regex;
+ import std.stdio;
+ import std.string;
+ import std.conv : to;
+ import sisudoc.meta.defaults;
+ import sisudoc.meta.rgx;
mixin spineCurateMetadata;
mixin InternalMarkup;
template spineMetaDocCuratesAuthors() {
diff --git a/src/sisudoc/meta/metadoc_curate_topics.d b/src/sisudoc/meta/metadoc_curate_topics.d
index fca3ff2..3045dcb 100644
--- a/src/sisudoc/meta/metadoc_curate_topics.d
+++ b/src/sisudoc/meta/metadoc_curate_topics.d
@@ -49,17 +49,15 @@
+/
module sisudoc.meta.metadoc_curate_topics;
@safe:
- import
- std.algorithm,
- std.array,
- std.exception,
- std.regex,
- std.stdio,
- std.string,
- std.conv : to;
- import
- sisudoc.meta.defaults,
- sisudoc.meta.rgx;
+ import std.algorithm;
+ import std.array;
+ import std.exception;
+ import std.regex;
+ import std.stdio;
+ import std.string;
+ import std.conv : to;
+ import sisudoc.meta.defaults;
+ import sisudoc.meta.rgx;
mixin spineCurateMetadata;
mixin InternalMarkup;
template spineMetaDocCuratesTopics() {
diff --git a/src/sisudoc/meta/metadoc_from_src.d b/src/sisudoc/meta/metadoc_from_src.d
index 4aa49dc..4240a3f 100644
--- a/src/sisudoc/meta/metadoc_from_src.d
+++ b/src/sisudoc/meta/metadoc_from_src.d
@@ -54,19 +54,17 @@ module sisudoc.meta.metadoc_from_src;
@safe:
template docAbstraction() {
// ↓ abstraction imports
- import
- std.algorithm,
- std.container,
- std.digest.sha,
- std.file,
- std.json,
- std.path;
- import
- sisudoc.meta,
- sisudoc.meta.defaults,
- sisudoc.meta.rgx,
- sisudoc.meta.metadoc_object_setter,
- sisudoc.meta.rgx;
+ import std.algorithm;
+ import std.container;
+ import std.digest.sha;
+ import std.file;
+ import std.json;
+ import std.path;
+ import sisudoc.meta;
+ import sisudoc.meta.defaults;
+ import sisudoc.meta.rgx;
+ import sisudoc.meta.metadoc_object_setter;
+ import sisudoc.meta.rgx;
public import sisudoc.meta.metadoc_from_src_functions;
mixin docAbstractionFunctions;
@system auto docAbstraction(CMM,Opt,Mf) (
@@ -214,8 +212,8 @@ template docAbstraction() {
}
if (conf_make_meta.make.substitute) {
foreach(substitution_pair; conf_make_meta.make.substitute) {
- writeln("regex to match: ", substitution_pair[Substitute.match]);
- writeln("substitution to make: ", substitution_pair[Substitute.markup]);
+ writeln("regex to match: ", substitution_pair[Substitute.match]);
+ writeln("substitution to make: ", substitution_pair[Substitute.markup]);
}
}
if (conf_make_meta.make.bold) {
@@ -772,7 +770,7 @@ template docAbstraction() {
comp_obj_.has.inline_links = substantive_obj_misc_struct.has_links;
comp_obj_.has.image_without_dimensions = substantive_obj_misc_struct.has_images_without_dimensions;
the_document_body_section ~= comp_obj_;
- tag_assoc = an_object.inline_para_link_anchor(tag_in_seg, tag_assoc);
+ tag_assoc = an_object.inline_para_link_anchor(tag_in_seg, tag_assoc);
{
ST_txt_by_line_common_reset _get = txt_by_line_common_reset_(line_occur, an_object, pith);
{
@@ -941,7 +939,7 @@ template docAbstraction() {
}
{ // document segnames
ST_segnames get_segnames;
- get_segnames = the_document_body_section.after_doc_determine_segnames(the_document_endnotes_section, the_document_glossary_section, the_document_bibliography_section, the_document_bookindex_section, the_document_blurb_section, segnames, html_segnames_ptr_cntr, html_segnames_ptr); //
+ get_segnames = the_document_body_section.after_doc_determine_segnames(the_document_endnotes_section, the_document_glossary_section, the_document_bibliography_section, the_document_bookindex_section, the_document_blurb_section, segnames, html_segnames_ptr_cntr, html_segnames_ptr);
segnames = get_segnames.segnames;
html_segnames_ptr_cntr = get_segnames.html_segnames_ptr_cntr;
html_segnames_ptr = get_segnames.html_segnames_ptr;
@@ -1378,36 +1376,42 @@ template docAbstraction() {
"scroll": ["head", "toc", "body",],
"seg": ["head", "toc", "body",],
"sql": ["head", "body",],
- "latex": ["head", "toc", "body",]
+ "latex": ["head", "toc", "body",],
+ "text": ["head", "toc", "body",],
];
if (document_the["endnotes"].length > 1) {
document_section_keys_sequenced["scroll"] ~= "endnotes";
document_section_keys_sequenced["seg"] ~= "endnotes";
document_section_keys_sequenced["latex"] ~= "endnotes";
+ document_section_keys_sequenced["text"] ~= "endnotes";
}
if (document_the["glossary"].length > 1) {
document_section_keys_sequenced["scroll"] ~= "glossary";
document_section_keys_sequenced["seg"] ~= "glossary";
document_section_keys_sequenced["sql"] ~= "glossary";
document_section_keys_sequenced["latex"] ~= "glossary";
+ document_section_keys_sequenced["text"] ~= "glossary";
}
if (document_the["bibliography"].length > 1) {
document_section_keys_sequenced["scroll"] ~= "bibliography";
document_section_keys_sequenced["seg"] ~= "bibliography";
document_section_keys_sequenced["sql"] ~= "bibliography";
document_section_keys_sequenced["latex"] ~= "bibliography";
+ document_section_keys_sequenced["text"] ~= "bibliography";
}
if (document_the["bookindex"].length > 1) {
document_section_keys_sequenced["scroll"] ~= "bookindex";
document_section_keys_sequenced["seg"] ~= "bookindex";
document_section_keys_sequenced["sql"] ~= "bookindex";
document_section_keys_sequenced["latex"] ~= "bookindex";
+ document_section_keys_sequenced["text"] ~= "bookindex";
}
if (document_the["blurb"].length > 1) {
document_section_keys_sequenced["scroll"] ~= "blurb";
document_section_keys_sequenced["seg"] ~= "blurb";
document_section_keys_sequenced["sql"] ~= "blurb";
document_section_keys_sequenced["latex"] ~= "blurb";
+ document_section_keys_sequenced["text"] ~= "blurb";
}
if ((opt_action.html)
|| (opt_action.html_scroll)
diff --git a/src/sisudoc/meta/metadoc_from_src_functions.d b/src/sisudoc/meta/metadoc_from_src_functions.d
index 3ae10d1..63143e9 100644
--- a/src/sisudoc/meta/metadoc_from_src_functions.d
+++ b/src/sisudoc/meta/metadoc_from_src_functions.d
@@ -2557,10 +2557,8 @@ template docAbstractionFunctions() {
CMM conf_make_meta,
Flag!"_new_doc" _new_doc
) {
- obj_txt["munge"] = obj_[obj_key_].dup;
- obj_txt["munge"] = (obj_["is"].match(ctRegex!(`verse|code`)))
- ? obj_txt["munge"]
- : obj_txt["munge"].strip;
+ obj_txt["munge"] = obj_[obj_key_].dup;
+ obj_txt["munge"] = (obj_["is"].match(ctRegex!(`verse|code`))) ? obj_txt["munge"] : obj_txt["munge"].strip;
if (_new_doc) {
anchor_tag = "";
}
@@ -2579,8 +2577,8 @@ template docAbstractionFunctions() {
|| (obj_["is"] == "group")
|| (obj_["is"] == "block")
|| (obj_["is"] == "verse")) {
- obj_txt["munge"] = (obj_txt["munge"]).inline_markup_faces;
- obj_txt["munge"] = (obj_txt["munge"]).links_and_images;
+ obj_txt["munge"] = (obj_txt["munge"]).inline_markup_faces;
+ obj_txt["munge"] = (obj_txt["munge"]).links_and_images;
}
switch (obj_["is"]) {
case "heading":
@@ -3299,8 +3297,8 @@ template docAbstractionFunctions() {
// ↓ - endnotes
struct NotesSection {
string[string] object_notes;
- int previous_count;
- int mkn;
+ int previous_count;
+ int mkn;
static auto rgx = RgxI();
private auto gather_notes_for_endnote_section(
ObjGenericComposite[] contents_am,
@@ -4235,11 +4233,31 @@ template docAbstractionFunctions() {
int html_segnames_ptr_cntr,
int html_segnames_ptr,
) {
+ string[string][string] notes_;
+ if (the_document_body_section.length > 1) {
+ string _notes;
+ foreach (ref obj; the_document_body_section) {
+ if (obj.has.inline_notes_reg) {
+ if ((obj.text).matchFirst(rgx.inline_notes_al_gen)) {
+ foreach (m; (obj.text).matchAll(rgx.inline_notes_al_regular_number_note)) {
+ _notes ~= "\n\n" ~ m["num"] ~ ". " ~ m["note"];
+ notes_[(m["num"])]["ocn"] = obj.metainfo.ocn.to!string;
+ }
+ }
+ }
+ }
+ }
if (the_document_endnotes_section.length > 1) {
segnames["html"] ~= "endnotes";
segnames["epub"] ~= "endnotes";
html_segnames_ptr = html_segnames_ptr_cntr;
foreach (ref obj; the_document_endnotes_section) {
+ auto matches = (obj.text).matchAll(rgx.endnote_section_note);
+ foreach (m; matches) {
+ obj.metainfo.parent_ocn = notes_[(m["notenumber"])]["ocn"].to!int;
+ }
+ }
+ foreach (ref obj; the_document_endnotes_section) {
if (obj.metainfo.is_a == "heading") {
obj.metainfo.parent_ocn = obj.metainfo.markedup_ancestors[obj.metainfo.parent_lev_markup];
}
@@ -5406,6 +5424,9 @@ template docSectKeysSeq() {
string[] latex() {
return document_section_keys_sequenced["latex"];
}
+ string[] text() {
+ return document_section_keys_sequenced["text"];
+ }
}
return doc_sect_keys_seq();
}
diff --git a/src/sisudoc/meta/metadoc_object_setter.d b/src/sisudoc/meta/metadoc_object_setter.d
index e0e896e..abcb799 100644
--- a/src/sisudoc/meta/metadoc_object_setter.d
+++ b/src/sisudoc/meta/metadoc_object_setter.d
@@ -57,68 +57,68 @@ module sisudoc.meta.metadoc_object_setter;
template ObjectSetter() {
/+ structs +/
struct DocObj_TxtAttrib_ {
- int indent_base = 0;
- int indent_hang = 0;
- bool bullet = false;
- string language = "";
+ int indent_base = 0;
+ int indent_hang = 0;
+ bool bullet = false;
+ string language = "";
}
struct DocObj_Has_ {
- bool inline_links = false;
- bool inline_notes_reg = false;
- bool inline_notes_star = false;
- bool images = false;
- bool image_without_dimensions = false;
+ bool inline_links = false;
+ bool inline_notes_reg = false;
+ bool inline_notes_star = false;
+ bool images = false;
+ bool image_without_dimensions = false;
}
struct DocObj_Table_ {
- int number_of_columns = 0;
- double[] column_widths = [];
- string[] column_aligns = [];
- bool heading = false;
- bool walls = false;
+ int number_of_columns = 0;
+ double[] column_widths = [];
+ string[] column_aligns = [];
+ bool heading = false;
+ bool walls = false;
}
struct DocObj_CodeBlock_ {
- string syntax = "";
- bool linenumbers = false;
+ string syntax = "";
+ bool linenumbers = false;
}
struct DocObj_Stow_ {
- string[] link = [];
+ string[] link = [];
}
struct DocObj_Pointer_ {
- int doc_object = 0;
- int html_segnames = 0;
- int heading = 0;
+ int doc_object = 0;
+ int html_segnames = 0;
+ int heading = 0;
}
struct DocObj_Tags_ {
- string[] heading_ancestors_text = [ "", "", "", "", "", "", "", "", ];
- string anchor_tag_html = "";
- string in_segment_html = "";
- string segment_anchor_tag_epub = "";
- string html_segment_anchor_tag_is = "";
- string epub_segment_anchor_tag_is = "";
- string heading_lev_anchor_tag = "";
- string segname_prev = "";
- string segname_next = "";
- string[] lev4_subtoc = [];
- string[] anchor_tags = [];
+ string[] heading_ancestors_text = [ "", "", "", "", "", "", "", "", ];
+ string anchor_tag_html = "";
+ string in_segment_html = "";
+ string segment_anchor_tag_epub = "";
+ string html_segment_anchor_tag_is = "";
+ string epub_segment_anchor_tag_is = "";
+ string heading_lev_anchor_tag = "";
+ string segname_prev = "";
+ string segname_next = "";
+ string[] lev4_subtoc = [];
+ string[] anchor_tags = [];
}
struct DocObj_MetaInfo_ {
- string is_of_part = ""; // frontmatter, body, backmatter
- string is_of_section = ""; // toc, body, glossary, biography, book index, blurb
- string is_of_type = ""; // para, block ?
- string is_a = ""; // heading, para, table, code block, group, verse/poem ...
- alias of_part = is_of_part;
- alias of_section = is_of_section;
- alias is_of = is_of_type;
- string attrib = "";
- string lang = ""; // blocks: group, block, quote; not codeblock;
- string syntax = ""; // codeblock only
+ string is_of_part = ""; // frontmatter, body, backmatter
+ string is_of_section = ""; // toc, body, glossary, biography, book index, blurb
+ string is_of_type = ""; // para, block ?
+ string is_a = ""; // heading, para, table, code block, group, verse/poem ...
+ alias of_part = is_of_part;
+ alias of_section = is_of_section;
+ alias is_of = is_of_type;
+ string attrib = "";
+ string lang = ""; // blocks: group, block, quote; not codeblock;
+ string syntax = ""; // codeblock only
/+ o_n +/
- int o_n_substantive = 0;
- int o_n_non_substantive = 0;
- int o_n_glossary = 0;
- int o_n_bibliography = 0;
- int o_n_book_index = 0;
- int o_n_blurb = 0;
+ int o_n_substantive = 0;
+ int o_n_non_substantive = 0;
+ int o_n_glossary = 0;
+ int o_n_bibliography = 0;
+ int o_n_book_index = 0;
+ int o_n_blurb = 0;
string object_number_substantive() const @property {
return (o_n_substantive == 0) ? "" : o_n_substantive.to!string;
}
@@ -176,7 +176,7 @@ template ObjectSetter() {
ubyte[32] sha256;
}
struct ObjGenericComposite {
- string text = "";
+ string text = "";
DocObj_MetaInfo_ metainfo;
DocObj_TxtAttrib_ attrib;
DocObj_Tags_ tags;
diff --git a/src/sisudoc/meta/metadoc_show_config.d b/src/sisudoc/meta/metadoc_show_config.d
index 7434506..5bbeea6 100644
--- a/src/sisudoc/meta/metadoc_show_config.d
+++ b/src/sisudoc/meta/metadoc_show_config.d
@@ -54,21 +54,19 @@ template spineShowSiteConfig() {
O opt_action,
T config,
) {
- import
- sisudoc.meta.defaults,
- sisudoc.meta.rgx;
- import
- std.array,
- std.digest.crc,
- std.digest.sha,
- std.exception,
- std.regex,
- std.stdio,
- std.string,
- std.typecons,
- std.uni,
- std.utf,
- std.conv : to;
+ import sisudoc.meta.defaults;
+ import sisudoc.meta.rgx;
+ import std.array;
+ import std.digest.crc;
+ import std.digest.sha;
+ import std.exception;
+ import std.regex;
+ import std.stdio;
+ import std.string;
+ import std.typecons;
+ import std.uni;
+ import std.utf;
+ import std.conv : to;
mixin InternalMarkup;
auto markup = InlineMarkup();
auto char_repeat_number = 66;
@@ -140,21 +138,19 @@ template spineShowSiteConfig() {
}
template spineShowConfig() {
void spineShowConfig(T)(T doc_matters) {
- import
- sisudoc.meta.defaults,
- sisudoc.meta.rgx;
- import
- std.array,
- std.digest.crc,
- std.digest.sha,
- std.exception,
- std.regex,
- std.stdio,
- std.string,
- std.typecons,
- std.uni,
- std.utf,
- std.conv : to;
+ import sisudoc.meta.defaults;
+ import sisudoc.meta.rgx;
+ import std.array;
+ import std.digest.crc;
+ import std.digest.sha;
+ import std.exception;
+ import std.regex;
+ import std.stdio;
+ import std.string;
+ import std.typecons;
+ import std.uni;
+ import std.utf;
+ import std.conv : to;
mixin InternalMarkup;
auto markup = InlineMarkup();
auto min_repeat_number = 66;
diff --git a/src/sisudoc/meta/metadoc_show_make.d b/src/sisudoc/meta/metadoc_show_make.d
index a5e5608..57721cf 100644
--- a/src/sisudoc/meta/metadoc_show_make.d
+++ b/src/sisudoc/meta/metadoc_show_make.d
@@ -51,21 +51,19 @@ module sisudoc.meta.metadoc_show_make;
@safe:
template spineShowMake() {
void spineShowMake(T)(T doc_matters) {
- import
- sisudoc.meta.defaults,
- sisudoc.meta.rgx;
- import
- std.array,
- std.digest.crc,
- std.digest.sha,
- std.exception,
- std.regex,
- std.stdio,
- std.string,
- std.typecons,
- std.uni,
- std.utf,
- std.conv : to;
+ import sisudoc.meta.defaults;
+ import sisudoc.meta.rgx;
+ import std.array;
+ import std.digest.crc;
+ import std.digest.sha;
+ import std.exception;
+ import std.regex;
+ import std.stdio;
+ import std.string;
+ import std.typecons;
+ import std.uni;
+ import std.utf;
+ import std.conv : to;
mixin InternalMarkup;
auto markup = InlineMarkup();
auto min_repeat_number = 66;
diff --git a/src/sisudoc/meta/metadoc_show_metadata.d b/src/sisudoc/meta/metadoc_show_metadata.d
index 4a7a177..331ab7f 100644
--- a/src/sisudoc/meta/metadoc_show_metadata.d
+++ b/src/sisudoc/meta/metadoc_show_metadata.d
@@ -51,21 +51,19 @@ module sisudoc.meta.metadoc_show_metadata;
@safe:
template spineShowMetaData() {
void spineShowMetaData(T)(T doc_matters) {
- import
- sisudoc.meta.defaults,
- sisudoc.meta.rgx;
- import
- std.array,
- std.digest.crc,
- std.digest.sha,
- std.exception,
- std.regex,
- std.stdio,
- std.string,
- std.typecons,
- std.uni,
- std.utf,
- std.conv : to;
+ import sisudoc.meta.defaults;
+ import sisudoc.meta.rgx;
+ import std.array;
+ import std.digest.crc;
+ import std.digest.sha;
+ import std.exception;
+ import std.regex;
+ import std.stdio;
+ import std.string;
+ import std.typecons;
+ import std.uni;
+ import std.utf;
+ import std.conv : to;
mixin InternalMarkup;
auto markup = InlineMarkup();
auto min_repeat_number = 66;
diff --git a/src/sisudoc/meta/metadoc_show_summary.d b/src/sisudoc/meta/metadoc_show_summary.d
index 2ceb337..ceb4fd5 100644
--- a/src/sisudoc/meta/metadoc_show_summary.d
+++ b/src/sisudoc/meta/metadoc_show_summary.d
@@ -52,21 +52,19 @@ module sisudoc.meta.metadoc_show_summary;
template spineMetaDocSummary() {
void spineMetaDocSummary(D)(D doc) {
auto doc_matters = doc.matters;
- import
- sisudoc.meta.defaults,
- sisudoc.meta.rgx;
- import
- std.array,
- std.digest.crc,
- std.digest.sha,
- std.exception,
- std.regex,
- std.stdio,
- std.string,
- std.typecons,
- std.uni,
- std.utf,
- std.conv : to;
+ import sisudoc.meta.defaults;
+ import sisudoc.meta.rgx;
+ import std.array;
+ import std.digest.crc;
+ import std.digest.sha;
+ import std.exception;
+ import std.regex;
+ import std.stdio;
+ import std.string;
+ import std.typecons;
+ import std.uni;
+ import std.utf;
+ import std.conv : to;
mixin InternalMarkup;
auto markup = InlineMarkup();
auto min_repeat_number = 66;
@@ -75,7 +73,7 @@ template spineMetaDocSummary() {
char_repeat_number = (char_repeat_number > min_repeat_number)
? char_repeat_number
: min_repeat_number;
- if (doc_matters.opt.action.vox_gt1
+ if (doc_matters.opt.action.vox_gt_2
|| doc_matters.opt.action.show_summary) {
string[string] check = [
"last_object_number" : "NA [debug \"checkdoc\" not run]",
diff --git a/src/sisudoc/meta/package.d b/src/sisudoc/meta/package.d
index d24afbb..911952b 100644
--- a/src/sisudoc/meta/package.d
+++ b/src/sisudoc/meta/package.d
@@ -48,17 +48,15 @@
+/
module sisudoc.meta;
-public import
- sisudoc.meta.defaults;
+public import sisudoc.meta.defaults;
/+ std +/
-public import
- std.array,
- std.exception,
- std.range,
- std.regex,
- std.stdio,
- std.string,
- std.typecons,
- // std.uni,
- std.utf,
- std.conv : to;
+public import std.array;
+public import std.exception;
+public import std.range;
+public import std.regex;
+public import std.stdio;
+public import std.string;
+public import std.typecons;
+// public import std.uni;
+public import std.utf;
+public import std.conv : to;
diff --git a/src/sisudoc/meta/rgx.d b/src/sisudoc/meta/rgx.d
index 259ab82..86ca40c 100644
--- a/src/sisudoc/meta/rgx.d
+++ b/src/sisudoc/meta/rgx.d
@@ -148,16 +148,16 @@ static template spineRgxIn() {
static table_col_separator_nl = ctRegex!(`[┊]$`, "mg");
/+ inline markup footnotes endnotes +/
static inline_notes_curly_gen = ctRegex!(`~\{.+?\}~`, "m");
- static inline_notes_curly = ctRegex!(`~\{\s*(.+?)\}~`, "mg");
- static inline_notes_curly_sp_asterisk = ctRegex!(`~\{[*]+\s+(.+?)\}~`, "m");
- static inline_notes_curly_sp_plus = ctRegex!(`~\{[+]+\s+(.+?)\}~`, "m");
+ static inline_notes_curly = ctRegex!(`~\{\s*(.+?)\s*\}~`, "mg");
+ static inline_notes_curly_sp_asterisk = ctRegex!(`~\{[*]+\s+(.+?)\s*\}~`, "m");
+ static inline_notes_curly_sp_plus = ctRegex!(`~\{[+]+\s+(.+?)\s*\}~`, "m");
static note_ref = ctRegex!(`^\S+?noteref_(?P<ref>[0-9]+)`, "mg"); // {^{73.}^}#noteref_73
static smid_inline_url_generic = ctRegex!(`(?:^|[}(\[ ])(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)[a-zA-Z0-9_#]`, "mg");
static smid_inline_url = ctRegex!(`((?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)[a-zA-Z0-9_]\S*)`, "mg");
static smid_inline_link_naked_url = ctRegex!(`(?P<pre>^|[ (\[])(?P<link>(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤)\S+?)(?=[.,;:?!'"]?([ )\]]|$))`, "mg");
static smid_inline_link_markup_regular = ctRegex!(`(?P<pre>^|[ (\[])\{\s*(?P<content>.+?)\s*\}(?P<link>(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)\S+?)(?=[;:!,?.]?([ )\]]|$))`, "mg");
- static smid_inline_link_endnote_url_helper_punctuated = ctRegex!(`\{~\^\s+(?P<content>.+?)\}(?P<link>(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)\S+?)(?=[.,;:?!]?([ ]|$))`, "mg");
- static smid_inline_link_endnote_url_helper = ctRegex!(`\{~\^\s+(?P<content>.+?)\}(?P<link>(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)\S+)`, "mg");
+ static smid_inline_link_endnote_url_helper_punctuated = ctRegex!(`\{~\^\s+(?P<content>.+?)\s*\}(?P<link>(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)\S+?)(?=[.,;:?!]?([ ]|$))`, "mg");
+ static smid_inline_link_endnote_url_helper = ctRegex!(`\{~\^\s+(?P<content>.+?)\s*\}(?P<link>(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)\S+)`, "mg");
static image = ctRegex!(`([a-zA-Z0-9._-]+?\.(?:png|gif|jpg))`, "mg");
static smid_image = ctRegex!(`(?P<pre>(?:^|[ ])[{┥](?:~\^\s+|\s*))(?P<image>[a-zA-Z0-9._-]+?\.(?:png|gif|jpg))(?P<post>(?:.*?)\s*[}┝](?:image|┤.*?├|(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)\S+?)(?=[;:!,?.]?([ )\]]|$)))`, "mg");
static smid_image_generic = ctRegex!(`(?:^|[ ])[{┥](?:~\^\s+|\s*)\S+\.(?:png|gif|jpg).*?[}┝](?:image|┤.*?├|(?:(?:https?|git):\/\/|¤?\.\.\/|¤?\.\/|¤|#)\S+?)(?=[;:!,?.]?([ )\]]|$))`, "mg");
@@ -221,9 +221,9 @@ static template spineRgxIn() {
static br_empty_line = ctRegex!(`\n[ ]*\n`, "mg");
static br_linebreaks_newlines = ctRegex!(`[\n┘┙]`, "mg");
static br_linebreaks = ctRegex!(`[┘┙]`, "mg");
- static br_line = ctRegex!(`┘`, "mg");
- static br_line_inline = ctRegex!(`┙`, "mg");
- static br_line_spaced = ctRegex!(`┚`, "mg");
+ static br_line = ctRegex!(`\s*┘\s*`, "mg");
+ static br_line_inline = ctRegex!(`\s*┙\s*`, "mg");
+ static br_line_spaced = ctRegex!(`\s*┚\s*`, "mg");
/+ inline markup footnotes endnotes +/
static inline_notes_al = ctRegex!(`【(?:[*+]\s+|\s*)(.+?)】`, "mg");
static inline_notes_al_special = ctRegex!(`【(?:[*+]\s+)(.+?)】`, "mg"); // TODO remove match when special footnotes are implemented
@@ -236,6 +236,7 @@ static template spineRgxIn() {
static inline_al_delimiter_open_symbol_star = ctRegex!(`【[*]\s`, "m");
static inline_al_delimiter_open_symbol_plus = ctRegex!(`【[+]\s`, "m");
static inline_text_and_note_al_ = ctRegex!(`(.+?(?:【[*+]*\s+.+?】|.+))`, "mg");
+ static endnote_section_note = ctRegex!(`┥\s*⑆\^┨(?P<notenumber>\d+)\.┣\^┝┤(?P<link>¤?.+?)├.+`, "mg");
/+ inline markup links +/
static inline_image = ctRegex!(`(?P<pre>┥)☼(?P<imginf>(?P<img>[a-zA-Z0-9._-]+?\.(?:jpg|gif|png)),w(?P<width>\d+)h(?P<height>\d+))\s*(?P<post>.*?┝┤.*?├)`, "mg");
static inline_image_without_dimensions = ctRegex!(`(?P<pre>┥)☼(?P<imginf>(?P<img>[a-zA-Z0-9._-]+?\.(?:jpg|gif|png)),w(?P<width>0)h(?P<height>0))\s*(?P<post>.*?┝┤.*?├)`, "mg");
@@ -250,6 +251,7 @@ static template spineRgxIn() {
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 find_bookindex_ocn_link_and_comma = ctRegex!(`[, ]*┥.+?┝┤#?\S+?├`, "mg");
static url = ctRegex!(`https?://`, "mg");
static uri = ctRegex!(`(?:https?|git)://`, "mg");
static uri_identify_components = ctRegex!(`(?P<type>(?:https?|git)://)(?P<path>\S+?/)(?P<file>[^/]+)$`, "mg");
diff --git a/src/sisudoc/meta/rgx_yaml_tags.d b/src/sisudoc/meta/rgx_yaml.d
index ee57469..ee57469 100644
--- a/src/sisudoc/meta/rgx_yaml_tags.d
+++ b/src/sisudoc/meta/rgx_yaml.d
diff --git a/src/sisudoc/share/defaults.d b/src/sisudoc/share/defaults.d
index 502aca0..c285260 100644
--- a/src/sisudoc/share/defaults.d
+++ b/src/sisudoc/share/defaults.d
@@ -57,12 +57,12 @@ template Msg() {
auto Msg(I)(I doc_matters) {
struct Msg_ {
void v()(string message) {
- if (doc_matters.opt.action.vox_gt1) {
+ if (doc_matters.opt.action.vox_gt_2) {
writeln(message);
}
}
void vv()(string message) {
- if (doc_matters.opt.action.vox_gt2) {
+ if (doc_matters.opt.action.vox_gt_3) {
writeln(message);
}
}
diff --git a/src/sisudoc/spine.d b/src/sisudoc/spine.d
index e6e163d..f53fc09 100755
--- a/src/sisudoc/spine.d
+++ b/src/sisudoc/spine.d
@@ -1,4 +1,3 @@
-#!/usr/bin/env rdmd
/+
- Name: SisuDoc Spine, Doc Reform [a part of]
- Description: documents, structuring, processing, publishing, search
@@ -55,32 +54,30 @@ description "A SiSU inspired document parser written in D."
homepage "https://sisudoc.org"
+/
@safe:
-import
- std.algorithm,
- std.datetime,
- std.getopt,
- std.file,
- std.path,
- std.process;
-import
- sisudoc.conf.compile_time_info,
- sisudoc.meta,
- sisudoc.meta.metadoc,
- sisudoc.meta.metadoc_curate,
- sisudoc.meta.metadoc_curate_authors,
- sisudoc.meta.metadoc_curate_topics,
- sisudoc.meta.metadoc_from_src,
- sisudoc.meta.conf_make_meta_structs,
- sisudoc.meta.conf_make_meta_json,
- sisudoc.meta.defaults,
- sisudoc.meta.doc_debugs,
- sisudoc.meta.rgx,
- sisudoc.meta.rgx_yaml,
- sisudoc.meta.rgx_files,
- sisudoc.io_in.paths_source,
- sisudoc.io_in.read_config_files,
- sisudoc.io_in.read_source_files,
- sisudoc.io_out.hub;
+import std.algorithm;
+import std.datetime;
+import std.getopt;
+import std.file;
+import std.path;
+import std.process;
+import sisudoc.conf.compile_time_info;
+import sisudoc.meta;
+import sisudoc.meta.metadoc;
+import sisudoc.meta.metadoc_curate;
+import sisudoc.meta.metadoc_curate_authors;
+import sisudoc.meta.metadoc_curate_topics;
+import sisudoc.meta.metadoc_from_src;
+import sisudoc.meta.conf_make_meta_structs;
+import sisudoc.meta.conf_make_meta_json;
+import sisudoc.meta.defaults;
+import sisudoc.meta.doc_debugs;
+import sisudoc.meta.rgx;
+import sisudoc.meta.rgx_yaml;
+import sisudoc.meta.rgx_files;
+import sisudoc.io_in.paths_source;
+import sisudoc.io_in.read_config_files;
+import sisudoc.io_in.read_source_files;
+import sisudoc.io_out.hub;
mixin(import("version.txt"));
mixin(import("configuration.txt"));
mixin CompileTimeInfo;
@@ -147,6 +144,7 @@ string program_name = "spine";
"html-link-pdf-a4" : false,
"html-link-pdf-letter" : false,
"html-link-search" : false,
+ "html-link-text" : false,
"html-seg" : false,
"html-scroll" : false,
"latex" : false,
@@ -156,6 +154,7 @@ string program_name = "spine";
"light" : false,
"manifest" : false,
"hide-ocn" : false,
+ "no-ocn" : false,
"ocn-off" : false,
"odf" : false,
"odt" : false,
@@ -179,6 +178,7 @@ string program_name = "spine";
"show-pod" : false,
"show-sqlite" : false,
"show-summary" : false,
+ "skel" : false,
"source" : false,
"sqlite-discrete" : false,
"sqlite-db-create" : false,
@@ -188,9 +188,11 @@ string program_name = "spine";
"sqlite-insert" : false,
"sqlite-update" : false,
"text" : false,
- "vox_is0" : false,
- "vox_gt1" : false,
- "vox_gt2" : false,
+ "vox_is0" : false, // silent
+ "vox_is1" : false, // quiet
+ "vox_is2" : false, // default (unset)
+ "vox_is3" : false, // verbose
+ "vox_is4" : false, // very verbose
"xhtml" : false,
"section_toc" : true,
"section_body" : true,
@@ -251,6 +253,7 @@ string program_name = "spine";
"html-link-pdf", "provide html link to pdf a4 & letter output", &opts["html-link-pdf"],
"html-link-pdf-a4", "provide html link to pdf a4 output", &opts["html-link-pdf-a4"],
"html-link-pdf-letter", "provide html link to pdf letter size output", &opts["html-link-pdf-letter"],
+ "html-link-text", "provide html link to text output", &opts["html-link-text"],
"html-link-search", "html embedded search submission", &opts["html-link-search"],
"html-seg", "process html output", &opts["html-seg"],
"html-scroll", "process html output", &opts["html-scroll"],
@@ -261,6 +264,7 @@ string program_name = "spine";
"latex-header-sty", "latex document header sty files", &opts["latex-header-sty"],
"light", "default light theme", &opts["light"],
"manifest", "process manifest output", &opts["manifest"],
+ "no-ocn", "object cite numbers", &opts["no-ocn"],
"ocn-off", "object cite numbers", &opts["ocn-off"],
"odf", "open document format text (--odt)", &opts["odf"],
"odt", "open document format text", &opts["odt"],
@@ -271,7 +275,7 @@ string program_name = "spine";
"pdf-color-links", "mono or color links for pdfs", &opts["pdf-color-links"],
"pdf-init", "initialise latex shared files (see latex-header-sty)", &opts["pdf-init"],
"pod", "spine (doc reform) pod source content bundled", &opts["pod"],
- "quiet|q", "output to terminal", &opts["vox_is0"],
+ "quiet|q", "output to terminal", &opts["vox_is1"],
"section-backmatter", "document backmatter (default)" , &opts["backmatter"],
"section-biblio", "document biblio (default)", &opts["section_biblio"],
"section-blurb", "document blurb (default)", &opts["section_blurb"],
@@ -296,9 +300,11 @@ string program_name = "spine";
"show-sqlite", "show sqlite", &opts["show-sqlite"],
"show-summary", "show summary", &opts["show-summary"],
"source", "document markup source", &opts["source"],
+ "silent", "output to terminal", &opts["vox_is0"],
"set-digest", "default hash digest type (e.g. sha256)", &settings["set-digest"],
"set-papersize", "default papersize (latex pdf eg. a4 or a5 or b4 or letter)", &settings["set-papersize"],
"set-textwrap", "default textwrap (e.g. 80 (characters)", &settings["set-textwrap"],
+ "skel", "skel (dummy outline)", &opts["skel"],
"sqlite-discrete", "process discrete sqlite output", &opts["sqlite-discrete"],
"sqlite-db-create", "create db, create tables", &opts["sqlite-db-create"],
"sqlite-db-drop", "drop tables & db", &opts["sqlite-db-drop"],
@@ -308,16 +314,16 @@ string program_name = "spine";
"sqlite-delete", "sqlite output", &opts["sqlite-delete"],
"sqlite-insert", "sqlite output", &opts["sqlite-insert"],
"sqlite-update", "sqlite output", &opts["sqlite-update"],
+ "text", "text output", &opts["text"],
+ "txt", "text output", &opts["text"],
"www-http", "http or https", &settings["www-http"],
"www-host", "web server host (domain) name", &settings["www-host"],
"www-host-doc-root", "web host host (domain) name with path to doc root", &settings["www-host-doc-root"],
"www-url-doc-root", "e.g. http://localhost", &settings["www-url-doc-root"],
- "text", "text output", &opts["text"],
"theme-dark", "alternative dark theme", &opts["theme-dark"],
"theme-light", "default light theme", &opts["theme-light"],
- "txt", "text output", &opts["text"],
- "verbose|v", "output to terminal", &opts["vox_gt1"],
- "very-verbose", "output to terminal", &opts["vox_gt2"],
+ "verbose|v", "output to terminal", &opts["vox_is3"],
+ "very-verbose", "output to terminal", &opts["vox_is4"],
"workon", "(reserved for some matters under development & testing)", &opts["workon"],
"xhtml", "xhtml output", &opts["xhtml"],
"config", "=/path/to/config/file/including/filename", &settings["config"],
@@ -339,7 +345,7 @@ string program_name = "spine";
if (helpInfo.helpWanted) {
defaultGetoptPrinter("Some information about the program.", helpInfo.options);
}
- enum outTask { source_or_pod, sqlite, sqlite_multi, latex, odt, epub, html_scroll, html_seg, html_stuff }
+ enum outTask { source_or_pod, sqlite, sqlite_multi, latex, odt, epub, html_scroll, html_seg, html_stuff, text, skel }
struct OptActions {
@trusted bool allow_downloads() {
return opts["allow-downloads"];
@@ -443,6 +449,12 @@ string program_name = "spine";
@trusted bool html_link_pdf_letter() {
return (opts["html-link-pdf-letter"]) ? true : false;
}
+ @trusted bool html_link_text() {
+ return (opts["html-link-text"]) ? true : false;
+ }
+ @trusted bool text_link_curate() {
+ return (opts["text-link-curate"]) ? true : false;
+ }
@trusted bool html_link_search() {
return (opts["html-link-search"]) ? true : false;
}
@@ -477,7 +489,7 @@ string program_name = "spine";
return opts["hide-ocn"];
}
@trusted bool ocn_off() {
- return opts["ocn-off"];
+ return ((opts["ocn-off"]) || (opts["no-ocn"])) ? true : false;
}
@trusted bool pod() {
return opts["pod"];
@@ -489,10 +501,10 @@ string program_name = "spine";
return opts["show-curate"];
}
@trusted bool show_curate_authors() {
- return (opts["show-curate"] || opts["show-curate-authors"] || opts["vox_gt1"] || opts["vox_gt2"]) ? true : false;
+ return (opts["show-curate"] || opts["show-curate-authors"] || vox_gt_2) ? true : false;
}
@trusted bool show_curate_topics() {
- return (opts["show-curate"] || opts["show-curate-topics"] || opts["vox_gt2"]) ? true : false;
+ return (opts["show-curate"] || opts["show-curate-topics"] || vox_gt_3) ? true : false;
}
@trusted bool show_epub() {
return opts["show-epub"];
@@ -516,10 +528,10 @@ string program_name = "spine";
return opts["show-pod"];
}
@trusted bool show_sqlite() {
- return (opts["show-sqlite"] || opts["vox_gt2"]) ? true : false;
+ return (opts["show-sqlite"] || vox_gt_3) ? true : false;
}
@trusted bool show_summary() {
- return (opts["show-summary"] || opts["vox_gt1"] || opts["vox_gt2"]) ? true : false;
+ return (opts["show-summary"] || vox_gt_2) ? true : false;
}
@trusted bool source() {
return opts["source"];
@@ -551,21 +563,48 @@ string program_name = "spine";
|| opts["sqlite-update"]
) ? true : false;
}
- @trusted bool vox_is0() { // --quiet -q
+ @trusted bool skel() {
+ return opts["skel"];
+ }
+ @trusted bool text() {
+ return opts["text"];
+ }
+ @trusted bool vox_0() { // --silent
return opts["vox_is0"];
}
- @trusted bool vox_gt0() { // normal, minimal, without flag
- return (!(opts["vox_is0"]) || opts["vox_gt1"] || opts["vox_gt2"]) ? true : false;
+ @trusted bool vox_1() { // --quiet -q
+ return opts["vox_is1"];
}
- @trusted bool vox_gt1() { // -- verbose -v
- return (opts["vox_gt1"] || opts["vox_gt2"]) ? true : false;
+ @trusted bool vox_2() { // normal, minimal, without flag
+ bool _vox_default = true;
+ if (opts["vox_is0"] || opts["vox_is1"] || opts["vox_is3"] || opts["vox_is4"]) { _vox_default = false;
+ } else { _vox_default = true;
+ }
+ return _vox_default;
}
- @trusted bool vox_gt2() { // --very-verbose
- return opts["vox_gt2"];
+ @trusted bool vox_3() { // --verbose -v
+ return opts["vox_is3"];
}
- @trusted bool text() {
- return opts["text"];
+ @trusted bool vox_4() { // --very-verbose
+ return opts["vox_is4"];
}
+ @trusted bool vox_gt_0() { // --quiet -q and above
+ return ( vox_1 || vox_2 || vox_3 || vox_4) ? true : false;
+ }
+ @trusted bool vox_gt_1() { // normal, and above
+ return (vox_2 || vox_3 || vox_4) ? true : false;
+ }
+ @trusted bool vox_gt_2() { // --verbose -v and above
+ return ( vox_3 || vox_4) ? true : false;
+ }
+ @trusted bool vox_gt_3() { // --very-verbose
+ return (vox_4) ? true : false;
+ }
+ @trusted bool vox_silent() { return vox_0; } // --silent
+ @trusted bool vox_quiet() { return vox_gt_0; } // --quiet -q & above
+ @trusted bool vox_default() { return vox_gt_1; } // defalt, & above
+ @trusted bool vox_verbose() { return vox_gt_2; } // --verbose -v & above
+ @trusted bool vox_very_verbose() { return vox_gt_3; } // --very-verbose
@trusted bool xhtml() {
return opts["xhtml"];
}
@@ -679,6 +718,8 @@ string program_name = "spine";
|| latex
|| manifest
|| sqlite_discrete
+ || text
+ || skel
) {
_is = true;
} else { _is = false; }
@@ -689,30 +730,16 @@ string program_name = "spine";
}
auto output_task_scheduler() {
int[] schedule;
- if (source_or_pod) {
- schedule ~= outTask.source_or_pod;
- }
- if (sqlite_discrete) {
- schedule ~= outTask.sqlite;
- }
- if (epub) {
- schedule ~= outTask.epub;
- }
- if (html_scroll) {
- schedule ~= outTask.html_scroll;
- }
- if (html_seg) {
- schedule ~= outTask.html_seg;
- }
- if (html_stuff) {
- schedule ~= outTask.html_stuff;
- }
- if (odt) {
- schedule ~= outTask.odt;
- }
- if (latex) {
- schedule ~= outTask.latex;
- }
+ if (source_or_pod) { schedule ~= outTask.source_or_pod; }
+ if (sqlite_discrete) { schedule ~= outTask.sqlite; }
+ if (epub) { schedule ~= outTask.epub; }
+ if (html_scroll) { schedule ~= outTask.html_scroll; }
+ if (html_seg) { schedule ~= outTask.html_seg; }
+ if (html_stuff) { schedule ~= outTask.html_stuff; }
+ if (odt) { schedule ~= outTask.odt; }
+ if (latex) { schedule ~= outTask.latex; }
+ if (text) { schedule ~= outTask.text; }
+ if (skel) { schedule ~= outTask.skel; }
return schedule.sort().uniq;
}
@trusted bool abstraction() {
@@ -729,6 +756,8 @@ string program_name = "spine";
|| sqlite_discrete
|| sqlite_delete
|| sqlite_update
+ || text
+ || skel
) ? true : false;
}
@trusted bool require_processing_files() {
@@ -750,6 +779,7 @@ string program_name = "spine";
|| sqlite_update
|| text
|| xhtml
+ || skel
) ? true : false;
}
@trusted bool meta_processing_general() {
@@ -762,6 +792,8 @@ string program_name = "spine";
|| latex
|| sqlite_discrete
|| sqlite_update
+ || text
+ || skel
) ? true :false;
}
@trusted bool meta_processing_xml_dom() {
@@ -885,94 +917,53 @@ string program_name = "spine";
);
if (exists(sisudoc_txt_)) {
try {
- if (exists(sisudoc_txt_)) {
- import dyaml;
- try {
- Node pod_manifest_yaml;
- try {
- pod_manifest_yaml = Loader.fromFile(sisudoc_txt_).load();
- } catch (ErrnoException ex) {
- } catch (FileException ex) {
- writeln("ERROR failed to read config file");
- } catch (Throwable) {
- writeln("ERROR failed to read config file content, not parsed as yaml");
- }
- if ("doc" in pod_manifest_yaml) {
- if (pod_manifest_yaml["doc"].type.mapping
- && pod_manifest_yaml["doc"].tag.match(rgx_y.yaml_tag_is_map)
- ) {
- if ("path" in pod_manifest_yaml["doc"]) {
- if (pod_manifest_yaml["doc"]["path"].tag.match(rgx_y.yaml_tag_is_seq)) {
- foreach (string _path; pod_manifest_yaml["doc"]["path"]) {
- markup_contents_location_ ~= _path ~ "\n";
- pod_manifest_root_content_paths_to_markup_location_raw_ ~=
- _path ~ "\n";
- }
- } else if (
- pod_manifest_yaml["doc"]["path"].type.string
- && pod_manifest_yaml["doc"]["path"].tag.match(rgx_y.yaml_tag_is_str)
- ) {
- markup_contents_location_ = pod_manifest_yaml["doc"]["path"].get!string;
- pod_manifest_root_content_paths_to_markup_location_raw_ =
- pod_manifest_yaml["doc"]["path"].get!string;
- }
+ import dyaml;
+ Node pod_manifest_yaml;
+ try {
+ pod_manifest_yaml = Loader.fromFile(sisudoc_txt_).load();
+ } catch (ErrnoException ex) {
+ } catch (FileException ex) {
+ writeln("ERROR failed to read config file");
+ } catch (Throwable) {
+ writeln("ERROR failed to read config file content, not parsed as yaml");
+ }
+ if ("doc" in pod_manifest_yaml) {
+ if (pod_manifest_yaml["doc"].type.mapping
+ && pod_manifest_yaml["doc"].tag.match(rgx_y.yaml_tag_is_map)
+ ) {
+ if ("path" in pod_manifest_yaml["doc"]) {
+ if (pod_manifest_yaml["doc"]["path"].tag.match(rgx_y.yaml_tag_is_seq)) {
+ foreach (string _path; pod_manifest_yaml["doc"]["path"]) {
+ markup_contents_location_ ~= _path ~ "\n";
+ pod_manifest_root_content_paths_to_markup_location_raw_ ~=
+ _path ~ "\n";
}
- if ("filename" in pod_manifest_yaml["doc"]) {
- if (pod_manifest_yaml["doc"]["filename"].tag.match(rgx_y.yaml_tag_is_seq)) {
- foreach (string _filename; pod_manifest_yaml["doc"]["filename"]) {
- if ("language" in pod_manifest_yaml["doc"]) {
- if (pod_manifest_yaml["doc"]["language"].tag.match(rgx_y.yaml_tag_is_seq)) {
- foreach (string _lang; pod_manifest_yaml["doc"]["language"]) {
- markup_contents_location_ ~=
- "media/text/"
- ~ _lang ~ "/"
- ~ _filename ~ "\n";
- }
- } else if (pod_manifest_yaml["doc"]["language"].tag.match(rgx_y.yaml_tag_is_str)
- ) {
- markup_contents_location_ =
- "media/text/"
- ~ pod_manifest_yaml["doc"]["language"].get!string
- ~ "/" ~ _filename ~ "\n";
- } else {
- string _lang_default = "en";
- markup_contents_location_ ~=
- "media/text/"
- ~ _lang_default ~ "/"
- ~ pod_manifest_yaml["doc"]["filename"].get!string ~ "\n";
- }
- } else {
- string _lang_default = "en";
- markup_contents_location_ ~=
- "media/text/"
- ~ _lang_default ~ "/"
- ~ pod_manifest_yaml["doc"]["filename"].get!string ~ "\n";
- }
- }
- } else if (
- pod_manifest_yaml["doc"]["filename"].type.string
- && pod_manifest_yaml["doc"]["filename"].tag.match(rgx_y.yaml_tag_is_str)
- ) {
- if ("language" in pod_manifest_yaml["doc"]) {
- if (pod_manifest_yaml["doc"]["language"].tag.match(rgx_y.yaml_tag_is_seq)) {
- foreach (string _lang; pod_manifest_yaml["doc"]["language"]) {
- markup_contents_location_ ~=
- "media/text/"
- ~ _lang ~ "/"
- ~ pod_manifest_yaml["doc"]["filename"].get!string ~ "\n";
- }
- } else if (pod_manifest_yaml["doc"]["language"].tag.match(rgx_y.yaml_tag_is_str)) {
- markup_contents_location_ =
- "media/text/"
- ~ pod_manifest_yaml["doc"]["language"].get!string
- ~ "/" ~ pod_manifest_yaml["doc"]["filename"].get!string ~ "\n";
- } else {
- string _lang_default = "en";
+ } else if (
+ pod_manifest_yaml["doc"]["path"].type.string
+ && pod_manifest_yaml["doc"]["path"].tag.match(rgx_y.yaml_tag_is_str)
+ ) {
+ markup_contents_location_ = pod_manifest_yaml["doc"]["path"].get!string;
+ pod_manifest_root_content_paths_to_markup_location_raw_ =
+ pod_manifest_yaml["doc"]["path"].get!string;
+ }
+ }
+ if ("filename" in pod_manifest_yaml["doc"]) {
+ if (pod_manifest_yaml["doc"]["filename"].tag.match(rgx_y.yaml_tag_is_seq)) {
+ foreach (string _filename; pod_manifest_yaml["doc"]["filename"]) {
+ if ("language" in pod_manifest_yaml["doc"]) {
+ if (pod_manifest_yaml["doc"]["language"].tag.match(rgx_y.yaml_tag_is_seq)) {
+ foreach (string _lang; pod_manifest_yaml["doc"]["language"]) {
markup_contents_location_ ~=
"media/text/"
- ~ _lang_default ~ "/"
- ~ pod_manifest_yaml["doc"]["filename"].get!string ~ "\n";
+ ~ _lang ~ "/"
+ ~ _filename ~ "\n";
}
+ } else if (pod_manifest_yaml["doc"]["language"].tag.match(rgx_y.yaml_tag_is_str)
+ ) {
+ markup_contents_location_ =
+ "media/text/"
+ ~ pod_manifest_yaml["doc"]["language"].get!string
+ ~ "/" ~ _filename ~ "\n";
} else {
string _lang_default = "en";
markup_contents_location_ ~=
@@ -980,11 +971,47 @@ string program_name = "spine";
~ _lang_default ~ "/"
~ pod_manifest_yaml["doc"]["filename"].get!string ~ "\n";
}
+ } else {
+ string _lang_default = "en";
+ markup_contents_location_ ~=
+ "media/text/"
+ ~ _lang_default ~ "/"
+ ~ pod_manifest_yaml["doc"]["filename"].get!string ~ "\n";
+ }
+ }
+ } else if (
+ pod_manifest_yaml["doc"]["filename"].type.string
+ && pod_manifest_yaml["doc"]["filename"].tag.match(rgx_y.yaml_tag_is_str)
+ ) {
+ if ("language" in pod_manifest_yaml["doc"]) {
+ if (pod_manifest_yaml["doc"]["language"].tag.match(rgx_y.yaml_tag_is_seq)) {
+ foreach (string _lang; pod_manifest_yaml["doc"]["language"]) {
+ markup_contents_location_ ~=
+ "media/text/"
+ ~ _lang ~ "/"
+ ~ pod_manifest_yaml["doc"]["filename"].get!string ~ "\n";
+ }
+ } else if (pod_manifest_yaml["doc"]["language"].tag.match(rgx_y.yaml_tag_is_str)) {
+ markup_contents_location_ =
+ "media/text/"
+ ~ pod_manifest_yaml["doc"]["language"].get!string
+ ~ "/" ~ pod_manifest_yaml["doc"]["filename"].get!string ~ "\n";
+ } else {
+ string _lang_default = "en";
+ markup_contents_location_ ~=
+ "media/text/"
+ ~ _lang_default ~ "/"
+ ~ pod_manifest_yaml["doc"]["filename"].get!string ~ "\n";
}
+ } else {
+ string _lang_default = "en";
+ markup_contents_location_ ~=
+ "media/text/"
+ ~ _lang_default ~ "/"
+ ~ pod_manifest_yaml["doc"]["filename"].get!string ~ "\n";
}
}
}
- } catch (ErrnoException ex) {
}
}
} catch (ErrnoException ex) {
@@ -1037,7 +1064,7 @@ string program_name = "spine";
foreach(manifest; parallel(_manifests[1..$])) {
if (!empty(manifest.src.filename)) {
scope(success) {
- if (_opt_action.vox_gt0) { writeln("-- ~ document complete, ok ~ ------------------------------------"); }
+ if (_opt_action.vox_gt_1) { writeln("-- ~ document complete, ok ~ ------------------------------------"); }
}
scope(failure) {
debug(checkdoc) {
@@ -1095,7 +1122,7 @@ string program_name = "spine";
} else {
if ((doc.matters.opt.action.debug_do)
|| (_opt_action.debug_do_curate)
- || (doc.matters.opt.action.vox_gt2)
+ || (doc.matters.opt.action.vox_gt_3)
) {
writeln("WARNING curate: document header yaml does not contain information related to: title or author: ", _hvst.path_html_segtoc);
}
@@ -1116,7 +1143,7 @@ string program_name = "spine";
}
}
scope(exit) {
- if (_opt_action.vox_gt0) {
+ if (_opt_action.vox_gt_1) {
writefln(
"processed file: %s [%s]",
manifest.src.filename,
@@ -1133,10 +1160,10 @@ string program_name = "spine";
}
} else { // note cannot parallelise sqlite shared db
foreach(manifest; _manifests[1..$]) {
- if (_opt_action.vox_gt2) { writeln("parallelisation off: actions include sqlite shared db"); }
+ if (_opt_action.vox_gt_3) { writeln("parallelisation off: actions include sqlite shared db"); }
if (!empty(manifest.src.filename)) {
scope(success) {
- if (_opt_action.vox_gt0) { writeln("-- ~ document complete, ok ~ ------------------------------------"); }
+ if (_opt_action.vox_gt_1) { writeln("-- ~ document complete, ok ~ ------------------------------------"); }
}
scope(failure) {
debug(checkdoc) {
@@ -1194,7 +1221,7 @@ string program_name = "spine";
} else {
if ((doc.matters.opt.action.debug_do)
|| (_opt_action.debug_do_curate)
- || (doc.matters.opt.action.vox_gt2)
+ || (doc.matters.opt.action.vox_gt_3)
) {
writeln("WARNING curate: document header yaml does not contain information related to: title or author: ", _hvst.path_html_segtoc);
}
@@ -1215,7 +1242,7 @@ string program_name = "spine";
}
}
scope(exit) {
- if (_opt_action.vox_gt0) {
+ if (_opt_action.vox_gt_1) {
writefln(
"processed file: %s [%s]",
manifest.src.filename,
@@ -1239,7 +1266,7 @@ string program_name = "spine";
if (_opt_action.curate_authors) {
spineMetaDocCuratesAuthors!()(hvst.curates, _make_and_meta_struct, _opt_action);
}
- if (_opt_action.vox_gt0) {
+ if (_opt_action.vox_gt_1) {
import sisudoc.io_out.paths_output;
auto out_pth = spinePathsHTML!()(_make_and_meta_struct.conf.output_path, "");
if (_opt_action.curate_authors) {