diff options
Diffstat (limited to 'tex/context/base/publ-ini.lua')
-rw-r--r-- | tex/context/base/publ-ini.lua | 88 |
1 files changed, 48 insertions, 40 deletions
diff --git a/tex/context/base/publ-ini.lua b/tex/context/base/publ-ini.lua index fb1c01f97..63da84576 100644 --- a/tex/context/base/publ-ini.lua +++ b/tex/context/base/publ-ini.lua @@ -1420,10 +1420,10 @@ function lists.flushentries(dataset) else -- nothing end - local u = li[4] - if u then - local l = u.btxltx - local r = u.btxrtx + local userdata = li[4] + if userdata then + local l = userdata.btxltx + local r = userdata.btxrtx if l then ctx_btxsetlefttext (l) end @@ -1431,10 +1431,41 @@ function lists.flushentries(dataset) ctx_btxsetrighttext(r) end end + rendering.userdata = userdata ctx_btxhandlelistentry() end end +local function getuserdata(dataset,key) + local rendering = renderings[dataset] + if rendering then + local userdata = rendering.userdata + if userdata then + local value = userdata[key] + if value and value ~= "" then + return value + end + end + end +end + +lists.uservariable = getuserdata + +function commands.btxuservariable(dataset,key) + local value = getuserdata(dataset,key) + if value then + context(value) + end +end + +function commands.btxdoifelseuservariable(dataset,key) + if getuserdata(dataset,key) then + ctx_firstoftwoarguments() + else + ctx_secondoftwoarguments() + end +end + function lists.filterall(dataset) local r = renderings[dataset] local list = r.list @@ -1652,8 +1683,8 @@ local function processcite(dataset,reference,mark,compress,setup,internal,getter source[i] = data end - local function flush(i,n,entry,tag) - local tag = tag or entry.tag + local function flush(i,n,entry,last) + local tag = entry.tag local currentcitation = markcite(dataset,tag) ctx_btxstartcite() ctx_btxsettag(tag) @@ -1670,7 +1701,7 @@ local function processcite(dataset,reference,mark,compress,setup,internal,getter if language then ctx_btxsetlanguage(language) end - if not setter(entry,entry.last) then + if not setter(entry,last) then ctx_btxsetfirst(f_missing(tag)) end ctx_btxsetconcat(concatstate(i,n)) @@ -1688,7 +1719,7 @@ local function processcite(dataset,reference,mark,compress,setup,internal,getter local entry = target[i] local first = entry.first if first then - flush(i,nofcollected,first,list[1]) -- somewhat messy as we can be sorted so this needs checking! might be wrong + flush(i,nofcollected,first,entry.last) else flush(i,nofcollected,entry) end @@ -1821,7 +1852,6 @@ local function setter(dataset,tag,entry,internal) local entries = entry.entries local text = entries and entries.text or "?" return { - dataset = dataset, tag = tag, internal = internal, num = text, @@ -1835,22 +1865,11 @@ end function citevariants.num(dataset,reference,mark,compress,variant,internal) processcite(dataset,reference,mark,compress,"num",internal,setter,getter) +-- processcite(dataset,reference,mark,false,"num",internal,setter,getter) end -- year --- local function setter(dataset,tag,entry,internal) --- local year = getfield(dataset,tag,"year") --- return { --- dataset = dataset, --- tag = tag, --- internal = internal, --- year = year, --- sortkey = year, --- sortfld = "year", --- } --- end - local function setter(dataset,tag,entry,internal) return { dataset = dataset, @@ -2005,30 +2024,19 @@ local function authorconcat(target,key,setup) ctx_btxsetinternal(bl and bl.references.internal or "") if first then ctx_btxsetfirst(first[key] or f_missing(first.tag)) --- third ? of gewoon getfield? local suffix = entry.suffix local value = entry.last[key] --- if suffix then --- ctx_btxsetsecond(value .. converters.characters(suffix)) --- else --- ctx_btxsetsecond(value) --- end -ctx_btxsetsecond(value) -if suffix then - ctx_btxsetthird(suffix) -end + ctx_btxsetsecond(value) + if suffix then + ctx_btxsetthird(suffix) + end else local suffix = entry.suffix local value = entry[key] or f_missing(tag) --- if suffix then --- ctx_btxsetfirst(value .. converters.characters(suffix)) --- else --- ctx_btxsetfirst(value) --- end -ctx_btxsetfirst(value) -if suffix then - ctx_btxsetthird(suffix) -end + ctx_btxsetfirst(value) + if suffix then + ctx_btxsetthird(suffix) + end end ctx_btxsetconcat(concatstate(i,nofcollected)) ctx_btxcitesetup(setup) |