Modul:Anrainerabfrage
Zur Navigation springen
Zur Suche springen
Dokumentation und Testfälle unter Modul:Anrainerabfrage/Doku.
local p = {}
function robusttrim(s)
if s==nil then return '' end
local p=mw.ustring.gsub(s,'%[%[SMW::on%]%]','')
p=mw.ustring.gsub(p,'%[%[SMW::off%]%]','')
return mw.text.trim(p)
end
function holeanrainersub(frame,anrainer)
local result={}
--warum auch immer de und dl vertauscht zurückgeliefert werden...
for da,dk,de,dl in mw.ustring.gmatch(anrainer, "([^%(]*)%(([^,]*),([^,]*),([^%)]*)%)") do
result['Artikel']=robusttrim(da)
result['Kurzname']=robusttrim(dk)
result['Lehenstyp']=robusttrim(dl)
result['Einwohner']=robusttrim(de)
end
return result
end
function holeanrainer(frame,landschaft)
if landschaft=='' then return '' end
--Finde alle Anrainer
local s='[[Anrainer an::'..landschaft..']]'
local a=frame:callParserFunction(
'#ask',s,
'mainlabel=-',
'?#=',
'?Kurzname#=',
'?Lehenstyp#=',
'?Einwohner=',
'limit=500',
'sort=Detailstufe von,Einwohner',
'order=asc,desc',
'searchlabel=',
'format=list'
)
local result={}
for value in mw.ustring.gmatch(a..', ', "([^%)]*%)), ") do
if robusttrim(value)~='' then
local l=holeanrainersub(frame,value)
local dl=l["Lehenstyp"]
if(dl==nil) then dl='Unbekannt' end
local da=l["Artikel"]
if(da==nil) then da='Unbekannt' end
local dk=l["Kurzname"]
if(dk==nil) then dk=value end
local de=l["Einwohner"]
if(de==nil) then de='0' end
if(result[dl]==nil) then result[dl]={} end
table.insert(result[dl],{["Artikel"]=da,["Kurzname"]=dk,["Einwohner"]=de});
end
end
return result
end
function kategorisiereUndHegemon(frame,lehen,title,catname,rekursion)
if lehen=='' then return '' end
if rekursion==0 then return '' end
local heg=frame:callParserFunction(
'#show',lehen,
'?Vasallenlehen von#'
)
hegsub=''
if heg~=''then
t=mw.title.new(heg).text
hegsub=kategorisiereUndHegemon(frame,heg,t,catname,rekursion-1)
end
return '[[Kategorie:'..title..'|'..catname..']]'..hegsub
end
function printanrainersub(frame,anrainertable,catname,art,artpl)
result=''
if(anrainertable[art]~=nil) then
result=''
for key,value in pairs(anrainertable[art]) do
t=mw.title.new(value["Artikel"]).text
result=result..'[['..value["Artikel"]..'|'..value["Kurzname"]..']] ('..value["Einwohner"]..' EW)'..kategorisiereUndHegemon(frame,value["Artikel"],t,catname,7)..', '
end
end
result=mw.ustring.sub(result,1,mw.ustring.len(result)-2)
return frame:callParserFunction('#invoke','Text','Zeile',artpl,result)
end
function printanrainer(frame,anrainertable,catname,weitereanrainer)
result=''
result=result..printanrainersub(frame,anrainertable,catname,'Reich','Reiche')
result=result..printanrainersub(frame,anrainertable,catname,'Provinz','Provinzen')
result=result..printanrainersub(frame,anrainertable,catname,'Grafschaft','Grafschaften')
result=result..printanrainersub(frame,anrainertable,catname,'Baronie','Baronien')
result=result..printanrainersub(frame,anrainertable,catname,'Junkertum','Junkertümer')
result=result..printanrainersub(frame,anrainertable,catname,'Ortschaft','Ortschaften')
result=result..printanrainersub(frame,anrainertable,catname,'Bauwerk','Bauwerke')
result=result..printanrainersub(frame,anrainertable,catname,'Unbekannt','Unbekannte')
result=result..frame:callParserFunction('#invoke','Text','Zeile','Sonstige',weitereanrainer)
return frame:callParserFunction('#invoke','Text','Zeilengruppe','Anrainer',result)
end
function p.Abfrage(frame)
if (frame.args[1]==nil) then
return "no parameter found"
end
catname=robusttrim(frame.args[2])
weitereanrainer=robusttrim(frame.args[3])
landschaft=frame.args[1]
result=holeanrainer(frame,landschaft)
return printanrainer(frame,result,catname,weitereanrainer)
end
return p