348 lines
11 KiB
Lua
348 lines
11 KiB
Lua
acronyms
|
|
= {
|
|
deprecated
|
|
= {
|
|
[ "AcOEt" ] = "EtOAc",
|
|
[ "bzw" ] = "beziehungsweise",
|
|
[ "CHCl3" ] = "trichlormethane",
|
|
[ "dcm" ] = "dichlormethane",
|
|
[ "zB" ] = "forExample",
|
|
[ "zT" ] = "partially",
|
|
[ "ua" ] = "unterAnderem",
|
|
[ "zumTeil" ] = "partially",
|
|
},
|
|
extension = "glsa",
|
|
language = "deu",
|
|
list = { },
|
|
mind = { },
|
|
sections = { },
|
|
table = { },
|
|
types
|
|
= {
|
|
Default = 0x00,
|
|
Math = 0x01,
|
|
Unit = 0x02,
|
|
Angle = 0x03,
|
|
Currency = 0x04,
|
|
Chemical = 0x05,
|
|
},
|
|
underline = false,
|
|
}
|
|
|
|
local function fail ( acronym, source )
|
|
log.error
|
|
(
|
|
{ source, "acrfail", },
|
|
"cannot find acronym with identifier -»" .. tostring ( acronym ) .. "«!"
|
|
)
|
|
return "¿¿" .. acronym .. "??"
|
|
end
|
|
|
|
local function getTextUnchecked ( entry, acronym, texString, pdfString, noLink )
|
|
entry.uses = entry.uses + 1
|
|
if hazLink == true
|
|
and noLink ~= true
|
|
then
|
|
texString = acronyms.getLinkUnchecked ( acronym, texString )
|
|
end
|
|
if acronyms.underline
|
|
then
|
|
texString = "\\underLine{" .. texString .. "}"
|
|
end
|
|
return "{\\texorpdfstring{" .. texString .. "}{" .. pdfString .. "}}"
|
|
end
|
|
|
|
function acronyms.getChemical ( acronym, noLink )
|
|
local entry = acronyms.getEntry ( acronym )
|
|
if entry
|
|
then
|
|
entry.uses = entry.uses + 1
|
|
return "<" .. identifier .. ">"
|
|
else
|
|
return fail ( acronym, "acrchem" )
|
|
end
|
|
end
|
|
|
|
function acronyms.getDescription ( acronym, noLink )
|
|
local entry = acronyms.getEntry ( acronym )
|
|
if entry
|
|
then
|
|
return getTextUnchecked
|
|
(
|
|
entry,
|
|
acronym,
|
|
entry.description.native,
|
|
entry.description.native,
|
|
noLink
|
|
)
|
|
else
|
|
return fail ( acronym, "acrdesc" )
|
|
end
|
|
end
|
|
|
|
function acronyms.use ( acronym )
|
|
local entry = acronyms.getEntry ( acronym )
|
|
if entry
|
|
then
|
|
entry.uses = entry.uses + 1
|
|
else
|
|
return fail ( acronym, "acruse" )
|
|
end
|
|
end
|
|
|
|
function acronyms.getEntry ( acronym, mightFail )
|
|
log.info("acronyms.getEntry", "Try »"..acronym.."«")
|
|
local entry = acronyms.list [ acronym ]
|
|
if entry
|
|
then
|
|
if not entry.uses
|
|
then
|
|
local oldDebug = log.stepping
|
|
log.stepping = log.stepping or entry.debug or false
|
|
local text = entry.text [ acronyms.language ] or entry.text.eng or ""
|
|
local longTEX = text
|
|
local longPDF = text
|
|
if type ( text ) == "table"
|
|
then
|
|
longTEX = text [ 1 ]
|
|
longPDF = text [ 2 ]
|
|
end
|
|
local shortTEX = ""
|
|
local shortPDF = ""
|
|
if type ( entry.data ) == "table"
|
|
then
|
|
local kind = entry.data [ 1 ]
|
|
local data = entry.data [ 2 ]
|
|
if type ( data ) == "table"
|
|
and ( not data [ 1 ] or not data [ 2 ] )
|
|
then
|
|
data = data [ acronyms.language ] or data.eng or ""
|
|
end
|
|
if type ( data ) == "table"
|
|
then
|
|
shortTEX = data [ 1 ]
|
|
shortPDF = data [ 2 ]
|
|
else
|
|
shortTEX = data
|
|
shortPDF = data
|
|
end
|
|
if kind == acronyms.types.Default
|
|
or kind == acronyms.types.Unit
|
|
or kind == acronyms.types.Angle
|
|
or kind == acronyms.types.Currency
|
|
then
|
|
-- ok
|
|
elseif kind == acronyms.types.Math
|
|
then
|
|
shortTEX = "\\ensuremath{" .. shortTEX .. "}"
|
|
elseif kind == acronyms.types.Chemical
|
|
then
|
|
shortTEX, shortPDF, sortedBy = chem.parseSimple ( shortTEX )
|
|
entry.sortedBy = entry.sortedBy or sortedBy
|
|
else
|
|
log.fatal
|
|
(
|
|
"acronyms.getEntry",
|
|
"Invalid Data-Type: " .. tostring ( kind )
|
|
)
|
|
end
|
|
else
|
|
log.fatal
|
|
(
|
|
"acronyms.getEntry",
|
|
"Table expected, got: " .. tostring ( entry.data ) .. " (" .. type ( entry.data ) .. ")"
|
|
)
|
|
end
|
|
entry.uses = 0
|
|
entry.identifier = acronym
|
|
entry.title = longTEX
|
|
entry.short = { shortTEX, shortPDF, }
|
|
entry.long = { longTEX, longPDF, }
|
|
if entry.bookmarkAs
|
|
then
|
|
if type ( entry.bookmarkAs ) == "table"
|
|
then
|
|
entry.bookmarkAs = entry.bookmarkAs [ acronyms.language ] or entry.bookmarkAs.eng or ""
|
|
else
|
|
entry.bookmarkAs = tostring ( entry.bookmarkAs )
|
|
end
|
|
else
|
|
entry.bookmarkAs = shortTEX
|
|
end
|
|
if entry.sortedBy
|
|
then
|
|
if type ( entry.sortedBy ) == "table"
|
|
then
|
|
entry.sortedBy = entry.sortedBy [ acronyms.language ] or entry.sortedBy.eng or ""
|
|
else
|
|
--log.warn("sortedBy", tostring ( entry.sortedBy ))
|
|
entry.sortedBy = entry.sortedBy
|
|
end
|
|
else
|
|
entry.sortedBy = shortPDF
|
|
end
|
|
if entry.description
|
|
then
|
|
entry.description.native = entry.description [ acronyms.language ] or entry.description.eng or ""
|
|
else
|
|
entry.description = { native = "" }
|
|
end
|
|
-- log.debug
|
|
-- (
|
|
-- "acronyms.getEntry",
|
|
-- "Got:",
|
|
-- entry.identifier .. ": " .. entry.description.native,
|
|
-- entry.short [ 1 ] .. ": " .. entry.short [ 2 ],
|
|
-- entry.long [ 1 ] .. ": " .. entry.long [ 2 ],
|
|
-- entry.bookmarkAs .. ": " .. entry.sortedBy
|
|
-- )
|
|
log.stepping = oldDebug
|
|
end
|
|
elseif acronyms.deprecated [ acronym ]
|
|
then
|
|
log.warn
|
|
(
|
|
"acronyms.getEntry",
|
|
"Acronym »" .. tostring ( acronym ) .. "« is depricated",
|
|
"I think, you mean »" .. acronyms.deprecated [ acronym ] .. "«…"
|
|
)
|
|
entry = acronyms.getEntry ( acronyms.deprecated [ acronym ] )
|
|
elseif mightFail ~= true
|
|
then
|
|
log.warn
|
|
(
|
|
"acronyms.getEntry",
|
|
"Unknown Acronym »" .. tostring(acronym) .. "«"
|
|
)
|
|
end
|
|
return entry
|
|
end
|
|
|
|
function acronyms.getExplanation ( acronym )
|
|
local entry = acronyms.getEntry ( acronym )
|
|
if entry
|
|
then
|
|
entry.uses = entry.uses + 1
|
|
if acronyms.underline
|
|
then
|
|
return "\\underLine{" .. entry.short [ 1 ] .. ": "
|
|
.. entry.long [ 1 ] .. "}"
|
|
else
|
|
return entry.short [ 1 ] .. ": "
|
|
.. entry.long [ 1 ]
|
|
end
|
|
else
|
|
return fail ( acronym, "getExplanation" )
|
|
end
|
|
end
|
|
|
|
function acronyms.getFullText ( acronym, noLink )
|
|
local entry = acronyms.getEntry ( acronym )
|
|
if entry
|
|
then
|
|
log.info
|
|
(
|
|
"acronyms.getFullText",
|
|
"Long: "..entry.long [ 1 ]
|
|
)
|
|
return getTextUnchecked
|
|
(
|
|
entry,
|
|
acronym,
|
|
entry.long [ 1 ] .. " (" .. entry.short [ 1 ] .. ")",
|
|
entry.long [ 2 ] .. " (" .. entry.short [ 2 ] .. ")",
|
|
noLink
|
|
)
|
|
else
|
|
return fail ( acronym, "acrfull" )
|
|
end
|
|
end
|
|
|
|
function acronyms.getLink ( acronym, text )
|
|
local entry = acronyms.getEntry ( acronym )
|
|
if entry
|
|
then
|
|
entry.uses = entry.uses + 1
|
|
return acronyms.getLinkUnchecked(acronym, text)
|
|
else
|
|
return fail ( acronym, "acrlink" )
|
|
end
|
|
end
|
|
|
|
function acronyms.getLinkUnchecked ( acronym, text )
|
|
--log.info("acronym.getLink", "reference link: »" .. acronym .. "«")
|
|
return "\\protect\\hyperlink{acronym:" .. acronym .. "}{" .. text .. "}"
|
|
end
|
|
|
|
function acronyms.getLongText ( acronym, noLink )
|
|
local entry = acronyms.getEntry ( acronym )
|
|
if entry
|
|
then
|
|
return getTextUnchecked
|
|
(
|
|
entry,
|
|
acronym,
|
|
entry.long [ 1 ],
|
|
entry.long [ 2 ],
|
|
noLink
|
|
)
|
|
else
|
|
return fail ( acronym, "acrlong" )
|
|
end
|
|
end
|
|
|
|
function acronyms.getShortText ( acronym, noLink )
|
|
local entry = acronyms.getEntry ( acronym )
|
|
if entry
|
|
then
|
|
return getTextUnchecked ( entry, acronym, entry.short [ 1 ], entry.short [ 2 ], noLink )
|
|
else
|
|
return fail ( acronym, "acrshort" )
|
|
end
|
|
end
|
|
|
|
function acronyms.getText ( acronym, texString, pdfString, noLink )
|
|
local entry = acronyms.getEntry ( acronym )
|
|
if entry
|
|
then
|
|
return getTextUnchecked ( entry, acronym, texString, pdfString or "", noLink )
|
|
else
|
|
return fail ( acronym, "acrtext" )
|
|
end
|
|
end
|
|
|
|
function acronyms.sort ( this, that )
|
|
local a = acronyms.sections [ this.section ]
|
|
local b = acronyms.sections [ that.section ]
|
|
if a.class == b.class
|
|
then
|
|
if a.title:lower ( ) == b.title:lower ( )
|
|
then
|
|
if type ( this.sortedBy ) == "number"
|
|
and type ( that.sortedBy ) == "number"
|
|
then
|
|
--log.info("acronyms.sort", "sortedBy: "..tostring(this.sortedBy).." > "..tostring(that.sortedBy))
|
|
return this.sortedBy > that.sortedBy
|
|
else
|
|
a = tostring(this.sortedBy)
|
|
b = tostring(that.sortedBy)
|
|
if a:lower ( ) == b:lower ( )
|
|
then
|
|
--log.info("acronyms.sort", "identifier: »"..this.identifier.."« < »"..that.identifier.."«")
|
|
return this.identifier < that.identifier
|
|
else
|
|
--log.info("acronyms.sort", "sortedBy: »"..a.."« < »"..b.."«")
|
|
return a:lower() < b:lower()
|
|
end
|
|
end
|
|
else
|
|
--log.info("acronyms.sort", "title: »"..a.title:lower().."« < »"..b.title:lower().."«")
|
|
return a.title:lower ( ) < b.title:lower ( )
|
|
end
|
|
else
|
|
--log.info("acronyms.sort", "class: "..tostring(a.class).." < "..tostring(b.class))
|
|
return a.class < b.class
|
|
end
|
|
end
|
|
|