Modul:Lehensabfrage: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
| Zeile 25: | Zeile 25: | ||
end | end | ||
function | function holeLehenDetails(lehen) | ||
if lehen=='' then return {} end | if lehen=='' then return {} end | ||
local s='[['..lehen..']]' | local s='[['..lehen..']]' | ||
| Zeile 32: | Zeile 32: | ||
..'|?Kurzname#=' | ..'|?Kurzname#=' | ||
..'|?Lehenstyp#=' | ..'|?Lehenstyp#=' | ||
..'|?Wappen ist#=' | |||
..'|?Vasallenlehen von#=' | |||
..'|limit=1' | ..'|limit=1' | ||
..'|searchlabel=' | ..'|searchlabel=' | ||
| Zeile 39: | Zeile 41: | ||
end | end | ||
function | function holeLehenSub(mitglied) | ||
if mitglied=='' then return {} end | if mitglied=='' then return {} end | ||
local s='[[-has subobject::'..mitglied..']]' | local s='[[-has subobject::'..mitglied..']]' | ||
| Zeile 60: | Zeile 62: | ||
end | end | ||
function | function findeFamilienmitglieder(familie) | ||
local s='<q>[[Familienmitglied von::'..familie..']] OR [[Familienmitglied von.Untergruppierung von::'..familie..']]</q>' | local s='<q>[[Familienmitglied von::'..familie..']] OR [[Familienmitglied von.Untergruppierung von::'..familie..']]</q>' | ||
local mitglieder=mw.smw.ask(s | local mitglieder=mw.smw.ask(s | ||
| Zeile 80: | Zeile 71: | ||
) | ) | ||
if mitglieder==nil then mitglieder={} end | if mitglieder==nil then mitglieder={} end | ||
return mitglieder | |||
end | |||
function findeAlleLehen(mitglieder) | |||
local allelehen={} | local allelehen={} | ||
for mkey,mvalue in pairs(mitglieder) do | for mkey,mvalue in pairs(mitglieder) do | ||
local lehen= | local lehen=holeLehenSub(mvalue[1]) | ||
for lkey,lvalue in pairs(lehen) do | for lkey,lvalue in pairs(lehen) do | ||
if lvalue[1]~=nil then | if lvalue[1]~=nil then | ||
| Zeile 105: | Zeile 97: | ||
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' | |||
--TODO: manuell einmischen | |||
local lehenverdichtet={} | local lehenverdichtet={} | ||
for akey,avalue in pairs(allelehen) do | for akey,avalue in pairs(allelehen) do | ||
| Zeile 114: | Zeile 118: | ||
if (jvalue==2)or(jvalue==3) then countt=countt+1 end | if (jvalue==2)or(jvalue==3) then countt=countt+1 end | ||
end | end | ||
local details= | local details=holeLehenDetails(akey) | ||
if (details[1]~=nil) and (details[1][2]~=nil) and (lehensarten[details[1][2]]~=nil) then | if (details[1]~=nil) and (details[1][2]~=nil) and (lehensarten[details[1][2]]~=nil) then | ||
local art=lehensarten[details[1][2]] | local art=lehensarten[details[1][2]] | ||
| Zeile 125: | Zeile 129: | ||
end | 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() | |||
--Verdichte das Ergebnis auf Lehensart und Lehen | |||
local lehenverdichtet=verdichteLehen(allelehen,manuell) | |||
local result='' | local result='' | ||
| Zeile 153: | Zeile 171: | ||
manuell=robusttrim(frame.args[5]) | manuell=robusttrim(frame.args[5]) | ||
local familie=frame.args[1] | local familie=frame.args[1] | ||
local result= | local result=holeLehen(1047,familie,manuell) | ||
return result | |||
end | end | ||
return p | return p | ||
Version vom 16. April 2024, 05:05 Uhr
Dokumentation und Testfälle unter Modul:Lehensabfrage/Doku.
local p = {}
require("Modul:Hilfsfunktionen")
require("Modul:Text")
function spairs(t, order)
-- collect the keys
local keys = {}
for k in pairs(t) do keys[#keys+1] = k end
-- if order function given, sort by it by passing the table and keys a, b,
-- otherwise just sort the keys
if order then
table.sort(keys, function(a,b) return order(t, a, b) end)
else
table.sort(keys)
end
-- return the iterator function
local i = 0
return function()
i = i + 1
if keys[i] then
return keys[i], t[keys[i]]
end
end
end
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 sortierelehen(t,a,b)
return t[a]['kurzname']<t[b]['kurzname']
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)
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 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'
--TODO: manuell einmischen
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
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()
--Verdichte das Ergebnis auf Lehensart und Lehen
local lehenverdichtet=verdichteLehen(allelehen,manuell)
local result=''
for vkey,vvalue in pairs(lehenverdichtet) do
local werte={}
for lkey,lvalue in spairs(vvalue,sortierelehen) do
local aktuell='\'\'\''
if not lvalue['aktuell'] then aktuell='' end
local regent=''
if lvalue['titel']==0 and lvalue['regent']>0 then regent='*' end
table.insert(werte,aktuell..'[['..lkey..'|'..lvalue['kurzname']..']]'..regent..aktuell)
end
result=result..subZeile(vkey,table.concat(werte,', '))
end
result=result..subZeile('','(\'\'\'aktuell\'\'\', ehemalig, *nur Regentschaft)')
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 result=holeLehen(1047,familie,manuell)
return result
end
return p