-*- mode: org -*- #+TITLE: spine (doc_reform) metadata (multidocument) curates #+DESCRIPTION: documents - structuring, various output representations & search #+FILETAGS: :spine:hub: #+AUTHOR: Ralph Amissah #+EMAIL: [[mailto:ralph.amissah@gmail.com][ralph.amissah@gmail.com]] #+COPYRIGHT: Copyright (C) 2015 - 2022 Ralph Amissah #+LANGUAGE: en #+STARTUP: content hideblocks hidestars noindent entitiespretty #+OPTIONS: H:3 num:nil toc:t \n:nil @:t ::t |:t ^:nil _:nil -:t f:t *:t <:t #+PROPERTY: header-args :exports code #+PROPERTY: header-args+ :noweb yes #+PROPERTY: header-args+ :eval no #+PROPERTY: header-args+ :results no #+PROPERTY: header-args+ :cache no #+PROPERTY: header-args+ :padline no #+PROPERTY: header-args+ :mkdirp yes * document abstraction _summary_ :module:spine:metadoc_show_summary: ** _module template_ metadoc summary - document summary from abstraction #+HEADER: :tangle "../src/doc_reform/meta/metadoc_show_summary.d" #+BEGIN_SRC d <<doc_header_including_copyright_and_license>> module doc_reform.meta.metadoc_show_summary; template spineMetaDocSummary() { @safe void spineMetaDocSummary(S,T)( const S doc_abstraction, T doc_matters, ) { <<metadoc_show_summary_imports>> <<metadoc_show_imports_shared>> mixin InternalMarkup; <<metadoc_show_initialize>> if (doc_matters.opt.action.verbose || doc_matters.opt.action.show_summary) { <<meta_metadoc_show_summary_document_check_counts>> <<meta_metadoc_show_summary_document>> } } } #+END_SRC ** (last ocn) #+NAME: meta_metadoc_show_summary_document_check_counts #+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.has.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") { if (obj.metainfo.object_number_type == 2) { check["last_object_number_book_index"] = obj.metainfo.object_number_book_index; } } } } } #+END_SRC ** document summary #+NAME: meta_metadoc_show_summary_document #+BEGIN_SRC d writefln( "%s\n\"%s\", %s\n%s [%s]\n%s\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\n%40-s%10-d\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, doc_matters.src.language, markup.repeat_character_by_number_provided("-", char_repeat_number), "- toc arr length:", to!int(doc_abstraction["toc"].length), "- doc_abstraction arr length:", to!int(doc_abstraction["body"].length), " doc body last obj on.#:", to!int(check["last_object_number_body"]), " - number of tables:", doc_matters.has.tables, " - number of codeblocks:", doc_matters.has.codeblocks, " - number of poems:", doc_matters.has.poems, " - number of blocks:", doc_matters.has.blocks, " - number of groups:", doc_matters.has.groups, " - number of images:", doc_matters.has.images, "- endnotes length:", // subtract headings (doc_abstraction["endnotes"].length > 2) ? (to!int(doc_abstraction["endnotes"].length - 2)) : 0, "- glossary length:", (doc_abstraction["glossary"].length > 1) ? (to!int(doc_abstraction["glossary"].length)) : 0, "- biblio length:", (doc_abstraction["bibliography"].length > 1) ? (to!int(doc_abstraction["bibliography"].length)) : 0, "- bookindex length:", (doc_abstraction["bookindex"].length > 1) ? (to!int(doc_abstraction["bookindex"].length)) : 0, " book idx last obj on.#:", to!int(check["last_object_number_book_index"]), "- blurb length:", (doc_abstraction["blurb"].length > 1) ? (to!int(doc_abstraction["blurb"].length)) : 0, "* last obj on.#:", to!int(check["last_object_number"]), "number of segments:", (doc_matters.has.segnames_lv4.length > 1) ? (to!int(doc_matters.has.segnames_lv4.length)) : 0, markup.repeat_character_by_number_provided("-", min_repeat_number), ); #+END_SRC * show config ** _module template_ show config *** _show config tangle #+HEADER: :tangle "../src/doc_reform/meta/metadoc_show_config.d" #+BEGIN_SRC d <<doc_header_including_copyright_and_license>> <<spine_show_site_config>> <<spine_show_config>> #+END_SRC *** _show site config --show-config (show config) #+NAME: spine_show_site_config #+BEGIN_SRC d module doc_reform.meta.metadoc_show_config; template spineShowSiteConfig() { @safe void spineShowSiteConfig(O,T)( O opt_action, T config, ) { <<metadoc_show_summary_imports>> <<metadoc_show_imports_shared>> mixin InternalMarkup; auto markup = InlineMarkup(); auto char_repeat_number = 66; if (opt_action.show_config) { <<meta_metadoc_show_site_config>> } } } #+END_SRC *** show site config #+NAME: meta_metadoc_show_site_config #+BEGIN_SRC d writefln( "\n%s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n", markup.repeat_character_by_number_provided("-", char_repeat_number), "- webserv host name:", config.conf.w_srv_host, "- webserv doc root (part):", config.conf.w_srv_data_root_part, "- webserv doc path:", config.conf.w_srv_data_root_path, "- webserv images (location):", config.conf.w_srv_images_root_part, "- webserv doc root url:", config.conf.w_srv_data_root_url, "- webserv cgi host (host):", config.conf.w_srv_cgi_host, "- webserv cgi host path:", config.conf.w_srv_cgi_bin_path, "- webserv cgi host (part):", config.conf.w_srv_cgi_bin_subpath, "- webserv cgi search script:", config.conf.w_srv_cgi_search_script, "- webserv cgi search script in d:", config.conf.w_srv_cgi_search_script_raw_fn_d, "- webserv cgi port:", config.conf.w_srv_cgi_port, "- webserv cgi user:", config.conf.w_srv_cgi_user, "- webserv cgi url:", config.conf.w_srv_cgi_bin_url, "- webserv cgi action:", config.conf.w_srv_cgi_action, "- webserv cgi title:", config.conf.w_srv_cgi_search_form_title, // "- webserv cgi file links:", // config.conf.w_srv_cgi_file_links, "- webserv sqlite db:", config.conf.w_srv_db_sqlite_filename, "- output path:", config.conf.output_path, "- processing concordance max:", config.conf.processing_concord_max, // "- flag act0:", // config.conf.flag_act0, "- default papersize:", config.conf.set_papersize, "- default text wrap:", config.conf.set_text_wrap, "- default emphasis markup symbol:", config.conf.set_emphasis, "- default language:", config.conf.set_language, "- default hash digest:", config.conf.set_digest, "- search flag:", config.conf.search_flag, "- search action:", config.conf.search_action, "- search db:", config.conf.search_db, "- search title:", config.conf.search_title, ); #+END_SRC *** show (per document) config #+NAME: spine_show_config #+BEGIN_SRC d template spineShowConfig() { @safe void spineShowConfig(T)( T doc_matters, ) { <<metadoc_show_summary_imports>> <<metadoc_show_imports_shared>> mixin InternalMarkup; <<metadoc_show_initialize>> if (doc_matters.opt.action.show_config && doc_matters.opt.action.debug_do ) { writeln(doc_matters.conf_make_meta.conf); } if (doc_matters.opt.action.show_config) { <<meta_metadoc_show_config>> } } } #+END_SRC ** show config #+NAME: meta_metadoc_show_config #+BEGIN_SRC d writefln( "%s\n\"%s\", %s\n%s\n%s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n", 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), "- webserv host name:", doc_matters.conf_make_meta.conf.w_srv_host, "- webserv doc root (part):", doc_matters.conf_make_meta.conf.w_srv_data_root_part, "- webserv doc path:", doc_matters.conf_make_meta.conf.w_srv_data_root_path, "- webserv images (location):", doc_matters.conf_make_meta.conf.w_srv_images_root_part, "- webserv doc root url:", doc_matters.conf_make_meta.conf.w_srv_data_root_url, "- webserv cgi host (host):", doc_matters.conf_make_meta.conf.w_srv_cgi_host, "- webserv cgi host path:", doc_matters.conf_make_meta.conf.w_srv_cgi_bin_path, "- webserv cgi host (part):", doc_matters.conf_make_meta.conf.w_srv_cgi_bin_subpath, "- webserv cgi search script:", doc_matters.conf_make_meta.conf.w_srv_cgi_search_script, "- webserv cgi search script in d:", doc_matters.conf_make_meta.conf.w_srv_cgi_search_script_raw_fn_d, "- webserv cgi url:", doc_matters.conf_make_meta.conf.w_srv_cgi_bin_url, "- webserv cgi action:", doc_matters.conf_make_meta.conf.w_srv_cgi_action, // "- webserv cgi file links:", // doc_matters.conf_make_meta.conf.w_srv_cgi_file_links, "- webserv sqlite db:", doc_matters.conf_make_meta.conf.w_srv_db_sqlite_filename, "- output path:", doc_matters.conf_make_meta.conf.output_path, "- processing concordance max:", doc_matters.conf_make_meta.conf.processing_concord_max, // "- flag act0:", // doc_matters.conf_make_meta.conf.flag_act0, "- default papersize:", doc_matters.conf_make_meta.conf.set_papersize, "- default text wrap:", doc_matters.conf_make_meta.conf.set_text_wrap, "- default emphasis markup symbol:", doc_matters.conf_make_meta.conf.set_emphasis, "- default language:", doc_matters.conf_make_meta.conf.set_language, "- default hash digest:", doc_matters.conf_make_meta.conf.set_digest, "- search flag:", doc_matters.conf_make_meta.conf.search_flag, "- search action:", doc_matters.conf_make_meta.conf.search_action, "- search db:", doc_matters.conf_make_meta.conf.search_db, "- search title:", doc_matters.conf_make_meta.conf.search_title, ); #+END_SRC * show make ** _module template_ show make --show-make (show document make) #+HEADER: :tangle "../src/doc_reform/meta/metadoc_show_make.d" #+BEGIN_SRC d <<doc_header_including_copyright_and_license>> module doc_reform.meta.metadoc_show_make; template spineShowMake() { @safe void spineShowMake(T)( T doc_matters, ) { <<metadoc_show_summary_imports>> <<metadoc_show_imports_shared>> mixin InternalMarkup; <<metadoc_show_initialize>> if (doc_matters.opt.action.show_make && doc_matters.opt.action.debug_do ) { writeln(doc_matters.conf_make_meta.make); } if (doc_matters.opt.action.show_make) { <<meta_metadoc_show_make>> } } } #+END_SRC ** show make #+NAME: meta_metadoc_show_make #+BEGIN_SRC d writefln( "%s\n\"%s\", %s\n%s\n%s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n", 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), "- bold:", doc_matters.conf_make_meta.make.bold, "- breaks:", doc_matters.conf_make_meta.make.breaks, "- cover image:", doc_matters.conf_make_meta.make.cover_image, "- css:", doc_matters.conf_make_meta.make.css, "- emphasis:", doc_matters.conf_make_meta.make.emphasis, "- css:", doc_matters.conf_make_meta.make.css, "- footer:", doc_matters.conf_make_meta.make.footer, "- headings:", doc_matters.conf_make_meta.make.headings, "- home button image:", doc_matters.conf_make_meta.make.home_button_image, "- home button text:", doc_matters.conf_make_meta.make.home_button_text, "- italics:", doc_matters.conf_make_meta.make.italics, "- auto num top at level:", doc_matters.conf_make_meta.make.auto_num_top_at_level, "- auto num top level:", doc_matters.conf_make_meta.make.auto_num_top_lv, "- auto num depth:", doc_matters.conf_make_meta.make.auto_num_depth, "- texpdf font:", doc_matters.conf_make_meta.make.texpdf_font, ); #+END_SRC * show metadata ** _module template_ show metadata --show-metadata (show document metadata) #+HEADER: :tangle "../src/doc_reform/meta/metadoc_show_metadata.d" #+BEGIN_SRC d <<doc_header_including_copyright_and_license>> module doc_reform.meta.metadoc_show_metadata; template spineShowMetaData() { @safe void spineShowMetaData(T)( T doc_matters, ) { <<metadoc_show_summary_imports>> <<metadoc_show_imports_shared>> mixin InternalMarkup; <<metadoc_show_initialize>> if (doc_matters.opt.action.show_metadata && doc_matters.opt.action.debug_do ) { writeln(doc_matters.conf_make_meta.meta); } if (doc_matters.opt.action.show_metadata) { <<meta_metadoc_show_metadata>> } } } #+END_SRC ** show metadata #+NAME: meta_metadoc_show_metadata #+BEGIN_SRC d writefln( "%s\n\"%s\", %s\n%s\n%s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n%40-s%10-s\n", 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), "- author:", doc_matters.conf_make_meta.meta.creator_author, "- author array:", doc_matters.conf_make_meta.meta.creator_author_arr, "- author surname:", doc_matters.conf_make_meta.meta.creator_author_surname, "- author email:", doc_matters.conf_make_meta.meta.creator_author_email, "- illustrator:", doc_matters.conf_make_meta.meta.creator_illustrator, "- translator:", doc_matters.conf_make_meta.meta.creator_translator, "- title full:", doc_matters.conf_make_meta.meta.title_full, "- title main:", doc_matters.conf_make_meta.meta.title_main, "- title sub:", doc_matters.conf_make_meta.meta.title_subtitle, "- title edition:", doc_matters.conf_make_meta.meta.title_edition, "- title language:", doc_matters.conf_make_meta.meta.title_language, "- title note:", doc_matters.conf_make_meta.meta.title_note, "- classify dewey:", doc_matters.conf_make_meta.meta.classify_dewey, "- classify library of congress:", doc_matters.conf_make_meta.meta.classify_loc, "- classify keywords:", doc_matters.conf_make_meta.meta.classify_keywords, "- classify topic register:", doc_matters.conf_make_meta.meta.classify_topic_register, "- date added to site:", doc_matters.conf_make_meta.meta.date_added_to_site, "- date available:", doc_matters.conf_make_meta.meta.date_available, "- date created:", doc_matters.conf_make_meta.meta.date_created, "- date issued:", doc_matters.conf_make_meta.meta.date_issued, "- date modified:", doc_matters.conf_make_meta.meta.date_modified, "- date published:", doc_matters.conf_make_meta.meta.date_published, "- date valid:", doc_matters.conf_make_meta.meta.date_valid, // links "- notes abstract:", doc_matters.conf_make_meta.meta.notes_abstract, "- notes description:", doc_matters.conf_make_meta.meta.notes_description, "- original language:", doc_matters.conf_make_meta.meta.original_language, "- original language character:", doc_matters.conf_make_meta.meta.original_language_char, "- original source:", doc_matters.conf_make_meta.meta.original_source, "- original title:", doc_matters.conf_make_meta.meta.original_title, // publisher "- rights copyright:", doc_matters.conf_make_meta.meta.rights_copyright, "- rights copyright text:", doc_matters.conf_make_meta.meta.rights_copyright_text, "- rights copyright audio:", doc_matters.conf_make_meta.meta.rights_copyright_audio, "- rights copyright cover:", doc_matters.conf_make_meta.meta.rights_copyright_cover, "- rights copyright illustrations:", doc_matters.conf_make_meta.meta.rights_copyright_illustrations, "- rights copyright photographs:", doc_matters.conf_make_meta.meta.rights_copyright_photographs, "- rights copyright translation:", doc_matters.conf_make_meta.meta.rights_copyright_translation, "- rights copyright video:", doc_matters.conf_make_meta.meta.rights_copyright_video, "- rights license:", doc_matters.conf_make_meta.meta.rights_license, ); #+END_SRC * shared init ? ** init *** imports #+NAME: metadoc_show_imports_shared #+BEGIN_SRC d import std.array, std.exception, std.regex, std.stdio, std.string, std.typecons, std.uni, std.utf, std.conv : to; #+END_SRC *** imports #+NAME: metadoc_show_summary_imports #+BEGIN_SRC d import doc_reform.meta.defaults, doc_reform.meta.rgx; #+END_SRC *** initialize :report: #+NAME: metadoc_show_initialize #+BEGIN_SRC d auto markup = InlineMarkup(); 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; #+END_SRC * document header including copyright & license #+NAME: doc_header_including_copyright_and_license #+BEGIN_SRC txt /+ - Name: 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 - 2022 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.doc_reform.org] [https://www.sisudoc.org] - Git [https://git.sisudoc.org/projects/?p=software/spine.git;a=summary] +/ #+END_SRC * __END__