From 08128a9710f7a34e16f7487b3bccfe7feadb36f1 Mon Sep 17 00:00:00 2001 From: Context Git Mirror Bot Date: Wed, 4 Feb 2015 00:15:04 +0100 Subject: 2015-02-03 23:57:00 --- tex/context/base/cont-new.mkiv | 2 +- tex/context/base/context-version.pdf | Bin 4385 -> 4386 bytes tex/context/base/context.mkiv | 2 +- tex/context/base/publ-aut.lua | 109 +++++++++++++++------ tex/context/base/publ-tra.lua | 14 ++- tex/context/base/status-files.pdf | Bin 24610 -> 24590 bytes tex/context/base/status-lua.pdf | Bin 333342 -> 333384 bytes tex/generic/context/luatex/luatex-fonts-merged.lua | 2 +- 8 files changed, 94 insertions(+), 35 deletions(-) (limited to 'tex') diff --git a/tex/context/base/cont-new.mkiv b/tex/context/base/cont-new.mkiv index 52c4e4d3c..2d0f07dad 100644 --- a/tex/context/base/cont-new.mkiv +++ b/tex/context/base/cont-new.mkiv @@ -11,7 +11,7 @@ %C therefore copyrighted by \PRAGMA. See mreadme.pdf for %C details. -\newcontextversion{2015.02.03 21:36} +\newcontextversion{2015.02.03 23:55} %D This file is loaded at runtime, thereby providing an excellent place for %D hacks, patches, extensions and new features. diff --git a/tex/context/base/context-version.pdf b/tex/context/base/context-version.pdf index cc5438f72..31c5d44c1 100644 Binary files a/tex/context/base/context-version.pdf and b/tex/context/base/context-version.pdf differ diff --git a/tex/context/base/context.mkiv b/tex/context/base/context.mkiv index ba82de9d3..d6522da7e 100644 --- a/tex/context/base/context.mkiv +++ b/tex/context/base/context.mkiv @@ -28,7 +28,7 @@ %D up and the dependencies are more consistent. \edef\contextformat {\jobname} -\edef\contextversion{2015.02.03 21:36} +\edef\contextversion{2015.02.03 23:55} \edef\contextkind {beta} %D For those who want to use this: diff --git a/tex/context/base/publ-aut.lua b/tex/context/base/publ-aut.lua index dc5a707cf..764550998 100644 --- a/tex/context/base/publ-aut.lua +++ b/tex/context/base/publ-aut.lua @@ -28,6 +28,8 @@ local publications = publications local datasets = publications.datasets local getcasted = publications.getcasted +local allocate = utilities.storage.allocate + local chardata = characters.data local report = logs.reporter("publications","authors") @@ -133,7 +135,7 @@ local function splitauthorstring(str) snippets = n, } if n == 1 then - -- First von Last + -- {First Middle von Last} local words = lpegmatch(spacesplitter,author) firstnames, vons, surnames = { }, { }, { } local i, n = 1, #words @@ -172,7 +174,8 @@ local function splitauthorstring(str) initials = makeinitials(firstnames) end elseif n == 2 then - -- von Last, First + -- {Last, First} + -- {von Last, First} firstnames, vons, surnames = { }, { }, { } local words = lpegmatch(spacesplitter,split[1]) local i, n = 1, #words @@ -208,20 +211,21 @@ local function splitauthorstring(str) end initials = makeinitials(firstnames) elseif n == 3 then - -- von Last, Jr ,First + -- {von Last, First, Jr} surnames = lpegmatch(spacesplitter,split[1]) juniors = lpegmatch(spacesplitter,split[2]) firstnames = lpegmatch(spacesplitter,split[3]) initials = makeinitials(firstnames) elseif n == 4 then - -- von, Last, Jr, First + -- {Von, Last, First, Jr} vons = lpegmatch(spacesplitter,split[1]) surnames = lpegmatch(spacesplitter,split[2]) juniors = lpegmatch(spacesplitter,split[3]) firstnames = lpegmatch(spacesplitter,split[4]) initials = makeinitials(firstnames) elseif n >= 5 then - -- von, Last, Jr, First, Initials + -- {Von, Last, First, Jr, F.} + -- {Von, Last, First, Jr, Fr., options} vons = lpegmatch(spacesplitter,split[1]) surnames = lpegmatch(spacesplitter,split[2]) juniors = lpegmatch(spacesplitter,split[3]) @@ -429,13 +433,45 @@ local function components(snippet,short) local firstnames = not short and snippet.firstnames local juniors = snippet.juniors return - vons and #vons > 0 and concat(vons, " ") or "", - surnames and #surnames > 0 and concat(surnames, " ") or "", + vons and #vons > 0 and concat(vons," ") or "", + surnames and #surnames > 0 and concat(surnames," ") or "", initials and #initials > 0 and concat(the_initials(initials)," ") or "", firstnames and #firstnames > 0 and concat(firstnames," ") or "", - juniors and #juniors > 0 and concat(juniors, " ") or "" + juniors and #juniors > 0 and concat(juniors, " ") or "" end +local collapsers = allocate { } + +publications.authorcollapsers = collapsers + +local function default(author) + local vons = author.vons + local surnames = author.surnames + local initials = author.initials + local firstnames = author.firstnames + local juniors = author.juniors + local result = { } + local nofresult = 0 + if vons and #vons > 0 then + nofresult = nofresult + 1 ; result[nofresult] = concat(vons," ") + end + if surnames and #surnames > 0 then + nofresult = nofresult + 1 ; result[nofresult] = concat(surnames," ") + end + if initials and #initials > 0 then + nofresult = nofresult + 1 ; result[nofresult] = concat(the_initials(initials)," ") + end + if firstnames and #firstnames > 0 then + nofresult = nofresult + 1 ; result[nofresult] = concat(firstnames," ") + end + if juniors and #juniors > 0 then + nofresult = nofresult + 1 ; result[nofresult] = concat(juniors," ") + end + return concat(result," ") +end + +collapsers.default = default + local function writer(key,snippets) if not key then return "" @@ -446,34 +482,45 @@ local function writer(key,snippets) local n = #key if n == 0 then return "" - end - if not snippets then - snippets = { } - end - local s = 0 - for i=1,n do - local k = key[i] - local vons = k.vons - local surnames = k.surnames - local initials = k.initials - local juniors = k.juniors - if vons and #vons > 0 then - s = s + 1 ; snippets[s] = concat(vons," ") - end - if surnames and #surnames > 0 then - s = s + 1 ; snippets[s] = concat(surnames," ") - end - if initials and #initials > 0 then - s = s + 1 ; snippets[s] = concat(the_initials(initials," ","")," ") -- todo: configure . and - + elseif n == 1 then + local author = key[1] + local options = author.options + if options then + for option in next, options do + local collapse = collapsers[option] + if collapse then + return collapse(author) + end + end end - if juniors and #juniors > 0 then - s = s + 1 ; snippets[s] = concat(juniors," ") + return default(author) + else + local t = { } + local s = 0 + for i=1,n do + local author = key[i] + local options = author.options + s = s + 1 + if options then + local done = false + for option in next, options do + local collapse = collapsers[option] + if collapse then + t[s] = collapse(author) + done = true + end + end + if not done then + t[s] = default(author) + end + else + t[s] = default(author) + end end + return concat(t," & ") end - return concat(snippets," ",1,s) end - publications.writers .author = writer publications.casters .author = splitauthorstring publications.components.author = components diff --git a/tex/context/base/publ-tra.lua b/tex/context/base/publ-tra.lua index 1c39aef97..5f1610beb 100644 --- a/tex/context/base/publ-tra.lua +++ b/tex/context/base/publ-tra.lua @@ -327,6 +327,8 @@ function tracers.showdatasetauthors(settings) local dataset = settings.dataset local field = settings.field + local sortkey = publications.writers.author + if not dataset or dataset == "" then dataset = "standard" end if not field or field == "" then field = "author" end @@ -339,7 +341,16 @@ function tracers.showdatasetauthors(settings) ctx_verbatim(k) ctx_EQ() if type(v) == "table" then - ctx_verbatim(concat(v, " | ")) + local t = { } + for i=1,#v do + local vi = v[i] + if type(vi) == "table" then + t[i] = concat(vi,"-") + else + t[i] = vi + end + end + ctx_verbatim(concat(t, " | ")) else ctx_verbatim(v) end @@ -375,6 +386,7 @@ function tracers.showdatasetauthors(settings) commonrow("tag",tag) commonrow("field",field) commonrow("content",getfield(dataset,tag,field)) + commonrow("sortkey",sortkey(a)) for i=1,#a do ctx_ML() local ai = a[i] diff --git a/tex/context/base/status-files.pdf b/tex/context/base/status-files.pdf index 275184f80..bebc7d2e5 100644 Binary files a/tex/context/base/status-files.pdf and b/tex/context/base/status-files.pdf differ diff --git a/tex/context/base/status-lua.pdf b/tex/context/base/status-lua.pdf index b9623e001..789ee16eb 100644 Binary files a/tex/context/base/status-lua.pdf and b/tex/context/base/status-lua.pdf differ diff --git a/tex/generic/context/luatex/luatex-fonts-merged.lua b/tex/generic/context/luatex/luatex-fonts-merged.lua index bef47218d..c1951c8e7 100644 --- a/tex/generic/context/luatex/luatex-fonts-merged.lua +++ b/tex/generic/context/luatex/luatex-fonts-merged.lua @@ -1,6 +1,6 @@ -- merged file : luatex-fonts-merged.lua -- parent file : luatex-fonts.lua --- merge date : 02/03/15 21:36:49 +-- merge date : 02/03/15 23:55:34 do -- begin closure to overcome local limits and interference -- cgit v1.2.3