/+
- 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.conf_make_meta_structs;
@safe:
import
std.exception,
std.json,
std.path,
std.regex,
std.stdio,
std.string,
std.typecons,
std.utf,
std.conv : to;
import
sisudoc.meta.defaults,
sisudoc.meta.rgx_yaml,
sisudoc.meta.rgx;
mixin spineRgxIn;
static auto rgx = RgxI();
mixin spineRgxYamlTags;
static auto rgx_y = RgxYaml();
mixin InternalMarkup;
static auto mkup = InlineMarkup();
string url_markup(string line) {
string line_ = line
.replaceAll(
rgx.smid_inline_link_markup_regular,
("$1"
~ mkup.lnk_o ~ "$2" ~ mkup.lnk_c
~ mkup.url_o ~ "$3" ~ mkup.url_c
) // ("$1{ $2 }$3$4")
)
.replaceAll(
rgx.smid_inline_link_naked_url,
("$1"
~ mkup.lnk_o ~ "$2" ~ mkup.lnk_c
~ mkup.url_o ~ "$2" ~ mkup.url_c
) // ("$1{ $2 }$2$3")
)
.replaceAll(
rgx.arr_delimiter,
mkup.br_line
);
return line_;
}
struct ConfCompositeMakeStr {
string doc_type = "book"; // book, article
string breaks;
string bold;
string cover_image;
string css;
string emphasis;
string[] footer;
string[] headings;
string[] home_button_image;
string home_button_text = "┥Spine, Doc Reform┝┤https://www.doc-reform.org├"
~ " ┥www.doc-reform.org┝┤https://www.doc-reform.org├"
~ " ┥sources / git┝┤https://git.doc-reform.org/software/spine├";
string italics;
string auto_num_top_at_level;
int auto_num_top_lv = 9;
int auto_num_depth = 2;
string[][] substitute;
string texpdf_font;
}
@trusted struct confCompositeMakeBuild {
string[] bold(string _mk) {
string[] _out;
if (_mk) {
_out = [ (cast(string) (`(` ~ _mk.dup ~ `)`)), "*{$1}*", "$1"];
}
return _out;
}
string doc_type(string _mk) {
return _mk;
}
string breaks(string _mk) {
return _mk;
}
string cover_image(string _mk) {
return _mk;
}
string css(string _mk) {
return _mk;
}
string[] emphasis(string _mk) {
string[] _out;
if (_mk) {
_out = [ (cast(string) (`(` ~ _mk.dup ~ `)`)), "!{$1}!", "$1" ];
}
return _out;
}
string[] footer(string[] _mk) {
string line_;
string[] _mk2;
foreach (line; _mk) {
_mk2 ~= url_markup(line);
}
return _mk2;
}
string[] headings(string[] _mk) {
return _mk;
}
string[] home_button_image(string[] _mk) {
return _mk;
}
string home_button_text(string _mk) {
return url_markup(_mk);
}
string[] italics(string _mk) {
string[] _out;
if (_mk) {
_out = [ (cast(string) (`(` ~ _mk.dup ~ `)`)), "/{$1}/", "$1" ];
}
return _out;
}
string auto_num_top_at_level(string _mk) {
return _mk;
}
int auto_num_top_lv(int _mk) {
return _mk;
}
int auto_num_depth(int _mk) {
return _mk;
}
string[][] substitute(string[][] _mk) {
return _mk;
}
string texpdf_font(string _mk) {
return _mk;
}
}
struct ConfCompositeMakeInit {
string doc_type;
string breaks;
string cover_image;
string css;
string[] bold;
string[] emphasis;
string[] footer;
string[] headings;
string[] home_button_image;
string home_button_text = "┥Spine, Doc Reform┝┤https://www.doc-reform.org├"
~ " ┥www.doc-reform.org┝┤https://www.doc-reform.org├"
~ " ┥sources / git┝┤https://git.doc-reform.org/software/spine├";
string[] italics;
string auto_num_top_at_level;
int auto_num_top_lv = 9;
int auto_num_depth = 2;
string[][] substitute;
string texpdf_font;
}
struct ConfCompositeSiteLocal {
string w_srv_http;
string w_srv_host;
string w_srv_data_http; // if not set same as webserv_http
string w_srv_data_host; // if not set same as webserv_host
string w_srv_data_root_part;
string w_srv_data_root_url;
string w_srv_data_root_url_html;
string w_srv_data_root_path;
string w_srv_images_root_part;
// string w_srv_url_doc_path;
string w_srv_cgi_search_form_title;
string w_srv_cgi_http; // if not set same as webserv_http
string w_srv_cgi_host; // if not set same as webserv_host
string w_srv_cgi_bin_subpath;
string w_srv_cgi_bin_path;
string w_srv_cgi_search_script;
string w_srv_cgi_search_script_raw_fn_d;
string w_srv_cgi_port;
string w_srv_cgi_user;
string w_srv_cgi_action;
string w_srv_cgi_bin_url;
string w_srv_db_sqlite_filename;
string w_srv_db_sqlite_path;
// string w_srv_db_pg;
string w_srv_db_pg_table;
string w_srv_db_pg_user;
// string webserv_cgi_file_links;
string output_path;
string processing_path;
string processing_dir;
string processing_concord_max;
string flag_act0;
string flag_act1;
string flag_act2;
string flag_act3;
string flag_act4;
string flag_act5;
string flag_act6;
string flag_act7;
string flag_act8;
string flag_act9;
string[] set_papersize;
string set_text_wrap;
string set_emphasis;
string set_language;
string set_digest;
string permission_share_source;
string search_flag;
string search_action;
string search_db;
string search_title;
}
struct MetaComposite {
string classify_dewey;
string classify_keywords;
string classify_loc;
string classify_subject;
string classify_topic_register;
string[] classify_topic_register_arr;
string[] classify_topic_register_expanded_arr; // experimental use in sqlite topics table
string[] creator_author_arr;
string creator_author;
string creator_author_surname_fn;
string creator_author_surname;
string creator_author_email;
string creator_illustrator;
string creator_translator;
string date_added_to_site;
string date_available;
string date_created;
string date_issued;
string date_modified;
string date_published;
string date_valid;
string identifier_isbn;
string identifier_oclc;
string identifier_pg;
string language_document;
string language_document_char;
string links;
string notes_abstract;
string notes_description;
string notes_summary;
string original_language;
string original_language_char;
string original_publisher;
string original_source;
string original_title;
string publisher;
string rights_copyright;
string rights_copyright_audio;
string rights_copyright_cover;
string rights_copyright_illustrations;
string rights_copyright_photographs;
string rights_copyright_text;
string rights_copyright_translation;
string rights_copyright_video;
string rights_license;
string title_edition;
string title_full;
string title_language;
string title_main;
string title_note;
string title_short;
string title_sub;
string title_subtitle;
}
struct ConfComposite {
MetaComposite meta;
ConfCompositeMakeInit make;
ConfCompositeMakeStr make_str;
ConfCompositeSiteLocal conf;
}
JSONValue config_jsonstr = `{
}`;