summaryrefslogtreecommitdiff
path: root/tex/context/base/publ-usr.lua
diff options
context:
space:
mode:
Diffstat (limited to 'tex/context/base/publ-usr.lua')
-rw-r--r--tex/context/base/publ-usr.lua91
1 files changed, 91 insertions, 0 deletions
diff --git a/tex/context/base/publ-usr.lua b/tex/context/base/publ-usr.lua
new file mode 100644
index 000000000..6bb93ebee
--- /dev/null
+++ b/tex/context/base/publ-usr.lua
@@ -0,0 +1,91 @@
+if not modules then modules = { } end modules ['publ-usr'] = {
+ version = 1.001,
+ comment = "this module part of publication support",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+-- local chardata = characters.data
+
+-- local str = [[
+-- \startpublication[k=Berdnikov:TB21-2-129,t=article,a={{Berdnikov},{}},y=2000,n=2257,s=BHHJ00]
+-- \artauthor[]{Alexander}[A.]{}{Berdnikov}
+-- \artauthor[]{Hans}[H.]{}{Hagen}
+-- \artauthor[]{Taco}[T.]{}{Hoekwater}
+-- \artauthor[]{Bogus{\l}aw}[B.]{}{Jackowski}
+-- \pubyear{2000}
+-- \arttitle{{Even more MetaFun with \MP: A request for permission}}
+-- \journal{TUGboat}
+-- \issn{0896-3207}
+-- \volume{21}
+-- \issue{2}
+-- \pages{129--130}
+-- \month{6}
+-- \stoppublication
+-- ]]
+
+local remapped = {
+ artauthor = "author",
+ arttitle = "title",
+}
+
+local P, Cs, R, Cc, Carg = lpeg.P, lpeg.Cs, lpeg.R, lpeg.Cc, lpeg.Carg
+
+local function register(target,key,a,b,c,d,e)
+ key = remapped[key] or key
+ if b and d and e then
+ local s = nil
+ if b ~= "" and b then
+ s = s and s .. " " .. b or b
+ end
+ if d ~= "" and d then
+ s = s and s .. " " .. d or d
+ end
+ if e ~= "" and e then
+ s = s and s .. " " .. e or e
+ end
+ if a ~= "" and a then
+ s = s and s .. " " .. a or a
+ end
+ local value = target[key]
+ if s then
+ if value then
+ target[key] = value .. " and " .. s
+ else
+ target[key] = s
+ end
+ else
+ if not value then
+ target[key] = s
+ end
+ end
+ else
+ target[key] = b
+ end
+end
+
+local leftbrace = P("{")
+local rightbrace = P("}")
+local leftbracket = P("[")
+local rightbracket = P("]")
+
+local key = P("\\") * Cs(R("az","AZ")^1) * lpeg.patterns.space^0
+local mandate = leftbrace * Cs(lpeg.patterns.balanced) * rightbrace + Cc(false)
+local optional = leftbracket * Cs((1-rightbracket)^0) * rightbracket + Cc(false)
+local value = optional^-1 * mandate^-1 * optional^-1 * mandate^-2
+
+local pattern = ((Carg(1) * key * value) / register + P(1))^0
+
+function publications.addtexentry(dataset,settings,content)
+ settings = utilities.parsers.settings_to_hash(settings)
+ local data = {
+ tag = settings.tag or settings.k or "no tag",
+ category = settings.category or settings.t or "article",
+ }
+ lpeg.match(pattern,content,1,data) -- can set tag too
+ dataset.userdata[data.tag] = data
+ dataset.luadata[data.tag] = data
+ publications.markasupdated(dataset)
+ return data
+end