Modul:Lehensabfrage: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
K (Automatisch synchronisiert.) |
K (SyncBot) |
||
(Eine dazwischenliegende Version desselben Benutzers wird 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