158 lines
4.3 KiB
Lua
158 lines
4.3 KiB
Lua
people
|
||
= {
|
||
extension = "glsp",
|
||
language = "deu",
|
||
list = { },
|
||
mind = { },
|
||
table = { },
|
||
}
|
||
|
||
local function parseDate ( this )
|
||
if this
|
||
and this.date
|
||
and type ( this.date ) == "string"
|
||
then
|
||
local maybe = false
|
||
local date = this.date
|
||
local unknown = date:match ( "(.+)%?")
|
||
if unknown
|
||
then
|
||
maybe = true
|
||
date = unknown
|
||
end
|
||
|
||
if #date == 10
|
||
then
|
||
local year, month, day = date:match("(%d%d%d%d)-(%d%d)-(%d%d)")
|
||
return {
|
||
year = tonumber ( year ),
|
||
month = tonumber ( month ),
|
||
day = tonumber ( day ),
|
||
maybe = maybe,
|
||
}
|
||
elseif #date == 7
|
||
then
|
||
local year, month = date:match("(%d%d%d%d)-(%d%d)")
|
||
return {
|
||
year = tonumber ( year ),
|
||
month = tonumber ( month ),
|
||
maybe = maybe,
|
||
}
|
||
elseif #date == 4
|
||
then
|
||
return {
|
||
year = tonumber ( date ),
|
||
maybe = maybe,
|
||
}
|
||
else
|
||
return nil
|
||
end
|
||
else
|
||
return nil
|
||
end
|
||
end
|
||
|
||
local month
|
||
= {
|
||
"Januar",
|
||
"Februar",
|
||
"März",
|
||
"April",
|
||
"Mai",
|
||
"Juni",
|
||
"Juli",
|
||
"August",
|
||
"September",
|
||
"Oktober",
|
||
"November",
|
||
"Dezember",
|
||
}
|
||
|
||
local function putDate ( date )
|
||
if date
|
||
and date.year
|
||
then
|
||
local life = tostring ( date.year )
|
||
if date.month
|
||
then
|
||
life = month [ date.month ] .. " " .. life
|
||
if date.day
|
||
then
|
||
life = tostring ( date.day ) .. ".~" .. life
|
||
end
|
||
end
|
||
if date.maybe
|
||
then
|
||
life = life .. "?"
|
||
end
|
||
return life
|
||
else
|
||
return "?"
|
||
end
|
||
end
|
||
|
||
function people.getEntry ( name )
|
||
local entry = people.list [ name ]
|
||
if entry
|
||
then
|
||
if not entry.uses
|
||
then
|
||
local bornAs = ""
|
||
if entry.born
|
||
and entry.born.as
|
||
then
|
||
bornAs = "geboren \\textsc{" .. entry.born.as .. "} "
|
||
end
|
||
local life = putDate(parseDate(entry.born))
|
||
if entry.died
|
||
then
|
||
life = life .. "–" .. putDate(parseDate(entry.died))
|
||
end
|
||
entry.life = life
|
||
entry.long = "\\textsc{" .. entry.full .. "} \\mbox{(" .. life .. ")}"
|
||
|
||
entry.identifier = name
|
||
if entry.description
|
||
then
|
||
entry.description.native
|
||
= entry.description [ people.language ]
|
||
or entry.description.eng
|
||
or ""
|
||
end
|
||
entry.bookmarkAs = "\\textsc{" .. entry.full .. "}"
|
||
entry.title = bornAs .. "(" .. life .. ")"
|
||
entry.uses = 1
|
||
else
|
||
entry.uses = entry.uses + 1
|
||
end
|
||
end
|
||
return entry
|
||
end
|
||
|
||
function people.sort ( this, that )
|
||
return this.full < that.full
|
||
end
|
||
|
||
function people.print ( name, text )
|
||
if not name
|
||
or name == ""
|
||
then
|
||
name = text:lower()
|
||
end
|
||
local pdfString = text
|
||
local texString = "\\textsc{" .. text .. "}"
|
||
|
||
local entry = people.getEntry ( name )
|
||
if entry
|
||
then
|
||
texString = "\\protect\\hyperlink{person:" .. name .. "}{" .. texString .. "}"
|
||
else
|
||
log.warn
|
||
(
|
||
"people.print",
|
||
"Who is »"..text.."« (»"..name.."«)?"
|
||
)
|
||
end
|
||
tex.print ( "{\\texorpdfstring{\\mbox{" .. texString .. "}}{" .. pdfString .. "}}" )
|
||
end
|