Modul:Lehensabfrage: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
VolkoV (Diskussion | Beiträge) K (Schützte „Modul:Lehensabfrage“: Automatisch gesperrt. ([Verschieben=Nur Administratoren erlauben] (unbeschränkt) [Bearbeiten=Nur Administratoren erlauben] (unbeschränkt))) |
K (SyncBot) |
||
| (2 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
local p = {} | local p = {} | ||
function | require("Modul:Hilfsfunktionen") | ||
require("Modul:Text") | |||
function holeLehenDetails(lehen) | |||
if lehen=='' then return {} end | |||
local s='[['..lehen..']]' | |||
local details=mw.smw.ask(s | |||
..'|mainlabel=-' | |||
..'|?Kurzname#=' | |||
..'|?Lehenstyp#=' | |||
..'|?Wappen ist#=' | |||
..'|?Vasallenlehen von#=' | |||
..'|limit=1' | |||
..'|searchlabel=' | |||
) | |||
if details==nil then return {} end | |||
return details | |||
end | end | ||
function | function holeLehenSub(mitglied) | ||
if mitglied=='' then return {} end | |||
local s='[[-has subobject::'..mitglied..']]' | |||
local lehen=mw.smw.ask(s | |||
..'|mainlabel=-' | |||
..'|?Herrscher von Lehen#=' | |||
..'|?Herrscher von Art#=' | |||
..'|?Herrscher von VonIndex#=' | |||
..'|?Herrscher von BisIndex#=' | |||
..'|limit=500' | |||
..'|searchlabel=' | |||
..'|sort=Herrscher von VonIndex' | |||
) | |||
if lehen==nil then return {} end | |||
return lehen | |||
end | end | ||
function findeFamilienmitglieder(familie) | |||
local s='<q>[[Familienmitglied von::'..familie..']] OR [[Familienmitglied von.Untergruppierung von::'..familie..']]</q>' | |||
local mitglieder=mw.smw.ask(s | |||
..'|mainlabel=-' | |||
..'|?#-=' | |||
..'|limit=500' | |||
..'|searchlabel=' | |||
) | |||
if mitglieder==nil then mitglieder={} end | |||
return mitglieder | |||
end | |||
function | function findeAlleLehen(mitglieder,jahr) | ||
local allelehen={} | |||
for mkey,mvalue in pairs(mitglieder) do | |||
local lehen=holeLehenSub(mvalue[1]) | |||
for lkey,lvalue in pairs(lehen) do | |||
if lvalue[1]~=nil and lvalue[2]~=nil and lvalue[3]~=nil and lvalue[4]~=nil then | |||
if allelehen[lvalue[1]]==nil then allelehen[lvalue[1]]={} end | |||
local von=lvalue[3]/10000 | |||
local bis=lvalue[4]/10000 | |||
if allelehen[lvalue[1]]['aktuell']==nil then allelehen[lvalue[1]]['aktuell']=false end | |||
if bis>jahr then | |||
bis=jahr | |||
allelehen[lvalue[1]]['aktuell']=true | |||
end | |||
local v=3 | |||
if lvalue[2]=='Titel' then v=2 end | |||
if lvalue[2]=='Regent' then v=1 end | |||
for i=von,bis,1 do | |||
allelehen[lvalue[1]][i]=v | |||
end | |||
end | |||
end | |||
end | |||
return allelehen | |||
end | |||
function verdichteLehen(allelehen,manuell) | |||
local lehensarten={} | |||
lehensarten['Reich']='Reiche' | |||
lehensarten['Provinz']='Provinzen' | |||
lehensarten['Grafschaft']='Grafschaften' | |||
lehensarten['Baronie']='Baronien' | |||
lehensarten['Junkertum']='Junkertümer' | |||
lehensarten['Herrschaft']='Herrschaften' | |||
lehensarten['Ortschaft']='Ortschaften' | |||
lehensarten['Bauwerk']='Bauwerke' | |||
local lehenverdichtet={} | |||
for akey,avalue in pairs(allelehen) do | |||
local countr=0; | |||
local countt=0; | |||
for jkey,jvalue in pairs(avalue) do | |||
if (jvalue==1)or(jvalue==3) then countr=countr+1 end | |||
if (jvalue==2)or(jvalue==3) then countt=countt+1 end | |||
end | |||
local details=holeLehenDetails(akey) | |||
if (details[1]~=nil) and (details[1][2]~=nil) and (lehensarten[details[1][2]]~=nil) then | |||
local art=lehensarten[details[1][2]] | |||
if lehenverdichtet[art]==nil then lehenverdichtet[art]={} end | |||
lehenverdichtet[art][akey]={} | |||
lehenverdichtet[art][akey]['kurzname']=details[1][1] | |||
lehenverdichtet[art][akey]['aktuell']=avalue['aktuell'] | |||
lehenverdichtet[art][akey]['regent']=countr | |||
lehenverdichtet[art][akey]['titel']=countt | |||
lehenverdichtet[art][akey]['wappen']=details[1][3] | |||
lehenverdichtet[art][akey]['hegemon']=details[1][4] | |||
end | |||
end | |||
--manuell einmischen, nur wenn nicht bereits dabei | |||
local manuellt=mw.text.split(manuell,',',true) | |||
for mkey,akey in pairs(manuellt) do | |||
local details=holeLehenDetails(akey) | |||
if (details[1]~=nil) and (details[1][2]~=nil) and (lehensarten[details[1][2]]~=nil) then | |||
local art=lehensarten[details[1][2]] | |||
if lehenverdichtet[art]==nil then lehenverdichtet[art]={} end | |||
if lehenverdichtet[art][akey]==nil then | |||
lehenverdichtet[art][akey]={} | |||
lehenverdichtet[art][akey]['kurzname']=details[1][1] | |||
lehenverdichtet[art][akey]['aktuell']=true -- geht natürlich nicht | |||
lehenverdichtet[art][akey]['regent']=1 --geht natürlich nicht | |||
lehenverdichtet[art][akey]['titel']=1 --geht natürlich nicht | |||
lehenverdichtet[art][akey]['wappen']=details[1][3] | |||
lehenverdichtet[art][akey]['hegemon']=details[1][4] | |||
end | |||
end | |||
end | |||
return lehenverdichtet | |||
end | end | ||
function | function holeLehen(jahr,familie,manuell) | ||
if familie=='' then return '' end | |||
--Finde alle Familienmitglieder | |||
local mitglieder=findeFamilienmitglieder(familie) | |||
--Finde alle Lehen dieser Familienmitglieder | |||
local allelehen=findeAlleLehen(mitglieder,jahr) | |||
--Verdichte das Ergebnis auf Lehensart und Lehen | |||
local lehenverdichtet=verdichteLehen(allelehen,manuell) | |||
return lehenverdichtet | |||
end | end | ||
function | function sortiereLehen(t,a,b) | ||
return t[a]['kurzname']<t[b]['kurzname'] | |||
end | end | ||
function | function sortiereLehensarten(t,a,b) | ||
local lehenssort={} | |||
lehenssort['Reiche']=0 | |||
lehenssort['Provinzen']=1 | |||
lehenssort['Grafschaften']=2 | |||
lehenssort['Baronien']=3 | |||
lehenssort['Junkertümer']=4 | |||
lehenssort['Herrschaften']=5 | |||
lehenssort['Ortschaften']=6 | |||
lehenssort['Bauwerke']=7 | |||
return lehenssort[a]<lehenssort[b] | |||
end | end | ||
function | function formatiereLehen(lehenverdichtet,weiterelehen,weitereaemter,aktuell) | ||
local result='' | |||
for vkey,vvalue in spairs(lehenverdichtet,sortiereLehensarten) do | |||
local werte={} | |||
for lkey,lvalue in spairs(vvalue,sortiereLehen) do | |||
if aktuell==lvalue['aktuell'] then | |||
local regent='' | |||
if lvalue['titel']==0 and lvalue['regent']>0 then regent=' (Regentschaft)' end | |||
table.insert(werte,'[['..lkey..'|'..lvalue['kurzname']..']]'..regent) | |||
end | |||
end | |||
result=result..subZeile(vkey,table.concat(werte,', ')) | |||
end | |||
result=result..subZeile('Weitere Lehen',weiterelehen) | |||
result=result..subZeile('Weitere Ämter',weitereaemter) | |||
local pre='Aktuelle ' | |||
if not aktuell then pre='Ehemalige ' end | |||
return subZeilengruppe(pre..'Lehen und Ämter',result) | |||
end | end | ||
function | function kategorieHegemonRekursiv(lehen,kurzname,rekursion) | ||
if rekursion==0 then return '' end | |||
if type(lehen)=='table' then | |||
local result='' | |||
for key,value in pairs(lehen) do | |||
result=result..kategorieHegemonRekursiv(value,kurzname,rekursion) | |||
end | |||
return result | |||
end | |||
if lehen==nil or lehen=='' or type(lehen)~='string' then return '' end | |||
local title=mw.title.new(lehen).text | |||
local s='[['..lehen..']]' | |||
local hegemon=mw.smw.ask(s | |||
..'|mainlabel=-' | |||
..'|?Vasallenlehen von#=' | |||
..'|limit=1' | |||
..'|searchlabel=' | |||
) | |||
local add='' | |||
if hegemon[1][1]~=nil then | |||
add=kategorieHegemonRekursiv(hegemon[1][1],kurzname,rekursion-1) | |||
end | |||
return '[[Kategorie:'..title..'|'..kurzname..']]'..add | |||
end | end | ||
function kategorisiereLehen(lehenverdichtet) | |||
local result='' | |||
for vkey,vvalue in spairs(lehenverdichtet,sortiereLehensarten) do | |||
local werte={} | |||
for lkey,lvalue in spairs(vvalue,sortiereLehen) do | |||
local title=mw.title.new(lkey).text | |||
result=result..' [[Kategorie:'..title..'|'..lvalue['kurzname']..']]'..kategorieHegemonRekursiv(lvalue['hegemon'],lvalue['kurzname'],7) | |||
end | |||
end | |||
return result | |||
end | |||
function formatiereLehenIcons(lehenverdichtet) | |||
local result='' | |||
for vkey,vvalue in spairs(lehenverdichtet,sortiereLehensarten) do | |||
local werte={} | |||
for lkey,lvalue in spairs(vvalue,sortiereLehen) do | |||
if lvalue['aktuell'] then | |||
result=result..'[['..lvalue['wappen']..'|20px|link='..lkey..']] ' | |||
end | |||
end | |||
end | |||
return result | |||
end | |||
function p.Abfrage(frame) | function p.Abfrage(frame) | ||
if (frame.args[1]==nil) then | |||
return 'no parameter found' | |||
end | |||
catname=robusttrim(frame.args[2]) | |||
weiterelehen=robusttrim(frame.args[3]) | |||
weitereaemter=robusttrim(frame.args[4]) | |||
manuell=robusttrim(frame.args[5]) | |||
local familie=frame.args[1] | |||
local lehen=holeLehen(1047,familie,manuell) | |||
local formatiert=formatiereLehen(lehen,weiterelehen,weitereaemter,true) | |||
frame:callParserFunction('#vardefine','LehensabfrageIcons',formatiereLehenIcons(lehen)) | |||
frame:callParserFunction('#vardefine','Lehensabfrage',formatiert) | |||
return formatiert..formatiereLehen(lehen,'','',false)..kategorisiereLehen(lehen) | |||
end | end | ||
return p | return p | ||
Aktuelle Version vom 1. Juli 2024, 11:06 Uhr
Dokumentation und Testfälle unter Modul:Lehensabfrage/Doku.
local p = {}
require("Modul:Hilfsfunktionen")
require("Modul:Text")
function holeLehenDetails(lehen)
if lehen=='' then return {} end
local s='[['..lehen..']]'
local details=mw.smw.ask(s
..'|mainlabel=-'
..'|?Kurzname#='
..'|?Lehenstyp#='
..'|?Wappen ist#='
..'|?Vasallenlehen von#='
..'|limit=1'
..'|searchlabel='
)
if details==nil then return {} end
return details
end
function holeLehenSub(mitglied)
if mitglied=='' then return {} end
local s='[[-has subobject::'..mitglied..']]'
local lehen=mw.smw.ask(s
..'|mainlabel=-'
..'|?Herrscher von Lehen#='
..'|?Herrscher von Art#='
..'|?Herrscher von VonIndex#='
..'|?Herrscher von BisIndex#='
..'|limit=500'
..'|searchlabel='
..'|sort=Herrscher von VonIndex'
)
if lehen==nil then return {} end
return lehen
end
function findeFamilienmitglieder(familie)
local s='<q>[[Familienmitglied von::'..familie..']] OR [[Familienmitglied von.Untergruppierung von::'..familie..']]</q>'
local mitglieder=mw.smw.ask(s
..'|mainlabel=-'
..'|?#-='
..'|limit=500'
..'|searchlabel='
)
if mitglieder==nil then mitglieder={} end
return mitglieder
end
function findeAlleLehen(mitglieder,jahr)
local allelehen={}
for mkey,mvalue in pairs(mitglieder) do
local lehen=holeLehenSub(mvalue[1])
for lkey,lvalue in pairs(lehen) do
if lvalue[1]~=nil and lvalue[2]~=nil and lvalue[3]~=nil and lvalue[4]~=nil then
if allelehen[lvalue[1]]==nil then allelehen[lvalue[1]]={} end
local von=lvalue[3]/10000
local bis=lvalue[4]/10000
if allelehen[lvalue[1]]['aktuell']==nil then allelehen[lvalue[1]]['aktuell']=false end
if bis>jahr then
bis=jahr
allelehen[lvalue[1]]['aktuell']=true
end
local v=3
if lvalue[2]=='Titel' then v=2 end
if lvalue[2]=='Regent' then v=1 end
for i=von,bis,1 do
allelehen[lvalue[1]][i]=v
end
end
end
end
return allelehen
end
function verdichteLehen(allelehen,manuell)
local lehensarten={}
lehensarten['Reich']='Reiche'
lehensarten['Provinz']='Provinzen'
lehensarten['Grafschaft']='Grafschaften'
lehensarten['Baronie']='Baronien'
lehensarten['Junkertum']='Junkertümer'
lehensarten['Herrschaft']='Herrschaften'
lehensarten['Ortschaft']='Ortschaften'
lehensarten['Bauwerk']='Bauwerke'
local lehenverdichtet={}
for akey,avalue in pairs(allelehen) do
local countr=0;
local countt=0;
for jkey,jvalue in pairs(avalue) do
if (jvalue==1)or(jvalue==3) then countr=countr+1 end
if (jvalue==2)or(jvalue==3) then countt=countt+1 end
end
local details=holeLehenDetails(akey)
if (details[1]~=nil) and (details[1][2]~=nil) and (lehensarten[details[1][2]]~=nil) then
local art=lehensarten[details[1][2]]
if lehenverdichtet[art]==nil then lehenverdichtet[art]={} end
lehenverdichtet[art][akey]={}
lehenverdichtet[art][akey]['kurzname']=details[1][1]
lehenverdichtet[art][akey]['aktuell']=avalue['aktuell']
lehenverdichtet[art][akey]['regent']=countr
lehenverdichtet[art][akey]['titel']=countt
lehenverdichtet[art][akey]['wappen']=details[1][3]
lehenverdichtet[art][akey]['hegemon']=details[1][4]
end
end
--manuell einmischen, nur wenn nicht bereits dabei
local manuellt=mw.text.split(manuell,',',true)
for mkey,akey in pairs(manuellt) do
local details=holeLehenDetails(akey)
if (details[1]~=nil) and (details[1][2]~=nil) and (lehensarten[details[1][2]]~=nil) then
local art=lehensarten[details[1][2]]
if lehenverdichtet[art]==nil then lehenverdichtet[art]={} end
if lehenverdichtet[art][akey]==nil then
lehenverdichtet[art][akey]={}
lehenverdichtet[art][akey]['kurzname']=details[1][1]
lehenverdichtet[art][akey]['aktuell']=true -- geht natürlich nicht
lehenverdichtet[art][akey]['regent']=1 --geht natürlich nicht
lehenverdichtet[art][akey]['titel']=1 --geht natürlich nicht
lehenverdichtet[art][akey]['wappen']=details[1][3]
lehenverdichtet[art][akey]['hegemon']=details[1][4]
end
end
end
return lehenverdichtet
end
function holeLehen(jahr,familie,manuell)
if familie=='' then return '' end
--Finde alle Familienmitglieder
local mitglieder=findeFamilienmitglieder(familie)
--Finde alle Lehen dieser Familienmitglieder
local allelehen=findeAlleLehen(mitglieder,jahr)
--Verdichte das Ergebnis auf Lehensart und Lehen
local lehenverdichtet=verdichteLehen(allelehen,manuell)
return lehenverdichtet
end
function sortiereLehen(t,a,b)
return t[a]['kurzname']<t[b]['kurzname']
end
function sortiereLehensarten(t,a,b)
local lehenssort={}
lehenssort['Reiche']=0
lehenssort['Provinzen']=1
lehenssort['Grafschaften']=2
lehenssort['Baronien']=3
lehenssort['Junkertümer']=4
lehenssort['Herrschaften']=5
lehenssort['Ortschaften']=6
lehenssort['Bauwerke']=7
return lehenssort[a]<lehenssort[b]
end
function formatiereLehen(lehenverdichtet,weiterelehen,weitereaemter,aktuell)
local result=''
for vkey,vvalue in spairs(lehenverdichtet,sortiereLehensarten) do
local werte={}
for lkey,lvalue in spairs(vvalue,sortiereLehen) do
if aktuell==lvalue['aktuell'] then
local regent=''
if lvalue['titel']==0 and lvalue['regent']>0 then regent=' (Regentschaft)' end
table.insert(werte,'[['..lkey..'|'..lvalue['kurzname']..']]'..regent)
end
end
result=result..subZeile(vkey,table.concat(werte,', '))
end
result=result..subZeile('Weitere Lehen',weiterelehen)
result=result..subZeile('Weitere Ämter',weitereaemter)
local pre='Aktuelle '
if not aktuell then pre='Ehemalige ' end
return subZeilengruppe(pre..'Lehen und Ämter',result)
end
function kategorieHegemonRekursiv(lehen,kurzname,rekursion)
if rekursion==0 then return '' end
if type(lehen)=='table' then
local result=''
for key,value in pairs(lehen) do
result=result..kategorieHegemonRekursiv(value,kurzname,rekursion)
end
return result
end
if lehen==nil or lehen=='' or type(lehen)~='string' then return '' end
local title=mw.title.new(lehen).text
local s='[['..lehen..']]'
local hegemon=mw.smw.ask(s
..'|mainlabel=-'
..'|?Vasallenlehen von#='
..'|limit=1'
..'|searchlabel='
)
local add=''
if hegemon[1][1]~=nil then
add=kategorieHegemonRekursiv(hegemon[1][1],kurzname,rekursion-1)
end
return '[[Kategorie:'..title..'|'..kurzname..']]'..add
end
function kategorisiereLehen(lehenverdichtet)
local result=''
for vkey,vvalue in spairs(lehenverdichtet,sortiereLehensarten) do
local werte={}
for lkey,lvalue in spairs(vvalue,sortiereLehen) do
local title=mw.title.new(lkey).text
result=result..' [[Kategorie:'..title..'|'..lvalue['kurzname']..']]'..kategorieHegemonRekursiv(lvalue['hegemon'],lvalue['kurzname'],7)
end
end
return result
end
function formatiereLehenIcons(lehenverdichtet)
local result=''
for vkey,vvalue in spairs(lehenverdichtet,sortiereLehensarten) do
local werte={}
for lkey,lvalue in spairs(vvalue,sortiereLehen) do
if lvalue['aktuell'] then
result=result..'[['..lvalue['wappen']..'|20px|link='..lkey..']] '
end
end
end
return result
end
function p.Abfrage(frame)
if (frame.args[1]==nil) then
return 'no parameter found'
end
catname=robusttrim(frame.args[2])
weiterelehen=robusttrim(frame.args[3])
weitereaemter=robusttrim(frame.args[4])
manuell=robusttrim(frame.args[5])
local familie=frame.args[1]
local lehen=holeLehen(1047,familie,manuell)
local formatiert=formatiereLehen(lehen,weiterelehen,weitereaemter,true)
frame:callParserFunction('#vardefine','LehensabfrageIcons',formatiereLehenIcons(lehen))
frame:callParserFunction('#vardefine','Lehensabfrage',formatiert)
return formatiert..formatiereLehen(lehen,'','',false)..kategorisiereLehen(lehen)
end
return p