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