Bearbeiten von „Modul:Zitation“
Zur Navigation springen
Zur Suche springen
Die Bearbeitung kann rückgängig gemacht werden. Bitte prüfe den Vergleich unten, um sicherzustellen, dass du dies tun möchtest, und veröffentliche dann unten deine Änderungen, um die Bearbeitung rückgängig zu machen.
Aktuelle Version | Dein Text | ||
Zeile 1: | Zeile 1: | ||
local | 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 | |||
local | |||
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 | 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 | end | ||
if (text == '') or (mw.ustring.find(text, '[\.:!?.:!?。…][%]»«›‹‘’”“"\']*[%s( )]*$')) or (mw.ustring.find(text, '[\.:!?.:!?。…]</[%s%w]*>$')) then | |||
return '' | |||
else | |||
return delimiter | |||
end | |||
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 | 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 | |||
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 | 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 | |||
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 | ||
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 | end | ||
elseif ISSN ~= '' then | |||
Ausgabe = Ausgabe .. AddDelimiterIfNeeded(Ausgabe, ',') .. ' ' .. frame:expandTemplate{ title = 'ISSN', args = {ISSN} } | |||
end | |||
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 | |||
if | |||
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 | |||
end | |||
-- Abschließender Punkt | |||
Ausgabe = Ausgabe .. AddDelimiterIfNeeded(Ausgabe, '.') | |||
return Ausgabe | |||
return p | end | ||
---------- | |||
return p |