-*- mode: org -*-
#+TITLE: sisudoc 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 - 2025 Ralph Amissah
#+LANGUAGE: en
#+STARTUP: content hideblocks hidestars noindent entitiespretty
#+PROPERTY: header-args :exports code
#+PROPERTY: header-args+ :noweb yes
#+PROPERTY: header-args+ :results no
#+PROPERTY: header-args+ :cache no
#+PROPERTY: header-args+ :padline no
#+PROPERTY: header-args+ :mkdirp yes
#+OPTIONS: H:3 num:nil toc:t \n:t ::t |:t ^:nil -:t f:t *:t
- [[./doc-reform.org][doc-reform.org]] [[./][org/]]
* document abstraction _summary_ :module:spine:metadoc_show_summary:
** _module template_ metadoc summary
- document summary from abstraction
#+HEADER: :tangle "../src/sisudoc/meta/metadoc_show_summary.d"
#+HEADER: :noweb yes
#+BEGIN_SRC d
<<doc_header_including_copyright_and_license>>
module sisudoc.meta.metadoc_show_summary;
@safe:
template spineMetaDocSummary() {
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.vox_gt1
|| 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%s - %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),
doc_matters.doc_digest.markup_doc.toHexString,
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/sisudoc/meta/metadoc_show_config.d"
#+HEADER: :noweb yes
#+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
#+HEADER: :noweb yes
#+BEGIN_SRC d
module sisudoc.meta.metadoc_show_config;
@safe:
template spineShowSiteConfig() {
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
#+HEADER: :noweb yes
#+BEGIN_SRC d
template spineShowConfig() {
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/sisudoc/meta/metadoc_show_make.d"
#+HEADER: :noweb yes
#+BEGIN_SRC d
<<doc_header_including_copyright_and_license>>
module sisudoc.meta.metadoc_show_make;
@safe:
template spineShowMake() {
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/sisudoc/meta/metadoc_show_metadata.d"
#+HEADER: :noweb yes
#+BEGIN_SRC d
<<doc_header_including_copyright_and_license>>
module sisudoc.meta.metadoc_show_metadata;
@safe:
template spineShowMetaData() {
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.digest.crc,
std.digest.sha,
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
sisudoc.meta.defaults,
sisudoc.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
#+HEADER: :noweb yes
#+BEGIN_SRC emacs-lisp
<<./sisudoc_spine_version_info_and_doc_header_including_copyright_and_license.org:spine_doc_header_including_copyright_and_license()>>
#+END_SRC
* __END__