Modul:Zitation
Zur Navigation springen
Zur Suche springen
Die Dokumentation für dieses Modul kann unter Modul:Zitation/Doku erstellt werden
Skriptfehler: Interner Lua-Fehler: Der Interpreter beendet sich mit dem Status 127.
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