blob: 87dfb373e9d8103e41f2835805355099615009ca (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
|
{
html,
data,
lib,
...
}: let
attrValsOpt = attrs: attrSet:
lib.attrVals (builtins.filter (attr: lib.hasAttr attr attrSet) attrs)
attrSet;
concatStringsPrefix = prefix: strings:
lib.concatStrings (builtins.map (string: prefix + string) strings);
concatStringsSuffix = suffix: strings:
lib.concatStrings (builtins.map (string: string + suffix) strings);
format = publication:
with html;
with publication;
{
inherit id title url year abstract cite;
}
// (let
authorsOther =
lib.remove "${data.basics.name.first} ${data.basics.name.last}"
(builtins.map (author: "${author.given} ${author.family}") author);
in
lib.optionalAttrs (authorsOther != []) {
authors = "With ${lib.concatStringsSep ", " authorsOther}";
})
// lib.optionalAttrs (publication ? note) {
note = publication.note;
}
// lib.optionalAttrs (publication ? container-title) {
published =
"In ${em container-title}"
+ concatStringsPrefix ", "
(attrValsOpt ["volume" "issue" "publisher"] publication);
}
// lib.optionalAttrs (publication ? event-title) {
published = "At ${em event-title}";
}
// lib.optionalAttrs (publication ? ISBN) {
isbn = "${small "ISBN"}: ${ISBN}";
}
// lib.optionalAttrs (publication ? ISSN) {
issn = "${small "ISSN"}: ${ISSN}";
}
// lib.optionalAttrs (publication ? DOI) {
doi = "${small "DOI"}: ${href "https://doi.org/${DOI}" (code DOI)}";
};
listPublications = collection: collectionTitle:
with html;
section {id = "Publications#${collectionTitle}";} [
(h2 collectionTitle)
(dl (for (sort.reverse.byPath ["issued" "date-parts"] collection)
(publication: let
formatted = format publication;
in
with formatted;
lines [
(dt {id = "Publications#${id}";}
"${href {target = "_blank";} url title} (${year})")
(dd [
(concatStringsSuffix ". "
(attrValsOpt ["authors" "note" "published" "isbn" "issn" "doi"]
formatted))
(details [
(summary "More")
(dl [
(dt "Abstract.")
(dd (blockquote abstract))
(dt "Cite.")
(let
citeWith = title: attr:
details [
(summary title)
(pre (code (lib.getAttr attr cite)))
];
in
dd [
(citeWith "BibLaTeX" "biblatex")
(citeWith "BibTeX" "bibtex")
(citeWith "CSL JSON" "csljson")
])
])
])
])
])))
];
in {
title = "Publications";
priority = 10;
body = with html;
lines [
(listPublications data.publications.selected "Selected works")
(listPublications (with data.publications; lib.subtractLists selected all) "Other works")
];
}
|