Modul:Zitation
Die Dokumentation für dieses Modul kann unter Modul:Zitation/Doku erstellt werden
local p = {}
-- Ergänzt bei Titelformatierungen in Abhängigkeit der letzten Zeichen ein Punkt am Ende des Titels hinzu oder nicht. Test für Vorlage:Internetquelle / Vorlage:TitelFormat
-- Aufruf: {{#invoke:Zitation|TitelFormat|titel=IrgendeinTitel}}
function p.TitelFormat(frame)
local titel = frame.args[1] or frame.args.titel
if (titel == '') or (titel == nil) then
return ''
elseif (mw.ustring.find(titel, '[\.!?!.?…][%]»«›‹‘’”“"\']*$')) or (mw.ustring.find(titel, '[\.!?!.?…]</[%s%w]*>$')) then
return '<i>' .. titel .. '</i>'
else
return '<i>' .. titel .. '.</i>'
end
end
-- Entscheidet anhand der letzten Zeichen, ob ein Punkt gesetzt wird oder nicht. Test für Vorlage:Internetquelle
-- Aufruf: {{#invoke:Zitation|Endpunkt|titel=IrgendeinTitel}}
function p.Endpunkt(frame)
local titel = frame.args[1] or frame.args.titel
if (titel == '') or (mw.ustring.find(titel, '[\.!?!.?…][%]»«›‹‘’”“"\']*$')) or (mw.ustring.find(titel, '[\.!?!.?…]</[%s%w]*>$')) then
return ''
else
return '.'
end
end
-- Funktion zum Ersetzen von ausgewählten Elementen der Wiki-Syntax. Wird benötigt, um die durch Vorlage:Coins eingebundnenen Datensätze frei von Wiki-Syntax zu halten.
-- Aufruf: {{#invoke:Zitation|RemoveWikiSyntax|text=IrgendeinTitel}}
-- derzeit funktioniert die Ersetzung nicht, da die eingegeben Zeichenkette statt <math>..</math> einen UNIQ..QINU String enhält, vgl. http://www.mediawiki.org/wiki/QINU_fix
function p.RemoveWikiSyntax(frame)
local text = frame.args[1] or frame.args.text
text = mw.ustring.gsub(text,'(UNIQ.+QINU)',"FEHLER %1")
--text = "Test - Electroweak corrections to the charm quark contribution to <math>K</math>"
-- internen Link entfernen (z. B. bei Autorenartikelverknüpfungen)
text = mw.ustring.gsub(text,'%[%[([^%[%]]*)%]%]',"%1")
-- math-Tag in TeX-Math-Umgebung umwandeln, u.a. weil math-Tags zu fehlenden COinS-Tags führen
text = mw.ustring.gsub(text,'(<%s*/*%s*math[^>]*>)',"$")
return text
end
-- Funktion zum Bereinigen von ISBN-Angaben. Wird benötigt, um unnötige Fehler durch Bindestriche oder Leerzeichen bei der Nutrzung der Vorlage:bibISBN zu umgehen.
-- Aufruf: {{#invoke:Zitation|CleanISBN|isbn=IrgendeinTitel}}
function p.CleanISBN(frame)
local isbn = frame.args[1] or frame.args.isbn
isbn = mw.ustring.gsub(isbn,'[- ]+',"")
return isbn
end
-- Test einer Umsetzung von Vorlage:Literatur in Lua, Ziel: Abschätzung des Ressourcenverbrauchs.
-- Aufruf: {{#invoke:Zitation|Literatur|Autor, Herausgeber, Titel, TitelErg, Sammelwerk, WerkErg, Reihe, Band, Nummer, Auflage, Verlag, Ort, Jahr, Monat, Tag, Datum, Kapitel, Seiten, Spalten, ISBN, ISBNistFormalFalsch, ISSN, Kommentar, Originaltitel, Originalsprache, Uebersetzer, DOI, PMID, DB, DBcode, Online, Zugriff, Typ}}
-- Änderungen:
-- 10. April 2013: erste Testversion
-- 11. April 2013: Korrektur der Ausgabe von Band und Nummer
-- 21. April 2013: Flexibilisierung des Parameters-Auflage (Ergänzung von "Auflage" nur bei Bedarf)
-- 22. April 2013: Ausgabe des abschließenden Punktes korrigiert
-- 30. April 2013: Umstellung der Abfrage für Trennzeichen
function p.Literatur(frame)
function AddDelimiterIfNeeded(text, delimiter)
--local text = frame.args[1] or frame.args.text
if delimiter == nil then
delimiter = '.'
end
if (text == '') or (mw.ustring.find(text, '[\.:!?!.?…][%]»«›‹‘’”“"\']*[%s( )]*$')) or (mw.ustring.find(text, '[\.:!?!.?…]</[%s%w]*>$')) then
return ''
else
return delimiter
end
end
function FormatDate(Datum)
if not mw.ustring.find(frame:expandTemplate{ title = 'FormatDate', args = {Datum} }, 'Fehler') then
return frame:expandTemplate{ title = 'FormatDate', args = {Datum} } --{{#iferror: {{FormatDate|' .. Datum .. '}}|' .. Datum .. '}}
else
return Datum
end
end
local args = frame.args
local Autor = args.Autor or ''
local Herausgeber = args.Herausgeber or ''
local Titel = args.Titel or ''
local TitelErg = args.TitelErg or ''
local Sammelwerk = args.Sammelwerk or ''
local WerkErg = args.WerkErg or ''
local Reihe = args.Reihe or ''
local Band = args.Band or ''
local Nummer = args.Nummer or ''
local Auflage = args.Auflage or ''
local Verlag = args.Verlag or ''
local Ort = args.Ort or ''
local Jahr = args.Jahr or ''
local Monat = args.Monat or ''
local Tag = args.Tag or ''
local Datum = args.Datum or ''
local Kapitel = args.Kapitel or ''
local Seiten = args.Seiten or ''
local Spalten = args.Spalten or ''
local ISBN = args.ISBN or ''
local ISBNistFormalFalsch = args.ISBNistFormalFalsch or ''
local ISSN = args.ISSN or ''
local Kommentar = args.Kommentar or ''
local Originaltitel = args.Originaltitel or ''
local Originalsprache = args.Originalsprache or ''
local Uebersetzer = args.Uebersetzer or ''
local DOI = args.DOI or ''
local PMID = args.PMID or ''
local DB = args.DB or ''
local DBcode = args.DBcode or ''
local Online = args.Online or ''
local Zugriff = args.Zugriff or ''
local Typ = args.Typ or ''
local Ausgabe = ''
if (Autor ~= '') and (Typ ~= 'wl') then
if (Sammelwerk == '') and (Herausgeber ~= '') then
Ausgabe = Autor .. ', ' .. Herausgeber .. ' (Hrsg.):'
else
Ausgabe = Autor .. ':'
end
elseif (Sammelwerk == '') and (Herausgeber ~= '') then
Ausgabe = Herausgeber .. ' (Hrsg.):'
end
if Titel ~= '' then
Ausgabe = Ausgabe .. ' <i>' .. Titel .. '</i>'
if TitelErg ~= '' then
Ausgabe = Ausgabe .. AddDelimiterIfNeeded(Titel, '.') ..' ' .. TitelErg
end
if (Sammelwerk == '') and (Reihe ~= '') then
Ausgabe = Ausgabe .. ' (= <i>' .. Reihe .. '</i>'
if (Band ~= '') and (Nummer ~= '') then
Ausgabe = Ausgabe .. ' ' .. Band .. ', Nr. ' .. Nummer
elseif (Band ~= '') then
Ausgabe = Ausgabe .. ' ' .. Band
elseif (Nummer ~= '') then
Ausgabe = Ausgabe .. ' Nr. ' .. Nummer
end
Ausgabe = Ausgabe .. ').'
elseif TitelErg ~= '' then
Ausgabe = Ausgabe .. AddDelimiterIfNeeded(TitelErg, '.')
else
Ausgabe = Ausgabe .. AddDelimiterIfNeeded(Titel, '.')
end
end
if Sammelwerk ~= '' then
if Herausgeber ~= '' then
Ausgabe = Ausgabe .. ' In: ' .. Herausgeber .. ' (Hrsg.): <i>' .. Sammelwerk .. '</i>'
else
Ausgabe = Ausgabe .. ' In: <i>' .. Sammelwerk .. '</i>'
end
if WerkErg ~= '' then
Ausgabe = Ausgabe .. AddDelimiterIfNeeded(Werk, '.') .. ' ' .. WerkErg
end
if Auflage ~= '' then
Auflage = Auflage:gsub("^%s*(.-)%s*$", "%1"):gsub('Auflage$', 'Aufl.'):gsub('[eE]dition', 'ed.')
if (Auflage:find('Aufl[%.]*$') == nil) and (Auflage:find('[eE]d[%.]*$') == nil) then
Auflage = Auflage .. ' Aufl.'
end
Ausgabe = Ausgabe .. AddDelimiterIfNeeded(Ausgabe, ',') .. ' ' .. Auflage
end
if (Reihe ~= '') then
Ausgabe = Ausgabe .. ' (= <i>' .. Reihe .. '</i>'
if (Band ~= '') and (Nummer ~= '') then
Ausgabe = Ausgabe .. ' ' .. Band .. ', Nr. ' .. Nummer
elseif (Band ~= '') then
Ausgabe = Ausgabe .. ' ' .. Band
elseif (Nummer ~= '') then
Ausgabe = Ausgabe .. ' Nr. ' .. Nummer
end
Ausgabe = Ausgabe .. ').'
else
if (Band ~= '') and (Nummer ~= '') then
Ausgabe = Ausgabe .. AddDelimiterIfNeeded(Ausgabe, ',') .. ' ' .. Band .. ', Nr. ' .. Nummer
elseif (Band ~= '') then
Ausgabe = Ausgabe .. AddDelimiterIfNeeded(Ausgabe, ',') .. ' ' .. Band
elseif (Nummer ~= '') then
Ausgabe = Ausgabe .. AddDelimiterIfNeeded(Ausgabe, ',') .. ' Nr. ' .. Nummer
end
end
else
if Auflage ~= '' then
Auflage = Auflage:gsub("^%s*(.-)%s*$", "%1"):gsub('Auflage$', 'Aufl.'):gsub('[eE]dition', 'ed.')
if (Auflage:find('Aufl[%.]*$') == nil) and (Auflage:find('[eE]d[%.]*$') == nil) then
Auflage = Auflage .. ' Aufl.'
end
Ausgabe = Ausgabe .. AddDelimiterIfNeeded(Ausgabe, ',') .. ' ' .. Auflage
end
if (Band ~= '') and (Nummer ~= '') then
Ausgabe = Ausgabe .. ' ' .. Band .. ', Nr. ' .. Nummer
elseif (Band ~= '') then
Ausgabe = Ausgabe .. ' ' .. Band
elseif (Nummer ~= '') then
Ausgabe = Ausgabe .. ' Nr. ' .. Nummer
end
end
if Verlag ~= '' then
Ausgabe = Ausgabe .. AddDelimiterIfNeeded(Ausgabe, ',') .. ' ' .. Verlag
end
if Datum ~= '' then
Jahr = '<span style="white-space:nowrap;">' .. FormatDate(Datum) .. '</span>'
else
if Monat ~= '' then
iMonat = tonumber(Monat)
if iMonat then
if (iMonat > 0) and (iMonat <10) then
Monat = '0' .. tonumber(Monat)
end
end
iTag = tonumber(Tag)
if iTag then
if (tonumber(iTag) < 0) or (tonumber(iTag) > 31) then
Tag = '00'
end
end
Jahr = '<span style="white-space:nowrap;">' .. FormatDate(Jahr ..'-' .. Monat .. '-' .. Tag) .. '</span>'
end
end
if (Ort ~= '') or (Jahr ~= '') then
if (Ort ~= '') and (Jahr ~= '') then
Ausgabe = Ausgabe .. AddDelimiterIfNeeded(Ausgabe, ',').. ' ' .. Ort .. ' ' .. Jahr
elseif (Ort ~= '') then
Ausgabe = Ausgabe .. AddDelimiterIfNeeded(Ausgabe, ',').. ' ' .. Ort
else
Ausgabe = Ausgabe .. AddDelimiterIfNeeded(Ausgabe, ',').. ' ' .. Jahr
end
end
-- ISBN oder ISSN, aber nicht beides
if ISBN ~= '' then
if ISBNistFormalFalsch ~= '' then
Ausgabe = Ausgabe .. AddDelimiterIfNeeded(Ausgabe, ',') .. ' ' .. frame:expandTemplate{ title = 'Falsche ISBN', args = {ISBN} }
else
Ausgabe = Ausgabe .. AddDelimiterIfNeeded(Ausgabe, ',') .. ' ISBN ' .. ISBN
end
elseif ISSN ~= '' then
Ausgabe = Ausgabe .. AddDelimiterIfNeeded(Ausgabe, ',') .. ' ' .. frame:expandTemplate{ title = 'ISSN', args = {ISSN} }
end
if Kapitel ~= '' then
Ausgabe = Ausgabe .. AddDelimiterIfNeeded(Ausgabe, ',') .. ' ' .. Kapitel
end
if (Seiten ~= '') or (Spalten ~= '') then
if (Seiten ~= '') and (Spalten ~= '') then
Ausgabe = Ausgabe .. AddDelimiterIfNeeded(Ausgabe, ',') .. ' S. ' .. Seiten .. ' Sp. ' .. Spalten
elseif Seiten ~= '' then
Ausgabe = Ausgabe .. AddDelimiterIfNeeded(Ausgabe, ',') .. ' S. ' .. Seiten
else
Ausgabe = Ausgabe .. AddDelimiterIfNeeded(Ausgabe, ',') .. ' Sp. ' .. Spalten
end
end
if DOI ~= '' then
Ausgabe = Ausgabe .. AddDelimiterIfNeeded(Ausgabe, ',') .. ' [[doi:' .. DOI .. ']]'
end
if PMID ~= '' then
Ausgabe = Ausgabe .. AddDelimiterIfNeeded(Ausgabe, ',') .. ' PMID ' .. PMID .. ''
end
if (DB ~= '') and (DBcode ~= '') then
Ausgabe = Ausgabe .. AddDelimiterIfNeeded(Ausgabe, ',') -- .. ','
if (DB == 'arxiv') or (DB == 'arXiv') then
Ausgabe = Ausgabe .. ' ' .. frame:expandTemplate{ title = 'arxiv', args = {DBcode} }
elseif DB == 'DNB' then
Ausgabe = Ausgabe .. ' <span class="plainlinks-print">[http://d-nb.info/' .. DBcode .. ' DNB:' .. DBcode .. ']'
elseif DB == 'ZDB' then
Ausgabe = Ausgabe .. ' <span class="plainlinks-print">[http://dispatch.opac.d-nb.de/DB=1.1/CMD?ACT=SRCHA&IKT=8506&TRM=' .. DBcode .. ' ZDB-ID:' .. DBcode .. ']'
elseif DB == 'LCCN' then
Ausgabe = Ausgabe .. ' ' .. frame:expandTemplate{ title = 'LCCN', args = {DBcode} }
elseif DB == 'OCLC' then
Ausgabe = Ausgabe .. ' [http://worldcat.org/oclc/' .. DBcode .. ' OCLC:' .. DBcode .. ']'
elseif DB == 'PMC' then
Ausgabe = Ausgabe .. ' [http://www.ncbi.nlm.nih.gov/pmc/articles/PMC'.. DBcode .. ' PMC:' .. DBcode .. ']'
elseif DB == 'Bibcode' then
Ausgabe = Ausgabe .. ' [http://adsabs.harvard.edu/abs/' .. DBcode .. ' Bibcode:' .. DBcode .. ']'
elseif DB == 'JSTOR' then
Ausgabe = Ausgabe .. ' [http://www.jstor.org/stable/' .. DBcode .. ' JSTOR:' .. DBcode .. ']'
else
end
end
if (Kommentar ~= '') or (Online ~= '') then
Klammerinhalt = ''
if (Kommentar ~= '') and (Online ~= '') then
Klammerinhalt = Klammerinhalt .. Kommentar .. ', '
else
Klammerinhalt = Klammerinhalt .. Kommentar
end
if Online ~= '' then
Klammerinhalt = Klammerinhalt .. Online
if Zugriff ~= '' then
Klammerinhalt = Klammerinhalt .. ', abgerufen am <span style="white-space:nowrap;">' ..FormatDate(Zugriff) .. '</span>'
end
end
Ausgabe = Ausgabe .. ' (' .. Klammerinhalt .. ')'
end
-- Abschließender Punkt
Ausgabe = Ausgabe .. AddDelimiterIfNeeded(Ausgabe, '.')
return Ausgabe
end
----------
return p