Modul:Koordinaten: Unterschied zwischen den Versionen

Aus GaretienWiki
Zur Navigation springen Zur Suche springen
VolkoV (D | B)
VolkoV (D | B)
Zeile 63: Zeile 63:
 
end
 
end
 
 
function erzeugeKoordinaten(frame,geschichte)
+
function erzeugeKoordinaten(frame,geschichte,elementtyp)
 
if geschichte=='' then return '' end
 
if geschichte=='' then return '' end
local elementtyp='Hauptdarsteller'
 
 
local orte=holeHandlungsorte(frame,geschichte)
 
local orte=holeHandlungsorte(frame,geschichte)
 
 
Zeile 82: Zeile 81:
 
function p.Koordinaten()
 
function p.Koordinaten()
 
frame=mw.getCurrentFrame()
 
frame=mw.getCurrentFrame()
geschichte=robusttrim(frame.args[1])
+
geschichte=robusttrim(frame.args[2])
 
if(geschichte=='') then return '' end
 
if(geschichte=='') then return '' end
local gbp=frame:callParserFunction('FULLPAGENAME',geschichte)
+
elementtyp=robusttrim(frame.args[1])
 +
if(elementtyp=='') then elementtyp='Hauptdarsteller' end
 +
local gbp=frame:callParserFunction('FULLPAGENAME',geschichte,elementtyp)
 
return erzeugeKoordinaten(frame,gbp)
 
return erzeugeKoordinaten(frame,gbp)
 
end
 
end
 
 
 
return p
 
return p

Version vom 3. August 2018, 09:07 Uhr

Dokumentation und Testfälle unter Modul:Koordinaten/Doku.
	local p = {}
	
	function robusttrim(s)
		if s==nil then return '' end
		local p=string.gsub(s,'%[%[SMW::on%]%]','')
		p=string.gsub(p,'%[%[SMW::off%]%]','')
		return mw.text.trim(p)
	end
	
	function split(inputstr,sep)
		if sep==nil then sep="%s" end
		local t={}
		local i=1
		for str in string.gmatch(inputstr,"([^"..sep.."]+)") do
			t[i]=str
			i=i+1
		end
		if i==1 then t[1]=inputstr end
		return t
	end
	
	function holeViewbox(frame,ort)
		if ort=='' then return '' end
		local a=frame:callParserFunction(
			'#show',ort,
			'?Viewbox'
		)
		return a
	end
	
	function holeHandlungsorte(frame,geschichte)
		if geschichte=='' then return '' end
		local a=frame:callParserFunction(
			'#ask','[['..geschichte..']]',
			'mainlabel=-',
			'?Handlungsort ist#=',
			'sep=€'
		)
		return a
	end
	
	function viewboxToKoordinaten(viewbox)
		if viewbox=="" then return "" end
		local result=""
		local width=10000000
		for k,token in pairs(split(viewbox,",")) do
			local subtokens={}
			local i=0
			for k,subtoken in pairs(split(token,"%s")) do
				subtokens[i]=0+subtoken
				i=i+1
			end
			if subtokens[3] then
				if subtokens[3]<width then
					width=subtokens[3]
					local x=subtokens[0]+subtokens[2]/2
					local y=subtokens[1]+subtokens[3]/2
					result=x..";"..y
				end
			end
		end
		return result
	end
	
	function erzeugeKoordinaten(frame,geschichte,elementtyp)
		if geschichte=='' then return '' end
		local orte=holeHandlungsorte(frame,geschichte)
		
		local ortet=split(orte,'€')

		local result=""
		for key,ort in pairs(ortet) do
			view=holeViewbox(frame,ort)
			koord=viewboxToKoordinaten(view)
			result=result.."\n\n"..elementtyp..':'..geschichte..";0!14;;"..koord
		end
		
		return result
	end
	
	function p.Koordinaten()
		frame=mw.getCurrentFrame()
		geschichte=robusttrim(frame.args[2])
		if(geschichte=='') then return '' end
		elementtyp=robusttrim(frame.args[1])
		if(elementtyp=='') then elementtyp='Hauptdarsteller' end
		local gbp=frame:callParserFunction('FULLPAGENAME',geschichte,elementtyp)
		return erzeugeKoordinaten(frame,gbp)
	end
	
	return p