aboutsummaryrefslogtreecommitdiffhomepage
path: root/org
diff options
context:
space:
mode:
Diffstat (limited to 'org')
-rw-r--r--org/default_regex.org13
-rw-r--r--org/doc_reform.org227
-rw-r--r--org/dr_build_scaffold.org1
-rw-r--r--org/meta_conf_make_meta.org218
4 files changed, 329 insertions, 130 deletions
diff --git a/org/default_regex.org b/org/default_regex.org
index 2958027..6d17f0c 100644
--- a/org/default_regex.org
+++ b/org/default_regex.org
@@ -51,6 +51,7 @@ static template DocReformRgxInit() {
#+BEGIN_SRC d
/+ misc +/
static true_dollar = ctRegex!(`\$`, "gm");
+static sep = ctRegex!(`␣`, "gm");
static flag_action = ctRegex!(`^(--[a-z][a-z0-9-]+)$`);
static flag_action_str = ctRegex!(` (--[a-z][a-z0-9-]+)`);
static within_quotes = ctRegex!(`"(.+?)"`, "m");
@@ -106,7 +107,7 @@ static make_simple_substitutions_d = ctRegex!(`(?P<substituti
/+ header +/
static variable_doc_title = ctRegex!(`@title`);
static variable_doc_author = ctRegex!(`@author|@creator`);
-static raw_author_munge = ctRegex!(`(\S.+?),\s+(.+)`,"i");
+static raw_author_munge = ctRegex!(`(?P<last>\S.+?),\s+(?P<first>.+)`,"i");
static toml_header_meta_title = ctRegex!(`^\s*(title\s*=\s*"|\[title\])`, "m");
#+END_SRC
@@ -368,6 +369,16 @@ static bi_sub_terms_plus_object_number_offset_split = ctRegex!(`\s*\|\s*`);
static bi_term_and_object_numbers_match = ctRegex!(`^(.+?)\+(\d+)`);
#+END_SRC
+** topic register split (document classify)
+
+#+name: meta_rgx
+#+BEGIN_SRC d
+static topic_register_main_terms_split = ctRegex!(`\s*;\s*`);
+static topic_register_main_term_plus_rest_split = ctRegex!(`\s*:\s*`);
+static topic_register_sub_terms_split = ctRegex!(`\s*\|\s*`);
+static topic_register_multiple_sub_terms_split = ctRegex!(`␣([^|␣]+(?:\|[^|␣]+)+)`);
+#+END_SRC
+
** language codes :language:codes:
#+name: meta_rgx
diff --git a/org/doc_reform.org b/org/doc_reform.org
index 12eb46a..7bb8029 100644
--- a/org/doc_reform.org
+++ b/org/doc_reform.org
@@ -27,7 +27,7 @@ struct Version {
int minor;
int patch;
}
-enum _ver = Version(0, 7, 2);
+enum _ver = Version(0, 7, 3);
#+END_SRC
** compilation restrictions (supported compilers)
@@ -71,8 +71,7 @@ version (Posix) {
module doc_reform.sisu_document_parser;
import
doc_reform.conf.compile_time_info,
- doc_reform.meta.metadoc,
- doc_reform.meta.metadochead;
+ doc_reform.meta.metadoc;
<<imports_doc_reform>>
import std.algorithm;
import std.parallelism;
@@ -86,6 +85,7 @@ homepage "http://sisudoc.org"
+/
void main(string[] args) {
<<doc_reform_mixin>>
+ <<doc_reform_init>>
<<doc_reform_args>>
<<doc_reform_do_selected>>
if (_manifests.length > 1 // _manifests[0] initialized dummy element
@@ -117,6 +117,38 @@ void main(string[] args) {
}
}
}
+ if (_opt_action.verbose
+ && harvests.length > 1
+ ) {
+ auto min_repeat_number = 42;
+ foreach(doc_harvest; harvests) {
+ auto char_repeat_number = (doc_harvest.title.length
+ + doc_harvest.author.length + 16);
+ char_repeat_number = (char_repeat_number > min_repeat_number)
+ ? char_repeat_number
+ : min_repeat_number;
+ writefln(
+ "%s\n\"%s\", %s%s",
+ mkup.repeat_character_by_number_provided("-", char_repeat_number),
+ doc_harvest.title,
+ doc_harvest.author,
+ (doc_harvest.date_published.length > 0) ? " (" ~ doc_harvest.date_published ~ ")" : "",
+ );
+ string[] _topic_arr;
+ foreach(topic; doc_harvest.topic_register_arr.sort) {
+ foreach (i, _top; topic.split(mkup.sep)) {
+ writeln(" ", (" ".repeat(i).join), "- ", _top);
+ }
+ }
+ }
+ string[] _author_date_title;
+ foreach(doc_harvest; harvests) {
+ _author_date_title ~= doc_harvest.author_date_title;
+ }
+ foreach(_adt; _author_date_title.sort) {
+ writeln(_adt);
+ }
+ }
}
#+END_SRC
@@ -193,6 +225,7 @@ import
import
doc_reform.meta,
doc_reform.meta.metadoc_summary,
+ doc_reform.meta.metadoc_harvest,
doc_reform.meta.metadoc_from_src,
doc_reform.meta.conf_make_meta_structs,
doc_reform.meta.conf_make_meta_toml,
@@ -266,7 +299,25 @@ mixin outputHub;
**** init :init:
-#+NAME: doc_reform_args
+#+NAME: doc_reform_init
+#+BEGIN_SRC d
+struct Harvest {
+ string title = "";
+ string author = "";
+ string author_date_title = "";
+ string date_published = "";
+ string[] topic_register_arr = [""];
+ string html_seg_toc = "";
+ string html_scroll = "";
+ string epub = "";
+}
+Harvest harvested;
+Harvest[] harvests;
+#+END_SRC
+
+**** args :args:
+
+#+NAME: doc_reform_init
#+BEGIN_SRC d
string flag_action;
string arg_unrecognized;
@@ -276,7 +327,7 @@ static auto rgx = Rgx();
*** scope (run complete) :scope:
-#+NAME: doc_reform_args
+#+NAME: doc_reform_init
#+BEGIN_SRC d
scope(success) {
writefln(
@@ -311,6 +362,9 @@ bool[string] opts = [
"debug" : false,
"digest" : false,
"epub" : false,
+ "harvest" : false,
+ "harvest-authors" : false,
+ "harvest-topics" : false,
"html" : false,
"html-seg" : false,
"html-scroll" : false,
@@ -366,6 +420,9 @@ auto helpInfo = getopt(args,
"debug", "--debug", &opts["debug"],
"digest", "--digest hash digest for each object", &opts["digest"],
"epub", "--epub process epub output", &opts["epub"],
+ "harvest", "--harvest extract info on authors & topics from document header metadata", &opts["harvest"],
+ "harvest-authors", "--harvest-authors extract info on authors from document header metadata", &opts["harvest-authors"],
+ "harvest-topics", "--harvest-topics extract info on topics from document header metadata", &opts["harvest-topics"],
"html", "--html process html output", &opts["html"],
"html-seg", "--html-seg process html output", &opts["html-seg"],
"html-scroll", "--html-seg process html output", &opts["html-scroll"],
@@ -449,6 +506,22 @@ struct OptActions {
bool epub() {
return opts["epub"];
}
+ bool harvest() {
+ bool _is = (
+ opts["harvest"]
+ || opts["harvest-authors"]
+ || opts["harvest-topics"]
+ )
+ ? true
+ : false;
+ return _is;
+ }
+ bool harvest_authors() {
+ return opts["harvest-authors"];
+ }
+ bool harvest_topics() {
+ return opts["harvest-topics"];
+ }
bool html() {
bool _is;
if ( opts["html"] || opts["html-seg"] || opts["html-scroll"])
@@ -886,7 +959,29 @@ if ((doc_matters.opt.action.debug_do)
#+BEGIN_SRC d
/+ ↓ debugs +/
if (doc_matters.opt.action.verbose) {
- DocReformAbstractionSummary!()(doc_abstraction, doc_matters);
+ DocReformMetaDocSummary!()(doc_abstraction, doc_matters);
+}
+#+END_SRC
+
+**** 0. abstraction harvest :abstraction:harvest:
+- abstraction harvest
+
+#+NAME: doc_reform_each_file_do_debugs_checkdoc
+#+BEGIN_SRC d
+if (doc_matters.opt.action.harvest) {
+ if (doc_matters.opt.action.harvest_authors) {
+ }
+ if (doc_matters.opt.action.harvest_topics) {
+ }
+ Harvest[] DocReformMetaDocHarvests()(
+ Harvest harvested,
+ Harvest[] harvests,
+ ) {
+ harvests ~= harvested;
+ return harvests;
+ }
+ harvested = DocReformMetaDocHarvest!()(doc_matters, harvested);
+ harvests = DocReformMetaDocHarvests!()(harvested, harvests);
}
#+END_SRC
@@ -947,34 +1042,6 @@ break; // terminate, stop
#+END_SRC
* 2. pre-processing
-** Harvest _get document head_ for harvest (separate thread)
-*** 0 module template
-- harvest, get document head
-
-#+BEGIN_SRC d :tangle "../src/doc_reform/meta/metadochead.d"
-module doc_reform.meta.metadochead;
-template DocReformHarvestGetFromHead() { // TODO
- <<imports_doc_reform>>
- <<doc_reform_mixin>>
- enum headBody { header, body_content, insert_file_list, image_list }
- enum makeMeta { make, meta }
- static auto rgx = Rgx();
- auto DocReformHarvestGetFromHead(E,O,M)( // TODO
- E _env,
- O _opt_action,
- M _manifest
- ){
- <<doc_reform_conf_files_in_toml>>
- <<doc_reform_each_file_do_read_and_split_sisu_markup_file_content_into_header_and_body>>
- <<doc_reform_each_file_do_split_sisu_markup_file_header_into_make_and_meta_structs>>
- <<doc_reform_each_file_do_document_matters_abridged>>
- auto t = tuple(doc_matters_shared, doc_matters_abridged_collected);
- static assert(t.length==2);
- return t;
- }
-}
-#+END_SRC
-
** Output _document abstraction functions_ :module:doc_reform:abstraction:
*** 0 module template
- abstraction template
@@ -1294,13 +1361,13 @@ if ((_opt_action.debug_do)
#+END_SRC
* 3. document abstraction _summary_ :module:doc_reform:metadoc_summary:
-** 0. module template
+** 0. module template metadoc summary
- document summary from abstraction
#+BEGIN_SRC d :tangle "../src/doc_reform/meta/metadoc_summary.d"
module doc_reform.meta.metadoc_summary;
-template DocReformAbstractionSummary() {
- void DocReformAbstractionSummary(S,T)(
+template DocReformMetaDocSummary() {
+ void DocReformMetaDocSummary(S,T)(
const S doc_abstraction,
T doc_matters,
) {
@@ -1308,7 +1375,7 @@ template DocReformAbstractionSummary() {
mixin InternalMarkup;
<<metadoc_summary_initialize>>
if (doc_matters.opt.action.verbose) {
- <<meta_metadoc_summary>>
+ <<meta_metadoc_summary_document>>
}
}
}
@@ -1344,7 +1411,7 @@ auto markup = InlineMarkup();
** (last ocn)
-#+name: meta_metadoc_summary
+#+name: meta_metadoc_summary_document
#+BEGIN_SRC d
string[string] check = [
"last_object_number" : "NA [debug \"checkdoc\" not run]",
@@ -1372,9 +1439,9 @@ foreach (k; doc_matters.has.keys_seq.seg) {
}
#+END_SRC
-** summary
+** document summary
-#+name: meta_metadoc_summary
+#+name: meta_metadoc_summary_document
#+BEGIN_SRC d
auto min_repeat_number = 66;
auto char_repeat_number = (doc_matters.conf_make_meta.meta.title_full.length
@@ -1439,6 +1506,84 @@ writefln(
);
#+END_SRC
+** 0. module template metadoc harvest
+
+#+BEGIN_SRC d :tangle "../src/doc_reform/meta/metadoc_harvest.d"
+module doc_reform.meta.metadoc_harvest;
+template DocReformMetaDocHarvest() {
+ auto DocReformMetaDocHarvest(T,H)(
+ T doc_matters,
+ H harvest,
+ ) {
+ <<metadoc_harvest_imports>>
+ mixin InternalMarkup;
+ <<metadoc_harvest_initialize>>
+ <<meta_metadoc_harvest>>
+ }
+}
+#+END_SRC
+
+** init
+*** imports
+
+#+name: metadoc_harvest_imports
+#+BEGIN_SRC d
+import
+ doc_reform.meta.defaults,
+ doc_reform.meta.rgx;
+import
+ std.array,
+ std.exception,
+ std.regex,
+ std.stdio,
+ std.string,
+ std.traits,
+ std.typecons,
+ std.uni,
+ std.utf,
+ std.conv : to;
+#+END_SRC
+
+*** initialize :report:
+
+#+name: metadoc_harvest_initialize
+#+BEGIN_SRC d
+auto markup = InlineMarkup();
+#+END_SRC
+
+** harvest summary
+
+#+name: meta_metadoc_harvest_summary
+#+BEGIN_SRC d
+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;
+writefln(
+ "%s\n\"%s\", %s\n%s\n%s\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.conf_make_meta.meta.classify_topic_register_arr,
+ markup.repeat_character_by_number_provided("-", char_repeat_number),
+);
+#+END_SRC
+
+** return harvest
+
+#+name: meta_metadoc_harvest
+#+BEGIN_SRC d
+harvest.title = doc_matters.conf_make_meta.meta.title_full;
+harvest.author = doc_matters.conf_make_meta.meta.creator_author;
+harvest.author_date_title = doc_matters.conf_make_meta.meta.author_date_title;
+harvest.date_published = doc_matters.conf_make_meta.meta.date_published;
+harvest.topic_register_arr = doc_matters.conf_make_meta.meta.classify_topic_register_arr;
+return harvest;
+#+END_SRC
+
* __END__
dev notes
diff --git a/org/dr_build_scaffold.org b/org/dr_build_scaffold.org
index 3a209a9..1bb8884 100644
--- a/org/dr_build_scaffold.org
+++ b/org/dr_build_scaffold.org
@@ -1132,7 +1132,6 @@ revision = head
!tangle
!*.org
!*.d
-!*.txt
!*.rb
!conf.sdl
!org
diff --git a/org/meta_conf_make_meta.org b/org/meta_conf_make_meta.org
index 853134f..79ee9e7 100644
--- a/org/meta_conf_make_meta.org
+++ b/org/meta_conf_make_meta.org
@@ -260,7 +260,9 @@ struct MetaComposite {
string classify_loc;
string classify_subject;
string classify_topic_register;
+ string[] classify_topic_register_arr;
string creator_author;
+ string creator_author_surname_fn;
string creator_author_email;
string creator_illustrator;
string creator_translator;
@@ -302,6 +304,7 @@ struct MetaComposite {
string title_short;
string title_sub;
string title_subtitle;
+ string author_date_title;
}
#+END_SRC
@@ -431,6 +434,8 @@ JSONValue config_jsonstr = `{
module doc_reform.meta.conf_make_meta_json;
static template contentJSONtoDocReformStruct() {
import
+ std.algorithm,
+ std.array,
std.exception,
std.regex,
std.stdio,
@@ -442,6 +447,7 @@ static template contentJSONtoDocReformStruct() {
import
doc_reform.meta.conf_make_meta_structs,
doc_reform.meta.conf_make_meta_json,
+ doc_reform.meta.defaults,
doc_reform.meta.rgx;
ConfCompositePlus _struct_composite;
auto contentJSONtoDocReformStruct(C,J)(C _struct_composite, J _json, string _identifier) {
@@ -809,6 +815,108 @@ if ("search" in _json.object) {
#+name: json_objects
#+BEGIN_SRC d
/+ meta ------------------------------------------------------------------- +/
+if (_struct_composite.meta.creator_author.empty) {
+ if ("creator" in _json.object) {
+ if ("author" in _json.object["creator"]
+ && (_json.object["creator"]["author"].type().to!string == "string")
+ ) {
+ _struct_composite.meta.creator_author = _json.object["creator"]["author"].str;
+ }
+ if ("email" in _json.object["creator"]
+ && (_json.object["creator"]["email"].type().to!string == "string")
+ ) {
+ _struct_composite.meta.creator_author_email = _json.object["creator"]["email"].str;
+ }
+ if ("illustrator" in _json.object["creator"]
+ && (_json.object["creator"]["illustrator"].type().to!string == "string")
+ ) {
+ _struct_composite.meta.creator_illustrator = _json.object["creator"]["illustrator"].str;
+ }
+ if ("translator" in _json.object["creator"]
+ && (_json.object["creator"]["translator"].type().to!string == "string")
+ ) {
+ _struct_composite.meta.creator_translator = _json.object["creator"]["translator"].str;
+ }
+ }
+ string[] authors_arr;
+ string[][string] authors_hash_arr = [ "first" : [], "last" : [], "full" : [], "last_first" : [], "as_input" : [] ];
+ string[] authors_raw_arr
+ = _struct_composite.meta.creator_author.split(rgx.arr_delimiter);
+ auto _lastname = appender!(char[])();
+ foreach (author_raw; authors_raw_arr) {
+ authors_arr ~= author_raw.replace(rgx.raw_author_munge, "$2 $1");
+ authors_hash_arr["first"] ~= author_raw.replace(rgx.raw_author_munge, "$2");
+ authors_hash_arr["last"] ~= author_raw.replace(rgx.raw_author_munge, "$1");
+ authors_hash_arr["full"] ~= author_raw.replace(rgx.raw_author_munge, "$2 $1");
+ authors_hash_arr["as_input"] ~= author_raw;
+ if (auto m = author_raw.match(rgx.raw_author_munge)) {
+ (m.captures[1]).map!toUpper.copy(_lastname);
+ authors_hash_arr["last_first"] ~= _lastname.data.to!string ~ ", " ~ m.captures[2];
+ _lastname = appender!(char[])();
+ }
+ }
+ _struct_composite.meta.creator_author = authors_arr.join(", ").chomp.chomp;
+ string _author_name_last_first = authors_hash_arr["last_first"].join("; ").chomp.chomp;
+ _struct_composite.meta.creator_author_surname_fn = (_author_name_last_first.length > 0)
+ ? _author_name_last_first
+ : authors_hash_arr["as_input"].join("; ").chomp.chomp;
+}
+if (_struct_composite.meta.title_main.empty) {
+ if ("title" in _json.object) {
+ if ((_json.object["title"].type().to!string) == "string") {
+ _struct_composite.meta.title_main = _json.object["title"].str;
+ } else {
+ if ("edition" in _json.object["title"]
+ && (_json.object["title"]["edition"].type().to!string == "string")
+ ) {
+ _struct_composite.meta.title_edition = _json.object["title"]["edition"].str;
+ }
+ if ("full" in _json.object["title"]
+ && (_json.object["title"]["full"].type().to!string == "string")
+ ) {}
+ if ("language" in _json.object["title"]
+ && (_json.object["title"]["language"].type().to!string == "string")
+ ) {
+ _struct_composite.meta.title_language = _json.object["title"]["language"].str;
+ }
+ if ("main" in _json.object["title"]
+ && (_json.object["title"]["main"].type().to!string == "string")
+ ) {
+ _struct_composite.meta.title_main = _json.object["title"]["main"].str;
+ } else if ("title" in _json.object["title"]
+ && (_json.object["title"]["title"].type().to!string == "string")
+ ) {
+ _struct_composite.meta.title_main = _json.object["title"]["title"].str;
+ }
+ if ("note" in _json.object["title"]
+ && (_json.object["title"]["note"].type().to!string == "string")
+ ) {
+ _struct_composite.meta.title_note = _json.object["title"]["note"].str;
+ }
+ if ("sub" in _json.object["title"]
+ && (_json.object["title"]["sub"].type().to!string == "string")
+ ) {
+ _struct_composite.meta.title_sub = _json.object["title"]["sub"].str;
+ }
+ if ("subtitle" in _json.object["title"]
+ && (_json.object["title"]["subtitle"].type().to!string == "string")
+ ) {
+ _struct_composite.meta.title_subtitle = _json.object["title"]["subtitle"].str;
+ }
+ }
+ }
+ if ((!(_struct_composite.meta.title_subtitle.empty))
+ && (_struct_composite.meta.title_sub.empty)) {
+ _struct_composite.meta.title_sub = _struct_composite.meta.title_subtitle;
+ }
+ _struct_composite.meta.title_full = (_struct_composite.meta.title_sub.empty)
+ ? _struct_composite.meta.title_main
+ : format(
+ "%s - %s",
+ _struct_composite.meta.title_main,
+ _struct_composite.meta.title_sub,
+ );
+}
if ("classify" in _json.object) {
if ("dewey" in _json.object["classify"]
&& (_json.object["classify"]["dewey"].type().to!string == "string")
@@ -834,6 +942,22 @@ if ("classify" in _json.object) {
&& (_json.object["classify"]["topic_register"].type().to!string == "string")
) {
_struct_composite.meta.classify_topic_register = _json.object["classify"]["topic_register"].str;
+ string[] main_topics_ = _struct_composite.meta.classify_topic_register.split(rgx.topic_register_main_terms_split);
+ string[] topics;
+ string topics_tmp;
+ string[] multiple_sub_terms;
+ foreach (mt; main_topics_) {
+ topics_tmp = mt.replaceAll(rgx.topic_register_main_term_plus_rest_split, mkup.sep);
+ if (auto m = topics_tmp.match(rgx.topic_register_multiple_sub_terms_split)) {
+ multiple_sub_terms = m.captures[1].split(rgx.topic_register_sub_terms_split);
+ foreach (subterm; multiple_sub_terms) {
+ topics ~= m.captures.pre ~ mkup.sep ~ subterm;
+ }
+ } else {
+ topics ~= topics_tmp;
+ }
+ }
+ _struct_composite.meta.classify_topic_register_arr = topics;
}
}
if ("date" in _json.object) {
@@ -872,6 +996,13 @@ if ("date" in _json.object) {
) {
_struct_composite.meta.date_valid = _json.object["date"]["valid"].str;
}
+ _struct_composite.meta.author_date_title = format(
+ "%s %s \"%s\"",
+ _struct_composite.meta.creator_author_surname_fn,
+ (_struct_composite.meta.date_published.length > 0)
+ ? "(" ~ _struct_composite.meta.date_published ~ ")" : "",
+ _struct_composite.meta.title_full,
+ );
}
if ("links" in _json.object) {}
if ("notes" in _json.object) {
@@ -956,93 +1087,6 @@ if ("rights" in _json.object) {
_struct_composite.meta.rights_license = _json.object["rights"]["license"].str;
}
}
-if (_struct_composite.meta.creator_author.empty) {
- if ("creator" in _json.object) {
- if ("author" in _json.object["creator"]
- && (_json.object["creator"]["author"].type().to!string == "string")
- ) {
- _struct_composite.meta.creator_author = _json.object["creator"]["author"].str;
- }
- if ("email" in _json.object["creator"]
- && (_json.object["creator"]["email"].type().to!string == "string")
- ) {
- _struct_composite.meta.creator_author_email = _json.object["creator"]["email"].str;
- }
- if ("illustrator" in _json.object["creator"]
- && (_json.object["creator"]["illustrator"].type().to!string == "string")
- ) {
- _struct_composite.meta.creator_illustrator = _json.object["creator"]["illustrator"].str;
- }
- if ("translator" in _json.object["creator"]
- && (_json.object["creator"]["translator"].type().to!string == "string")
- ) {
- _struct_composite.meta.creator_translator = _json.object["creator"]["translator"].str;
- }
- }
- string[] authors_arr;
- string[] authors_raw_arr
- = _struct_composite.meta.creator_author.split(rgx.arr_delimiter);
- foreach (author_raw; authors_raw_arr) {
- authors_arr ~= author_raw.replace(rgx.raw_author_munge, "$2 $1");
- }
- _struct_composite.meta.creator_author = join(authors_arr, ", ").chomp.chomp;
-}
-if (_struct_composite.meta.title_main.empty) {
- if ("title" in _json.object) {
- if ((_json.object["title"].type().to!string) == "string") {
- _struct_composite.meta.title_main = _json.object["title"].str;
- } else {
- if ("edition" in _json.object["title"]
- && (_json.object["title"]["edition"].type().to!string == "string")
- ) {
- _struct_composite.meta.title_edition = _json.object["title"]["edition"].str;
- }
- if ("full" in _json.object["title"]
- && (_json.object["title"]["full"].type().to!string == "string")
- ) {}
- if ("language" in _json.object["title"]
- && (_json.object["title"]["language"].type().to!string == "string")
- ) {
- _struct_composite.meta.title_language = _json.object["title"]["language"].str;
- }
- if ("main" in _json.object["title"]
- && (_json.object["title"]["main"].type().to!string == "string")
- ) {
- _struct_composite.meta.title_main = _json.object["title"]["main"].str;
- } else if ("title" in _json.object["title"]
- && (_json.object["title"]["title"].type().to!string == "string")
- ) {
- _struct_composite.meta.title_main = _json.object["title"]["title"].str;
- }
- if ("note" in _json.object["title"]
- && (_json.object["title"]["note"].type().to!string == "string")
- ) {
- _struct_composite.meta.title_note = _json.object["title"]["note"].str;
- }
- if ("sub" in _json.object["title"]
- && (_json.object["title"]["sub"].type().to!string == "string")
- ) {
- _struct_composite.meta.title_sub = _json.object["title"]["sub"].str;
- }
- if ("subtitle" in _json.object["title"]
- && (_json.object["title"]["subtitle"].type().to!string == "string")
- ) {
- _struct_composite.meta.title_subtitle = _json.object["title"]["subtitle"].str;
- }
- }
- }
- if ((!(_struct_composite.meta.title_subtitle.empty))
- && (_struct_composite.meta.title_sub.empty)) {
- _struct_composite.meta.title_sub = _struct_composite.meta.title_subtitle;
- }
- _struct_composite.meta.title_full = (_struct_composite.meta.title_sub.empty)
- ? _struct_composite.meta.title_main
- : format(
- "%s - %s",
- _struct_composite.meta.title_main,
- _struct_composite.meta.title_sub,
- );
-}
#+END_SRC
* 2. TOML returns DocReformStruct (via JSON) :module:conf_make_meta:struct: