Modul:Vorlage:Literatur

aus Wikipedia, der freien Enzyklopädie
Zur Navigation springen Zur Suche springen
Vorlagenprogrammierung Diskussionen Lua Unterseiten
Modul Deutsch

Modul: Dokumentation

Diese Seite enthält Code in derProgrammiersprache Lua.EinbindungszahlCirrus


localSerial="2019-06-11"
--[=[
Unterstützung für {{Literatur}}
]=]


-- Global
localZitation
localSelbst="Vorlage:Literatur"
localKategorieBeginn="Wikipedia:Vorlagenfehler"
localKategorien=
{Intern={s="/Interner Fehler"},
Parameter={s="/Parameterfehler"},
MonatTag={s="/Parameter Monat, Tag"},
Temp1={s="/Temp1"},
Temp2={s="/Temp2"},
Temp3={s="/Temp3"},
Temp4={s="/Temp4"},
}
localFehler=false
localSchrei
localExport={}



localfunctionfehler(art,anzeige)
-- Ein Fehler ist aufgetreten
-- Parameter:
-- art -- string mit Schlüsselwort zum Typ
-- anzeige -- string mit Einzelheiten, oder nil
localt
ifnotFehlerthen
Fehler={Intern={s="Interner Fehler",
k="Intern"},
Modul={s="Modul-Seite fehlt",
k="Intern"},
Format={s="Parameterformat"},
Konflikt={s="Parameterkonflikt",
k="Parameter"},
Parameter={s="Parameterfehler",
k="Parameter"},
Wert={s="Werte ungültig",
k="Parameter"},
MonatTag={k="MonatTag"},
Temp1={k="Temp1"},
Temp2={k="Temp2"},
Temp3={k="Temp3"},
Temp4={k="Temp4"}
}
end
t=Fehler[art]
iftthen
ift.sandnott.ethen
t.e=""
end
ifanzeigethen
locals=mw.text.nowiki(anzeige)
ift.ethen
t.e=string.format("%s; %s",t.e,s)
else
t.e=s
end
end
ift.kthen
localwk=Kategorien[t.k]
ifwkthen
wk.e=true
else
Fehler.Intern.e="Wartungskat"..wk
Kategorien.Intern.e=true
end
end
else
Fehler.Intern.e=string.format("fehler(%s) %s",
art,anzeigeor"???")
Kategorien.Intern.e=true
end
end-- fehler()



localfunctionfehlerliste()
-- Auflistung aller Fehlermeldungen und Kategorien
-- Rückgabewert: string mit formatiertem Ergebnis
localr=""
locals
ifFehlerthen
localsep=""
localsuffix
fork,vinpairs(Fehler)do
ifv.ethen
ifv.e:sub(1,1)==";"then
suffix=v.s..v.e
elseifv.sthen
suffix=string.format("%s: %s",v.s,v.e)
else
suffix=v.e
end
Schrei=string.format("%s%s*** %s",
Schreior"",
sep,
suffix)
sep=""
end
end-- for k, v
end
fork,vinpairs(Kategorien)do
ifv.ethen
ifv.s:sub(1,1)=="/"then
s=Selbst
else
s=""
end
r=string.format("%s[[Kategorie:%s/%s%s]]",
r,KategorieBeginn,s,v.s)
end
end-- for k, v
returnr
end-- fehlerliste()



localfolder=function()
-- Parameter-Konfiguration laden
locals=string.format("Module:%s/params",Selbst)
locallucky,params=pcall(mw.loadData,s)
iftype(params)=="table"then
Export.params=Export.flat(params)
else
error(string.format("[[%s]] fehlt",s))
end
end-- folder()



-------------------------------------------------------------------------



Export.flat=function(adapt)
-- Deep copy
-- Parameter:
-- adapt -- something
-- Returns atomic value, or deep copy of a table with no metatable
localr
iftype(adapt)=="table"then
r={}
fork,vinpairs(adapt)do
r[k]=Export.flat(v)
end-- for k, v
else
r=adapt
end
returnr
end-- Export.flat()



Export.Datum=function(args)
localr=args.Jahr
localshit
ifrthen
ifr:match("^%d+$")then
localDateTime=Zitation.fetch("DateTime")
localo=DateTime(r)
ifargs.Wocheandothen
o.week=tonumber(args.Woche)
iftostring(o.week)~=args.Wochethen
fehler("Wert","'Woche'="..args.Woche)
r=false
end
elseifargs.Monatthen
locals
ifargs.Monat:match("%l")then
localdm=DateTime(args.Monat)
ifdmandoanddm.monththen
o.month=dm.month
else
shit="'Monat'="..args.Monat
ifargs.Nummerthen
args.Nummer=string.format("%s, %s",
args.Nummer,
args.Monat)
else
args.Nummer=args.Monat
end
ifnotargs.Datumthen
args.Datum=r
end
r=false
end
else
s=args.Monat:match("^0?(1?%d)%.?$")
ifsandothen
o.month=tonumber(s)
end
ifoandtostring(o.month)~=sthen
fehler("MonatTag","'Monat'="..args.Monat)
r=false
elseifs~=args.Monatand
"0"..s~=args.Monatthen
fehler("MonatTag","'Monat'="..args.Monat)
end
end
ifoando.monthandargs.Tagthen
s=args.Tag:match("^0?([123]?%d)%.?$")
ifsthen
o.dom=tonumber(s)
end
iftostring(o.dom)~=sthen
shit="'Tag'="..args.Tag
r=false
elseifs~=args.Tagand
"0"..s~=args.Tagand
s.."."~=args.Tagthen
fehler("MonatTag","'Tag'="..args.Tag)
end
end
elseifargs.Tagthen
shit="'Tag' ohne 'Monat'"
r=false
end
ifrandothen
r=o
args.Datum=o
end
elseifr:match("^%[%d%d%d%d%]$")then
args.Datum=r:match("^%[(%d+)%]$")
ifargs.Kommentarthen
args.Kommentar=","..args.Kommentar
else
args.Kommentar=""
end
args.Kommentar=string.format("o. J. %s%s",
args.Jahr,args.Kommentar)
fehler("Wert","'Datum'=o.J.")
else
ifargs.Datumthen
fehler("Wert","'Jahr'="..args.Jahr)
else
args.Datum=args.Jahr
end
end
elseifargs.Monatorargs.Wocheorargs.Tagthen
fehler("Konflikt","'Jahr' fehlt bei spezifischem Datum")
else
r=args.Datum
end
ifshitthen
fehler("MonatTag",shit)
end
returnr
end-- Export.Datum()



localBand=function(args)
-- OBSOLET nach Bereinigung in allen NR
ifargs.Bandandnotargs.Sammelwerkthen
ifargs.Reiheandnotargs.BandReihethen
args.BandReihe=args.Band
args.Band=nil
fehler("Temp4")
fehler("Parameter","Band= meint BandReihe=")
elseifargs.Titeland
args.Titel:find("In:")then
fehler("Parameter","Band= ohne Sammelwerk=")
end
end
end-- Band()



localNummer=function(args)
-- OBSOLET nach Bereinigung in allen NR
ifargs.Nummerandnotargs.Sammelwerkthen
ifargs.Reiheandnotargs.NummerReihethen
args.NummerReihe=args.Nummer
args.Nummer=nil
fehler("Temp4")
fehler("Parameter","Nummer= meint NummerReihe=")
elseifargs.Titeland
args.Titel:find("In:")then
fehler("Parameter","Nummer= ohne Sammelwerk=")
end
end
end-- Nummer()



localHerausgeber=function(args)
-- OBSOLET nach Übernahme in Zentralmodul
ifargs.Autorandargs.Autor:find("(Hrsg.)",1,true)then
fehler("Wert",
"Autor= mit Klammer (Hrsg.); dafür Hrsg= verwenden")
end
end-- Herausgeber()



localSprache=function(args)
-- OBSOLET nach Bereinigung im Benutzerbereich
ifargs.Originalspracheand
notargs.Originaltiteland
notargs["Übersetzer"]and
notargs.Sprachethen
localt=mw.title.getCurrentTitle()
ift.namespace==2ort.namespace==3then
args.Sprache=args.Originalsprache
args.Originalsprache=nil
fehler("Parameter",
"Sprache= nutzen statt Originalsprache="
..args.Sprache)
fehler("Temp1")
end
end
end-- Sprache()



localformat=function(args)
-- Analysiere Argumente und bilde formatierte Zitation
-- Parameter:
-- args -- table mit Vorlagenparametern
-- Rückgabewert: string mit formatierter Zitation
localpars=Zitation.filter(args,Export.params.valid)
localr,schrott
Export.Datum(pars)
Herausgeber(pars)
Band(pars)
Nummer(pars)
Sprache(pars)
Zitation.filler(pars,Export.params.map)
ifZitation.othen
Zitation.fill("leise","leiser",true)
Zitation.fill("leise","Vorlage",pars.VorlageorSelbst)
Zitation.o.coins=true
end
r,schrott=Zitation.format()
ifschrottthen
ifSchreithen
Schrei=string.format("%s *** %s",Schrei,schrott)
else
Schrei=schrott
end
end
returnr
end-- format()



localfunctionf(arglist,frame)
-- Hauptfunktion zur Steuerung des Gesamtablaufs
-- Parameter:
-- arglist -- table, mit Vorlagenparametern
-- frame -- object, oder nil
-- Rückgabewert: string mit formatiertem Gesamtergebnis
-- einschließlich Fehlerliste und Kategorien
locallucky,r=pcall(require,"Modul:Zitation")
iftype(r)=="table"then
Zitation=r.Zitation()
Zitation.frame=frame
folder()
r=string.format("%s%s%s",
format(arglist),
fehlerliste(),
Zitation.failure(Schrei))
else
fehler("Modul",r)
r=fehlerliste()
end
returnr
end-- f()



-- Export
localp={}

functionp.export()
folder()
returnExport
end

functionp.test(a)
locallucky,r=pcall(f,a)
returnr
end

functionp.f(frame)
locallucky,r=pcall(f,frame:getParent().args,frame)
ifnotluckythen
mw.log(r)
fehler("Intern",r)
r=fehlerliste()
end
returnr
end

functionp.failsafe()
returnSerial
end

returnp