aboutsummaryrefslogtreecommitdiffhomepage
path: root/org/sdp.org
diff options
context:
space:
mode:
authorRalph Amissah <ralph.amissah@gmail.com>2018-09-10 18:15:02 -0400
committerRalph Amissah <ralph.amissah@gmail.com>2019-04-10 15:14:15 -0400
commite95c49b76f4ac7bf72c383ee43a0567dfcbf1603 (patch)
treeb3aec9058f69be0047bb526052f8deefb5d97463 /org/sdp.org
parentmaker, subprojects arrange, minor (diff)
0.1.0 renamed doc-reform, doc_reform (& rad)
- from sdp
Diffstat (limited to 'org/sdp.org')
-rw-r--r--org/sdp.org1525
1 files changed, 0 insertions, 1525 deletions
diff --git a/org/sdp.org b/org/sdp.org
deleted file mode 100644
index 97a9af0..0000000
--- a/org/sdp.org
+++ /dev/null
@@ -1,1525 +0,0 @@
-#+TITLE: sdp hub
-#+AUTHOR: Ralph Amissah
-#+EMAIL: [[mailto:ralph.amissah@gmail.com][ralph.amissah@gmail.com]]
-#+DESCRIPTION: documents - structuring, publishing in multiple formats & search
-#+KEYWORDS
-#+LANGUAGE: en
-#+STARTUP: indent content
-#+OPTIONS: H:3 num:nil toc:t \n:nil @:t ::t |:t ^:nil _:nil -:t f:t *:t <:t
-#+OPTIONS: TeX:t LaTeX:t skip:nil d:nil todo:t pri:nil tags:not-in-toc
-#+OPTIONS: author:nil email:nil creator:nil timestamp:nil
-#+PROPERTY: header-args :padline no :exports code :noweb yes
-#+EXPORT_SELECT_TAGS: export
-#+EXPORT_EXCLUDE_TAGS: noexport
-#+FILETAGS: :sdp:rel:hub:
-#+TAGS: assert(a) class(c) debug(d) mixin(m) sdp(s) tangle(T) template(t) WEB(W) noexport(n)
-
-[[../maker.org][maker.org makefile]] [[./][org/]]
-* 0. version.txt (set version) :version:
-** set program version
-
-#+BEGIN_SRC d :tangle ../views/version.txt
-/+ obt - org generated file +/
-struct Version {
- int major;
- int minor;
- int patch;
-}
-enum ver = Version(0, 27, 1);
-#+END_SRC
-
-** compilation restrictions (supported compilers)
-
-http://dlang.org/spec/version.html#predefined-versions
-
-#+BEGIN_SRC d :tangle ../views/version.txt
-version (Posix) {
- version (DigitalMars) {
- } else version (LDC) {
- } else version (GNU) {
- } else {
- static assert (0, "Unsupported D compiler");
- }
-} else {
- static assert (0, "Unsupported D compiler");
-}
-#+END_SRC
-
-* 1. sdp (sisu document parser) :sdp:
-** notes
-- deal with imports
-- get options
- - get command line instructions
- - read config instructions
-- process files as instructed by options
- - read in file
- - process file
- - output
-
-** 0. sdp src/sdp :template:
-
-- process files (act according to requirements of each type)
- - by sourcefilename
- - by sourcefiles contents identifier
- - by zip filename
-
-#+BEGIN_SRC d :tangle ../src/sdp/sdp.d :shebang #!/usr/bin/env rdmd
-module sdp.sisu_document_parser;
-import
- sdp.conf.compile_time_info,
- sdp.meta.metadoc;
-<<imports_sdp>>
-import std.algorithm;
-import std.parallelism;
-<<mixin_sdp_version>>
-<<mixin_pre_main>>
-/++
-name "sdp"
-description "A SiSU inspired document parser writen in D."
-homepage "http://sisudoc.org"
-+/
-void main(string[] args) {
- <<sdp_mixin>>
- <<sdp_args>>
- <<sdp_do_selected>>
- if (_manifests.length > 1) { // _manifests[0] initialized dummy element
- foreach(manifest; parallel(_manifests[1..$])) {
- if (!empty(manifest.src.filename)) {
- <<sdp_each_file_do_scope>>
- <<sdp_each_file_do_abstraction>>
- <<sdp_each_file_do_debugs_checkdoc>>
- <<sdp_each_file_do_selected_output>>
- <<sdp_each_file_do_scope_exit>>
- } else {
- <<sdp_no_filename_provided>>
- }
- }
- }
-}
-#+END_SRC
-
-** 1. pre-loop init :init:
-*** init
-**** imports :import:
-***** sdp :sdp:
-
-#+NAME: imports_sdp
-#+BEGIN_SRC d
-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;
-#+END_SRC
-
-****** notes
-├── src
-│   ├── sdp.d
-│   └── sdp
-│ ├── conf
-│ ├── meta
-│ └── output
-└── views
-   └── version.txt
-
-[[./meta_abstraction.org][meta_abstraction]]
-[[./meta_conf_make_meta.org][meta_conf_make_meta]]
-[[./meta_defaults.org][meta_defaults]]
-[[./meta_output_debugs.org][meta_output_debugs]]
-[[./source_read_files.org][source_read_files]]
-[[./compile_time_info.org][compile time info]]
-[[./output.org][output]]
-[[./sdp.org][sdp]]
-
-keep up to date, configuration in ../maker.org
-
-check:
-- http://github.com/Abscissa/SDLang-D
-- https://github.com/abscissa/libInputVisitor
-
-std.conv,
-std.variant,
-
-- https://code.dlang.org/packages/toml
-- https://github.com/toml-lang/toml
-- https://github.com/toml-lang/toml/blob/master/README.md
-
-**** mixins :mixin:
-***** version.txt :version:
-
-#+NAME: mixin_sdp_version
-#+BEGIN_SRC d
-mixin(import("version.txt"));
-#+END_SRC
-
-***** pre main mixins
-#+NAME: mixin_pre_main
-#+BEGIN_SRC d
-mixin CompileTimeInfo;
-#+END_SRC
-
-***** sdp "main" mixins :sdp:
-
-#+NAME: sdp_mixin
-#+BEGIN_SRC d
-mixin SiSUrgxInit;
-mixin contentJSONtoSiSUstruct;
-mixin SiSUbiblio;
-mixin SiSUrgxInitFlags;
-mixin outputHub;
-#+END_SRC
-
-**** init :init:
-
-#+NAME: sdp_args
-#+BEGIN_SRC d
-string flag_action;
-string arg_unrecognized;
-enum dAM { abstraction, matters }
-static auto rgx = Rgx();
-#+END_SRC
-
-*** scope (run complete) :scope:
-
-#+NAME: sdp_args
-#+BEGIN_SRC d
-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",
- );
- }
-}
-#+END_SRC
-
-*** getopt args for loop :args:getopt:
-
-look into using getopt
-[[http://dlang.org/phobos/std_getopt.html][getopt]]
-[[http://dlang.org/library/std/getopt.html][getopt]]
-
-**** getopt
-
-#+NAME: sdp_args
-#+BEGIN_SRC d
-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);
-}
-#+END_SRC
-
-**** getopt hash to struct
-
-#+NAME: sdp_args
-#+BEGIN_SRC d
-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();
-#+END_SRC
-
-**** env
-
-#+NAME: sdp_args
-#+BEGIN_SRC d
-auto _env = [
- "pwd" : environment["PWD"],
- "home" : environment["HOME"],
-];
-#+END_SRC
-
-*** opt actions on processing files & file paths (pods, src etc.)
-
-#+NAME: sdp_args
-#+BEGIN_SRC d
-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;
- }
-}
-#+END_SRC
-
-*** config files load & read
-
-#+NAME: sdp_conf_files
-#+BEGIN_SRC d
-auto _config_document_struct = readConfigDoc!()(_manifest, _env); // document config file
-auto _config_local_site_struct = readConfigSite!()(_manifest, _env); // local site config
-ConfCompositePlus _make_and_meta_struct;
-_make_and_meta_struct = configParseTOMLreturnSiSUstruct!()(_make_and_meta_struct, _config_document_struct);
-_make_and_meta_struct = configParseTOMLreturnSiSUstruct!()(_make_and_meta_struct, _config_local_site_struct);
-#+END_SRC
-
-*** opt actions independent of processing files (no files no processing loop)
-
-#+NAME: sdp_do_selected
-#+BEGIN_SRC d
-if (!(_opt_action.skip_output)) {
- debug(steps) {
- writeln("step0 commence → (without processing files)");
- }
- outputHubOp!()(_env, _opt_action);
- debug(steps) {
- writeln("- step0 complete");
- }
-}
-#+END_SRC
-
-** _2. processing: (loop each file)_ [+2] :loop:files:
-*** scope (loop) :scope:
-
-#+NAME: sdp_each_file_do_scope
-#+BEGIN_SRC d
-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 ~ "»"
-);
-#+END_SRC
-
-*** 1. _document abstraction_ [#A] >>
-
-- return tuple of:
- - doc_abstraction (the document)
- - doc_matters
-
-#+NAME: sdp_each_file_do_abstraction
-#+BEGIN_SRC d
-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");
-}
-#+END_SRC
-
-*** 2. _output processing_ (post abstraction processing) >>
-**** 0. abstraction _print summary_ :abstraction:summary:
-
-#+NAME: sdp_each_file_do_debugs_checkdoc
-#+BEGIN_SRC d
-/+ ↓ debugs +/
-if (doc_matters.opt.action.verbose) {
- SiSUabstractionSummary!()(doc_abstraction, doc_matters);
-}
-#+END_SRC
-
-**** 1. _debug_ (document parts, checkdoc) :debug:checkdoc:
-- [[./meta_output_debugs.org][meta_output_debugs]]
-
-#+NAME: sdp_each_file_do_debugs_checkdoc
-#+BEGIN_SRC d
-/+ ↓ debugs +/
-if ((doc_matters.opt.action.debug_do)
-|| (doc_matters.opt.action.verbose)
-) {
- SiSUdebugs!()(doc_abstraction, doc_matters);
-}
-#+END_SRC
-
-**** 2. _process outputs_ :outputs:
-- [[./output_hub.org][output_hub]]
-
-#+NAME: sdp_each_file_do_selected_output
-#+BEGIN_SRC d
-/+ ↓ 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");
- }
-}
-#+END_SRC
-
-*** scope (on loop exit) :scope:exit:
-
-#+NAME: sdp_each_file_do_scope_exit
-#+BEGIN_SRC d
-scope(exit) {
- if (!(_opt_action.quiet)) {
- writefln(
- "processed file: %s",
- manifest.src.filename
- );
- }
- destroy(manifest);
-}
-#+END_SRC
-
-** +2c. no valid filename provided+
-#+NAME: sdp_no_filename_provided
-#+BEGIN_SRC d
-/+ no recognized filename provided +/
-writeln("no recognized filename");
-break; // terminate, stop
-#+END_SRC
-
-* 2. _document abstraction functions_ :module:sdp:abstraction:
-** 0. module template
-
-#+BEGIN_SRC d :tangle ../src/sdp/meta/metadoc.d
-module sdp.meta.metadoc;
-template SiSUabstraction() {
- <<imports_sdp>>
- <<sdp_mixin>>
- enum headBody { header, body_content, insert_file_list, image_list }
- enum makeMeta { make, meta }
- enum docAbst { doc_abstraction, section_keys, segnames, segnames_0_4, images }
- static auto rgx = Rgx();
- auto SiSUabstraction(E,O,M)(
- E _env,
- O _opt_action,
- M _manifest
- ){
- <<sdp_conf_files>>
- <<sdp_each_file_do_read_and_split_sisu_markup_file_content_into_header_and_body>>
- <<sdp_each_file_do_split_sisu_markup_file_header_into_make_and_meta>>
- <<sdp_each_file_do_document_abstraction>>
- <<sdp_each_file_do_document_matters>>
- auto t = tuple(doc_abstraction, doc_matters);
- static assert(t.length==2);
- return t;
- }
-}
-#+END_SRC
-
-** 1. raw file content split, doc: _header_, _content_ +(lists: subdocs? images?) >>
-- [[./source_read_files.org][source_read_files]]
-
-- read in the _marked up source document_ and
- - split the document into:
- - document header
- - document body
- - from markup source
- - if master document from sub documents content
- - if a master document
- - make a list of insert files
- - if build source pod requested
- - scan for list of images
- (action avoided if not needed at this stage)
-
-- _return a tuple of_:
- - header
- - body
- - insert file list
- - image list (if build source pod requested)
-
-if build source pod requested all information needed to build it available at this point
- - manifest related information _manifest
- - insert file list _header_body_insertfilelist_imagelist[headBody.insert_file_list]
- - image list _header_body_insertfilelist_imagelist[headBody.image_list]
-
-#+NAME: sdp_each_file_do_read_and_split_sisu_markup_file_content_into_header_and_body
-#+BEGIN_SRC d
-/+ ↓ read file (filename with path) +/
-/+ ↓ file tuple of header and content +/
-debug(steps) {
- writeln("step1 commence → (get document header & body & insert file list & if needed image list)"
- );
-}
-auto _header_body_insertfilelist_imagelist
- = SiSUrawMarkupContent!()(_opt_action, _manifest.src.path_and_fn);
-static assert(!isTypeTuple!(_header_body_insertfilelist_imagelist));
-static assert(_header_body_insertfilelist_imagelist.length==4);
-debug(steps) {
- writeln("- step1 complete");
-}
-debug(header_and_body) {
- writeln(header);
- writeln(_header_body_insertfilelist_imagelist.length);
- writeln(_header_body_insertfilelist_imagelist.length[headBody.body_content][0]);
-}
-#+END_SRC
-
-** 2. _document metadata_ & _make instructions_ (struct from toml) >>
-- [[./meta_conf_make_meta.org][meta_conf_make_meta]]
-
-- read _document header_, split into:
- - metadata
- - make instructions
-- read config files
- - consolidate make instructions
-- _return tuple of_:
- - document metadata
- - make instructions (from configuration files & document header make
- instructions)
-
-#+NAME: sdp_each_file_do_split_sisu_markup_file_header_into_make_and_meta
-#+BEGIN_SRC d
-/+ ↓ split header into make and meta +/
-debug(steps) {
- writeln("step2 commence → (read document header - toml, return struct)");
-}
-_make_and_meta_struct =
-docHeaderMakeAndMetaTupTomlExtractAndConvertToStruct!()(
- _make_and_meta_struct,
- _header_body_insertfilelist_imagelist[headBody.header]
-);
-debug(steps) {
- writeln("- step2 complete");
-}
-#+END_SRC
-
-** 3. _document abstraction, tuple_ (output-pre-processing) [#A] >>
-- [[./meta_abstraction.org][meta_abstraction]]
-
-- prepare the document abstraction used in downstream processing
-
-- _return tuple of_:
- - document abstraction (_the_document_ or doc_abstraction)
- - document abstraction keys
- - (head, toc, body, endnotes, glossary, bibliography, bookindex, blurb,
- tail)
- - (transfer to _doc_matters_)
- - segnames for html epub (transfer to _doc_matters_)
- - image list (transfer to _doc_matters_)
-
-#+NAME: sdp_each_file_do_document_abstraction
-#+BEGIN_SRC d
-/+ ↓ document abstraction: process document, return abstraction as tuple +/
-debug(steps) {
- writeln("step3 commence → (document abstraction (da); da keys; segnames; doc_matters)");
-}
-auto da = SiSUdocAbstraction!()(
- _header_body_insertfilelist_imagelist[headBody.body_content],
- _make_and_meta_struct,
- _opt_action,
- _manifest,
- true,
-);
-static assert(!isTypeTuple!(da));
-static assert(da.length==5);
-auto doc_abstraction = da[docAbst.doc_abstraction]; /+ head ~ toc ~ body ~ endnotes_seg ~ glossary ~ bibliography ~ bookindex ~ blurb; +/
-auto _document_section_keys_sequenced = da[docAbst.section_keys];
-string[] _doc_html_segnames = da[docAbst.segnames];
-string[] _doc_epub_segnames_0_4 = da[docAbst.segnames_0_4];
-auto _images = da[docAbst.images];
-debug(steps) {
- writeln("- step3 complete");
-}
-#+END_SRC
-
-** 4. _document matters_ (doc info gathered, various sources) [#A] >>
-
-- prepare document_matters, miscellany about processing and the document of use
- in downstream processing
-
-#+NAME: sdp_each_file_do_document_matters
-#+BEGIN_SRC d
-debug(steps) {
- writeln("step4 commence → (doc_matters)");
-}
-struct DocumentMatters {
- auto conf_make_meta() { // TODO meld with all make instructions
- return _make_and_meta_struct;
- }
- auto env() {
- struct Env_ {
- auto pwd() {
- return _manifest.env.pwd;
- }
- auto home() {
- return _manifest.env.home;
- }
- }
- return Env_();
- }
- auto opt() {
- struct Opt_ {
- auto action() {
- /+ getopt options, commandline instructions, raw
- - processing instructions --epub --html etc.
- - command line config instructions --output-path
- +/
- return _opt_action;
- }
- }
- return Opt_();
- }
- auto src() {
- return _manifest.src;
- }
- auto src_path_info() {
- return SiSUpathsSRC!()(_manifest.env.pwd, _manifest.src.file_with_absolute_path); // would like (to have and use) relative path
- }
- auto srcs() {
- struct SRC_ {
- auto file_insert_list() {
- return _header_body_insertfilelist_imagelist[headBody.insert_file_list];
- }
- auto image_list() {
- return _images;
- }
- }
- return SRC_();
- }
- auto pod() {
- return _manifest.pod;
- }
- auto sqlite() {
- struct SQLite_ {
- string filename() {
- return _opt_action.sqlite_filename;
- }
- }
- return SQLite_();
- }
- auto xml() {
- struct XML_ {
- auto keys_seq() {
- /+ contains .seg & .scroll sequences +/
- return _document_section_keys_sequenced;
- }
- string[] segnames() {
- return _doc_html_segnames;
- }
- string[] segnames_lv_0_to_4() {
- return _doc_epub_segnames_0_4;
- }
- }
- return XML_();
- }
- auto output_path() {
- return _manifest.output.path;
- }
-}
-auto doc_matters = DocumentMatters();
-debug(steps) {
- writeln("- step4 complete");
-}
-#+END_SRC
-
-* 3. document abstraction _summary_ :module:sdp:metadoc_summary:
-** 0. module template
-
-#+BEGIN_SRC d :tangle ../src/sdp/meta/metadoc_summary.d
-module sdp.meta.metadoc_summary;
-template SiSUabstractionSummary() {
- auto SiSUabstractionSummary(S,T)(
- auto ref const S doc_abstraction,
- auto ref T doc_matters,
- ) {
- <<metadoc_summary_imports>>
- mixin InternalMarkup;
- <<metadoc_summary_initialize>>
- if (doc_matters.opt.action.verbose) {
- <<meta_metadoc_summary>>
- }
- }
-}
-#+END_SRC
-
-** init
-*** imports
-
-#+name: metadoc_summary_imports
-#+BEGIN_SRC d
-import
- sdp.meta.defaults,
- sdp.meta.rgx;
-import
- std.array,
- std.exception,
- std.regex,
- std.stdio,
- std.string,
- std.traits,
- std.typecons,
- std.uni,
- std.utf,
- std.conv : to;
-#+END_SRC
-
-*** initialize :report:
-
-#+name: metadoc_summary_initialize
-#+BEGIN_SRC d
-auto markup = InlineMarkup();
-#+END_SRC
-
-** (last ocn)
-
-#+name: meta_metadoc_summary
-#+BEGIN_SRC d
-string[string] check = [
- "last_object_number" : "NA [debug \"checkdoc\" not run]",
- "last_object_number_body" : "0",
- "last_object_number_book_index" : "0",
-];
-foreach (k; doc_matters.xml.keys_seq.seg) {
- foreach (obj; doc_abstraction[k]) {
- if (obj.metainfo.is_of_part != "empty") {
- if (!empty(obj.metainfo.object_number)) {
- if (k == "body") {
- check["last_object_number_body"] = obj.metainfo.object_number;
- }
- if (!(obj.metainfo.object_number.empty)) {
- check["last_object_number"] = obj.metainfo.object_number;
- }
- }
- if (k == "bookindex_seg") {
- if (obj.metainfo.object_number_type == 2) {
- check["last_object_number_book_index"] = obj.metainfo.object_number_book_index;
- }
- }
- }
- }
-}
-#+END_SRC
-
-** summary
-
-#+name: meta_metadoc_summary
-#+BEGIN_SRC d
-auto min_repeat_number = 66;
-auto char_repeat_number = (doc_matters.conf_make_meta.meta.title_full.length
- + doc_matters.conf_make_meta.meta.creator_author.length + 4);
-char_repeat_number = (char_repeat_number > min_repeat_number)
-? char_repeat_number
-: min_repeat_number;
-writefln(
- "%s\n\"%s\", %s\n%s\n%s\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n%30-s%10-d\n(%s: %s)\n%s",
- markup.repeat_character_by_number_provided("-", char_repeat_number),
- doc_matters.conf_make_meta.meta.title_full,
- doc_matters.conf_make_meta.meta.creator_author,
- doc_matters.src.filename,
- markup.repeat_character_by_number_provided("-", char_repeat_number),
- "length toc arr:",
- to!int(doc_abstraction["toc_seg"].length),
- "length doc_abstraction arr:",
- to!int(doc_abstraction["body"].length),
- "last doc body ocn:",
- to!int(check["last_object_number_body"]),
- "last object_number:",
- to!int(check["last_object_number"]),
- "length endnotes:", // subtract headings
- (doc_abstraction["endnotes"].length > 2)
- ? (to!int(doc_abstraction["endnotes"].length - 2))
- : 0,
- "length glossary:",
- (doc_abstraction["glossary"].length > 1)
- ? (to!int(doc_abstraction["glossary"].length))
- : 0,
- "length biblio:",
- (doc_abstraction["bibliography"].length > 1)
- ? (to!int(doc_abstraction["bibliography"].length))
- : 0,
- "length bookindex:",
- (doc_abstraction["bookindex_seg"].length > 1)
- ? (to!int(doc_abstraction["bookindex_seg"].length))
- : 0,
- " last book idx ocn:",
- to!int(check["last_object_number_book_index"]),
- "length blurb:",
- (doc_abstraction["blurb"].length > 1)
- ? (to!int(doc_abstraction["blurb"].length))
- : 0,
- "number of segments:",
- (doc_matters.xml.segnames.length > 1)
- ? (to!int(doc_matters.xml.segnames.length))
- : 0,
- __FILE__,
- __LINE__,
- markup.repeat_character_by_number_provided("-", min_repeat_number),
-);
-#+END_SRC
-
-* __END__
-dev notes
-
-** sdp glossary / terms
-
-|------+-------------------------------------|
-| sdp | sisu document parser |
-|------+-------------------------------------|
-| dmso | document markup, structure, objects |
-|------+-------------------------------------|
-| meta | meta document, document abstraction |
-| mda | meta, meta document abstraction |
-| adr | abstract document representation |
-| dar | document abstract representation |
-| (da) | (document abstraction) |
-| | (code representation of document) |
-|------+-------------------------------------|
-| ao | abstract objects |
-| | (code representation of objects) |
-|------+-------------------------------------|
-
-consider
-|-------+----------------------------------------------|
-| dao | document abstraction, objects |
-|-------+----------------------------------------------|
-| daso | document abstraction, structure, objects |
-|-------+----------------------------------------------|
-| drso | document representation, structure, objects |
-|-------+----------------------------------------------|
-| daows | document abstraction, objects with structure |
-|-------+----------------------------------------------|
-
-** the document notes
-*** document sections
-**** summary
-
-|--------------+--------------+------+---+--------------------------------------------------+--------------------------------+---+---|
-| section | part | opt. | | objects | ocn | | |
-|--------------+--------------+------+---+--------------------------------------------------+--------------------------------+---+---|
-| front matter | head | * | | | no | | |
-|--------------+--------------+------+---+--------------------------------------------------+--------------------------------+---+---|
-| toc | toc | | | generated from headings | no | | |
-|--------------+--------------+------+---+--------------------------------------------------+--------------------------------+---+---|
-| body | body | * | | default section | yes | | |
-| | | | | - headings | | | |
-| | | | | - paras | | | |
-| | | | | - code | | | |
-| | | | | - poem | | | |
-| | | | | - group | | | |
-| | | | | - block | | | |
-| | | | | - quote | | | |
-| | | | | - table | | | |
-|--------------+--------------+------+---+--------------------------------------------------+--------------------------------+---+---|
-| back matter | endnote | | | generated from inline note markup | no (each endnote belongs to | | |
-| | | | | | a (body) object) | | |
-|--------------+--------------+------+---+--------------------------------------------------+--------------------------------+---+---|
-| | glossary | | | identified section, limited markup | possibly, to make searchable | | |
-| | | | | - heading | hidden | | |
-| | | | | - paras | | | |
-|--------------+--------------+------+---+--------------------------------------------------+--------------------------------+---+---|
-| | bibliography | | | generated from inline special markup | possibly, to make searchable | | |
-| | | | | appended to paragraphs contained in body section | hidden | | |
-| | | | | - heading | | | |
-| | | | | - paras | | | |
-|--------------+--------------+------+---+--------------------------------------------------+--------------------------------+---+---|
-| | book index | | | generated from inline special markup | possibly, special numbering or | | |
-| | | | | - heading | could use term as anchor? | | |
-| | | | | - paras | to make searchable | | |
-| | | | | | hidden | | |
-|--------------+--------------+------+---+--------------------------------------------------+--------------------------------+---+---|
-| | blurb | | | identified section, limited markup | no (unless non-substantive | | |
-| | | | | - heading | given special numbering) | | |
-| | | | | - paras | | | |
-|--------------+--------------+------+---+--------------------------------------------------+--------------------------------+---+---|
-
-**** on abstraction
-
-- abstract for downstream processing
- - identify document structure and objects
- - identify document structure (headings/levels/sections)
- - identify objects (headings, paragraphs, tables, code blocks, verse ...)
- - set document, generate common abstraction for downstream parsing
- - set different _document sections_:
- - _head_, toc, _body_, endnotes, glossary, bibliography, book index, blurb
- - _object numbers_, heading/ chapter numbering etc, endnote numbers
- - _regular ocn_
- - body objects
- - glossary objects
- - bibliography objects
- - _special ocn_
- - non substantive text (provide special numbers)
- - blurb objects
- - book index
- - special (_exceptions_)
- - endnotes
- - unify object representations
- - multiple markups for same object type given single representation
- - extract object attributes
- - unify inline markup on objects
- - inline markup made easier to identify
-
-- simplify downstream parsing
-
-*** objects
-**** summary
-
-|-------+--------------+----------------------------+--------------------------+----------------+-----------------+----------------+------------|
-| | | identified by | object notes | attributes | inline | embedded | special |
-| | | | | | | appended | characters |
-|-------+--------------+----------------------------+--------------------------+----------------+-----------------+----------------+------------|
-| para | heading | level markers | | | - italics | - endnotes | |
-| | | at start of line | | | | - bibliography | |
-|-------+--------------+----------------------------+--------------------------+----------------+-----------------+----------------+------------|
-| | paragraph | delimited by two new lines | default object | - indent | - bold | - endnotes | |
-| | | | [discard leading & | - bullet | - italics | - bibliography | |
-| | | | newline whitespace] | | - underscore | | |
-| | | | | | - strikethrough | | |
-| | | | | | - superscript | | |
-| | | | | | - subscript | | |
-|-------+--------------+----------------------------+--------------------------+----------------+-----------------+----------------+------------|
-| block | | open and close tags | | | | | |
-|-------+--------------+----------------------------+--------------------------+----------------+-----------------+----------------+------------|
-| TODO | quote | | | - language? | | | |
-|-------+--------------+----------------------------+--------------------------+----------------+-----------------+----------------+------------|
-| TODO | group | | - inline markup applied | - language? | as paragraph | - endnotes | |
-| | | | - [discard leading & | | | - bibliography | |
-| | | | newline whitespace] | | | | |
-|-------+--------------+----------------------------+--------------------------+----------------+-----------------+----------------+------------|
-| TODO | block | | - inline markup applied | | as paragraph | - endnotes | |
-| | | | - whitespace indentation | | | - bibliography | |
-| | | | & newlines | | | | |
-|-------+--------------+----------------------------+--------------------------+----------------+-----------------+----------------+------------|
-| | poem / verse | open and close tags | verse is the object | | | - endnotes | |
-| | | | - inline markup applied | | | - bibliography | |
-| | | (for poem) | - whitespace indentation | | | | |
-| | | | & newlines | | | | |
-|-------+--------------+----------------------------+--------------------------+----------------+-----------------+----------------+------------|
-| | code | | - contents untouched | - syntax | | | |
-| | | | - whitespace indentation | - numbered | | | |
-| | | | & newlines | | | | |
-|-------+--------------+----------------------------+--------------------------+----------------+-----------------+----------------+------------|
-| | table | | | - column width | | | |
-| | | | | - heading row | | | |
-|-------+--------------+----------------------------+--------------------------+----------------+-----------------+----------------+------------|
-
-**** ocn
-
-|-------------+-----------------------+-----------------------+----------------+------|
-| objects | section / part | ocn described | how used | type |
-|-------------+-----------------------+-----------------------+----------------+------|
-| regular ocn | | | | |
-|-------------+-----------------------+-----------------------+----------------+------|
-| | body objects | seq. digit | anchor | ocn |
-| | | [0-9]+ | visible | |
-|-------------+-----------------------+-----------------------+----------------+------|
-| | glossary objects | seq. digit | anchor | ocn |
-| | | [0-9]+ | not-visible | |
-| | | | (for search) | |
-|-------------+-----------------------+-----------------------+----------------+------|
-| | bibliography objects | seq. digit | anchor | ocn |
-| | | [0-9]+ | not-visible | |
-| | | | (for search) | |
-|-------------+-----------------------+-----------------------+----------------+------|
-| special ocn | | | | |
-|-------------+-----------------------+-----------------------+----------------+------|
-| | non-substantive text | x char + seq. digit | anchor | non |
-| | (within body & blurb) | x[0-9]+ | not-visible | |
-| | | | (for search) | |
-|-------------+-----------------------+-----------------------+----------------+------|
-| | book index | i char + seq. digit | anchor | idx |
-| | | i[0-9]+ | not-visible | |
-| | | | (for search) | |
-|-------------+-----------------------+-----------------------+----------------+------|
-| without ocn | | | | |
-|-------------+-----------------------+-----------------------+----------------+------|
-| | endnotes | ocn of parent object | no ocn | fn |
-| | | + footnote seq. digit | anchor visible | |
-|-------------+-----------------------+-----------------------+----------------+------|
-
-** make config - _composite make_
-
-work on composite make a unification of make instructions for each document run
-
-extract instructions from all config files, unify the make instructions and
-provide the result as a single set of make instructions for each document parsed
-
-- 1. general, document_make config file (to be applied to all documents unless
- overridden by document or command line instruction)
-- 2. local, site specific (site local instructions such as the site's url, cgi
- location etc.)
-- 3. each document header, make (the document header contains metadata and may
- include make instructions for that document)
- - make
- - meta
-- 4. command line instruction, make (some make instructions may be passed
- through the command line)
-
-*** instruction sources
-
-|----+---------------------------------+----------------------------------------+---------------------+---|
-| | make instruction source | | varies (applies to) | |
-|----+---------------------------------+----------------------------------------+---------------------+---|
-| 0. | unify the following as a single | take into account all the instructions | | |
-| | set of make instructions | provided below, provide interface | | |
-|----+---------------------------------+----------------------------------------+---------------------+---|
-| 1. | document_make file | to be applied to all documents | per directory | |
-| | "config_document" | (unless subsequently overridden) | (all docs within) | |
-|----+---------------------------------+----------------------------------------+---------------------+---|
-| 2. | config file | local site specific | per directory | |
-| | "config_local_site" | | (all docs within) | |
-|----+---------------------------------+----------------------------------------+---------------------+---|
-| 3. | document header make | make instructions contained | per document | |
-| | | in document header | (single doc) | |
-|----+---------------------------------+----------------------------------------+---------------------+---|
-| 4. | command line instruction | make instruction passed | each command | |
-| | | | (all docs within) | |
-|----+---------------------------------+----------------------------------------+---------------------+---|
-
-*** config & metadata (from instruction sources)
-
-|---------------------+--------------------------+----------------------------+------------------------+-----------------------------|
-| | 1. document make file | 2. config file | 3. document header | 4. command line instruction |
-|---------------------+--------------------------+----------------------------+------------------------+-----------------------------|
-| comment, fixed: | per dir (sisupod) | per dir | per document (sisupod) | per command instruction |
-|---------------------+--------------------------+----------------------------+------------------------+-----------------------------|
-| | sdl_root_config_document | sdl_root_config_local_site | | |
-|---------------------+--------------------------+----------------------------+------------------------+-----------------------------|
-| local site specific | | * | | *? |
-|---------------------+--------------------------+----------------------------+------------------------+-----------------------------|
-| | | webserv | | |
-| | | - url_root | | |
-| | | - path | | |
-| | | - images | | |
-| | | - cgi | | |
-|---------------------+--------------------------+----------------------------+------------------------+-----------------------------|
-| | | webserv_cgi | | |
-| | | - host | | |
-| | | - base_path | | |
-| | | - port | | |
-| | | - user | | |
-| | | - file_links | | |
-|---------------------+--------------------------+----------------------------+------------------------+-----------------------------|
-| | | processing | | |
-| | | - path | | |
-| | | - dir | | |
-| | | - concord_max | | |
-|---------------------+--------------------------+----------------------------+------------------------+-----------------------------|
-| | | flag (configure) | | (call) |
-| | | - act0 | | act0 |
-| | | - act1 | | act1 |
-| | | - act2 | | act2 |
-| | | - act3 | | act3 |
-| | | - act4 | | act4 |
-| | | - act5 | | act5 |
-| | | - act6 | | act6 |
-| | | - act7 | | act7 |
-| | | - act8 | | act8 |
-| | | - act9 | | act9 |
-|---------------------+--------------------------+----------------------------+------------------------+-----------------------------|
-| | | default | | |
-| | | - papersize | | |
-| | | - text_wrap | | |
-| | | - emphasis | | |
-| | | - language | | |
-| | | - digest | | |
-|---------------------+--------------------------+----------------------------+------------------------+-----------------------------|
-| | | permission | | |
-| | | - share_source | | |
-|---------------------+--------------------------+----------------------------+------------------------+-----------------------------|
-| | | program_select | | |
-| | | - editor | | |
-| | | - epub_viewer | | |
-| | | - html_viewer | | |
-| | | - odf_viewer | | |
-| | | - pdf_viewer | | |
-| | | - xml_viewer | | |
-|---------------------+--------------------------+----------------------------+------------------------+-----------------------------|
-| | | search | | |
-| | | - flag | | |
-| | | - action | | |
-| | | - db | | |
-| | | - title | | |
-|---------------------+--------------------------+----------------------------+------------------------+-----------------------------|
-| make instruction | ** | omit or override share? | ** | *? |
-|---------------------+--------------------------+----------------------------+------------------------+-----------------------------|
-| | make | make | make | |
-| | - bold | - bold | - bold | |
-| | - breaks | - breaks | - breaks | |
-| | - cover_image | - cover_image | - cover_image | |
-| | - css | - css | - css | |
-| | - emphasis | - emphasis | - emphasis | |
-| | - footer | - footer | - footer | |
-| | - headings | - headings | - headings | |
-| | - home_button_image | - home_button_image | - home_button_image | |
-| | - home_button_text | - home_button_text | - home_button_text | |
-| | - italics | - italics | - italics | |
-| | - num_top | - num_top | - num_top | |
-| | - auto_num_depth | - auto_num_depth | - auto_num_depth | |
-| | - substitute | - substitute | - substitute | |
-| | - texpdf_font | - texpdf_font | - texpdf_font | |
-|---------------------+--------------------------+----------------------------+------------------------+-----------------------------|
-| actions | | | | * |
-|---------------------+--------------------------+----------------------------+------------------------+-----------------------------|
-| | | | | assertions |
-| | | | | concordance |
-| | | | | debug |
-| | | | | digest |
-| | | | | docbook |
-| | | | | epub |
-| | | | | html |
-| | | | | html-seg |
-| | | | | html-scroll |
-| | | | | manifest |
-| | | | | ocn |
-| | | | | odt |
-| | | | | pdf |
-| | | | | postgresql |
-| | | | | qrcode |
-| | | | | sisupod |
-| | | | | source |
-| | | | | sqlite |
-| | | | | sqlite-db-create |
-| | | | | sqlite-db-drop |
-| | | | | text |
-| | | | | verbose |
-| | | | | xhtml |
-| | | | | xml-dom |
-| | | | | xml-sax |
-| | | | | section_toc |
-| | | | | section_body |
-| | | | | section_endnotes |
-| | | | | section_glossary |
-| | | | | section_biblio |
-| | | | | section_bookindex |
-| | | | | section_blurb |
-| | | | | backmatter |
-| | | | | skip-output |
-|---------------------+--------------------------+----------------------------+------------------------+-----------------------------|
-| metadata | | | * | |
-|---------------------+--------------------------+----------------------------+------------------------+-----------------------------|
-| | | | classify | |
-| | | | - dewey | |
-| | | | - keywords | |
-| | | | - loc | |
-| | | | - subject | |
-| | | | - topic_register | |
-|---------------------+--------------------------+----------------------------+------------------------+-----------------------------|
-| | | | creator | |
-| | | | - author | |
-| | | | - author_email | |
-| | | | - illustrator | |
-| | | | - translator | |
-|---------------------+--------------------------+----------------------------+------------------------+-----------------------------|
-| | | | date | |
-| | | | - added_to_site | |
-| | | | - available | |
-| | | | - created | |
-| | | | - issued | |
-| | | | - modified | |
-| | | | - published | |
-| | | | - valid | |
-|---------------------+--------------------------+----------------------------+------------------------+-----------------------------|
-| | | | identifier | |
-| | | | - isbn | |
-| | | | - oclc | |
-| | | | - pg | |
-|---------------------+--------------------------+----------------------------+------------------------+-----------------------------|
-| | | | links | |
-| | | | - link | |
-|---------------------+--------------------------+----------------------------+------------------------+-----------------------------|
-| | | | notes | |
-| | | | - abstract | |
-| | | | - description | |
-|---------------------+--------------------------+----------------------------+------------------------+-----------------------------|
-| | | | original | |
-| | | | - language | |
-| | | | - source | |
-| | | | - title | |
-|---------------------+--------------------------+----------------------------+------------------------+-----------------------------|
-| | | | publisher | |
-| | | | - name | |
-|---------------------+--------------------------+----------------------------+------------------------+-----------------------------|
-| | | | rights | |
-| | | | - copyright | |
-| | | | - cover | |
-| | | | - illustrations | |
-| | | | - license | |
-|---------------------+--------------------------+----------------------------+------------------------+-----------------------------|
-| | | | title | |
-| | | | - edition | |
-| | | | - full | |
-| | | | - language | |
-| | | | - main | |
-| | | | - note | |
-| | | | - sub | |
-| | | | - subtitle | |
-|---------------------+--------------------------+----------------------------+------------------------+-----------------------------|