diff options
| author | Ralph Amissah <ralph@amissah.com> | 2017-06-06 15:23:13 -0400 | 
|---|---|---|
| committer | Ralph Amissah <ralph@amissah.com> | 2019-04-10 15:14:14 -0400 | 
| commit | 717c3a3a5f1fd075e4672acc2ca171f4f9426700 (patch) | |
| tree | f8b5a8d340603cddb3d6a7a1bcaccce8b1dae44b /src/sdp/sdp.d | |
| parent | org headers minor (diff) | |
rename program root sdp.d
Diffstat (limited to 'src/sdp/sdp.d')
| -rwxr-xr-x | src/sdp/sdp.d | 221 | 
1 files changed, 221 insertions, 0 deletions
| diff --git a/src/sdp/sdp.d b/src/sdp/sdp.d new file mode 100755 index 0000000..234bc3f --- /dev/null +++ b/src/sdp/sdp.d @@ -0,0 +1,221 @@ +#!/usr/bin/env rdmd +/+ +  sdp: sisu document parser +       a SiSU document parser writen in D +       see http://sisudoc.org. ++/ +module sdp.sisu_document_parser; +import +  sdp.conf.compile_time_info, +  sdp.ao.abstraction; +/+ sdp: sisu document parser, see http://sisudoc.org +/ +import sdp.ao; +import +  std.getopt, +  std.process; +import +  sdp.ao.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.output.paths_source; +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" +  +/ +} | 
