/+ - Name: SisuDoc Spine, Doc Reform [a part of] - Description: documents, structuring, processing, publishing, search - static content generator - Author: Ralph Amissah [ralph.amissah@gmail.com] - Copyright: (C) 2015 - 2024 Ralph Amissah, All Rights Reserved. - License: AGPL 3 or later: Spine (SiSU), a framework for document structuring, publishing and search Copyright (C) Ralph Amissah This program is free software: you can redistribute it and/or modify it under the terms of the GNU AFERO General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see [https://www.gnu.org/licenses/]. If you have Internet connection, the latest version of the AGPL should be available at these locations: [https://www.fsf.org/licensing/licenses/agpl.html] [https://www.gnu.org/licenses/agpl.html] - Spine (by Doc Reform, related to SiSU) uses standard: - docReform markup syntax - standard SiSU markup syntax with modified headers and minor modifications - docReform object numbering - standard SiSU object citation numbering & system - Homepages: [https://www.sisudoc.org] [https://www.doc-reform.org] - Git [https://git.sisudoc.org/] +/ module sisudoc.meta.metadoc_curate_authors; @safe: import std.algorithm, std.array, std.exception, std.regex, std.stdio, std.string, std.conv : to; import sisudoc.meta.defaults, sisudoc.meta.rgx; mixin spineCurateMetadata; mixin InternalMarkup; template spineMetaDocCuratesAuthors() { static auto mkup = InlineMarkup(); void spineMetaDocCuratesAuthors(H,M,O)( H curates, M _make_and_meta_struct, O _opt_action, ) { string inline_search_form(M)( M _make_and_meta_truct, ) { string o; string _form; if (_opt_action.html_link_search) { o = format(q"┃
┃", _make_and_meta_struct.conf.w_srv_cgi_action, (_make_and_meta_struct.conf.w_srv_db_sqlite_filename.empty) ? "" : "\n ", ); } else { o = ""; } return o; } 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; } a.lev0:hover { color : #FFFFFF; background-color : #000000; } a.lev1:hover { color : #FFFFFF; background : #333333; } a.lev2:hover { color : #FFFFFF; background : #555555; } a.lev3:hover { color : #FFFFFF; background : #777777; } a.lnkicon:link { text-decoration : none; } a.lnkicon:visited { text-decoration : none; } a.lnkicon:hover { font-size : 160%%; } a:hover img { background-color : #FFFFFF; } input, select, textarea { font-size : 150%%; } input { color : #FFFFFF; background-color : #777777; } ┃"); 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; } a.lev0:hover { color : #000000; background-color : #FFFFFF; } a.lev1:hover { color : #FFFFFF; background : #444444; } a.lev2:hover { background : #888888; } a.lev3:hover { background : #BBBBBB; } a.lnkicon:link { text-decoration : none; } a.lnkicon:visited { text-decoration : none; } a.lnkicon:hover { font-size : 160%%; } a:hover img { background-color : #FFFFFF; } input, select, textarea { font-size : 150%%; } input { color : #000000; background-color : #FFFFFF; } ┃"); string theme_dark_1 = format(q"┃ h1 { color : #FFFFFF; background : #000000; } p.letter { color : #FFFFFF; background : #333333; } p.lev0 { color : #FFFFFF; background : #000000; } p.lev1 { color : #FFFFFF; background : #333333; } p.lev2 { background : #555555; } p.lev3 { background : #777777; } p.lev4 { background : #AAAAAA; } p.lev5 { } ┃"); string theme_light_1 = format(q"┃ h1 { color : #FFFFFF; background : #1A3A7A; } p.letter { color : #FFFFFF; background : #1A3A7A; } p.lev0 { color : #FFFFFF; background : #000000; } p.lev1 { color : #FFFFFF; background : #444444; } p.lev2 { background : #888888; } p.lev3 { background : #BBBBBB; } p.lev4 { background : #EEEEEE; } p.lev5 { } ┃"); string[] authors = []; authors ~= format(q"┃ ⌘ Curated metadata - 🖋 Authors

⌘ Curated metadata - 🖋 Authors (output organised by language & filetype)

[ ⟰ HOME  |  ≅ Collection ] [ ⌘ Curated metadata - ⌘ Topics ]

%s


ABCDEFGHIJKLMNOPQRSTUVWXYZ,  ┃", _opt_action.css_theme_default ? theme_light_0 : theme_dark_0, _opt_action.css_theme_default ? theme_light_1 : theme_dark_1, inline_search_form(_make_and_meta_struct), ) ~ "\n"; string[string] _au; string[] _auth_date_title; string[] _author_date_title; string _prev_auth = ""; char _prev_k = "_".to!char; foreach(doc_curate; curates .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_curate.author_surname_fn != _prev_auth) { _au[doc_curate.author_surname_fn] = format(q"┃

%s

%s "%s" [ %s ]

┃", doc_curate.author_surname.translate([' ' : "_"]), doc_curate.author_surname_fn, (doc_curate.date_published.length > 0) ? doc_curate.date_published : "", doc_curate.path_html_segtoc, doc_curate.title, doc_curate.path_html_metadata, doc_curate.language, ); _prev_auth = doc_curate.author_surname_fn; } else { _au[doc_curate.author_surname_fn] ~= format(q"┃

%s "%s" [ %s ]

┃", (doc_curate.date_published.length > 0) ? doc_curate.date_published : "", doc_curate.path_html_segtoc, doc_curate.title, doc_curate.path_html_metadata, doc_curate.language, ); } _author_date_title ~= format(q"┃%s %s "%s" [ %s ]%s┃", doc_curate.author_surname_fn, (doc_curate.date_published.length > 0) ? "(" ~ doc_curate.date_published ~ ")" : "", doc_curate.title, doc_curate.path_html_metadata, doc_curate.language, (_opt_action.show_curate_authors) ? "\n " ~ doc_curate.path_abs_html_scroll : "", ); } 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"; import sisudoc.io_out.paths_output; auto out_pth = spinePathsHTML!()(_make_and_meta_struct.conf.output_path, ""); try { auto f = File(out_pth.curate("authors.html"), "w"); foreach (o; authors) { f.writeln(o); } } catch (ErrnoException ex) { // Handle error } if (_opt_action.show_curate_authors) { foreach(_adt; _author_date_title.sort) { writeln(_adt); } } } }