Modul:Test2

Aus GaretienWiki
Zur Navigation springen Zur Suche springen

Die Dokumentation für dieses Modul kann unter Modul:Test2/Doku erstellt werden

local p = {}

function robusttrim(s)
	if s==nil then return '' end
	local p=mw.ustring.gsub(s,'%[%[SMW::on%]%]','')
	p=mw.ustring.gsub(p,'%[%[SMW::off%]%]','')
	return mw.text.trim(p)
end

function kinder(frame,person,nurwerte)
	if person=='' then return {} end
	local s='[[Vater ist::'..person..']] OR [[Mutter ist::'..person..']]'
	local o='sort=Vater ist,Mutter ist,Tsatag Index'
	local d=''
	if nurwerte then
		s='[['..person..']]'
		o='sort=Tsatag Index'
		d='default='..person..'|||?|?|Datei:Wappen blanko.svg|Datei:Wappen blanko.svg|Datei:Wappen blanko.svg|Datei:Wappen blanko.svg';
	end
	local a=frame:callParserFunction(
            '#ask',s,
            'mainlabel=-','?#','?Vater ist#','?Mutter ist#','?Tsatag Text#=','?Borontag Text#=',
            '?Wappen ist#=','?Familienwappen ist#=','?Lehenswappen ist#=','?Mitgliedswappen ist#=',
            'format=template','template=ModulTest',o,d
        )
    local t=mw.text.split(a,'\n',true)
    local result={}
    for key,value in pairs(t) do
    	if robusttrim(value)~='' then
    		local sp=mw.text.split(value,'|',true)
    		result[key]={}
			result[key]['Person'  ]=robusttrim(sp[1])
			local e1=robusttrim(sp[2])
			local e2=robusttrim(sp[3])
			if e1==person then
				result[key]['Elter'   ]=e2
			else
				result[key]['Elter'   ]=e1
			end
			if nurwerte then result[key]['Elter']='' end
	    	result[key]['Tsatag'  ]=robusttrim(sp[4])
	    	result[key]['Borontag']=robusttrim(sp[5])
	    	result[key]['Wappen'  ]=robusttrim(sp[6])
	    	result[key]['FWappen' ]=robusttrim(sp[7])
	    	result[key]['LWappen' ]=robusttrim(sp[8])
	    	result[key]['MWappen' ]=robusttrim(sp[9])
	    end
	end
	return result
end

function personString(person,tsa,bor,wap,fwap,lwap,mwap)
	local sp=mw.text.split(person,':',true)
	local ps=person
	if #sp>1 then
		ps=sp[2]
	end
	
	local wappen='[['..wap..'|x20px|link='..person..']]'
	if wap=='Datei:Wappen blanko.svg' then wappen='' end

	local fwappen='[['..fwap..'|x20px|link='..person..']]'
	if fwap=='Datei:Wappen blanko.svg' then fwappen='' end
	if fwap==wap then fwappen='' end
	
	local lwappen='[['..lwap..'|x20px|link='..person..']]'
	if lwap=='Datei:Wappen blanko.svg' then lwappen='' end
	if (lwap==wap)or(lwap==fwap) then lwappen='' end
	
	local mwappen='[['..mwap..'|x20px|link='..person..']]'
	if mwap=='Datei:Wappen blanko.svg' then mwappen='' end
	if (mwap==wap)or(mwap==fwap)or(mwap==lwap) then mwappen='' end
	
	local pre=''
	local post=''
	
	local tsat='[[Datei:Symbol Tsa-Kirche.svg|x15px|link=]] '..tsa
	local boront=''
	if bor~='' then
		boront=' - [[Datei:Symbol Boron-Kirche.svg|x15px|link=]] '..bor
	else
		pre="'''"
		post="'''"
	end

	return pre..wappen..fwappen..lwappen..mwappen..' [['..person..'|'..ps..']] ('..tsat..boront..')'..post
end

function kinderRekursiv(frame,person,elt,tsa,bor,wap,fwap,lwap,mwap,tiefe,maxtiefe,filter)
	if (tiefe>maxtiefe) or (person=='') then
		return ''
	end
	local rekursion=true
	if (filter~='') and (filter~=fwap) then
		rekursion=false
	end
	
	local result=''
	local pre=''
	for i=1,tiefe do
		pre=pre..'*'
	end
	
	local p=mw.ustring.gsub(person,'%[%[SMW::on%]%]','')
	p=mw.ustring.gsub(p,'%[%[SMW::off%]%]','')
	local pers=personString(p,tsa,bor,wap,fwap,lwap,mwap)
	mw.log(pre..p)
	
	local kin=kinder(frame,p,false)
	if rekursion==false then
		kin={}
	end
	local nexttiefe=tiefe+1
	local printed=false
	local elter=''
	local klauf=''
	local klzu=''
	for key,value in pairs(kin) do
		if value['Elter']~=elter then
			elter=value['Elter']
			local eltv=kinder(frame,elter,true)
			if(#eltv>0) then
				result=result..'\n'..pre..klauf..pers..klzu.." mit "..personString(elter,eltv[1]['Tsatag'],eltv[1]['Borontag'],
					eltv[1]['Wappen'],eltv[1]['FWappen'],eltv[1]['LWappen'],eltv[1]['MWappen'],filter)
				printed=true
			end
			klauf="''"
			klzu="''"
		end
		result=result..kinderRekursiv(frame,
			value['Person'],value['Elter'],
			value['Tsatag'],value['Borontag'],
			value['Wappen'],value['FWappen'],value['LWappen'],value['MWappen'],
			nexttiefe,maxtiefe,filter
		)
	end
	if not printed then
		result=result..'\n'..pre..pers
	end
	return result
end

function p.smwtest(frame)
	if (frame.args[1]==nil)or(frame.args[2]==nil)or(frame.args[3]==nil) then
		return "no parameter found"
	end
	local subject=frame.args[1]
	local startdepth=tonumber(frame.args[2])
	local maxdepth=tonumber(frame.args[3])
	local filter=robusttrim(frame.args[4])
	local meta=kinder(frame,subject,true)
	mw.logObject(meta)
	local value=meta[1];
	local result=kinderRekursiv(frame,
		value['Person'],value['Elter'],
		value['Tsatag'],value['Borontag'],
		value['Wappen'],value['FWappen'],value['LWappen'],value['MWappen'],
		startdepth,maxdepth,filter
	)
	return result
end

function p.deb()
	frame=mw.getCurrentFrame()
	frame2=frame:newChild{ 
		args={'Barduron Golambes von Mersingen','1','10'}
	}
	local result=p.smwtest(frame2)
	return result
end
 
return p