aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/doc_reform/io_out/metadata.d
diff options
context:
space:
mode:
authorRalph Amissah <ralph.amissah@gmail.com>2019-12-13 09:09:24 -0500
committerRalph Amissah <ralph.amissah@gmail.com>2020-01-13 16:06:43 -0500
commit0c4b3cb3707c3b16cd171620427e651d71182813 (patch)
tree2027a8f9449eab7b2b878ee9f1554a417563b73f /src/doc_reform/io_out/metadata.d
parentharvest topics, name hashtag level names (diff)
present per document metadata
Diffstat (limited to 'src/doc_reform/io_out/metadata.d')
-rw-r--r--src/doc_reform/io_out/metadata.d385
1 files changed, 385 insertions, 0 deletions
diff --git a/src/doc_reform/io_out/metadata.d b/src/doc_reform/io_out/metadata.d
new file mode 100644
index 0000000..f3b6176
--- /dev/null
+++ b/src/doc_reform/io_out/metadata.d
@@ -0,0 +1,385 @@
+module spine.io_out.metadata;
+template outputMetadata() {
+ void outputMetadata(T)( T doc_matters) @safe {
+ import std.file;
+ import std.format;
+ import spine.io_out;
+ mixin InternalMarkup;
+ string[] metadata_;
+string theme_dark_0 = format(q"┃
+ body {
+ color : #CCCCCC;
+ background : #000000;
+ background-color : #000000;
+ }
+ a:link {
+ color : #FFFFFF;
+ text-decoration : none;
+ }
+ a:visited {
+ color : #999999;
+ text-decoration : none;
+ }
+ a:hover {
+ color : #000000;
+ background-color : #555555;
+ }
+ a:hover img {
+ background-color : #000000;
+ }
+ a:active {
+ color : #888888;
+ text-decoration : underline;
+ }
+┃");
+string theme_light_0 = format(q"┃
+ body {
+ color : #000000;
+ background : #FFFFFF;
+ background-color : #FFFFFF;
+ }
+ a:link {
+ color : #003399;
+ text-decoration : none;
+ }
+ a:visited {
+ color : #003399;
+ text-decoration : none;
+ }
+ a:hover {
+ color : #000000;
+ background-color : #f9f9aa;
+ }
+ a:hover img {
+ background-color : #FFFFFF;
+ }
+ a:active {
+ color : #003399;
+ text-decoration : underline;
+ }
+┃");
+string theme_dark_1 = format(q"┃
+ h1 {
+ color : #FFFFFF;
+ background : #000000;
+ }
+ p.letter {
+ color : #FFFFFF;
+ background : #333333;
+ }
+┃");
+string theme_light_1 = format(q"┃
+ h1 {
+ color : #FFFFFF;
+ background : #000088;
+ }
+ p.letter {
+ color : #FFFFFF;
+ background : #880000;
+ }
+┃");
+ metadata_ ~= format(q"┃<!DOCTYPE html>
+<html>
+<head>
+<meta charset="utf-8">
+<title>Metadata Harvest - Topics</title>
+<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
+<meta name="dc.title" content= "metadata harvest, Authors & Topics - information Structuring Universe, Structured information Serialised Units" />
+<meta name="dc.subject" content= "document structuring, ebook, publishing, PDF, LaTeX, XML, ODF, SQL, postgresql, sqlite, electronic book, electronic publishing, electronic document, electronic citation, data structure, citation systems, granular search, digital library" />
+<meta name="generator" content="spine" />
+<link rel="generator" href="http://sisudoc.org" />
+<link href="./css/harvest.css" rel="stylesheet">
+<style TYPE="text/css">
+/* spine harvest css default stylesheet */%s
+ .norm, .bold {
+ line-height : 150%%;
+ margin-left : 1em;
+ margin-right : 2em;
+ margin-top : 10px;
+ margin-bottom : 0px;
+ text-indent : 0mm;
+ }
+ p, h0, h1, h2, h3, h4, h5, h6, h7 {
+ display : block;
+ font-family : verdana, arial, georgia, tahoma, sans-serif, helvetica, times, roman;
+ font-size : 100%%;
+ font-weight : normal;
+ line-height : 150%%;
+ /* text-align : justify; */
+ margin-left : 1em;
+ text-indent : 0mm;
+ margin-top : 2px;
+ margin-bottom : 2px;
+ margin-right : 6px;
+ text-align : left;
+ }
+ h0, h1, h2, h3, h4, h5, h6, h7 { text-shadow: .2em .2em .3em #999999; }
+ h1 {
+ font-size : 120%%;
+ font-weight : bold;
+ color : #FFFFFF;
+ background : #000088;
+ margin-left : 0em;
+ }
+ p.work {
+ font-size : 80%%;
+ margin-left : 5em;
+ margin-top : 0px;
+ margin-bottom : 0px;
+ margin-right : 6px;
+ text-align : left;
+ }
+ p.author {
+ font-size : 100%%;
+ margin-left : 2em;
+ margin-top : 0px;
+ margin-bottom : 0px;
+ margin-right : 6px;
+ text-align : left;
+ }
+ p.publication {
+ font-size : 80%%;
+ margin-left : 4em;
+ margin-top : 0px;
+ margin-bottom : 0px;
+ margin-right : 6px;
+ text-align : left;
+ }
+ p.letter {
+ font-weight : bold;
+ font-size : 60%%;
+ margin-left : 1em;
+ margin-top : 0px;
+ margin-bottom : 0px;
+ margin-right : 6px;
+ text-align : left;
+ }
+ p.lev0 {
+ font-size : 120%%;
+ margin-left : 1em;
+ }
+ p.lev1 {
+ font-size : 110%%;
+ margin-left : 2em;
+ }
+ p.lev2 {
+ font-size : 100%%;
+ margin-left : 3em;
+ }
+ p.lev3 {
+ font-size : 90%%;
+ margin-left : 4em;
+ }
+ p.lev4 {
+ font-size : 80%%;
+ margin-left : 5em;
+ }
+ p.lev5 {
+ font-size : 80%%;
+ margin-left : 6em;
+ }%s
+</style>
+<link rel="shortcut icon" href="../_sisu/image/rb7.ico" />
+</head>
+┃",
+ doc_matters.opt.action.css_theme_default ? theme_light_0 : theme_dark_0,
+ doc_matters.opt.action.css_theme_default ? theme_light_1 : theme_dark_1,
+) ~ "\n";
+ void metadata_write_output(M)(M doc_matters, string[] metadata_) @trusted {
+ auto pth_html = spinePathsHTML!()(doc_matters.output_path, doc_matters.src.language);
+ try {
+ if (!exists(pth_html.base)) {
+ pth_html.base.mkdirRecurse;
+ }
+ auto f = File(pth_html.fn_scroll("metadata." ~ doc_matters.src.filename), "w");
+ foreach (o; metadata_) {
+ f.writeln(o);
+ }
+ } catch (ErrnoException ex) {
+ // Handle error
+ }
+ if (!(doc_matters.opt.action.quiet)) {
+ writeln(" ", pth_html.fn_scroll("metadata." ~ doc_matters.src.filename));
+ }
+ }
+ static auto mkup = InlineMarkup();
+ if (doc_matters.opt.action.debug_do) {
+ writeln(doc_matters.src.filename_base);
+ writeln("Title: ", doc_matters.conf_make_meta.meta.title_full);
+ writeln(" Author: ", doc_matters.conf_make_meta.meta.creator_author);
+ writeln(" Published: ", doc_matters.conf_make_meta.meta.date_published);
+ writeln(" Copyright: ", doc_matters.conf_make_meta.meta.rights_copyright);
+ writeln(" License: ", doc_matters.conf_make_meta.meta.rights_license);
+ if (doc_matters.conf_make_meta.meta.classify_topic_register_arr.length > 0) {
+ foreach (topic; doc_matters.conf_make_meta.meta.classify_topic_register_arr.sort!("toUpper(a) < toUpper(b)", SwapStrategy.unstable)) {
+ string[] subject_tree = topic.split(mkup.sep);
+ if (subject_tree.length > 0) { writeln(" ", subject_tree[0]); }
+ if (subject_tree.length > 1) { writeln(" ", subject_tree[1]); }
+ if (subject_tree.length > 2) { writeln(" ", subject_tree[2]); }
+ if (subject_tree.length > 3) { writeln(" ", subject_tree[3]); }
+ if (subject_tree.length > 4) { writeln(" ", subject_tree[4]); }
+ }
+ }
+ }
+ auto pth_html = spinePathsHTML!()(doc_matters.output_path, doc_matters.src.language);
+ auto pth_epub = spinePathsEPUB!()(doc_matters.output_path, doc_matters.src.language);
+ auto pth_pod = spinePathsPods!()(doc_matters);
+ metadata_ ~= format(q"┃<body lang="en" xml:lang="en">
+ <a name="top" id="top"></a>
+ <a name="up" id="up"></a>
+ <a name="start" id="start"></a>
+ ┃");
+ if (doc_matters.opt.action.harvest_link) {
+ metadata_ ~= format(q"┃<p>[<a href="../../index.html">&nbsp;HOME&nbsp;</a>] Metadata Harvest
+ [<a href="../../authors.html">&nbsp;Authors&nbsp;</a>]
+ [<a href="../../topics.html">&nbsp;Topics&nbsp;</a>]</p>
+ <hr />
+ ┃");
+ } else {
+ metadata_ ~= format(q"┃<p>[<a href="../../index.html">&nbsp;HOME&nbsp;</a>]
+ <hr />
+ ┃");
+ }
+ if (!(doc_matters.conf_make_meta.meta.title_full.empty)) {
+ metadata_ ~= "<p class=\"lev0\">Title: <b><a href=\"" ~ doc_matters.src.filename_base ~ "/toc.html\">" ~ doc_matters.conf_make_meta.meta.title_full ~ "</a></b></p>";
+ } else if (doc_matters.opt.action.debug_do || doc_matters.opt.action.very_verbose) {
+ writeln("ERROR no Title information provided in document header ", doc_matters.src.filename_base);
+ }
+ if (!(doc_matters.conf_make_meta.meta.creator_author.empty)) {
+ if (doc_matters.opt.action.harvest_link) {
+ metadata_ ~= "<p class=\"lev1\">Author: <b><a href=\"../../authors.html#" ~ doc_matters.conf_make_meta.meta.creator_author_surname.translate([' ' : "_"]) ~ "\">"
+ ~ doc_matters.conf_make_meta.meta.creator_author ~ "</a></b></p>";
+ } else {
+ metadata_ ~= "<p class=\"lev1\">Author: <b>"
+ ~ doc_matters.conf_make_meta.meta.creator_author ~ "</b></p>";
+ }
+ } else if (doc_matters.opt.action.debug_do || doc_matters.opt.action.very_verbose) {
+ writeln("ERROR no Author information provided in document header ", doc_matters.src.filename_base);
+ }
+ metadata_ ~= "<p class=\"lev1\">Published: " ~ doc_matters.conf_make_meta.meta.date_published ~ "</p>";
+ if (!(doc_matters.conf_make_meta.meta.rights_copyright.empty)) {
+ metadata_ ~= "<p class=\"lev1\">Copyright: " ~ doc_matters.conf_make_meta.meta.rights_copyright ~ "</p>";
+ } else if (doc_matters.opt.action.debug_do || doc_matters.opt.action.very_verbose) {
+ writeln("WARNING no Copyright information provided in document header ", doc_matters.src.filename_base);
+ }
+ if (!(doc_matters.conf_make_meta.meta.rights_license.empty)) {
+ metadata_ ~= "<p class=\"lev1\">License: " ~ doc_matters.conf_make_meta.meta.rights_license ~ "</p>";
+ } else if (doc_matters.opt.action.debug_do || doc_matters.opt.action.very_verbose) {
+ writeln("WARNING no License information provided in document header ", doc_matters.src.filename_base);
+ }
+ if (!(doc_matters.conf_make_meta.meta.notes_summary.empty)) {
+ metadata_ ~= "<hr /><p class=\"lev0\">Summary:</p><p class=\"lev1\">" ~ doc_matters.conf_make_meta.meta.notes_summary ~ "</p>";
+ } else if (doc_matters.opt.action.debug_do) {
+ writeln("WARNING no summary of text provided in document header ", doc_matters.src.filename_base);
+ }
+ if (doc_matters.conf_make_meta.meta.classify_topic_register_arr.length > 0) {
+ metadata_ ~= "<hr /><p class=\"lev0\">Topics:</p>";
+ string[] _top = ["", "", "", "", ""];
+ foreach (topic; doc_matters.conf_make_meta.meta.classify_topic_register_arr.sort!("toUpper(a) < toUpper(b)", SwapStrategy.unstable)) {
+ string[] subject_tree = topic.split(mkup.sep);
+ if (subject_tree.length > 0) {
+ if (subject_tree[0] != _top[0]) {
+ _top[0] = subject_tree[0];
+ if (doc_matters.opt.action.harvest_link) {
+ metadata_ ~=
+ "<p class=\"lev1\"><a href=\"../../topics.html#"
+ ~ subject_tree[0].translate([' ' : "_"]) ~ "\">"
+ ~ subject_tree[0]
+ ~ "</a></p>";
+ } else {
+ metadata_ ~=
+ "<p class=\"lev1\">" ~ subject_tree[0] ~ "</p>";
+ }
+ }
+ if (subject_tree.length > 1) {
+ if (subject_tree[1] != _top[1]) {
+ _top[1] = subject_tree[1];
+ _top[2] = ""; _top[3] = ""; _top[4] = "";
+ if (doc_matters.opt.action.harvest_link) {
+ metadata_ ~=
+ "<p class=\"lev2\"><a href=\"../../topics.html#"
+ ~ subject_tree[0].translate([' ' : "_"]) ~ "."
+ ~ subject_tree[1].translate([' ' : "_"]) ~ "\">"
+ ~ subject_tree[1]
+ ~ "</a></p>";
+ } else {
+ metadata_ ~=
+ "<p class=\"lev2\">" ~ subject_tree[1] ~ "</p>";
+ }
+ }
+ if (subject_tree.length > 2) {
+ if (subject_tree[2] != _top[2]) {
+ _top[2] = subject_tree[2];
+ _top[3] = ""; _top[4] = "";
+ if (doc_matters.opt.action.harvest_link) {
+ metadata_ ~=
+ "<p class=\"lev3\"><a href=\"../../topics.html#"
+ ~ subject_tree[0].translate([' ' : "_"]) ~ "."
+ ~ subject_tree[1].translate([' ' : "_"]) ~ "."
+ ~ subject_tree[2].translate([' ' : "_"]) ~ "\">"
+ ~ subject_tree[2]
+ ~ "</a></p>";
+ } else {
+ metadata_ ~=
+ "<p class=\"lev3\">" ~ subject_tree[2] ~ "</p>";
+ }
+ }
+ if (subject_tree.length > 3) {
+ if (subject_tree[3] != _top[3]) {
+ _top[3] = subject_tree[3];
+ _top[4] = "";
+ if (doc_matters.opt.action.harvest_link) {
+ metadata_ ~=
+ "<p class=\"lev4\"><a href=\"../../topics.html#"
+ ~ subject_tree[0].translate([' ' : "_"]) ~ "."
+ ~ subject_tree[1].translate([' ' : "_"]) ~ "."
+ ~ subject_tree[2].translate([' ' : "_"]) ~ "."
+ ~ subject_tree[3].translate([' ' : "_"]) ~ "\">"
+ ~ subject_tree[3]
+ ~ "</a></p>";
+ } else {
+ metadata_ ~=
+ "<p class=\"lev4\">" ~ subject_tree[3] ~ "</p>";
+ }
+ }
+ if (subject_tree.length > 4) {
+ if (subject_tree[4] != _top[4]) {
+ _top[4] = subject_tree[4];
+ if (doc_matters.opt.action.harvest_link) {
+ metadata_ ~=
+ "<p class=\"lev5\"><a href=\"../../topics.html#"
+ ~ subject_tree[0].translate([' ' : "_"]) ~ "."
+ ~ subject_tree[1].translate([' ' : "_"]) ~ "."
+ ~ subject_tree[2].translate([' ' : "_"]) ~ "."
+ ~ subject_tree[3].translate([' ' : "_"]) ~ "."
+ ~ subject_tree[4].translate([' ' : "_"]) ~ "\">"
+ ~ subject_tree[4]
+ ~ "</a></p>";
+ } else {
+ metadata_ ~=
+ "<p class=\"lev5\">" ~ subject_tree[4] ~ "</p>";
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ } else if (doc_matters.opt.action.debug_do) {
+ writeln("WARNING no topic_register classification of text provided in document header ", doc_matters.src.filename_base);
+ }
+ metadata_ ~= "<hr /><p class=\"lev1\">source: " ~ doc_matters.src.filename_base ~ "</p>";
+ metadata_ ~= "<p class=\"lev1\">markup source: [<a href=\"../../" ~ pth_pod.internal_base ~ "/" ~ doc_matters.src.filename_base ~ ".zip\">"
+ ~ "&nbsp;zipped&nbsp;pod&nbsp;</a>] "
+ ~ "[<a href=\"../../" ~ pth_pod.internal_base ~ "/" ~ doc_matters.src.filename_base ~ "/\">"
+ ~ "&nbsp;pod&nbsp;tree&nbsp;</a>]</p>";
+ metadata_ ~= "<p class=\"lev1\">outputs: [<a href=\"" ~ doc_matters.src.filename_base ~ ".html\">"
+ ~ "&nbsp;html&nbsp;scroll&nbsp;</a>] "
+ ~ "[<a href=\"" ~ doc_matters.src.filename_base ~ "/toc.html\">"
+ ~ "&nbsp;html&nbsp;seg&nbsp;</a>]"
+ ~ "[<a href=\"../../" ~ pth_epub.internal_base ~ "/" ~ doc_matters.src.filename_base ~ "." ~ doc_matters.src.language ~ ".epub\">"
+ ~ "&nbsp;epub&nbsp;</a>]</p>";
+ metadata_write_output(doc_matters, metadata_);
+ }
+}