summaryrefslogtreecommitdiff
path: root/tex/context/base/publ-tra.lua
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/publ-tra.lua')
-rw-r--r--tex/context/base/publ-tra.lua241
1 files changed, 203 insertions, 38 deletions
diff --git a/tex/context/base/publ-tra.lua b/tex/context/base/publ-tra.lua
index 90bae67e9..98c81d800 100644
--- a/tex/context/base/publ-tra.lua
+++ b/tex/context/base/publ-tra.lua
@@ -10,11 +10,14 @@ local sortedhash = table.sortedhash
local tracers = { }
publications.tracers = tracers
+local datasets = publications.datasets
local context = context
-local NC, NR, bold = context.NC, context.NR, context.bold
+local NC, NR = context.NC, context.NR
+local bold = context.bold
+local darkgreen, darkred, darkblue = context.darkgreen, context.darkred, context.darkblue
-publications.tracers.fields = table.sorted {
+local fields = table.sorted {
"abstract",
"address",
"annotate",
@@ -63,7 +66,7 @@ publications.tracers.fields = table.sorted {
"revision",
}
-publications.tracers.citevariants = table.sorted {
+local citevariants = table.sorted {
"author",
"authoryear",
"authoryears",
@@ -80,52 +83,214 @@ publications.tracers.citevariants = table.sorted {
"num",
}
-publications.tracers.listvariants = table.sorted {
+local listvariants = table.sorted {
"author",
"editor",
"artauthor",
}
-publications.tracers.categories = table.sorted {
- "article",
- "book",
- "booklet",
- "conference",
- "inbook",
- "incollection",
- "inproceedings",
- "manual",
- "mastersthesis",
- "misc",
- "phdthesis",
- "proceedings",
- "techreport",
- "unpublished",
+-- local categories = table.sorted {
+-- "article",
+-- "book",
+-- "booklet",
+-- "conference",
+-- "inbook",
+-- "incollection",
+-- "inproceedings",
+-- "manual",
+-- "mastersthesis",
+-- "misc",
+-- "phdthesis",
+-- "proceedings",
+-- "techreport",
+-- "unpublished",
+-- }
+
+local categories = {
+ article = {
+ required = { "author", "title", "journal", "year" },
+ optional = { "volume", "number", "pages", "month", "note" },
+ },
+ book = {
+ required = { { "author", "editor" }, "title", "publisher", "year" },
+ optional = { { "volume", "number" }, "series", "address", "edition", "month","note" },
+ },
+ booklet = {
+ required = { "title" },
+ optional = { "author", "howpublished", "address", "month", "year", "note" },
+ },
+ inbook = {
+ required = { { "author", "editor" }, "title", { "chapter", "pages" }, "publisher","year" },
+ optional = { { "volume", "number" }, "series", "type", "address", "edition", "month", "note" },
+ },
+ incollection = {
+ required = { "author", "title", "booktitle", "publisher", "year" },
+ optional = { "editor", { "volume", "number" }, "series", "type", "chapter", "pages", "address", "edition", "month", "note" },
+ },
+ inproceedings = {
+ required = { "author", "title", "booktitle", "year" },
+ optional = { "editor", { "volume", "number" }, "series", "pages", "address", "month","organization", "publisher", "note" },
+ },
+ manual = {
+ required = { "title" },
+ optional = { "author", "organization", "address", "edition", "month", "year", "note" },
+ },
+ mastersthesis = {
+ required = { "author", "title", "school", "year" },
+ optional = { "type", "address", "month", "note" },
+ },
+ misc = {
+ required = { "author", "title", "howpublished", "month", "year", "note" },
+ optional = { "author", "title", "howpublished", "month", "year", "note" },
+ },
+ phdthesis = {
+ required = { "author", "title", "school", "year" },
+ optional = { "type", "address", "month", "note" },
+ },
+ proceedings = {
+ required = { "title", "year" },
+ optional = { "editor", { "volume", "number" }, "series", "address", "month", "organization", "publisher", "note" },
+ },
+ techreport = {
+ required = { "author", "title", "institution", "year" },
+ optional = { "type", "number", "address", "month", "note" },
+ },
+ unpublished = {
+ required = { "author", "title", "note" },
+ optional = { "month", "year" },
+ },
}
-function tracers.showdatasetfields(name)
- if name and name ~= "" then
- local luadata = publications.datasets[name].luadata
- if next(luadata) then
- context.starttabulate { "|lT|lT|pT|" }
- NC() bold("tag")
- NC() bold("category")
- NC() bold("fields")
- NC() NR() context.FL() -- HL()
- for k, v in sortedhash(luadata) do
- NC() context(k)
- NC() context(v.category)
- NC()
- for k, v in sortedhash(v) do
- if k ~= "details" and k ~= "tag" and k ~= "category" then
- context("%s ",k)
+
+publications.tracers.fields = fields
+publications.tracers.categories = categories
+publications.tracers.citevariants = citevariants
+publications.tracers.listvariants = listvariants
+-- -- --
+
+function tracers.showdatasetfields(dataset)
+ local luadata = datasets[dataset].luadata
+ if next(luadata) then
+ context.starttabulate { "|lT|lT|pT|" }
+ NC() bold("tag")
+ NC() bold("category")
+ NC() bold("fields")
+ NC() NR() context.FL() -- HL()
+ for k, v in sortedhash(luadata) do
+ NC() context(k)
+ NC() context(v.category)
+ NC()
+ for k, v in sortedhash(v) do
+ if k ~= "details" and k ~= "tag" and k ~= "category" then
+ context("%s ",k)
+ end
+ end
+ NC() NR()
+ end
+ context.stoptabulate()
+ end
+end
+
+function tracers.showdatasetcompleteness(dataset)
+
+ dataset = datasets[dataset]
+
+ local preamble = { "|lBTw(10em)|p|" }
+
+ local function required(key,value,indirect)
+ NC() darkgreen(key)
+ NC() if indirect then
+ darkblue(value)
+ elseif value then
+ context(value)
+ else
+ darkred("\\tttf [missing]")
+ end
+ NC() NR()
+ end
+
+ local function optional(key,value,indirect)
+ NC() context(key)
+ NC() if indirect then
+ darkblue(value)
+ elseif value then
+ context(value)
+ end
+ NC() NR()
+ end
+
+ local function identified(tag,crossref)
+ NC() context("tag")
+ NC() if crossref then
+ context("\\tttf %s\\hfill\\darkblue => %s",tag,crossref)
+ else
+ context("\\tttf %s",tag)
+ end
+ NC() NR()
+ end
+
+ local luadata = datasets[dataset].luadata
+
+ if next(luadata) then
+ for tag, entry in table.sortedhash(luadata) do
+ local category = entry.category
+ local fields = categories[category]
+ if fields then
+ context.starttabulate(preamble)
+ identified(tag,entry.crossref)
+ context.HL()
+ local requiredfields = fields.required
+ local optionalfields = fields.optional
+ for i=1,#requiredfields do
+ local r = requiredfields[i]
+ if type(r) == "table" then
+ local okay = true
+ for i=1,#r do
+ local ri = r[i]
+ if rawget(entry,ri) then
+ required(ri,entry[ri])
+ okay = true
+ elseif entry[ri] then
+ required(ri,entry[ri],true)
+ okay = true
+ end
end
+ if not okay then
+ required(table.concat(r,"\\letterbar "))
+ end
+ elseif rawget(entry,r) then
+ required(r,entry[r])
+ elseif entry[r] then
+ required(r,entry[r],true)
+ else
+ required(r)
end
- NC() NR()
end
- context.stoptabulate()
+ for i=1,#optionalfields do
+ local o = optionalfields[i]
+ if type(o) == "table" then
+ for i=1,#o do
+ local oi = o[i]
+ if rawget(entry,oi) then
+ optional(oi,entry[oi])
+ elseif entry[oi] then
+ optional(oi,entry[oi],true)
+ end
+ end
+ elseif rawget(entry,o) then
+ optional(o,entry[o])
+ elseif entry[o] then
+ optional(o,entry[o],true)
+ end
+ end
+ context.stoptabulate()
+ else
+ -- error
+ end
end
end
+
end
-commands.showbtxdatasetfields = tracers.showdatasetfields
+commands.showbtxdatasetfields = tracers.showdatasetfields
+commands.showbtxdatasetcompleteness = tracers.showdatasetcompleteness