Modul:Lehensabfrage: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
Zeile 125: | Zeile 125: | ||
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 | ||
end | end | ||
Zeile 175: | Zeile 177: | ||
result=result..subZeile(vkey,table.concat(werte,', ')) | result=result..subZeile(vkey,table.concat(werte,', ')) | ||
end | end | ||
result=result..subZeile('','(\'\'\'aktuell\'\'\', ehemalig, *nur Regentschaft)') | result=result..subZeile('','(\'\'\'aktuell\'\'\', ehemalig, *nur Regentschaft)') | ||
return result | |||
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']..']]' | |||
end | |||
end | |||
return result | return result | ||
end | end | ||
Zeile 191: | Zeile 203: | ||
local familie=frame.args[1] | local familie=frame.args[1] | ||
local lehen=holeLehen(1047,familie,manuell) | local lehen=holeLehen(1047,familie,manuell) | ||
return formatiereLehen(lehen) | return formatiereLehen(lehen)..kategorisiereLehen(lehen) | ||
end | end | ||
return p | return p |
Version vom 16. April 2024, 05:27 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 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 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' --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 lehenverdichtet[art][akey]['wappen']=details[1][3] lehenverdichtet[art][akey]['hegemon']=details[1][4] 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) local result='' for vkey,vvalue in spairs(lehenverdichtet,sortiereLehensarten) 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 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']..']]' 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) return formatiereLehen(lehen)..kategorisiereLehen(lehen) end return p