From 2dd7d2083c23fe9e79a984c534c2283fc4d7e581 Mon Sep 17 00:00:00 2001 From: Ralph Amissah Date: Thu, 20 Jun 2019 13:45:58 -0400 Subject: harvest reorganized --- org/default_misc.org | 35 + org/default_paths.org | 12 +- org/doc_reform.org | 1468 ++++++++++++------------ src/doc_reform/doc_reform.d | 678 +---------- src/doc_reform/meta/defaults.d | 28 + src/doc_reform/meta/metadoc.d | 4 +- src/doc_reform/meta/metadoc_harvest.d | 30 +- src/doc_reform/meta/metadoc_harvests_authors.d | 255 ++++ src/doc_reform/meta/metadoc_harvests_topics.d | 408 +++++++ src/doc_reform/output/paths_output.d | 5 +- src/doc_reform/source/paths_source.d | 7 - 11 files changed, 1533 insertions(+), 1397 deletions(-) create mode 100644 src/doc_reform/meta/metadoc_harvests_authors.d create mode 100644 src/doc_reform/meta/metadoc_harvests_topics.d diff --git a/org/default_misc.org b/org/default_misc.org index b55e651..18bacfa 100644 --- a/org/default_misc.org +++ b/org/default_misc.org @@ -26,6 +26,7 @@ module doc_reform.meta.defaults; <> <> +<> <> <> <> @@ -129,6 +130,40 @@ template DocReformNode() { } #+END_SRC +** template: harvest + +#+name: meta_defaults_template_harvest +#+BEGIN_SRC d +template DocReformHarvest() { + auto DocReformHarvest() { + struct _Harvest { + struct Harvest { + string title = ""; + string[] author_arr = []; + string author = ""; + string author_surname = ""; + string author_surname_fn = ""; + string language = ""; + string language_original = ""; + string uid = ""; + string date_published = ""; + string[] topic_register_arr = []; + string path_html_seg = ""; + string path_html_scroll = ""; + string path_epub = ""; + string url_html_seg = ""; + string url_html_scroll = ""; + string url_epub = ""; + } + Harvest harvest; + Harvest[] harvests; + Harvest[][string][string][string][string] subject_trees; + } + return _Harvest(); + } +} +#+END_SRC + ** template: bibliography :biblio: #+name: meta_defaults_template_biblio diff --git a/org/default_paths.org b/org/default_paths.org index 859415c..7bf838e 100644 --- a/org/default_paths.org +++ b/org/default_paths.org @@ -253,13 +253,6 @@ template PathMatters() { return _uid; } string docname_composite_unique_per_src_doc() { - /+ - z pod name if any + src filename + lng code - filename ~ "." ~ lng - * unique per src doc - used by - - sqlite discrete index (multilingual, each language of a document) - +/ string _fn; if (pod_name_with_path.baseName == filename_base) { _fn = filename_base ~ mkup.sep ~ filename_extension ~ mkup.sep ~ lng; @@ -1131,7 +1124,7 @@ template DocReformPathsEPUB() { Po output_pth_root, Lng lng, ) { - auto out_pth = DocReformOutPaths!()( output_pth_root, lng); + auto out_pth = DocReformOutPaths!()(output_pth_root, lng); string base_dir = "epub"; struct _PathsStruct { string base() { @@ -1241,9 +1234,6 @@ template DocReformPathsODT() { string base_pth() { // dir will contain odt document file (also debug file tree) return asNormalizedPath((out_pth.output_base).chainPath(base_dir)).array; } - // string base_filename() { - // return doc_matters.src.filename_base; - // } string odt_file() { return asNormalizedPath(base_pth.chainPath(doc_matters.src.filename_base ~ ".odt")).array; } diff --git a/org/doc_reform.org b/org/doc_reform.org index 3cd5d9c..4d39e53 100644 --- a/org/doc_reform.org +++ b/org/doc_reform.org @@ -117,610 +117,12 @@ void main(string[] args) { } } } - if (_opt_action.very_verbose - && harvests.length > 0 - ) { - auto min_repeat_number = 42; - string[] _document_topic_register; - string[] _topic_register; - string[] _sub_topic_register; - Harvest[][string][string][string][string] subject_trees; - string[] topics = []; - string _auth = ""; - foreach(k, doc_harvest; harvests) { - _topic_register = []; - foreach(topic; doc_harvest.topic_register_arr.sort) { - _sub_topic_register = []; - string _spaces; - string[] subject_tree = topic.split(mkup.sep); - switch (subject_tree.length) { - case 1: - subject_trees[subject_tree[0]]["_a"]["_a"]["_a"] ~= doc_harvest; - break; - case 2: - subject_trees[subject_tree[0]][subject_tree[1]]["_a"]["_a"] ~= doc_harvest; - break; - case 3: - subject_trees[subject_tree[0]][subject_tree[1]][subject_tree[2]]["_a"] ~= doc_harvest; - break; - case 4: - subject_trees[subject_tree[0]][subject_tree[1]][subject_tree[2]][subject_tree[3]] ~= doc_harvest; - break; - default: - break; - } - _topic_register ~= _sub_topic_register.join("\n"); - } - 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; - _document_topic_register ~= format( - "\"%s\", %s%s\n%s", - doc_harvest.title, - doc_harvest.author, - (doc_harvest.date_published.length > 0) ? " (" ~ doc_harvest.date_published ~ ")" : "", - _topic_register.sort!("toUpper(a) < toUpper(b)", SwapStrategy.unstable).release.join("\n"), - ); - } - topics ~= format(q"┃ - - - -Metadata Harvest - Topics - - - - - - - - - - - - - -

Metadata Harvest - Topics (output organised by language & filetype)

-

[ HOME ] also see Metadata Harvest - Authors

-

ABCDEFGHIJKLMNOPQRSTUVWXYZ,  -

-
-

English   

-
-┃") ~ "\n"; - char _prev_k = "_".to!char; - int _kn; - foreach(k0; - subject_trees.keys - .sort!("toUpper(a) < toUpper(b)", SwapStrategy.unstable) - ) { - if (k0.toUpper.to!(char[])[0] != _prev_k) { - topics ~= format(q"┃

%s

┃", - k0.toUpper.to!(char[])[0], - k0.toUpper.to!(char[])[0], - ); - _prev_k = k0.toUpper.to!(char[])[0]; - } - if (k0 != "_a") { - topics ~= format(q"┃

%s

┃", - k0, k0,) ~ "\n"; - writeln("", k0); - if ("_a" in subject_trees[k0]) { - foreach (t_a_; - subject_trees[k0]["_a"]["_a"]["_a"] - .multiSort!("toUpper(a.title) < toUpper(b.title)", "a.author < b.author", SwapStrategy.unstable) - ) { - _auth = []; - if (t_a_.author_arr.length < 2) { - _auth = format(q"┃ %s┃", - t_a_.author_surname, - t_a_.author, - ); - } else { - foreach (a; t_a_.author_arr) { - _auth ~= format(q"┃ %s,┃", - t_a_.author_surname, - a, - ); - } - } - topics ~= format(q"┃

"%s" -%s┃", - "url", - t_a_.title, - _auth, - ) ~ "\n"; - writeln("- ", t_a_.title, " - ", t_a_.author); - } - } - foreach(k1; - subject_trees[k0].keys - .sort!("toUpper(a) < toUpper(b)", SwapStrategy.unstable) - ) { - if (k1 != "_a") { - topics ~= format(q"┃

%s

┃", - k1, k1,) ~ "\n"; - writeln(" ", k1); - if ("_a" in subject_trees[k0][k1]) { - foreach (t_a_; - subject_trees[k0][k1]["_a"]["_a"] - .multiSort!("toUpper(a.title) < toUpper(b.title)", "a.author < b.author", SwapStrategy.unstable) - ) { - _auth = []; - if (t_a_.author_arr.length < 2) { - _auth = format(q"┃ %s┃", - t_a_.author_surname, - t_a_.author, - ); - } else { - foreach (a; t_a_.author_arr) { - _auth ~= format(q"┃ %s,┃", - t_a_.author_surname, - a, - ); - } - } - topics ~= format(q"┃

%s -%s┃", - "url", - t_a_.title, - _auth, - ) ~ "\n"; - writeln(" - ", t_a_.title, " - ", t_a_.author); - } - } - } - foreach(k2; - subject_trees[k0][k1].keys - .sort!("toUpper(a) < toUpper(b)", SwapStrategy.unstable) - ) { - if (k2 != "_a") { - topics ~= format(q"┃

%s

┃", - k2, k2,) ~ "\n"; - writeln(" ", k2); - if ("_a" in subject_trees[k0][k1][k2]) { - foreach (t_a_; - subject_trees[k0][k1][k2]["_a"] - .multiSort!("toUpper(a.title) < toUpper(b.title)", "a.author < b.author", SwapStrategy.unstable) - ) { - _auth = []; - if (t_a_.author_arr.length < 2) { - _auth = format(q"┃ %s┃", - t_a_.author_surname, - t_a_.author, - ); - } else { - foreach (a; t_a_.author_arr) { - _auth ~= format(q"┃ %s,┃", - t_a_.author_surname, - a, - ); - } - } - topics ~= format(q"┃

%s -%s┃", - "url", - t_a_.title, - _auth, - ) ~ "\n"; - writeln(" - ", t_a_.title, " - ", t_a_.author); - } - } - } - foreach(k3; - subject_trees[k0][k1][k2].keys - .sort!("toUpper(a) < toUpper(b)", SwapStrategy.unstable) - ) { - if (k3 != "_a") { - topics ~= format(q"┃

%s

┃", - k3, k3,) ~ "\n"; - writeln(" ", k3); - { - foreach (t_a_; - subject_trees[k0][k1][k2][k3] - .multiSort!("toUpper(a.title) < toUpper(b.title)", "a.author < b.author", SwapStrategy.unstable) - ) { - _auth = []; - if (t_a_.author_arr.length < 2) { - _auth = format(q"┃%s┃", - t_a_.author_surname, - t_a_.author, - ); - } else { - foreach (a; t_a_.author_arr) { - _auth ~= format(q"┃ %s,┃", - t_a_.author_surname, - a, - ); - } - } - topics ~= format(q"┃

%s -%s┃", - "url", - t_a_.title, - _auth, - ) ~ "\n"; - writeln(" - ", t_a_.title, " - ", t_a_.author); - } - } - } - } - } - } - } - } - topics ~= format(q"┃ -


- - - - - - - - -┃") ~ "\n"; - try { - auto f = File("topics.html", "w"); - foreach (o; topics) { - f.writeln(o); - } - } catch (ErrnoException ex) { - // Handle error - } - } - if ((_opt_action.verbose - || _opt_action.very_verbose) - && harvests.length > 0 - ) { - string[] authors = []; - authors ~= format(q"┃ - - - - -Metadata Harvest - Authors - - - - - - - - - - - - - -

Metadata Harvest - Authors (output organised by language & filetype)

-

[ HOME ] also see Metadata Harvest - Topics

-

-
-

English   

-
-

ABCDEFGHIJKLMNOPQRSTUVWXYZ,  -┃") ~ "\n"; - string[string] _au; - string[] _auth_date_title; - string[] _author_date_title; - string _prev_auth = ""; - char _prev_k = "_".to!char; - foreach(doc_harvest; - harvests - .multiSort!( - "toUpper(a.author_surname_fn) < toUpper(b.author_surname_fn)", - "a.date_published < b.date_published", - "a.title < b.title", - SwapStrategy.unstable - ) - ) { - if (doc_harvest.author_surname_fn != _prev_auth) { - _au[doc_harvest.author_surname_fn] - = format(q"┃

%s

%s "%s" [%s]

┃", - doc_harvest.author_surname, - doc_harvest.author_surname_fn, - (doc_harvest.date_published.length > 0) - ? doc_harvest.date_published : "", - "url", - doc_harvest.title, - doc_harvest.language, - ); - _prev_auth = doc_harvest.author_surname_fn; - } else { - _au[doc_harvest.author_surname_fn] - ~= format(q"┃

%s "%s" [%s]

┃", - (doc_harvest.date_published.length > 0) - ? doc_harvest.date_published : "", - "url", - doc_harvest.title, - doc_harvest.language, - ); - } - _author_date_title ~= format(q"┃%s %s "%s" [%s]┃", - doc_harvest.author_surname_fn, - (doc_harvest.date_published.length > 0) - ? "(" ~ doc_harvest.date_published ~ ")" : "", - doc_harvest.title, - doc_harvest.language, - ); - // writeln(doc_harvest.author_date_title); - } - foreach (k; _au.keys.sort) { - if (k.toUpper.to!(char[])[0] != _prev_k) { - authors ~= format(q"┃

%s

┃", - k.toUpper.to!(char[])[0], - k.toUpper.to!(char[])[0], - ); - _prev_k = k.toUpper.to!(char[])[0]; - } - authors ~= _au[k]; + if (hvst.harvests.length > 0) { + if (_opt_action.harvest_topics) { + DocReformMetaDocHarvestsTopics!()(hvst, _opt_action); } - authors ~= format(q"┃ -
- - - - - - - - -┃") ~ "\n"; - try { - auto f = File("authors.html", "w"); - foreach (o; authors) { - f.writeln(o); - } - } catch (ErrnoException ex) { - // Handle error - } - foreach(_adt; _author_date_title.sort) { - writeln(_adt); + if (_opt_action.harvest_authors) { + DocReformMetaDocHarvestsAuthors!()(hvst.harvests, _opt_action); } } } @@ -798,6 +200,8 @@ import std.process; import doc_reform.meta, + doc_reform.meta.metadoc_harvests_authors, + doc_reform.meta.metadoc_harvests_topics, doc_reform.meta.metadoc_summary, doc_reform.meta.metadoc_harvest, doc_reform.meta.metadoc_from_src, @@ -875,26 +279,7 @@ mixin outputHub; #+NAME: doc_reform_init #+BEGIN_SRC d -struct Harvest { - string title = ""; - string[] author_arr = []; - string author = ""; - string author_surname = ""; - string author_surname_fn = ""; - string language = ""; - string language_original = ""; - string uid = ""; - string date_published = ""; - string[] topic_register_arr = []; - string path_html_seg = ""; - string path_html_scroll = ""; - string path_epub = ""; - string url_html_seg = ""; - string url_html_scroll = ""; - string url_epub = ""; -} -Harvest harvested; -Harvest[] harvests; +auto hvst = DocReformHarvest!(); #+END_SRC **** args :args: @@ -1094,15 +479,24 @@ struct OptActions { || opts["harvest-authors"] || opts["harvest-topics"] ) - ? true - : false; + ? true : false; return _is; } bool harvest_authors() { - return opts["harvest-authors"]; + bool _is = ( + opts["harvest"] + || opts["harvest-authors"] + ) + ? true : false; + return _is; } bool harvest_topics() { - return opts["harvest-topics"]; + bool _is = ( + opts["harvest"] + || opts["harvest-topics"] + ) + ? true : false; + return _is; } bool html() { bool _is; @@ -1253,6 +647,7 @@ struct OptActions { _is = false; } else if (opts["abstraction"] || concordance + || harvest || html || epub || odt @@ -1306,6 +701,7 @@ struct OptActions { || concordance || source || pod + || harvest || html || epub || odt @@ -1555,19 +951,7 @@ if (doc_matters.opt.action.verbose) { #+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); + hvst.harvests ~= DocReformMetaDocHarvest!()(doc_matters, hvst); } #+END_SRC @@ -1848,7 +1232,7 @@ struct DocumentMatters { #+NAME: doc_reform_each_file_do_document_matters #+BEGIN_SRC d - auto conf_make_meta() { // TODO meld with all make instructions + auto conf_make_meta() { return _make_and_meta_struct; } auto has() { @@ -1947,6 +1331,72 @@ if ((_opt_action.debug_do) } #+END_SRC +**** H. abridged doc matters, for harvest (from doc head only, doc abstraction not performed) +- harvest abridged doc matters gathered +***** doc matters shared + +#+NAME: doc_reform_each_file_do_document_matters_abridged +#+BEGIN_SRC d +if ((_opt_action.debug_do) +|| (_opt_action.verbose) +) { + writeln("step4 commence → (doc_matters)"); +} +struct DocumentMattersShared { + auto env() { + struct Env_ { + auto pwd() { + return _manifest.env.pwd; + } + auto home() { + return _manifest.env.home; + } + } + return Env_(); + } + auto opt() { + struct Opt_ { + auto action() { + return _opt_action; + } + } + return Opt_(); + } +} +DocumentMattersShared doc_matters_shared = DocumentMattersShared(); +#+END_SRC + +***** abridged doc matters, for harvest (from doc head only, doc abstraction not performed) TODO + +#+NAME: doc_reform_each_file_do_document_matters_abridged +#+BEGIN_SRC d +struct DocumentMattersAbridged { + auto conf_make_meta() { + return _make_and_meta_struct; + } + auto src() { + return _manifest.src; + } + auto src_path_info() { + return DocReformPathsSRC!()(_manifest.env.pwd, _manifest.src.file_with_absolute_path); + } + auto pod() { + return _manifest.pod; + } + auto sqlite() { + struct SQLite_ { + string filename() { + return _opt_action.sqlite_filename; + } + } + return SQLite_(); + } + auto output_path() { + return _manifest.output.path; + } +} +#+END_SRC + * 3. document abstraction _summary_ :module:doc_reform:metadoc_summary: ** 0. module template metadoc summary - document summary from abstraction @@ -2093,91 +1543,697 @@ writefln( ); #+END_SRC -** 0. module template metadoc harvest +** 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 hvst, + ) { + <> + mixin InternalMarkup; + <> + <> + } +} +#+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 +import doc_reform.output.paths_output; +auto pth_html = DocReformPathsHTML!()(doc_matters.output_path, doc_matters.src.language); +hvst.harvest.title = doc_matters.conf_make_meta.meta.title_full; +hvst.harvest.author = doc_matters.conf_make_meta.meta.creator_author; +hvst.harvest.author_surname = doc_matters.conf_make_meta.meta.creator_author_surname; +hvst.harvest.author_surname_fn = doc_matters.conf_make_meta.meta.creator_author_surname_fn; +hvst.harvest.author_arr = doc_matters.conf_make_meta.meta.creator_author_arr; +hvst.harvest.language_original = doc_matters.conf_make_meta.meta.original_language; +hvst.harvest.language = doc_matters.src.language; +hvst.harvest.uid = doc_matters.src.doc_uid; +hvst.harvest.date_published = doc_matters.conf_make_meta.meta.date_published; +hvst.harvest.topic_register_arr = doc_matters.conf_make_meta.meta.classify_topic_register_arr; +hvst.harvest.path_html_scroll = pth_html.fn_scroll(doc_matters.src.filename); +hvst.harvest.path_html_seg = pth_html.fn_seg(doc_matters.src.filename, "toc"); +return hvst.harvest; +#+END_SRC + +** 0. module template metadoc harvest topics +*** 0. module template metadoc harvest topics template + +#+BEGIN_SRC d :tangle "../src/doc_reform/meta/metadoc_harvests_topics.d" +module doc_reform.meta.metadoc_harvests_topics; + import + std.algorithm, + std.array, + std.exception, + std.regex, + std.stdio, + std.string, + std.conv : to; + import + doc_reform.meta.defaults, + doc_reform.meta.rgx; + mixin DocReformHarvest; + mixin InternalMarkup; + mixin DocReformRgxInit; +template DocReformMetaDocHarvestsTopics() { + auto mkup = InlineMarkup(); + void DocReformMetaDocHarvestsTopics(H,O)( + H hvst, + O _opt_action, + ) { + <> +<> +<> +<> + <> + topics +<> + <> + } +} +#+END_SRC + +*** order topic register + +#+NAME: harvested_topics +#+BEGIN_SRC d +auto min_repeat_number = 42; +string[] _document_topic_register; +string[] _topic_register; +string[] _sub_topic_register; +string[] topics = []; +string _auth = ""; +foreach(k, doc_harvest; hvst.harvests) { + _topic_register = []; + foreach(topic; doc_harvest.topic_register_arr.sort) { + _sub_topic_register = []; + string _spaces; + string[] subject_tree = topic.split(mkup.sep); + switch (subject_tree.length) { + case 1: + hvst.subject_trees[subject_tree[0]]["_a"]["_a"]["_a"] ~= doc_harvest; + break; + case 2: + hvst.subject_trees[subject_tree[0]][subject_tree[1]]["_a"]["_a"] ~= doc_harvest; + break; + case 3: + hvst.subject_trees[subject_tree[0]][subject_tree[1]][subject_tree[2]]["_a"] ~= doc_harvest; + break; + case 4: + hvst.subject_trees[subject_tree[0]][subject_tree[1]][subject_tree[2]][subject_tree[3]] ~= doc_harvest; + break; + default: + break; + } + _topic_register ~= _sub_topic_register.join("\n"); + } + 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; + _document_topic_register ~= format( + "\"%s\", %s%s\n%s", + doc_harvest.title, + doc_harvest.author, + (doc_harvest.date_published.length > 0) ? " (" ~ doc_harvest.date_published ~ ")" : "", + _topic_register.sort!("toUpper(a) < toUpper(b)", SwapStrategy.unstable).release.join("\n"), + ); +} +#+END_SRC + +*** harvested topics html head + +#+NAME: harvested_topics_html_head_1 +#+BEGIN_SRC d + topics ~= format(q"┃ + + + +Metadata Harvest - Topics +#+END_SRC + +*** harvested topics html head + +#+NAME: harvested_topics_html_head_2 +#+BEGIN_SRC d + + + + + +

Metadata Harvest - Topics (output organised by language & filetype)

+

[ HOME ] also see Metadata Harvest - Authors

+

ABCDEFGHIJKLMNOPQRSTUVWXYZ,  +

+
+

English   

+
+┃") ~ "\n"; +#+END_SRC + +*** harvested topics html + +#+NAME: harvested_topics_html +#+BEGIN_SRC d +char _prev_k = "_".to!char; +int _kn; +foreach(k0; + hvst.subject_trees.keys + .sort!("toUpper(a) < toUpper(b)", SwapStrategy.unstable) +) { + if (k0.toUpper.to!(char[])[0] != _prev_k) { + topics ~= format(q"┃

%s

┃", + k0.toUpper.to!(char[])[0], + k0.toUpper.to!(char[])[0], + ); + _prev_k = k0.toUpper.to!(char[])[0]; + } + if (k0 != "_a") { + topics ~= format(q"┃

%s

┃", + k0, k0,) ~ "\n"; + if (_opt_action.very_verbose) { + writeln("", k0); + } + if ("_a" in hvst.subject_trees[k0]) { + foreach (t_a_; + hvst.subject_trees[k0]["_a"]["_a"]["_a"] + .multiSort!("toUpper(a.title) < toUpper(b.title)", "a.author < b.author", SwapStrategy.unstable) + ) { + _auth = []; + if (t_a_.author_arr.length < 2) { + _auth = format(q"┃ %s┃", + t_a_.author_surname, + t_a_.author, + ); + } else { + foreach (a; t_a_.author_arr) { + _auth ~= format(q"┃ %s,┃", + t_a_.author_surname, + a, + ); + } + } + topics ~= format(q"┃

"%s" -%s┃", + "url", + t_a_.title, + _auth, + ) ~ "\n"; + if (_opt_action.very_verbose) { + writeln("- ", t_a_.title, " - ", t_a_.author); + } + } + } + foreach(k1; + hvst.subject_trees[k0].keys + .sort!("toUpper(a) < toUpper(b)", SwapStrategy.unstable) + ) { + if (k1 != "_a") { + topics ~= format(q"┃

%s

┃", + k1, k1,) ~ "\n"; + if (_opt_action.very_verbose) { + writeln(" ", k1); + } + if ("_a" in hvst.subject_trees[k0][k1]) { + foreach (t_a_; + hvst.subject_trees[k0][k1]["_a"]["_a"] + .multiSort!("toUpper(a.title) < toUpper(b.title)", "a.author < b.author", SwapStrategy.unstable) + ) { + _auth = []; + if (t_a_.author_arr.length < 2) { + _auth = format(q"┃ %s┃", + t_a_.author_surname, + t_a_.author, + ); + } else { + foreach (a; t_a_.author_arr) { + _auth ~= format(q"┃ %s,┃", + t_a_.author_surname, + a, + ); + } + } + topics ~= format(q"┃

%s -%s┃", + "url", + t_a_.title, + _auth, + ) ~ "\n"; + if (_opt_action.very_verbose) { + writeln(" - ", t_a_.title, " - ", t_a_.author); + } + } + } + } + foreach(k2; + hvst.subject_trees[k0][k1].keys + .sort!("toUpper(a) < toUpper(b)", SwapStrategy.unstable) + ) { + if (k2 != "_a") { + topics ~= format(q"┃

%s

┃", + k2, k2,) ~ "\n"; + if (_opt_action.very_verbose) { + writeln(" ", k2); + } + if ("_a" in hvst.subject_trees[k0][k1][k2]) { + foreach (t_a_; + hvst.subject_trees[k0][k1][k2]["_a"] + .multiSort!("toUpper(a.title) < toUpper(b.title)", "a.author < b.author", SwapStrategy.unstable) + ) { + _auth = []; + if (t_a_.author_arr.length < 2) { + _auth = format(q"┃ %s┃", + t_a_.author_surname, + t_a_.author, + ); + } else { + foreach (a; t_a_.author_arr) { + _auth ~= format(q"┃ %s,┃", + t_a_.author_surname, + a, + ); + } + } + topics ~= format(q"┃

%s -%s┃", + "url", + t_a_.title, + _auth, + ) ~ "\n"; + if (_opt_action.very_verbose) { + writeln(" - ", t_a_.title, " - ", t_a_.author); + } + } + } + } + foreach(k3; + hvst.subject_trees[k0][k1][k2].keys + .sort!("toUpper(a) < toUpper(b)", SwapStrategy.unstable) + ) { + if (k3 != "_a") { + topics ~= format(q"┃

%s

┃", + k3, k3,) ~ "\n"; + if (_opt_action.very_verbose) { + writeln(" ", k3); + } + { + foreach (t_a_; + hvst.subject_trees[k0][k1][k2][k3] + .multiSort!("toUpper(a.title) < toUpper(b.title)", "a.author < b.author", SwapStrategy.unstable) + ) { + _auth = []; + if (t_a_.author_arr.length < 2) { + _auth = format(q"┃%s┃", + t_a_.author_surname, + t_a_.author, + ); + } else { + foreach (a; t_a_.author_arr) { + _auth ~= format(q"┃ %s,┃", + t_a_.author_surname, + a, + ); + } + } + topics ~= format(q"┃

%s -%s┃", + "url", + t_a_.title, + _auth, + ) ~ "\n"; + if (_opt_action.very_verbose) { + writeln(" - ", t_a_.title, " - ", t_a_.author); + } + } + } + } + } + } + } + } +} +#+END_SRC + +*** harvested topics write -#+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, +#+NAME: harvested_topics_html_write +#+BEGIN_SRC d +try { + auto f = File("topics.html", "w"); + foreach (o; topics) { + f.writeln(o); + } +} catch (ErrnoException ex) { + // Handle error +} +#+END_SRC + +** 0. module template metadoc harvests authors +*** 0. module template metadoc harvest authors + +#+BEGIN_SRC d :tangle "../src/doc_reform/meta/metadoc_harvests_authors.d" +module doc_reform.meta.metadoc_harvests_authors; + import + std.algorithm, + std.array, + std.exception, + std.regex, + std.stdio, + std.string, + std.conv : to; + import + doc_reform.meta.defaults, + doc_reform.meta.rgx; + mixin DocReformHarvest; + mixin InternalMarkup; + mixin DocReformRgxInit; +template DocReformMetaDocHarvestsAuthors() { + auto mkup = InlineMarkup(); + void DocReformMetaDocHarvestsAuthors(H,O)( + H harvests, + O _opt_action, ) { - <> - mixin InternalMarkup; - <> - <> +<> +<> +<> + authors +<> + <> } } #+END_SRC -** init -*** imports +*** harvested authors html head -#+name: metadoc_harvest_imports +#+NAME: harvested_authors_html_head_1 #+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; + string[] authors = []; + authors ~= format(q"┃ + + + + +Metadata Harvest - Authors #+END_SRC -*** initialize :report: +*** harvested authors html head -#+name: metadoc_harvest_initialize +#+NAME: harvested_authors_html_head_2 #+BEGIN_SRC d -auto markup = InlineMarkup(); + + + + + +

Metadata Harvest - Authors (output organised by language & filetype)

+

[ HOME ] also see Metadata Harvest - Topics

+

+
+

English   

+
+

ABCDEFGHIJKLMNOPQRSTUVWXYZ,  +┃") ~ "\n"; + string[string] _au; + string[] _auth_date_title; + string[] _author_date_title; + string _prev_auth = ""; + char _prev_k = "_".to!char; + foreach(doc_harvest; + harvests + .multiSort!( + "toUpper(a.author_surname_fn) < toUpper(b.author_surname_fn)", + "a.date_published < b.date_published", + "a.title < b.title", + SwapStrategy.unstable + ) + ) { + if (doc_harvest.author_surname_fn != _prev_auth) { + _au[doc_harvest.author_surname_fn] + = format(q"┃

%s

%s "%s" [%s]

┃", + doc_harvest.author_surname, + doc_harvest.author_surname_fn, + (doc_harvest.date_published.length > 0) + ? doc_harvest.date_published : "", + "url", + doc_harvest.title, + doc_harvest.language, + ); + _prev_auth = doc_harvest.author_surname_fn; + } else { + _au[doc_harvest.author_surname_fn] + ~= format(q"┃

%s "%s" [%s]

┃", + (doc_harvest.date_published.length > 0) + ? doc_harvest.date_published : "", + "url", + doc_harvest.title, + doc_harvest.language, + ); + } + _author_date_title ~= format(q"┃%s %s "%s" [%s]┃", + doc_harvest.author_surname_fn, + (doc_harvest.date_published.length > 0) + ? "(" ~ doc_harvest.date_published ~ ")" : "", + doc_harvest.title, + doc_harvest.language, + ); + } + foreach (k; _au.keys.sort) { + if (k.toUpper.to!(char[])[0] != _prev_k) { + authors ~= format(q"┃

%s

┃", + k.toUpper.to!(char[])[0], + k.toUpper.to!(char[])[0], + ); + _prev_k = k.toUpper.to!(char[])[0]; + } + authors ~= _au[k]; + } #+END_SRC -** harvest summary +*** harvested authors write -#+name: meta_metadoc_harvest_summary +#+NAME: harvested_authors_html_write #+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), -); +try { + auto f = File("authors.html", "w"); + foreach (o; authors) { + f.writeln(o); + } +} catch (ErrnoException ex) { + // Handle error +} +if (_opt_action.verbose + || _opt_action.very_verbose +) { + foreach(_adt; _author_date_title.sort) { + writeln(_adt); + } +} #+END_SRC -** return harvest +** harvested authors & topics shared html +*** harvested html head -#+name: meta_metadoc_harvest +#+NAME: harvested_html_head #+BEGIN_SRC d -import doc_reform.output.paths_output; -auto pth_html = DocReformPathsHTML!()(doc_matters.output_path, doc_matters.src.language); -harvest.title = doc_matters.conf_make_meta.meta.title_full; -harvest.author = doc_matters.conf_make_meta.meta.creator_author; -harvest.author_surname = doc_matters.conf_make_meta.meta.creator_author_surname; -harvest.author_surname_fn = doc_matters.conf_make_meta.meta.creator_author_surname_fn; -harvest.author_arr = doc_matters.conf_make_meta.meta.creator_author_arr; -harvest.language_original = doc_matters.conf_make_meta.meta.original_language; -harvest.language = doc_matters.src.language; -harvest.uid = doc_matters.src.doc_uid; -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; -harvest.path_html_scroll = pth_html.fn_scroll(doc_matters.src.filename); -harvest.path_html_seg = pth_html.fn_seg(doc_matters.src.filename, "toc"); -return harvest; + + + + + + + + +#+END_SRC + +*** harvested html bottom + +#+NAME: harvested_html_bottom +#+BEGIN_SRC d + ~= format(q"┃ +
+ + + + + + + + +┃") ~ "\n"; #+END_SRC * __END__ diff --git a/src/doc_reform/doc_reform.d b/src/doc_reform/doc_reform.d index 550ee28..d48851b 100755 --- a/src/doc_reform/doc_reform.d +++ b/src/doc_reform/doc_reform.d @@ -62,6 +62,8 @@ import std.process; import doc_reform.meta, + doc_reform.meta.metadoc_harvests_authors, + doc_reform.meta.metadoc_harvests_topics, doc_reform.meta.metadoc_summary, doc_reform.meta.metadoc_harvest, doc_reform.meta.metadoc_from_src, @@ -91,26 +93,7 @@ void main(string[] args) { mixin DocReformBiblio; mixin DocReformRgxInitFlags; mixin outputHub; - struct Harvest { - string title = ""; - string[] author_arr = []; - string author = ""; - string author_surname = ""; - string author_surname_fn = ""; - string language = ""; - string language_original = ""; - string uid = ""; - string date_published = ""; - string[] topic_register_arr = []; - string path_html_seg = ""; - string path_html_scroll = ""; - string path_epub = ""; - string url_html_seg = ""; - string url_html_scroll = ""; - string url_epub = ""; - } - Harvest harvested; - Harvest[] harvests; + auto hvst = DocReformHarvest!(); string flag_action; string arg_unrecognized; enum dAM { abstraction, matters } @@ -282,15 +265,24 @@ void main(string[] args) { || opts["harvest-authors"] || opts["harvest-topics"] ) - ? true - : false; + ? true : false; return _is; } bool harvest_authors() { - return opts["harvest-authors"]; + bool _is = ( + opts["harvest"] + || opts["harvest-authors"] + ) + ? true : false; + return _is; } bool harvest_topics() { - return opts["harvest-topics"]; + bool _is = ( + opts["harvest"] + || opts["harvest-topics"] + ) + ? true : false; + return _is; } bool html() { bool _is; @@ -441,6 +433,7 @@ void main(string[] args) { _is = false; } else if (opts["abstraction"] || concordance + || harvest || html || epub || odt @@ -494,6 +487,7 @@ void main(string[] args) { || concordance || source || pod + || harvest || html || epub || odt @@ -682,19 +676,7 @@ void main(string[] args) { DocReformMetaDocSummary!()(doc_abstraction, doc_matters); } 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); + hvst.harvests ~= DocReformMetaDocHarvest!()(doc_matters, hvst); } /+ ↓ debugs +/ if (doc_matters.opt.action.debug_do) { @@ -777,19 +759,7 @@ void main(string[] args) { DocReformMetaDocSummary!()(doc_abstraction, doc_matters); } 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); + hvst.harvests ~= DocReformMetaDocHarvest!()(doc_matters, hvst); } /+ ↓ debugs +/ if (doc_matters.opt.action.debug_do) { @@ -827,610 +797,12 @@ void main(string[] args) { } } } - if (_opt_action.very_verbose - && harvests.length > 0 - ) { - auto min_repeat_number = 42; - string[] _document_topic_register; - string[] _topic_register; - string[] _sub_topic_register; - Harvest[][string][string][string][string] subject_trees; - string[] topics = []; - string _auth = ""; - foreach(k, doc_harvest; harvests) { - _topic_register = []; - foreach(topic; doc_harvest.topic_register_arr.sort) { - _sub_topic_register = []; - string _spaces; - string[] subject_tree = topic.split(mkup.sep); - switch (subject_tree.length) { - case 1: - subject_trees[subject_tree[0]]["_a"]["_a"]["_a"] ~= doc_harvest; - break; - case 2: - subject_trees[subject_tree[0]][subject_tree[1]]["_a"]["_a"] ~= doc_harvest; - break; - case 3: - subject_trees[subject_tree[0]][subject_tree[1]][subject_tree[2]]["_a"] ~= doc_harvest; - break; - case 4: - subject_trees[subject_tree[0]][subject_tree[1]][subject_tree[2]][subject_tree[3]] ~= doc_harvest; - break; - default: - break; - } - _topic_register ~= _sub_topic_register.join("\n"); - } - 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; - _document_topic_register ~= format( - "\"%s\", %s%s\n%s", - doc_harvest.title, - doc_harvest.author, - (doc_harvest.date_published.length > 0) ? " (" ~ doc_harvest.date_published ~ ")" : "", - _topic_register.sort!("toUpper(a) < toUpper(b)", SwapStrategy.unstable).release.join("\n"), - ); - } - topics ~= format(q"┃ - - - -Metadata Harvest - Topics - - - - - - - - - - - - - -

Metadata Harvest - Topics (output organised by language & filetype)

-

[ HOME ] also see Metadata Harvest - Authors

-

ABCDEFGHIJKLMNOPQRSTUVWXYZ,  -

-
-

English   

-
-┃") ~ "\n"; - char _prev_k = "_".to!char; - int _kn; - foreach(k0; - subject_trees.keys - .sort!("toUpper(a) < toUpper(b)", SwapStrategy.unstable) - ) { - if (k0.toUpper.to!(char[])[0] != _prev_k) { - topics ~= format(q"┃

%s

┃", - k0.toUpper.to!(char[])[0], - k0.toUpper.to!(char[])[0], - ); - _prev_k = k0.toUpper.to!(char[])[0]; - } - if (k0 != "_a") { - topics ~= format(q"┃

%s

┃", - k0, k0,) ~ "\n"; - writeln("", k0); - if ("_a" in subject_trees[k0]) { - foreach (t_a_; - subject_trees[k0]["_a"]["_a"]["_a"] - .multiSort!("toUpper(a.title) < toUpper(b.title)", "a.author < b.author", SwapStrategy.unstable) - ) { - _auth = []; - if (t_a_.author_arr.length < 2) { - _auth = format(q"┃ %s┃", - t_a_.author_surname, - t_a_.author, - ); - } else { - foreach (a; t_a_.author_arr) { - _auth ~= format(q"┃ %s,┃", - t_a_.author_surname, - a, - ); - } - } - topics ~= format(q"┃

"%s" -%s┃", - "url", - t_a_.title, - _auth, - ) ~ "\n"; - writeln("- ", t_a_.title, " - ", t_a_.author); - } - } - foreach(k1; - subject_trees[k0].keys - .sort!("toUpper(a) < toUpper(b)", SwapStrategy.unstable) - ) { - if (k1 != "_a") { - topics ~= format(q"┃

%s

┃", - k1, k1,) ~ "\n"; - writeln(" ", k1); - if ("_a" in subject_trees[k0][k1]) { - foreach (t_a_; - subject_trees[k0][k1]["_a"]["_a"] - .multiSort!("toUpper(a.title) < toUpper(b.title)", "a.author < b.author", SwapStrategy.unstable) - ) { - _auth = []; - if (t_a_.author_arr.length < 2) { - _auth = format(q"┃ %s┃", - t_a_.author_surname, - t_a_.author, - ); - } else { - foreach (a; t_a_.author_arr) { - _auth ~= format(q"┃ %s,┃", - t_a_.author_surname, - a, - ); - } - } - topics ~= format(q"┃

%s -%s┃", - "url", - t_a_.title, - _auth, - ) ~ "\n"; - writeln(" - ", t_a_.title, " - ", t_a_.author); - } - } - } - foreach(k2; - subject_trees[k0][k1].keys - .sort!("toUpper(a) < toUpper(b)", SwapStrategy.unstable) - ) { - if (k2 != "_a") { - topics ~= format(q"┃

%s

┃", - k2, k2,) ~ "\n"; - writeln(" ", k2); - if ("_a" in subject_trees[k0][k1][k2]) { - foreach (t_a_; - subject_trees[k0][k1][k2]["_a"] - .multiSort!("toUpper(a.title) < toUpper(b.title)", "a.author < b.author", SwapStrategy.unstable) - ) { - _auth = []; - if (t_a_.author_arr.length < 2) { - _auth = format(q"┃ %s┃", - t_a_.author_surname, - t_a_.author, - ); - } else { - foreach (a; t_a_.author_arr) { - _auth ~= format(q"┃ %s,┃", - t_a_.author_surname, - a, - ); - } - } - topics ~= format(q"┃

%s -%s┃", - "url", - t_a_.title, - _auth, - ) ~ "\n"; - writeln(" - ", t_a_.title, " - ", t_a_.author); - } - } - } - foreach(k3; - subject_trees[k0][k1][k2].keys - .sort!("toUpper(a) < toUpper(b)", SwapStrategy.unstable) - ) { - if (k3 != "_a") { - topics ~= format(q"┃

%s

┃", - k3, k3,) ~ "\n"; - writeln(" ", k3); - { - foreach (t_a_; - subject_trees[k0][k1][k2][k3] - .multiSort!("toUpper(a.title) < toUpper(b.title)", "a.author < b.author", SwapStrategy.unstable) - ) { - _auth = []; - if (t_a_.author_arr.length < 2) { - _auth = format(q"┃%s┃", - t_a_.author_surname, - t_a_.author, - ); - } else { - foreach (a; t_a_.author_arr) { - _auth ~= format(q"┃ %s,┃", - t_a_.author_surname, - a, - ); - } - } - topics ~= format(q"┃

%s -%s┃", - "url", - t_a_.title, - _auth, - ) ~ "\n"; - writeln(" - ", t_a_.title, " - ", t_a_.author); - } - } - } - } - } - } - } - } - topics ~= format(q"┃ -


- - - - - - - - -┃") ~ "\n"; - try { - auto f = File("topics.html", "w"); - foreach (o; topics) { - f.writeln(o); - } - } catch (ErrnoException ex) { - // Handle error - } - } - if ((_opt_action.verbose - || _opt_action.very_verbose) - && harvests.length > 0 - ) { - string[] authors = []; - authors ~= format(q"┃ - - - - -Metadata Harvest - Authors - - - - - - - - - - - - - -

Metadata Harvest - Authors (output organised by language & filetype)

-

[ HOME ] also see Metadata Harvest - Topics

-

-
-

English   

-
-

ABCDEFGHIJKLMNOPQRSTUVWXYZ,  -┃") ~ "\n"; - string[string] _au; - string[] _auth_date_title; - string[] _author_date_title; - string _prev_auth = ""; - char _prev_k = "_".to!char; - foreach(doc_harvest; - harvests - .multiSort!( - "toUpper(a.author_surname_fn) < toUpper(b.author_surname_fn)", - "a.date_published < b.date_published", - "a.title < b.title", - SwapStrategy.unstable - ) - ) { - if (doc_harvest.author_surname_fn != _prev_auth) { - _au[doc_harvest.author_surname_fn] - = format(q"┃

%s

%s "%s" [%s]

┃", - doc_harvest.author_surname, - doc_harvest.author_surname_fn, - (doc_harvest.date_published.length > 0) - ? doc_harvest.date_published : "", - "url", - doc_harvest.title, - doc_harvest.language, - ); - _prev_auth = doc_harvest.author_surname_fn; - } else { - _au[doc_harvest.author_surname_fn] - ~= format(q"┃

%s "%s" [%s]

┃", - (doc_harvest.date_published.length > 0) - ? doc_harvest.date_published : "", - "url", - doc_harvest.title, - doc_harvest.language, - ); - } - _author_date_title ~= format(q"┃%s %s "%s" [%s]┃", - doc_harvest.author_surname_fn, - (doc_harvest.date_published.length > 0) - ? "(" ~ doc_harvest.date_published ~ ")" : "", - doc_harvest.title, - doc_harvest.language, - ); - // writeln(doc_harvest.author_date_title); - } - foreach (k; _au.keys.sort) { - if (k.toUpper.to!(char[])[0] != _prev_k) { - authors ~= format(q"┃

%s

┃", - k.toUpper.to!(char[])[0], - k.toUpper.to!(char[])[0], - ); - _prev_k = k.toUpper.to!(char[])[0]; - } - authors ~= _au[k]; - } - authors ~= format(q"┃ -
- - - - - - - - -┃") ~ "\n"; - try { - auto f = File("authors.html", "w"); - foreach (o; authors) { - f.writeln(o); - } - } catch (ErrnoException ex) { - // Handle error + if (hvst.harvests.length > 0) { + if (_opt_action.harvest_topics) { + DocReformMetaDocHarvestsTopics!()(hvst, _opt_action); } - foreach(_adt; _author_date_title.sort) { - writeln(_adt); + if (_opt_action.harvest_authors) { + DocReformMetaDocHarvestsAuthors!()(hvst.harvests, _opt_action); } } } diff --git a/src/doc_reform/meta/defaults.d b/src/doc_reform/meta/defaults.d index fc5e5d1..4a4ae8f 100644 --- a/src/doc_reform/meta/defaults.d +++ b/src/doc_reform/meta/defaults.d @@ -87,6 +87,34 @@ template DocReformNode() { return _node; } } +template DocReformHarvest() { + auto DocReformHarvest() { + struct _Harvest { + struct Harvest { + string title = ""; + string[] author_arr = []; + string author = ""; + string author_surname = ""; + string author_surname_fn = ""; + string language = ""; + string language_original = ""; + string uid = ""; + string date_published = ""; + string[] topic_register_arr = []; + string path_html_seg = ""; + string path_html_scroll = ""; + string path_epub = ""; + string url_html_seg = ""; + string url_html_scroll = ""; + string url_epub = ""; + } + Harvest harvest; + Harvest[] harvests; + Harvest[][string][string][string][string] subject_trees; + } + return _Harvest(); + } +} template DocReformBiblio() { // required: deemed_author (author || editor); year; fulltitle; struct BibJsnStr { diff --git a/src/doc_reform/meta/metadoc.d b/src/doc_reform/meta/metadoc.d index a26756b..88c4a2b 100644 --- a/src/doc_reform/meta/metadoc.d +++ b/src/doc_reform/meta/metadoc.d @@ -8,6 +8,8 @@ template DocReformAbstraction() { std.process; import doc_reform.meta, + doc_reform.meta.metadoc_harvests_authors, + doc_reform.meta.metadoc_harvests_topics, doc_reform.meta.metadoc_summary, doc_reform.meta.metadoc_harvest, doc_reform.meta.metadoc_from_src, @@ -147,7 +149,7 @@ template DocReformAbstraction() { ~ ":" ~ _st.second.to!string; return _time; } - auto conf_make_meta() { // TODO meld with all make instructions + auto conf_make_meta() { return _make_and_meta_struct; } auto has() { diff --git a/src/doc_reform/meta/metadoc_harvest.d b/src/doc_reform/meta/metadoc_harvest.d index 26f2b38..2a83814 100644 --- a/src/doc_reform/meta/metadoc_harvest.d +++ b/src/doc_reform/meta/metadoc_harvest.d @@ -2,7 +2,7 @@ module doc_reform.meta.metadoc_harvest; template DocReformMetaDocHarvest() { auto DocReformMetaDocHarvest(T,H)( T doc_matters, - H harvest, + H hvst, ) { import doc_reform.meta.defaults, @@ -21,19 +21,19 @@ template DocReformMetaDocHarvest() { mixin InternalMarkup; auto markup = InlineMarkup(); import doc_reform.output.paths_output; - auto pth_html = DocReformPathsHTML!()(doc_matters.output_path, doc_matters.src.language); - harvest.title = doc_matters.conf_make_meta.meta.title_full; - harvest.author = doc_matters.conf_make_meta.meta.creator_author; - harvest.author_surname = doc_matters.conf_make_meta.meta.creator_author_surname; - harvest.author_surname_fn = doc_matters.conf_make_meta.meta.creator_author_surname_fn; - harvest.author_arr = doc_matters.conf_make_meta.meta.creator_author_arr; - harvest.language_original = doc_matters.conf_make_meta.meta.original_language; - harvest.language = doc_matters.src.language; - harvest.uid = doc_matters.src.doc_uid; - 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; - harvest.path_html_scroll = pth_html.fn_scroll(doc_matters.src.filename); - harvest.path_html_seg = pth_html.fn_seg(doc_matters.src.filename, "toc"); - return harvest; + auto pth_html = DocReformPathsHTML!()(doc_matters.output_path, doc_matters.src.language); + hvst.harvest.title = doc_matters.conf_make_meta.meta.title_full; + hvst.harvest.author = doc_matters.conf_make_meta.meta.creator_author; + hvst.harvest.author_surname = doc_matters.conf_make_meta.meta.creator_author_surname; + hvst.harvest.author_surname_fn = doc_matters.conf_make_meta.meta.creator_author_surname_fn; + hvst.harvest.author_arr = doc_matters.conf_make_meta.meta.creator_author_arr; + hvst.harvest.language_original = doc_matters.conf_make_meta.meta.original_language; + hvst.harvest.language = doc_matters.src.language; + hvst.harvest.uid = doc_matters.src.doc_uid; + hvst.harvest.date_published = doc_matters.conf_make_meta.meta.date_published; + hvst.harvest.topic_register_arr = doc_matters.conf_make_meta.meta.classify_topic_register_arr; + hvst.harvest.path_html_scroll = pth_html.fn_scroll(doc_matters.src.filename); + hvst.harvest.path_html_seg = pth_html.fn_seg(doc_matters.src.filename, "toc"); + return hvst.harvest; } } diff --git a/src/doc_reform/meta/metadoc_harvests_authors.d b/src/doc_reform/meta/metadoc_harvests_authors.d new file mode 100644 index 0000000..d780221 --- /dev/null +++ b/src/doc_reform/meta/metadoc_harvests_authors.d @@ -0,0 +1,255 @@ +module doc_reform.meta.metadoc_harvests_authors; + import + std.algorithm, + std.array, + std.exception, + std.regex, + std.stdio, + std.string, + std.conv : to; + import + doc_reform.meta.defaults, + doc_reform.meta.rgx; + mixin DocReformHarvest; + mixin InternalMarkup; + mixin DocReformRgxInit; +template DocReformMetaDocHarvestsAuthors() { + auto mkup = InlineMarkup(); + void DocReformMetaDocHarvestsAuthors(H,O)( + H harvests, + O _opt_action, + ) { + string[] authors = []; + authors ~= format(q"┃ + + + + +Metadata Harvest - Authors + + + + + + + + + + + + + +

Metadata Harvest - Authors (output organised by language & filetype)

+

[ HOME ] also see Metadata Harvest - Topics

+

+
+

English   

+
+

ABCDEFGHIJKLMNOPQRSTUVWXYZ,  +┃") ~ "\n"; + string[string] _au; + string[] _auth_date_title; + string[] _author_date_title; + string _prev_auth = ""; + char _prev_k = "_".to!char; + foreach(doc_harvest; + harvests + .multiSort!( + "toUpper(a.author_surname_fn) < toUpper(b.author_surname_fn)", + "a.date_published < b.date_published", + "a.title < b.title", + SwapStrategy.unstable + ) + ) { + if (doc_harvest.author_surname_fn != _prev_auth) { + _au[doc_harvest.author_surname_fn] + = format(q"┃

%s

%s "%s" [%s]

┃", + doc_harvest.author_surname, + doc_harvest.author_surname_fn, + (doc_harvest.date_published.length > 0) + ? doc_harvest.date_published : "", + "url", + doc_harvest.title, + doc_harvest.language, + ); + _prev_auth = doc_harvest.author_surname_fn; + } else { + _au[doc_harvest.author_surname_fn] + ~= format(q"┃

%s "%s" [%s]

┃", + (doc_harvest.date_published.length > 0) + ? doc_harvest.date_published : "", + "url", + doc_harvest.title, + doc_harvest.language, + ); + } + _author_date_title ~= format(q"┃%s %s "%s" [%s]┃", + doc_harvest.author_surname_fn, + (doc_harvest.date_published.length > 0) + ? "(" ~ doc_harvest.date_published ~ ")" : "", + doc_harvest.title, + doc_harvest.language, + ); + } + foreach (k; _au.keys.sort) { + if (k.toUpper.to!(char[])[0] != _prev_k) { + authors ~= format(q"┃

%s

┃", + k.toUpper.to!(char[])[0], + k.toUpper.to!(char[])[0], + ); + _prev_k = k.toUpper.to!(char[])[0]; + } + authors ~= _au[k]; + } + authors + ~= format(q"┃ +
+ + + + + + + + +┃") ~ "\n"; + try { + auto f = File("authors.html", "w"); + foreach (o; authors) { + f.writeln(o); + } + } catch (ErrnoException ex) { + // Handle error + } + if (_opt_action.verbose + || _opt_action.very_verbose + ) { + foreach(_adt; _author_date_title.sort) { + writeln(_adt); + } + } + } +} diff --git a/src/doc_reform/meta/metadoc_harvests_topics.d b/src/doc_reform/meta/metadoc_harvests_topics.d new file mode 100644 index 0000000..f0aed57 --- /dev/null +++ b/src/doc_reform/meta/metadoc_harvests_topics.d @@ -0,0 +1,408 @@ +module doc_reform.meta.metadoc_harvests_topics; + import + std.algorithm, + std.array, + std.exception, + std.regex, + std.stdio, + std.string, + std.conv : to; + import + doc_reform.meta.defaults, + doc_reform.meta.rgx; + mixin DocReformHarvest; + mixin InternalMarkup; + mixin DocReformRgxInit; +template DocReformMetaDocHarvestsTopics() { + auto mkup = InlineMarkup(); + void DocReformMetaDocHarvestsTopics(H,O)( + H hvst, + O _opt_action, + ) { + auto min_repeat_number = 42; + string[] _document_topic_register; + string[] _topic_register; + string[] _sub_topic_register; + string[] topics = []; + string _auth = ""; + foreach(k, doc_harvest; hvst.harvests) { + _topic_register = []; + foreach(topic; doc_harvest.topic_register_arr.sort) { + _sub_topic_register = []; + string _spaces; + string[] subject_tree = topic.split(mkup.sep); + switch (subject_tree.length) { + case 1: + hvst.subject_trees[subject_tree[0]]["_a"]["_a"]["_a"] ~= doc_harvest; + break; + case 2: + hvst.subject_trees[subject_tree[0]][subject_tree[1]]["_a"]["_a"] ~= doc_harvest; + break; + case 3: + hvst.subject_trees[subject_tree[0]][subject_tree[1]][subject_tree[2]]["_a"] ~= doc_harvest; + break; + case 4: + hvst.subject_trees[subject_tree[0]][subject_tree[1]][subject_tree[2]][subject_tree[3]] ~= doc_harvest; + break; + default: + break; + } + _topic_register ~= _sub_topic_register.join("\n"); + } + 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; + _document_topic_register ~= format( + "\"%s\", %s%s\n%s", + doc_harvest.title, + doc_harvest.author, + (doc_harvest.date_published.length > 0) ? " (" ~ doc_harvest.date_published ~ ")" : "", + _topic_register.sort!("toUpper(a) < toUpper(b)", SwapStrategy.unstable).release.join("\n"), + ); + } + topics ~= format(q"┃ + + + +Metadata Harvest - Topics + + + + + + + + + + + + + +

Metadata Harvest - Topics (output organised by language & filetype)

+

[ HOME ] also see Metadata Harvest - Authors

+

ABCDEFGHIJKLMNOPQRSTUVWXYZ,  +

+
+

English   

+
+┃") ~ "\n"; + char _prev_k = "_".to!char; + int _kn; + foreach(k0; + hvst.subject_trees.keys + .sort!("toUpper(a) < toUpper(b)", SwapStrategy.unstable) + ) { + if (k0.toUpper.to!(char[])[0] != _prev_k) { + topics ~= format(q"┃

%s

┃", + k0.toUpper.to!(char[])[0], + k0.toUpper.to!(char[])[0], + ); + _prev_k = k0.toUpper.to!(char[])[0]; + } + if (k0 != "_a") { + topics ~= format(q"┃

%s

┃", + k0, k0,) ~ "\n"; + if (_opt_action.very_verbose) { + writeln("", k0); + } + if ("_a" in hvst.subject_trees[k0]) { + foreach (t_a_; + hvst.subject_trees[k0]["_a"]["_a"]["_a"] + .multiSort!("toUpper(a.title) < toUpper(b.title)", "a.author < b.author", SwapStrategy.unstable) + ) { + _auth = []; + if (t_a_.author_arr.length < 2) { + _auth = format(q"┃ %s┃", + t_a_.author_surname, + t_a_.author, + ); + } else { + foreach (a; t_a_.author_arr) { + _auth ~= format(q"┃ %s,┃", + t_a_.author_surname, + a, + ); + } + } + topics ~= format(q"┃

"%s" -%s┃", + "url", + t_a_.title, + _auth, + ) ~ "\n"; + if (_opt_action.very_verbose) { + writeln("- ", t_a_.title, " - ", t_a_.author); + } + } + } + foreach(k1; + hvst.subject_trees[k0].keys + .sort!("toUpper(a) < toUpper(b)", SwapStrategy.unstable) + ) { + if (k1 != "_a") { + topics ~= format(q"┃

%s

┃", + k1, k1,) ~ "\n"; + if (_opt_action.very_verbose) { + writeln(" ", k1); + } + if ("_a" in hvst.subject_trees[k0][k1]) { + foreach (t_a_; + hvst.subject_trees[k0][k1]["_a"]["_a"] + .multiSort!("toUpper(a.title) < toUpper(b.title)", "a.author < b.author", SwapStrategy.unstable) + ) { + _auth = []; + if (t_a_.author_arr.length < 2) { + _auth = format(q"┃ %s┃", + t_a_.author_surname, + t_a_.author, + ); + } else { + foreach (a; t_a_.author_arr) { + _auth ~= format(q"┃ %s,┃", + t_a_.author_surname, + a, + ); + } + } + topics ~= format(q"┃

%s -%s┃", + "url", + t_a_.title, + _auth, + ) ~ "\n"; + if (_opt_action.very_verbose) { + writeln(" - ", t_a_.title, " - ", t_a_.author); + } + } + } + } + foreach(k2; + hvst.subject_trees[k0][k1].keys + .sort!("toUpper(a) < toUpper(b)", SwapStrategy.unstable) + ) { + if (k2 != "_a") { + topics ~= format(q"┃

%s

┃", + k2, k2,) ~ "\n"; + if (_opt_action.very_verbose) { + writeln(" ", k2); + } + if ("_a" in hvst.subject_trees[k0][k1][k2]) { + foreach (t_a_; + hvst.subject_trees[k0][k1][k2]["_a"] + .multiSort!("toUpper(a.title) < toUpper(b.title)", "a.author < b.author", SwapStrategy.unstable) + ) { + _auth = []; + if (t_a_.author_arr.length < 2) { + _auth = format(q"┃ %s┃", + t_a_.author_surname, + t_a_.author, + ); + } else { + foreach (a; t_a_.author_arr) { + _auth ~= format(q"┃ %s,┃", + t_a_.author_surname, + a, + ); + } + } + topics ~= format(q"┃

%s -%s┃", + "url", + t_a_.title, + _auth, + ) ~ "\n"; + if (_opt_action.very_verbose) { + writeln(" - ", t_a_.title, " - ", t_a_.author); + } + } + } + } + foreach(k3; + hvst.subject_trees[k0][k1][k2].keys + .sort!("toUpper(a) < toUpper(b)", SwapStrategy.unstable) + ) { + if (k3 != "_a") { + topics ~= format(q"┃

%s

┃", + k3, k3,) ~ "\n"; + if (_opt_action.very_verbose) { + writeln(" ", k3); + } + { + foreach (t_a_; + hvst.subject_trees[k0][k1][k2][k3] + .multiSort!("toUpper(a.title) < toUpper(b.title)", "a.author < b.author", SwapStrategy.unstable) + ) { + _auth = []; + if (t_a_.author_arr.length < 2) { + _auth = format(q"┃%s┃", + t_a_.author_surname, + t_a_.author, + ); + } else { + foreach (a; t_a_.author_arr) { + _auth ~= format(q"┃ %s,┃", + t_a_.author_surname, + a, + ); + } + } + topics ~= format(q"┃

%s -%s┃", + "url", + t_a_.title, + _auth, + ) ~ "\n"; + if (_opt_action.very_verbose) { + writeln(" - ", t_a_.title, " - ", t_a_.author); + } + } + } + } + } + } + } + } + } + topics + ~= format(q"┃ +


+ + + + + + + + +┃") ~ "\n"; + try { + auto f = File("topics.html", "w"); + foreach (o; topics) { + f.writeln(o); + } + } catch (ErrnoException ex) { + // Handle error + } + } +} diff --git a/src/doc_reform/output/paths_output.d b/src/doc_reform/output/paths_output.d index 305aa17..c11d31e 100644 --- a/src/doc_reform/output/paths_output.d +++ b/src/doc_reform/output/paths_output.d @@ -172,7 +172,7 @@ template DocReformPathsEPUB() { Po output_pth_root, Lng lng, ) { - auto out_pth = DocReformOutPaths!()( output_pth_root, lng); + auto out_pth = DocReformOutPaths!()(output_pth_root, lng); string base_dir = "epub"; struct _PathsStruct { string base() { @@ -276,9 +276,6 @@ template DocReformPathsODT() { string base_pth() { // dir will contain odt document file (also debug file tree) return asNormalizedPath((out_pth.output_base).chainPath(base_dir)).array; } - // string base_filename() { - // return doc_matters.src.filename_base; - // } string odt_file() { return asNormalizedPath(base_pth.chainPath(doc_matters.src.filename_base ~ ".odt")).array; } diff --git a/src/doc_reform/source/paths_source.d b/src/doc_reform/source/paths_source.d index 6efca00..bf4ee55 100644 --- a/src/doc_reform/source/paths_source.d +++ b/src/doc_reform/source/paths_source.d @@ -200,13 +200,6 @@ template PathMatters() { return _uid; } string docname_composite_unique_per_src_doc() { - /+ - z pod name if any + src filename + lng code - filename ~ "." ~ lng - * unique per src doc - used by - - sqlite discrete index (multilingual, each language of a document) - +/ string _fn; if (pod_name_with_path.baseName == filename_base) { _fn = filename_base ~ mkup.sep ~ filename_extension ~ mkup.sep ~ lng; -- cgit v1.2.3