aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/sdp/sdp.d
diff options
context:
space:
mode:
Diffstat (limited to 'src/sdp/sdp.d')
-rwxr-xr-xsrc/sdp/sdp.d512
1 files changed, 0 insertions, 512 deletions
diff --git a/src/sdp/sdp.d b/src/sdp/sdp.d
deleted file mode 100755
index a135423..0000000
--- a/src/sdp/sdp.d
+++ /dev/null
@@ -1,512 +0,0 @@
-#!/usr/bin/env rdmd
-module sdp.sisu_document_parser;
-import
- sdp.conf.compile_time_info,
- sdp.meta.metadoc;
-import
- std.getopt,
- std.file,
- std.path,
- std.process;
-import
- sdp.meta,
- sdp.meta.metadoc_summary,
- sdp.meta.metadoc_from_src,
- sdp.meta.conf_make_meta_structs,
- sdp.meta.conf_make_meta_toml,
- sdp.meta.conf_make_meta_json,
- sdp.meta.defaults,
- sdp.meta.doc_debugs,
- sdp.meta.rgx,
- sdp.source.paths_source,
- sdp.source.read_config_files,
- sdp.source.read_source_files,
- sdp.output.hub;
-import std.algorithm;
-import std.parallelism;
-mixin(import("version.txt"));
-mixin CompileTimeInfo;
-/++
-name "sdp"
-description "A SiSU inspired document parser writen in D."
-homepage "http://sisudoc.org"
-+/
-void main(string[] args) {
- mixin SiSUrgxInit;
- mixin contentJSONtoSiSUstruct;
- mixin SiSUbiblio;
- mixin SiSUrgxInitFlags;
- mixin outputHub;
- string flag_action;
- string arg_unrecognized;
- enum dAM { abstraction, matters }
- static auto rgx = Rgx();
- scope(success) {
- debug(checkdoc) {
- writefln(
- "~ run complete, ok ~ (sdp-%s.%s.%s, %s D:%s, %s %s)",
- ver.major, ver.minor, ver.patch,
- __VENDOR__, __VERSION__,
- bits, os,
- );
- }
- }
- scope(failure) {
- debug(checkdoc) {
- stderr.writefln(
- "run failure",
- );
- }
- }
- bool[string] opts = [
- "abstraction" : false,
- "assertions" : false,
- "concordance" : false,
- "debug" : false,
- "digest" : false,
- "epub" : false,
- "html" : false,
- "html-seg" : false,
- "html-scroll" : false,
- "manifest" : false,
- "ocn" : true,
- "pp2" : false,
- "quiet" : false,
- "sisupod" : false,
- "source" : false,
- "sqlite-discrete" : false,
- "sqlite-db-create" : false,
- "sqlite-db-drop" : false,
- "sqlite-db-recreate" : false,
- "sqlite-delete" : false,
- "sqlite-insert" : false,
- "sqlite-update" : false,
- "text" : false,
- "verbose" : false,
- "very-verbose" : false,
- "xhtml" : false,
- "section_toc" : true,
- "section_body" : true,
- "section_endnotes" : true,
- "section_glossary" : true,
- "section_biblio" : true,
- "section_bookindex" : true,
- "section_blurb" : true,
- "backmatter" : true,
- "skip-output" : false,
- ];
- string[string] settings = [
- "output-dir" : "",
- "site-config-dir" : "",
- "lang" : "all",
- "sqlite-filename" : "documents",
- ];
- auto helpInfo = getopt(args,
- std.getopt.config.passThrough,
- "abstraction", "--abstraction document abstraction ", &opts["abstraction"],
- "assert", "--assert set optional assertions on", &opts["assertions"],
- "concordance", "--concordance file for document", &opts["concordance"],
- "debug", "--debug", &opts["debug"],
- "digest", "--digest hash digest for each object", &opts["digest"],
- "epub", "--epub process epub output", &opts["epub"],
- "html", "--html process html output", &opts["html"],
- "html-seg", "--html-seg process html output", &opts["html-seg"],
- "html-scroll", "--html-seg process html output", &opts["html-scroll"],
- "manifest", "--manifest process manifest output", &opts["manifest"],
- "ocn", "--ocn object cite numbers (default)", &opts["ocn"],
- "pp2", "--pp2 nested parallelisation", &opts["pp2"],
- "quiet", "--quiet output to terminal", &opts["quiet"],
- "sisupod", "--sisupod sisupod source content bundled", &opts["sisupod"],
- "source", "--source markup source text content", &opts["source"],
- "sqlite-discrete", "--sqlite process discrete sqlite output", &opts["sqlite-discrete"],
- "sqlite-db-create", "--sqlite-db-create create db, create tables", &opts["sqlite-db-create"],
- "sqlite-db-drop", "--sqlite-db-drop drop tables & db", &opts["sqlite-db-drop"],
- "sqlite-db-recreate", "--sqlite-db-recreate create db, create tables", &opts["sqlite-db-recreate"],
- // "sqlite-db-populate", "--sqlite-db-populate create db & tables, insert specified", &opts["sqlite-db-populate"],
- "sqlite-delete", "--sqlite process sqlite output", &opts["sqlite-delete"],
- "sqlite-insert", "--sqlite process sqlite output", &opts["sqlite-insert"],
- "sqlite-update", "--sqlite process sqlite output", &opts["sqlite-update"],
- "text", "--text process text output", &opts["text"],
- "txt", "--txt process text output", &opts["text"],
- "verbose|v", "--verbose output to terminal", &opts["verbose"],
- "very-verbose", "--very-verbose output to terminal", &opts["very-verbose"],
- "xhtml", "--xhtml process xhtml output", &opts["xhtml"],
- "section-toc", "--section-toc process table of contents (default)", &opts["section_toc"],
- "section-body", "--section-body process document body (default)", &opts["section_body"],
- "section-endnotes", "--section-endnotes process document endnotes (default)", &opts["section_endnotes"],
- "section-glossary", "--section-glossary process document glossary (default)", &opts["section_glossary"],
- "section-biblio", "--section-biblio process document biblio (default)", &opts["section_biblio"],
- "section-bookindex", "--section-bookindex process document bookindex (default)", &opts["section_bookindex"],
- "section-blurb", "--section-blurb process document blurb (default)", &opts["section_blurb"],
- "backmatter", "--section-backmatter process document backmatter (default)", &opts["backmatter"],
- "skip-output", "--skip-output", &opts["skip-output"],
- "output-dir", "--output-dir=[dir path]", &settings["output-dir"],
- "site-config-dir", "--site-config-dir=[dir path]", &settings["site-config-dir"],
- "sqlite-filename", "--sqlite-filename=[filename].sqlite", &settings["sqlite-filename"],
- "lang", "--lang=[lang code e.g. =en or =en,es]", &settings["lang"],
- );
- if (helpInfo.helpWanted) {
- defaultGetoptPrinter("Some information about the program.", helpInfo.options);
- }
- enum outTask { sisupod, source, sqlite, sqlite_multi, epub, html_scroll, html_seg, html_stuff }
- struct OptActions {
- auto assertions() {
- return opts["assertions"];
- }
- auto concordance() {
- return opts["concordance"];
- }
- auto debug_do() {
- return opts["debug"];
- }
- auto digest() {
- return opts["digest"];
- }
- auto epub() {
- return opts["epub"];
- }
- auto html() {
- bool _is = (
- opts["html"]
- || opts["html-seg"]
- || opts["html-scroll"]
- )
- ? true
- : false;
- return _is;
- }
- auto html_seg() {
- bool _is = (
- opts["html"]
- || opts["html-seg"]
- )
- ? true
- : false;
- return _is;
- }
- auto html_scroll() {
- bool _is = (
- opts["html"]
- || opts["html-scroll"]
- )
- ? true
- : false;
- return _is;
- }
- auto html_stuff() {
- bool _is = (
- opts["html"]
- || opts["html-scroll"]
- || opts["html-seg"]
- )
- ? true
- : false;
- return _is;
- }
- auto manifest() {
- return opts["manifest"];
- }
- auto ocn() {
- return opts["ocn"];
- }
- auto quiet() {
- return opts["quiet"];
- }
- auto sisupod() {
- return opts["sisupod"];
- }
- auto source() {
- return opts["source"];
- }
- auto sqlite_discrete() {
- return opts["sqlite-discrete"];
- }
- auto sqlite_db_drop() {
- bool _is = (
- opts["sqlite-db-recreate"]
- || opts["sqlite-db-drop"]
- )
- ? true
- : false;
- return _is;
- }
- auto sqlite_db_create() {
- bool _is = (
- opts["sqlite-db-recreate"]
- || opts["sqlite-db-create"]
- )
- ? true
- : false;
- return _is;
- }
- auto sqlite_insert() {
- return opts["sqlite-insert"];
- }
- auto sqlite_delete() {
- return opts["sqlite-delete"];
- }
- auto sqlite_update() {
- return opts["sqlite-update"];
- }
- auto text() {
- return opts["text"];
- }
- auto verbose() {
- bool _is = (
- opts["verbose"]
- || opts["very-verbose"]
- )
- ? true
- : false;
- return _is;
- }
- auto very_verbose() {
- return opts["very-verbose"];
- }
- auto xhtml() {
- return opts["xhtml"];
- }
- auto section_toc() {
- return opts["section_toc"];
- }
- auto section_body() {
- return opts["section_body"];
- }
- auto section_endnotes() {
- return opts["section_endnotes"];
- }
- auto section_glossary() {
- return opts["section_glossary"];
- }
- auto section_biblio() {
- return opts["section_biblio"];
- }
- auto section_bookindex() {
- return opts["section_bookindex"];
- }
- auto section_blurb() {
- return opts["section_blurb"];
- }
- auto backmatter() {
- return opts["backmatter"];
- }
- auto skip_output() {
- return opts["skip-output"];
- }
- auto languages_set() {
- return settings["lang"].split(",");
- }
- auto output_dir_set() {
- return settings["output-dir"];
- }
- auto sqlite_filename() {
- return settings["sqlite-filename"];
- }
- auto pp2() {
- return opts["pp2"];
- }
- auto output_task_scheduler() {
- int[] schedule;
- if (sisupod) {
- schedule ~= outTask.sisupod;
- }
- if (source) {
- schedule ~= outTask.source;
- }
- 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;
- }
- return schedule.sort().uniq;
- }
- auto abstraction() {
- bool _is = (
- opts["abstraction"]
- || concordance
- || epub
- || html
- || manifest
- || sisupod
- || source
- || sqlite_discrete
- || sqlite_delete
- || sqlite_insert
- || sqlite_update
- )
- ? true
- : false;
- return _is;
- }
- }
- auto _opt_action = OptActions();
- auto _env = [
- "pwd" : environment["PWD"],
- "home" : environment["HOME"],
- ];
- auto _manifest_start = PodManifest!()("");
- auto _manifest_matter = PathMatters!()(_opt_action, _env, "");
- auto _manifests = [ _manifest_matter ];
- foreach(arg; args[1..$]) {
- _manifest_start = PodManifest!()(arg);
- if (arg.match(rgx.flag_action)) {
- flag_action ~= " " ~ arg; // flags not taken by getopt
- } else if (
- !(arg.match(rgx.src_pth_sst_or_ssm))
- && _manifest_start.pod_manifest_file_with_path
- && _opt_action.abstraction
- ) {
- string contents_location_raw_;
- string contents_location_;
- string sisudoc_txt_ = _manifest_start.pod_manifest_file_with_path;
- enforce(
- exists(sisudoc_txt_)!=0,
- "file not found: «" ~
- sisudoc_txt_ ~ "»"
- );
- if (exists(sisudoc_txt_)) {
- try {
- if (exists(sisudoc_txt_)) {
- contents_location_raw_ = sisudoc_txt_.readText;
- }
- } catch (ErrnoException ex) {
- } catch (FileException ex) {
- // Handle errors
- }
- if (contents_location_raw_.match(rgx.pod_content_location)) { // (file name followed by language codes \n)+
- foreach (m; contents_location_raw_.matchAll(rgx.pod_content_location)) {
- foreach (n; m.captures[2].matchAll(rgx.language_codes)) {
- contents_location_ ~= "media/text/" ~ n.captures[1].to!string ~ "/" ~ m.captures[1].to!string ~ "\n";
- }
- }
- } else {
- contents_location_ = contents_location_raw_;
- }
- } else {
- writeln("manifest not found: ", sisudoc_txt_);
- }
- auto contents_locations_arr
- = (cast(char[]) contents_location_).split;
- auto tmp_dir_ = (sisudoc_txt_).dirName.array;
- foreach (contents_location; contents_locations_arr) {
- assert(contents_location.match(rgx.src_pth_sst_or_ssm),
- "not a recognised file: «" ~
- contents_location ~ "»"
- );
- auto contents_location_pth_ = (contents_location).to!string;
- auto lang_rgx_ = regex(r"/(" ~ _opt_action.languages_set.join("|") ~ ")/");
- if (_opt_action.languages_set[0] == "all"
- || (contents_location_pth_).match(lang_rgx_)
- ) {
- auto _fns = (((tmp_dir_).chainPath(contents_location_pth_)).array).to!string;
- _manifest_matter = PathMatters!()(_opt_action, _env, arg, _fns, contents_locations_arr);
- _manifests ~= _manifest_matter;
- }
- }
- } else if (arg.match(rgx.src_pth_sst_or_ssm)) {
- if (exists(arg)==0) {
- writeln("ERROR >> Processing Skipped! File not found: ", arg);
- } else {
- _manifest_matter = PathMatters!()(_opt_action, _env, arg, arg);
- _manifests ~= _manifest_matter;
- }
- } else if (arg.match(rgx.src_pth_zip)) {
- // fns_src ~= arg; // gather input markup source file names for processing
- } else { // anything remaining, unused
- arg_unrecognized ~= " " ~ arg;
- }
- }
- if (!(_opt_action.skip_output)) {
- debug(steps) {
- writeln("step0 commence → (without processing files)");
- }
- outputHubOp!()(_env, _opt_action);
- debug(steps) {
- writeln("- step0 complete");
- }
- }
- if (_manifests.length > 1) { // _manifests[0] initialized dummy element
- foreach(manifest; parallel(_manifests[1..$])) {
- if (!empty(manifest.src.filename)) {
- scope(success) {
- if (!(_opt_action.quiet)) {
- writefln(
- "%s\n%s",
- "~ document complete, ok ~",
- "------------------------------------------------------------------",
- );
- }
- }
- scope(failure) {
- debug(checkdoc) {
- stderr.writefln(
- "~ document run failure ~ (%s v%s)\n\t%s\n%s",
- __VENDOR__, __VERSION__,
- manifest.src.filename,
- "------------------------------------------------------------------",
- );
- }
- }
- enforce(
- manifest.src.filename.match(rgx.src_pth_types),
- "not a sisu markup filename: «" ~
- manifest.src.filename ~ "»"
- );
- debug(steps) {
- writeln("--->\nstepX commence → (document abstraction)");
- }
- auto t = SiSUabstraction!()(_env, _opt_action, manifest);
- static assert(!isTypeTuple!(t));
- static assert(t.length==2);
- auto doc_abstraction = t[dAM.abstraction];
- auto doc_matters = t[dAM.matters];
- debug(steps) {
- writeln("- stepX complete");
- }
- /+ ↓ debugs +/
- if (doc_matters.opt.action.verbose) {
- SiSUabstractionSummary!()(doc_abstraction, doc_matters);
- }
- /+ ↓ debugs +/
- if ((doc_matters.opt.action.debug_do)
- || (doc_matters.opt.action.verbose)
- ) {
- SiSUdebugs!()(doc_abstraction, doc_matters);
- }
- /+ ↓ output hub +/
- if (!(doc_matters.opt.action.skip_output)) {
- debug(steps) {
- writeln("step5 commence → (process outputs)");
- }
- outputHub!()(doc_abstraction, doc_matters);
- debug(steps) {
- writeln("- step5 complete");
- }
- }
- scope(exit) {
- if (!(_opt_action.quiet)) {
- writefln(
- "processed file: %s",
- manifest.src.filename
- );
- }
- destroy(manifest);
- }
- } else {
- /+ no recognized filename provided +/
- writeln("no recognized filename");
- break; // terminate, stop
- }
- }
- }
-}