Modul:Anrainerabfrage: Unterschied zwischen den Versionen

Aus TobrienWiki
Zur Navigation springen Zur Suche springen
K (Automatisch synchronisiert.)
K (Automatisch synchronisiert.)
 
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 holeanrainer(landschaft)
local result={}
+
if landschaft=='' then return '' end
--warum auch immer de und dl vertauscht zurückgeliefert werden...
+
local anrainer=mw.smw.ask('[[Anrainer an::'..landschaft..']]'
for da,dk,de,dl in mw.ustring.gmatch(anrainer, "([^%(]*)%(([^,]*),([^,]*),([^%)]*)%)") do
+
.."|mainlabel=-"
  result['Artikel']=robusttrim(da)
+
.."|?#-="
  result['Kurzname']=robusttrim(dk)
+
.."|?Kurzname#="
  result['Lehenstyp']=robusttrim(dl)
+
.."|?Lehenstyp#="
  result['Einwohner']=robusttrim(de)
+
.."|?Einwohner="
end
+
.."|limit=500"
return result
+
.."|sort=Detailstufe von,Einwohner"
 +
.."|order=asc,desc"
 +
)
 +
if anrainer==nil then
 +
return {}
 +
end
 +
return anrainer
 
end
 
end
  
function holeanrainer(frame,landschaft)
+
function kategorisiereUndHegemon(lehen,title,catname,rekursion)
if landschaft=='' then return '' end
+
if rekursion==0 then return '' end
+
if lehen=='' then return '' end
--Finde alle Anrainer
+
local s='[[Anrainer an::'..landschaft..']]'
+
local heg=mw.smw.ask('[['..lehen[1]..']]'
local a=frame:callParserFunction(
+
.."|mainlabel=-"
  '#ask',s,
+
..'|?Vasallenlehen von#=')
  'mainlabel=-',
+
hegsub=''
  '?#=',
+
if false and(heg[1]~=nil)and(heg[1][1]~=nil) then
  '?Kurzname#=',
+
t=mw.title.new(heg[1][1]).text
  '?Lehenstyp#=',
+
hegsub=kategorisiereUndHegemon(heg[1][1],t,catname,rekursion-1)
  '?Einwohner=',
+
end
  'limit=500',
+
return '[[Kategorie:'..title..'|'..catname..']]'..hegsub
  '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
 
end
  
  
function printanrainersub(frame,anrainertable,catname,art,artpl)  
+
function printanrainersub(anrainertable,catname,art,artpl)  
result=''
+
result=''
if(anrainertable[art]~=nil) then
+
for key,value in pairs(anrainertable) do
  result=''
+
if(value[3]==art) then
  for key,value in pairs(anrainertable[art]) do
+
t=mw.title.new(value[1]).text
  t=mw.title.new(value["Artikel"]).text
+
result=result..'[['..value[1]..'|'..value[2]..']] ('..value[4]..' EW)'..kategorisiereUndHegemon(value,t,catname,7)..', '
  result=result..'[['..value["Artikel"]..'|'..value["Kurzname"]..']] ('..value["Einwohner"]..' EW)'..kategorisiereUndHegemon(frame,value["Artikel"],t,catname,7)..', '
+
end
  end
+
end
end
+
result=mw.ustring.sub(result,1,mw.ustring.len(result)-2)
result=mw.ustring.sub(result,1,mw.ustring.len(result)-2)
+
return subZeile(artpl,result)
return frame:callParserFunction('#invoke','Text','Zeile',artpl,result)
 
 
end
 
end
  
function printanrainer(frame,anrainertable,catname,weitereanrainer)
+
function printanrainer(anrainertable,catname,weitereanrainer)
result=''
+
result=''
result=result..printanrainersub(frame,anrainertable,catname,'Reich','Reiche')
+
result=result..printanrainersub(anrainertable,catname,'Reich','Reiche')
result=result..printanrainersub(frame,anrainertable,catname,'Provinz','Provinzen')
+
result=result..printanrainersub(anrainertable,catname,'Provinz','Provinzen')
result=result..printanrainersub(frame,anrainertable,catname,'Grafschaft','Grafschaften')
+
result=result..printanrainersub(anrainertable,catname,'Grafschaft','Grafschaften')
result=result..printanrainersub(frame,anrainertable,catname,'Baronie','Baronien')
+
result=result..printanrainersub(anrainertable,catname,'Baronie','Baronien')
result=result..printanrainersub(frame,anrainertable,catname,'Junkertum','Junkertümer')
+
result=result..printanrainersub(anrainertable,catname,'Junkertum','Junkertümer')
result=result..printanrainersub(frame,anrainertable,catname,'Ortschaft','Ortschaften')
+
result=result..printanrainersub(anrainertable,catname,'Ortschaft','Ortschaften')
result=result..printanrainersub(frame,anrainertable,catname,'Bauwerk','Bauwerke')
+
result=result..printanrainersub(anrainertable,catname,'Bauwerk','Bauwerke')
result=result..printanrainersub(frame,anrainertable,catname,'Unbekannt','Unbekannte')
+
result=result..printanrainersub(anrainertable,catname,'Unbekannt','Unbekannte')
result=result..frame:callParserFunction('#invoke','Text','Zeile','Sonstige',weitereanrainer)
+
result=result..subZeile('Sonstige',weitereanrainer)
return frame:callParserFunction('#invoke','Text','Zeilengruppe','Anrainer',result)
+
return subZeilengruppe('Anrainer',result)
 
end
 
end
  
 
function p.Abfrage(frame)
 
function p.Abfrage(frame)
if (frame.args[1]==nil) then
+
if (frame.args[1]==nil) then
  return "no parameter found"
+
return "no parameter found"
end
+
end
catname=robusttrim(frame.args[2])
+
catname=robusttrim(frame.args[2])
weitereanrainer=robusttrim(frame.args[3])
+
weitereanrainer=robusttrim(frame.args[3])
landschaft=frame.args[1]
+
landschaft=frame.args[1]
result=holeanrainer(frame,landschaft)
+
result=holeanrainer(landschaft)
return printanrainer(frame,result,catname,weitereanrainer)
+
return printanrainer(result,catname,weitereanrainer)
 
end
 
end
  
 
return p
 
return p

Aktuelle Version vom 23. März 2022, 06:05 Uhr

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

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

function holeanrainer(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(lehen,title,catname,rekursion)
	if rekursion==0 then return '' end
	if lehen=='' then return '' end
	
	local heg=mw.smw.ask('[['..lehen[1]..']]'
		.."|mainlabel=-"
		..'|?Vasallenlehen von#=')
	hegsub=''
	if false and(heg[1]~=nil)and(heg[1][1]~=nil) then
		t=mw.title.new(heg[1][1]).text
		hegsub=kategorisiereUndHegemon(heg[1][1],t,catname,rekursion-1)
	end
	return '[[Kategorie:'..title..'|'..catname..']]'..hegsub
end


function printanrainersub(anrainertable,catname,art,artpl) 
	result=''
	for key,value in pairs(anrainertable) do
		if(value[3]==art) then
			t=mw.title.new(value[1]).text
			result=result..'[['..value[1]..'|'..value[2]..']] ('..value[4]..' EW)'..kategorisiereUndHegemon(value,t,catname,7)..', '
		end
	end
	result=mw.ustring.sub(result,1,mw.ustring.len(result)-2)
	return subZeile(artpl,result)
end

function printanrainer(anrainertable,catname,weitereanrainer)
	result=''
	result=result..printanrainersub(anrainertable,catname,'Reich','Reiche')
	result=result..printanrainersub(anrainertable,catname,'Provinz','Provinzen')
	result=result..printanrainersub(anrainertable,catname,'Grafschaft','Grafschaften')
	result=result..printanrainersub(anrainertable,catname,'Baronie','Baronien')
	result=result..printanrainersub(anrainertable,catname,'Junkertum','Junkertümer')
	result=result..printanrainersub(anrainertable,catname,'Ortschaft','Ortschaften')
	result=result..printanrainersub(anrainertable,catname,'Bauwerk','Bauwerke')
	result=result..printanrainersub(anrainertable,catname,'Unbekannt','Unbekannte')
	result=result..subZeile('Sonstige',weitereanrainer)
	return subZeilengruppe('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(landschaft)
	return printanrainer(result,catname,weitereanrainer)
end

return p