diff options
Diffstat (limited to 'src/sdp/sdp.d')
-rwxr-xr-x | src/sdp/sdp.d | 512 |
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 - } - } - } -} |