Modul:Anrainerabfrage: Unterschied zwischen den Versionen

Aus GaretienWiki
Zur Navigation springen Zur Suche springen
VolkoV (D | B)
(Die Seite wurde neu angelegt: „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%]%]','')…“)
 
VolkoV (D | B)
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
local p = {}
local p = {}


function robusttrim(s)
require("Modul:Hilfsfunktionen")
if s==nil then return '' end
require("Modul:Text")
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)
function holeanrainersub(frame,anrainer)
Zeile 21: Zeile 17:


function holeanrainer(frame,landschaft)
function holeanrainer(frame,landschaft)
if landschaft=='' then return '' end
if landschaft=='' then return '' end
local anrainer=mw.smw.ask('[[Anrainer an::'..landschaft..']]'
--Finde alle Anrainer
.."|mainlabel=-"
local s='[[Anrainer an::'..landschaft..']]'
.."|?#-="
local a=frame:callParserFunction(
.."|?Kurzname#="
  '#ask',s,
.."|?Lehenstyp#="
  'mainlabel=-',
.."|?Einwohner="
  '?#=',
.."|limit=500"
  '?Kurzname#=',
.."|sort=Detailstufe von,Einwohner"
  '?Lehenstyp#=',
.."|order=asc,desc"
  '?Einwohner=',
)
  'limit=500',
if anrainer==nil then
  'sort=Detailstufe von,Einwohner',
return {}
  'order=asc,desc',
end
  'searchlabel=',
return anrainer
  '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
end



Version vom 26. Januar 2022, 09:54 Uhr

Dokumentation und Testfälle unter Modul:Anrainerabfrage/Doku.
local p = {}

require("Modul:Hilfsfunktionen")
require("Modul:Text")

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
	local anrainer=mw.smw.ask('[[Anrainer an::'..landschaft..']]'
		.."|mainlabel=-"
		.."|?#-="
		.."|?Kurzname#="
		.."|?Lehenstyp#="
		.."|?Einwohner="
		.."|limit=500"
		.."|sort=Detailstufe von,Einwohner"
		.."|order=asc,desc"
	)
	if anrainer==nil then
		return {}
	end
	return anrainer
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