Modul:Lehensabfrage: Unterschied zwischen den Versionen

Aus GaretienWiki
Zur Navigation springen Zur Suche springen
VolkoV (D | B)
Keine Bearbeitungszusammenfassung
VolkoV (D | B)
Keine Bearbeitungszusammenfassung
 
(32 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 3: Zeile 3:
require("Modul:Hilfsfunktionen")
require("Modul:Hilfsfunktionen")
require("Modul:Text")
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)
function holeLehenDetails(lehen)
Zeile 56: Zeile 35:
if lehen==nil then return {} end
if lehen==nil then return {} end
return lehen
return lehen
end
function sortierelehen(t,a,b)
return t[a]['kurzname']<t[b]['kurzname']
end
end


Zeile 79: Zeile 54:
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 and lvalue[2]~=nil and lvalue[3]~=nil and lvalue[4]~=nil then
if allelehen[lvalue[1]]==nil then allelehen[lvalue[1]]={} end
if allelehen[lvalue[1]]==nil then allelehen[lvalue[1]]={} end
local von=lvalue[3]/10000
local von=lvalue[3]/10000
Zeile 108: Zeile 83:
lehensarten['Junkertum']='Junkertümer'
lehensarten['Junkertum']='Junkertümer'
lehensarten['Herrschaft']='Herrschaften'
lehensarten['Herrschaft']='Herrschaften'
lehensarten['Ortschaft']='Ortschaften'
lehensarten['Bauwerk']='Bauwerke'


--TODO: manuell einmischen
local lehenverdichtet={}
local lehenverdichtet={}
for akey,avalue in pairs(allelehen) do
for akey,avalue in pairs(allelehen) do
Zeile 127: Zeile 103:
lehenverdichtet[art][akey]['regent']=countr
lehenverdichtet[art][akey]['regent']=countr
lehenverdichtet[art][akey]['titel']=countt
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
end
end
Zeile 143: Zeile 139:
--Verdichte das Ergebnis auf Lehensart und Lehen
--Verdichte das Ergebnis auf Lehensart und Lehen
local lehenverdichtet=verdichteLehen(allelehen,manuell)
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=''
local result=''
for vkey,vvalue in pairs(lehenverdichtet) do
for vkey,vvalue in spairs(lehenverdichtet,sortiereLehensarten) do
local werte={}
local werte={}
for lkey,lvalue in spairs(vvalue,sortierelehen) do
for lkey,lvalue in spairs(vvalue,sortiereLehen) do
local aktuell='\'\'\''
if aktuell==lvalue['aktuell'] then
if not lvalue['aktuell'] then aktuell='' end
local regent=''
local regent=''
if lvalue['titel']==0 and lvalue['regent']>0 then regent=' (Regentschaft)' end
if lvalue['titel']==0 and lvalue['regent']>0 then regent='*' end
table.insert(werte,'[['..lkey..'|'..lvalue['kurzname']..']]'..regent)
table.insert(werte,aktuell..'[['..lkey..'|'..lvalue['kurzname']..']]'..regent..aktuell)
end
end
end
result=result..subZeile(vkey,table.concat(werte,', '))
result=result..subZeile(vkey,table.concat(werte,', '))
end
end
result=result..subZeile('Weitere Lehen',weiterelehen)
result=result..subZeile('','(\'\'\'aktuell\'\'\', ehemalig, *nur Regentschaft)')
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..']]&nbsp;&nbsp;&nbsp;'
end
end
end
  return result
  return result
end
end
Zeile 171: Zeile 239:
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 lehen=holeLehen(1047,familie,manuell)
return result
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 17. April 2024, 06:02 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..']]&nbsp;&nbsp;&nbsp;'
			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