aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/sisu_d_parser.d
diff options
context:
space:
mode:
authorRalph Amissah <ralph@amissah.com>2017-05-07 16:07:11 -0400
committerRalph Amissah <ralph@amissah.com>2019-04-10 15:14:14 -0400
commite31e98f5cc3c2289ad47198a506d8d03a063512c (patch)
treec954269daebba8549190d1e4a91f4a64ae62664c /src/sisu_d_parser.d
parentcleaning (diff)
0.15.0 named modules
Diffstat (limited to 'src/sisu_d_parser.d')
-rwxr-xr-xsrc/sisu_d_parser.d230
1 files changed, 230 insertions, 0 deletions
diff --git a/src/sisu_d_parser.d b/src/sisu_d_parser.d
new file mode 100755
index 0000000..87b25e9
--- /dev/null
+++ b/src/sisu_d_parser.d
@@ -0,0 +1,230 @@
+#!/usr/bin/env rdmd
+/+
+ sdp
++/
+import
+ sdp.compile_time_info,
+ sdp.abstraction;
+/+ sdp: sisu document parser, see http://sisudoc.org +/
+import
+ sdp.abstraction_summary,
+ sdp.ao_abstract_doc_source,
+ sdp.ao_conf_make_meta,
+ sdp.ao_conf_make_meta_native,
+ sdp.ao_conf_make_meta_sdlang,
+ sdp.ao_defaults,
+ sdp.ao_doc_debugs,
+ sdp.ao_read_config_files,
+ sdp.ao_read_source_files,
+ sdp.ao_rgx,
+ sdp.output_hub,
+ sdp.paths_source;
+/+ sdlang http://sdlang.org +/
+import sdlang;
+/+ std +/
+private import
+ std.array,
+ std.exception,
+ std.getopt,
+ std.process,
+ std.stdio,
+ std.regex,
+ std.string,
+ std.traits,
+ std.typecons,
+ std.utf,
+ std.conv : to;
+
+mixin(import("version.txt"));
+mixin CompileTimeInfo;
+/++ A SiSU document parser writen in D. +/
+void main(string[] args) {
+ mixin SiSUrgxInit;
+ mixin SiSUregisters;
+ mixin SiSUheaderExtractSDLang;
+ mixin SiSUnode;
+ mixin SiSUbiblio;
+ mixin SiSUrgxInitFlags;
+ mixin outputHub;
+ string[] fns_src;
+ string flag_action;
+ string arg_unrecognized;
+ enum dAM { abstraction, matters }
+ auto rgx = Rgx();
+ scope(success) {
+ debug(checkdoc) {
+ writefln(
+ "~ run complete, ok ~ (sdp-%s.%s.%s, %s v%s, %s %s)",
+ ver.major, ver.minor, ver.patch,
+ __VENDOR__, __VERSION__,
+ bits, os,
+ );
+ }
+ }
+ scope(failure) {
+ debug(checkdoc) {
+ stderr.writefln(
+ "run failure",
+ );
+ }
+ }
+ bool[string] _opt_action_bool = [
+ "assertions" : false,
+ "concordance" : false,
+ "debug" : false,
+ "digest" : false,
+ "docbook" : false,
+ "epub" : false,
+ "html" : false,
+ "html_seg" : false,
+ "html_scroll" : false,
+ "manifest" : false,
+ "ocn" : true,
+ "odt" : false,
+ "pdf" : false,
+ "postgresql" : false,
+ "qrcode" : false,
+ "sisupod" : false,
+ "source" : false,
+ "sqlite" : false,
+ "text" : false,
+ "verbose" : false,
+ "xhtml" : false,
+ "xml_dom" : false,
+ "xml_sax" : 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,
+ ];
+ auto helpInfo = getopt(args,
+ std.getopt.config.passThrough,
+ "assert", "--assert set optional assertions on", &_opt_action_bool["assertions"],
+ "concordance", "--concordance file for document", &_opt_action_bool["concordance"],
+ "debug", "--debug only relevant when debug options compiled in", &_opt_action_bool["debug"],
+ "digest", "--digest hash digest for each object", &_opt_action_bool["digest"],
+ "docbook", "--docbook process docbook output", &_opt_action_bool["docbook"],
+ "epub", "--epub process epub output", &_opt_action_bool["epub"],
+ "html", "--html process html output", &_opt_action_bool["html"],
+ "html_seg", "--html-seg process html output", &_opt_action_bool["html_seg"],
+ "html_scroll", "--html-seg process html output", &_opt_action_bool["html_scroll"],
+ "manifest", "--manifest process manifest output", &_opt_action_bool["manifest"],
+ "ocn", "--ocn object cite numbers (default)", &_opt_action_bool["ocn"],
+ "odf", "--odf process odf:odt output", &_opt_action_bool["odt"],
+ "odt", "--odt process odf:odt output", &_opt_action_bool["odt"],
+ "pdf", "--pdf process pdf output", &_opt_action_bool["pdf"],
+ "pg", "--pg process postgresql output", &_opt_action_bool["postgresql"],
+ "postgresql", "--postgresql process postgresql output", &_opt_action_bool["postgresql"],
+ "qrcode", "--qrcode with document metadata", &_opt_action_bool["qrcode"],
+ "sisupod", "--sisupod sisupod source content bundled", &_opt_action_bool["sisupod"],
+ "source", "--source markup source text content", &_opt_action_bool["source"],
+ "sqlite", "--sqlite process sqlite output", &_opt_action_bool["sqlite"],
+ "text", "--text process text output", &_opt_action_bool["text"],
+ "txt", "--txt process text output", &_opt_action_bool["text"],
+ "verbose|v", "--verbose output to terminal", &_opt_action_bool["verbose"],
+ "xhtml", "--xhtml process xhtml output", &_opt_action_bool["xhtml"],
+ "xml-dom", "--xml-dom process xml dom output", &_opt_action_bool["xml_dom"],
+ "xml-sax", "--xml-sax process xml sax output", &_opt_action_bool["xml_sax"],
+ "section-toc", "--section-toc process table of contents (default)", &_opt_action_bool["section_toc"],
+ "section-body", "--section-body process document body (default)", &_opt_action_bool["section_body"],
+ "section-endnotes", "--section-endnotes process document endnotes (default)", &_opt_action_bool["section_endnotes"],
+ "section-glossary", "--section-glossary process document glossary (default)", &_opt_action_bool["section_glossary"],
+ "section-biblio", "--section-biblio process document biblio (default)", &_opt_action_bool["section_biblio"],
+ "section-bookindex", "--section-bookindex process document bookindex (default)", &_opt_action_bool["section_bookindex"],
+ "section-blurb", "--section-blurb process document blurb (default)", &_opt_action_bool["section_blurb"],
+ "backmatter", "--section-backmatter process document backmatter (default)", &_opt_action_bool["backmatter"],
+ "skip_output", "--skip-output", &_opt_action_bool["skip_output"],
+ );
+ if (helpInfo.helpWanted) {
+ defaultGetoptPrinter("Some information about the program.", helpInfo.options);
+ }
+ foreach(arg; args) {
+ if (arg.match(rgx.flag_action)) {
+ flag_action ~= " " ~ arg; // flags not taken by getopt
+ } else if (arg.match(rgx.src_pth)) {
+ fns_src ~= arg; // gather input markup source file names for processing
+ } else { // anything remaining, unused
+ arg_unrecognized ~= " " ~ arg;
+ }
+ }
+ auto env = [
+ "pwd" : environment["PWD"],
+ "home" : environment["HOME"],
+ ];
+ auto sdl_root_configuration = ConfigHub!()("conf.sdl", env);
+ auto sdl_root_doc_make = ConfigHub!()("sisu_document_make", env);
+ auto confsdl = HeaderExtractSDL();
+ auto conf_settings_aa = confsdl.configSettingsSDLangToAAmake(sdl_root_configuration);
+ auto conf_doc_make_aa = confsdl.documentMakeSDLangToAAmake(sdl_root_doc_make);
+ foreach(fn_src; fns_src) {
+ if (!empty(fn_src)) {
+ scope(success) {
+ debug(checkdoc) {
+ writefln(
+ "%s\n%s",
+ "~ document complete, ok ~",
+ "------------------------------------------------------------------",
+ );
+ }
+ }
+ scope(failure) {
+ debug(checkdoc) {
+ stderr.writefln(
+ "~ document run failure ~ (%s v%s)\n\t%s",
+ __VENDOR__, __VERSION__,
+ fn_src
+ );
+ }
+ }
+ enforce(
+ fn_src.match(rgx.src_pth),
+ "not a sisu markup filename"
+ );
+ auto t =
+ SiSUabstraction!()(fn_src, _opt_action_bool, env);
+ static assert(!isTypeTuple!(t));
+ static assert(t.length==2);
+ auto doc_abstraction = t[dAM.abstraction];
+ auto doc_matters = t[dAM.matters];
+ /+ ↓ debugs +/
+ if (doc_matters.opt_action_bool["verbose"]) {
+ SiSUabstractionSummary!()(doc_abstraction, doc_matters);
+ }
+ /+ ↓ debugs +/
+ if ((doc_matters.opt_action_bool["debug"])
+ || (doc_matters.opt_action_bool["verbose"])
+ ) {
+ SiSUdebugs!()(doc_abstraction, doc_matters);
+ }
+ /+ ↓ output hub +/
+ if (!(_opt_action_bool["skip_output"])) {
+ outputHub!()(doc_abstraction, doc_matters);
+ }
+ scope(exit) {
+ debug(checkdoc) {
+ writefln(
+ "processed file: %s",
+ fn_src
+ );
+ }
+ destroy(fn_src);
+ }
+ } else {
+ /+ no recognized filename provided +/
+ writeln("no recognized filename");
+ break; // terminate, stop
+ }
+ }
+}
+unittest {
+ /++
+ name "sdp"
+ description "A SiSU document parser writen in D."
+ homepage "http://sisudoc.org"
+ +/
+}