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/meta/metadoc.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/meta/metadoc.d')
| -rw-r--r-- | src/sisudoc/meta/metadoc.d | 296 | 
1 files changed, 296 insertions, 0 deletions
| diff --git a/src/sisudoc/meta/metadoc.d b/src/sisudoc/meta/metadoc.d new file mode 100644 index 0000000..a1899da --- /dev/null +++ b/src/sisudoc/meta/metadoc.d @@ -0,0 +1,296 @@ +/+ +- 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/] + ++/ +module sisudoc.meta.metadoc; +@safe: +template spineAbstraction() { +  import +    std.datetime; +  import +    sisudoc.meta, +    sisudoc.meta.metadoc_from_src, +    sisudoc.meta.conf_make_meta_structs, +    sisudoc.meta.conf_make_meta_json, +    sisudoc.meta.defaults, +    sisudoc.io_in.paths_source, +    sisudoc.io_in.read_config_files, +    sisudoc.io_in.read_source_files, +    sisudoc.io_out.hub; +  mixin spineBiblio; +  mixin outputHub; +  enum headBody { header, body_content, insert_file_list, image_list } +  enum makeMeta { make, meta } +  enum docAbst  { doc_abstract_obj, doc_has } +  @system auto spineAbstraction(E,P,O,Cfg,M,S)( +    E _env, +    P program_info, +    O _opt_action, +    Cfg _cfg, +    M _manifest, +    S _make_and_meta_struct +  ){ +    { /+ document config/make file +/ +      auto _config_document_struct = readConfigDoc!()(_manifest, _env); +      import sisudoc.meta.conf_make_meta_yaml; +      _make_and_meta_struct = _config_document_struct.configParseYAMLreturnSpineStruct!()(_make_and_meta_struct, _manifest, _opt_action, _cfg); +    } +    /+ ↓ read file (filename with path) +/ +    /+ ↓ file tuple of header and content +/ +    if ((_opt_action.debug_do) +      || (_opt_action.debug_do_stages) +    ) { +      writeln("step1 commence → (get document header & body & insert file list & if needed image list) [", _manifest.src.filename, "]"); +    } +    auto _header_body_insertfilelist_imagelist +      = spineRawMarkupContent!()(_opt_action, _manifest.src.path_and_fn); +    static assert(_header_body_insertfilelist_imagelist.length==4); +    if ((_opt_action.debug_do) +      || (_opt_action.debug_do_stages) +    ) { +      writeln("- step1 complete for [", _manifest.src.filename, "]"); +    } +    debug(header_and_body) { +      writeln(header); +      writeln(_header_body_insertfilelist_imagelist.length); +      writeln(_header_body_insertfilelist_imagelist.length[headBody.body_content][0]); +    } +    /+ ↓ split header into make and meta +/ +    if ((_opt_action.debug_do) +      || (_opt_action.debug_do_stages) +    ) { +      writeln("step2 commence → (read document header (yaml) return struct) [", _manifest.src.filename, "]"); +    } +    import sisudoc.meta.conf_make_meta_yaml; +    _make_and_meta_struct = +      docHeaderMakeAndMetaTupYamlExtractAndConvertToStruct!()( +        _header_body_insertfilelist_imagelist[headBody.header], +        _make_and_meta_struct, +        _manifest, +        _opt_action, +        _cfg, +      ); +    if ((_opt_action.debug_do) +      || (_opt_action.debug_do_stages) +    ) { +      writeln("- step2 complete for [", _manifest.src.filename, "]"); +    } +    /+ ↓ document abstraction: process document, return abstraction as tuple +/ +    if ((_opt_action.debug_do) +      || (_opt_action.debug_do_stages) +    ) { +      writeln("step3 commence → (document abstraction (da); da keys; segnames; doc_matters) [", _manifest.src.filename, "]"); +    } +    auto da = docAbstraction!()( +      _header_body_insertfilelist_imagelist[headBody.body_content], +      _make_and_meta_struct, +      _opt_action, +      _manifest, +      true, +    ); +    auto doc_abstraction = da.document_the; +    auto _doc_has_struct = da.doc_has; +    if ((_opt_action.debug_do) +      || (_opt_action.debug_do_stages) +    ) { +      writeln("- step3 complete for [", _manifest.src.filename, "]"); +    } +    if ((_opt_action.debug_do) +      || (_opt_action.debug_do_stages) +    ) { +      writeln("step4 commence → (doc_matters) [", _manifest.src.filename, "]"); +    } +    struct DocumentMatters { +      auto generator_program() { +        struct Prog_ { +          string project_name() { +            return "spine"; +          } +          string name() { +            return program_info.name; +          } +          string ver() { +            return program_info.ver; +          } +          @trusted string name_and_version() { +            return program_info.name_and_version; +          } +          @trusted string name_version_and_compiler() { +            return program_info.name_version_and_compiler; +          } +          string url_home() { +            return "https://sisudoc.org"; +          } +          string url_git() { +            return "https://git.sisudoc.org/projects/"; +          } +          auto compiler() { +            return program_info.compiler; +          } +          auto time_output_generated() { +            return program_info.time_output_generated; +          } +        } +        return Prog_(); +      } +      auto generated_time() { +        auto _st = Clock.currTime(UTC()); +        auto _time = _st.year.to!string +          ~ "-" ~ _st.month.to!int.to!string // prefer as month number +          ~ "-" ~ _st.day.to!string +          ~ " [" ~ _st.isoWeek.to!string ~ "/" ~ _st.dayOfWeek.to!int.to!string ~ "]" +          ~ " " ~ _st.hour.to!string +          ~ ":" ~ _st.minute.to!string +          ~ ":" ~ _st.second.to!string; +        return _time; +      } +      auto conf_make_meta() { +        return _make_and_meta_struct; +      } +      auto has() { +        return _doc_has_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 +            +/ +            return _opt_action; +          } +        } +        return Opt_(); +      } +      auto src() { +        return _manifest.src; +      } +      auto src_path_info() { +        return spinePathsSRC!()(_manifest.env.pwd, _manifest.src.file_with_absolute_path); // would like (to have and use) relative path +      } +      auto pod() { +        return _manifest.pod; +      } +      auto sqlite() { +        struct SQLite_ { +          string filename() { +            string _fn = ""; +            string _pth = ""; +            if (_opt_action.sqliteDB_filename.length > 0) { +              _fn = _opt_action.sqliteDB_filename; +            } else if (_make_and_meta_struct.conf.w_srv_db_sqlite_filename.length > 0) { +              _fn = _make_and_meta_struct.conf.w_srv_db_sqlite_filename; +            } +            return _fn; +          } +          string path() { +            string _pth = ""; +            if (_opt_action.sqliteDB_path.length > 0) { +              _pth = _opt_action.sqliteDB_path; +            } else if (_make_and_meta_struct.conf.w_srv_db_sqlite_path.length > 0) { +              _pth = _make_and_meta_struct.conf.w_srv_db_sqlite_path; +            } +            return _pth; +          } +          string cgi_filename() { +            string _fn = ""; +            if (_opt_action.cgi_sqlite_search_filename.length > 0) { +              _fn = _opt_action.cgi_sqlite_search_filename; +            } else if (_make_and_meta_struct.conf.w_srv_cgi_search_script.length > 0) { +              _fn = _make_and_meta_struct.conf.w_srv_cgi_search_script; +            } +            return _fn; +          } +          string cgi_filename_d() { +            string _fn = ""; +            if (_opt_action.cgi_sqlite_search_filename_d.length > 0) { +              _fn = _opt_action.cgi_sqlite_search_filename_d; +            } else if (_make_and_meta_struct.conf.w_srv_cgi_search_script_raw_fn_d.length > 0) { +              _fn = _make_and_meta_struct.conf.w_srv_cgi_search_script_raw_fn_d; +            } +            return _fn; +          } +        } +        return SQLite_(); +      } +      auto output_path() { +        return _make_and_meta_struct.conf.output_path; +      } +      auto srcs() { +        struct SRC_ { +          auto file_insert_list() { +            return _header_body_insertfilelist_imagelist[headBody.insert_file_list]; +          } +          auto image_list() { +            return _doc_has_struct.imagelist; +          } +        } +        return SRC_(); +      } +    } +    auto doc_matters = DocumentMatters(); +    if ((_opt_action.debug_do) +      || (_opt_action.debug_do_stages) +    ) { +      writeln("- step4 complete for [", _manifest.src.filename, "]"); +    } +    auto t = tuple(doc_abstraction, doc_matters); +    return t; +  } +} | 
