diff options
| author | Ralph Amissah <ralph.amissah@gmail.com> | 2024-04-10 22:24:34 -0400 | 
|---|---|---|
| committer | Ralph Amissah <ralph.amissah@gmail.com> | 2024-04-10 23:08:18 -0400 | 
| commit | 90873fabd7451e1dd8c4b39303906e19bdc481f7 (patch) | |
| tree | 2dbb0e41f3e9c761645c8b37dafe979a01d38d32 /src/sisudoc/io_out/hub.d | |
| parent | 0.15.0 (diff) | |
0.16.0 sisudoc (src/sisudoc sisudoc spine)
- src/sisudoc (replaces src/doc_reform)
- sisudoc spine (used more)
Diffstat (limited to 'src/sisudoc/io_out/hub.d')
| -rw-r--r-- | src/sisudoc/io_out/hub.d | 238 | 
1 files changed, 238 insertions, 0 deletions
diff --git a/src/sisudoc/io_out/hub.d b/src/sisudoc/io_out/hub.d new file mode 100644 index 0000000..b68eb0d --- /dev/null +++ b/src/sisudoc/io_out/hub.d @@ -0,0 +1,238 @@ +/+ +- Name: SisuDoc Spine, Doc Reform [a part of] +  - Description: documents, structuring, processing, publishing, search +    - static content generator + +  - Author: Ralph Amissah +    [ralph.amissah@gmail.com] + +  - Copyright: (C) 2015 - 2024 Ralph Amissah, All Rights Reserved. + +  - License: AGPL 3 or later: + +    Spine (SiSU), a framework for document structuring, publishing and +    search + +    Copyright (C) Ralph Amissah + +    This program is free software: you can redistribute it and/or modify it +    under the terms of the GNU AFERO General Public License as published by the +    Free Software Foundation, either version 3 of the License, or (at your +    option) any later version. + +    This program is distributed in the hope that it will be useful, but WITHOUT +    ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +    FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +    more details. + +    You should have received a copy of the GNU General Public License along with +    this program. If not, see [https://www.gnu.org/licenses/]. + +    If you have Internet connection, the latest version of the AGPL should be +    available at these locations: +    [https://www.fsf.org/licensing/licenses/agpl.html] +    [https://www.gnu.org/licenses/agpl.html] + +  - Spine (by Doc Reform, related to SiSU) uses standard: +    - docReform markup syntax +      - standard SiSU markup syntax with modified headers and minor modifications +    - docReform object numbering +      - standard SiSU object citation numbering & system + +  - Homepages: +    [https://www.sisudoc.org] +    [https://www.doc-reform.org] + +  - Git +    [https://git.sisudoc.org/] + ++/ +/++ +  output hub<BR> +  check & generate output types requested ++/ +module sisudoc.io_out.hub; +@safe: +template outputHub() { +  import sisudoc.io_out, +    sisudoc.io_out.metadata, +    sisudoc.io_out.xmls, +    sisudoc.io_out.create_zip_file, +    sisudoc.io_out.paths_output; +  @system void outputHub(D,I)( +    const D doc_abstraction, +    I doc_matters +  ) { +    mixin Msg; +    auto msg = Msg!()(doc_matters); +    enum outTask { source_or_pod, sqlite, sqlite_multi, latex, odt, epub, html_scroll, html_seg, html_stuff } +    void Scheduled(D,I)(int sched, D doc_abstraction, I doc_matters) { +      auto msg = Msg!()(doc_matters); +      if (sched == outTask.source_or_pod) { +        msg.v("spine (doc reform) source processing... "); +        if (doc_matters.opt.action.pod) { +          msg.v("spine (doc reform) source pod processing... "); +        } +        import sisudoc.io_out.source_pod; +        spinePod!()(doc_matters); +        if (doc_matters.opt.action.source) { +          msg.vv("spine (doc reform) source done"); +        } +        if (doc_matters.opt.action.pod) { +          msg.vv("spine (doc reform) source pod done"); +        } +      } +      if (sched == outTask.epub) { +        msg.v("epub3 processing... "); +        import sisudoc.io_out.epub3; +        doc_abstraction.outputEPub3!()(doc_matters); +        msg.vv("epub3 done"); +      } +      if (sched == outTask.html_stuff) { +        outputMetadata!()(doc_matters); +        msg.vv("html metadata done"); +      } +      if (sched == outTask.html_scroll) { +        msg.v("html scroll processing... "); +        import sisudoc.io_out.html; +        outputHTML!().scroll(doc_abstraction, doc_matters); +        msg.vv("html scroll done"); +      } +      if (sched == outTask.html_seg) { +        msg.v("html seg processing... "); +        import sisudoc.io_out.html; +        outputHTML!().seg(doc_abstraction, doc_matters); +        msg.vv("html seg done"); +      } +      if (sched == outTask.html_stuff) { +        import sisudoc.io_out.html; +        outputHTML!().css(doc_matters); +        outputHTML!().images_cp(doc_matters); +        msg.vv("html css & images done"); +      } +      if (sched == outTask.latex) { +        msg.v("latex processing... (available for downstream processing & pdf output"); +        import sisudoc.io_out.latex; +        import std.file; +        if ((isValidPath(doc_matters.output_path ~ "/latex/sty")) +          && (!(exists(doc_matters.output_path ~ "/latex/sty"))) +        ) { +          outputLaTeXstyInit!()( +            doc_matters.output_path, +            doc_matters.opt.action.generated_by, +            doc_matters.generator_program.name_version_and_compiler, +            doc_matters.generator_program.time_output_generated, +          ); +        } +        outputLaTeX!()(doc_abstraction, doc_matters); +        msg.vv("latex done"); +      } +      if (sched == outTask.odt) { +        msg.v("odf:odt processing... "); +        import sisudoc.io_out.odt; +        outputODT!()(doc_abstraction, doc_matters); +        msg.vv("odf:odt done"); +      } +      if (sched == outTask.sqlite) { +        msg.v("sqlite processing... "); +        import sisudoc.io_out.sqlite; +        doc_abstraction.SQLiteHubDiscreteBuildTablesAndPopulate!()(doc_matters); +        msg.vv("sqlite done"); +      } +    } +    if (doc_matters.opt.action.vox_gt0) { +      writeln(" ", doc_matters.src.filename_base); +    } +    if (!(doc_matters.opt.action.parallelise_subprocesses)) { +      foreach(schedule; doc_matters.opt.action.output_task_scheduler) { +        Scheduled!()(schedule, doc_abstraction, doc_matters); +      } +    } else { +      import std.parallelism; +      foreach(schedule; parallel(doc_matters.opt.action.output_task_scheduler)) { +        Scheduled!()(schedule, doc_abstraction, doc_matters); +      } +    } +    if (doc_matters.opt.action.sqlite_update) { +      msg.v("sqlite update processing..."); +      import sisudoc.io_out.sqlite; +      doc_abstraction.SQLiteHubBuildTablesAndPopulate!()(doc_matters); +      msg.vv("sqlite update done"); +    } else if (doc_matters.opt.action.sqlite_delete) { +      msg.v("sqlite delete processing..."); +      import sisudoc.io_out.sqlite; +      doc_abstraction.SQLiteHubBuildTablesAndPopulate!()(doc_matters); +      msg.vv("sqlite delete done"); +    } +  } +} +template outputHubInitialize() { +  import std.file; +  import sisudoc.io_out, +    sisudoc.io_out.metadata, +    sisudoc.io_out.paths_output; +  string _bespoke_homepage = "./spine-bespoke-output/html/homepage.index.html"; +  @system void outputHubInitialize(O,I)( +    O opt_action, +    I program_info +  ) { +    if ((opt_action.html || opt_action.html_seg || opt_action.html_scroll) +        && opt_action.output_dir_set.length > 0 +        && !(opt_action.output_dir_set ~ "/index.html").exists +    ) { +      writeln(_bespoke_homepage); +      if ((_bespoke_homepage).exists) { +        writeln("copy bespoke html homepage\n", _bespoke_homepage, " -> ", opt_action.output_dir_set, "/index.html"); +        _bespoke_homepage.copy(opt_action.output_dir_set ~ "/index.html"); +      } else { +        writeln("place bespoke homepage in ", _bespoke_homepage); +      } +    } +    if ( +      opt_action.latex_document_header_sty +      || ( +        opt_action.latex +        && opt_action.output_dir_set.length > 0 +        && !(isValidPath(opt_action.output_dir_set ~ "/latex/sty"))) +    ) { // .sty need to be produced only once (if unchanged per output-dir of which there usually will be only one) +      import sisudoc.io_out.latex; +      outputLaTeXstyInit!()( +        opt_action.output_dir_set, +        opt_action.generated_by, +        program_info.name_version_and_compiler, +        program_info.time_output_generated, +      ); +      writeln(opt_action.latex); +    } +  } +} +template outputHubOp() { +  import sisudoc.io_out, +    sisudoc.io_out.metadata, +    sisudoc.io_out.xmls, +    sisudoc.io_out.create_zip_file, +    sisudoc.io_out.paths_output; +  @system void outputHubOp(E,O,C)(E env, O opt_action, C config) { +    if ((opt_action.sqlite_db_drop)) { +      if ((opt_action.vox_gt1)) { +        writeln("sqlite drop db..."); +      } +      import sisudoc.io_out.sqlite; +      SQLiteDbDrop!()(opt_action, config); +      if ((opt_action.vox_gt2)) { +        writeln("sqlite drop db done"); +      } +    } +    if ((opt_action.sqlite_db_create)) { +      if ((opt_action.vox_gt1)) { +        auto pth_sqlite_db = spinePathsSQLite!()(opt_action.cgi_sqlite_search_filename, opt_action.output_dir_set); +        writeln("sqlite create table..."); +      } +      import sisudoc.io_out.sqlite; +      SQLiteTablesCreate!()(env, opt_action, config); +      if ((opt_action.vox_gt2)) { +        writeln("sqlite create table done"); +      } +    } +  } +}  | 
