Modul:Lehensabfrage: Unterschied zwischen den Versionen

Aus GaretienWiki
Zur Navigation springen Zur Suche springen
VolkoV (D | B)
VolkoV (D | B)
Zeile 25: Zeile 25:
 
end
 
end
  
function holelehendetails(lehen)
+
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 holelehensub(mitglied)
+
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 holelehen(jahr,familie,manuell)
+
function findeFamilienmitglieder(familie)
if familie=='' then return '' end
 
 
 
local lehensarten={}
 
lehensarten['Reich']='Reiche'
 
lehensarten['Provinz']='Provinzen'
 
lehensarten['Grafschaft']='Grafschaften'
 
lehensarten['Baronie']='Baronien'
 
lehensarten['Junkertum']='Junkertümer'
 
lehensarten['Herrschaft']='Herrschaften'
 
 
 
--Finde alle Familienmitglieder
 
 
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
--Finde alle Lehen dieser Familienmitglieder
+
end
--TODO: manuell einmischen
+
 
 +
function findeAlleLehen(mitglieder)
 
local allelehen={}
 
local allelehen={}
 
for mkey,mvalue in pairs(mitglieder) do
 
for mkey,mvalue in pairs(mitglieder) do
local lehen=holelehensub(mvalue[1])
+
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=holelehendetails(akey)
+
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=holelehen(1047,familie,manuell)
+
local result=holeLehen(1047,familie,manuell)
if true then
+
return result
return result
 
end
 
 
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