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 } } }