summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--publications.json23
-rwxr-xr-xwebserver.js33
2 files changed, 44 insertions, 12 deletions
diff --git a/publications.json b/publications.json
index aa30f17..03458ab 100644
--- a/publications.json
+++ b/publications.json
@@ -6,6 +6,18 @@
"pubs": [
{
"year": 2022,
+ "month": 9,
+ "authors": ["matthijs", "tom"],
+ "title": "CHAD: Combinatory Homomorphic Automatic Differentiation",
+ "journal": "TOPLAS",
+ "links": [
+ {"type": "doi", "id": "10.1145/3527634"},
+ {"type": "code", "url": "https://github.com/VMatthijs/CHAD"},
+ {"type": "arxiv", "id": "2103.15776"}
+ ]
+ },
+ {
+ "year": 2022,
"month": 7,
"authors": ["tom", "matthijs"],
"title": "Efficient Dual-Numbers Reverse AD via Well-Known Program Transformations",
@@ -17,17 +29,6 @@
},
{
"year": 2022,
- "month": 6,
- "authors": ["matthijs", "tom"],
- "title": "CHAD: Combinatory Homomorphic Automatic Differentiation",
- "preprint": "to be published in TOPLAS",
- "links": [
- {"type": "arxiv", "id": "2103.15776"},
- {"type": "code", "url": "https://github.com/VMatthijs/CHAD"}
- ]
- },
- {
- "year": 2022,
"month": 5,
"authors": ["tom", "matthijs"],
"title": "Dual-Numbers Reverse AD, Efficiently",
diff --git a/webserver.js b/webserver.js
index 6b3a172..f817016 100755
--- a/webserver.js
+++ b/webserver.js
@@ -104,18 +104,36 @@ function buildPublicationsHTML(info) {
for (const obj of info.pubs) {
if (res.length != 0) res += "\n\t\t\t";
+ const seen = new Map();
+
res += "<li>";
+
res += obj.year;
+ seen.set("year", true);
+
if ("month" in obj) res += "-" + padLeft(obj.month + "", 2, "0")
+ seen.set("month", true);
+
res += " ";
res += obj.authors.map(key => key in info.authors ? info.authors[key] : key).join(", ");
+ seen.set("authors", true);
+
res += ": &ldquo;" + obj.title + "&rdquo;.";
+ seen.set("title", true);
+
+ if ("journal" in obj) res += " In " + obj.journal + ".";
+ seen.set("journal", true);
+
if ("preprint" in obj) {
res += " Preprint";
if (typeof obj.preprint == "string") res += ", " + obj.preprint;
res += ".";
}
+ seen.set("preprint", true);
+
if ("note" in obj) res += " " + obj.note;
+ seen.set("note", true);
+
if ("links" in obj && obj.links.length > 0) {
res += " [";
const anchors = [];
@@ -125,7 +143,12 @@ function buildPublicationsHTML(info) {
case "arxiv":
name = "arxiv";
url = "https://arxiv.org/abs/" + link.id;
- break
+ break;
+
+ case "doi":
+ name = "doi";
+ url = "https://doi.org/" + link.id;
+ break;
case "code":
name = "code";
@@ -145,7 +168,15 @@ function buildPublicationsHTML(info) {
res += anchors.join(", ");
res += "]"
}
+ seen.set("links", true);
+
res += "</li>";
+
+ for (const key in obj) {
+ if (!seen.has(key)) {
+ throw new Error(`Key '${key}' unknown in publication`);
+ }
+ }
}
return res;