Modul:Koordinaten: Unterschied zwischen den Versionen

Aus GaretienWiki
Zur Navigation springen Zur Suche springen
VolkoV (D | B)
VolkoV (D | B)
 
(12 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 3: Zeile 3:
 
function robusttrim(s)
 
function robusttrim(s)
 
if s==nil then return '' end
 
if s==nil then return '' end
local p=string.gsub(s,'%[%[SMW::on%]%]','')
+
local p=mw.ustring.gsub(s,'%[%[SMW::on%]%]','')
p=string.gsub(p,'%[%[SMW::off%]%]','')
+
p=mw.ustring.gsub(p,'%[%[SMW::off%]%]','')
 
return mw.text.trim(p)
 
return mw.text.trim(p)
 
end
 
end
Zeile 12: Zeile 12:
 
local t={}
 
local t={}
 
local i=1
 
local i=1
for str in string.gmatch(inputstr,"([^"..sep.."]+)") do
+
for str in mw.ustring.gmatch(inputstr,"([^"..sep.."]+)") do
 
t[i]=str
 
t[i]=str
 
i=i+1
 
i=i+1
Zeile 48: Zeile 48:
 
local i=0
 
local i=0
 
for k,subtoken in pairs(split(token,"%s")) do
 
for k,subtoken in pairs(split(token,"%s")) do
subtokens[i]=0+subtoken
+
subtokens[i]=tonumber(subtoken)
 
i=i+1
 
i=i+1
 
end
 
end
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
elementtyp=frame:callParserFunction('#var','Elementtyp')
 
 
local orte=holeHandlungsorte(frame,geschichte)
 
local orte=holeHandlungsorte(frame,geschichte)
 
 
Zeile 74: Zeile 73:
 
view=holeViewbox(frame,ort)
 
view=holeViewbox(frame,ort)
 
koord=viewboxToKoordinaten(view)
 
koord=viewboxToKoordinaten(view)
result=elementtyp..':'..result.."\n\n"..geschichte..";0!14;;"..koord
+
if(koord~="") then
 +
result=result.."\n\n"..elementtyp..':'..geschichte..";0!14;;"..koord
 +
end
 
end
 
end
 
 
Zeile 81: Zeile 82:
 
 
 
function p.Koordinaten()
 
function p.Koordinaten()
frame=mw.getCurrentFrame()
+
local frame=mw.getCurrentFrame()
geschichte=robusttrim(frame.args[1])
+
local geschichte=robusttrim(frame.args[1])
 
if(geschichte=='') then return '' end
 
if(geschichte=='') then return '' end
 +
local elementtyp=frame:callParserFunction('#var','Elementtyp')
 +
if(elementtyp=='') then elementtyp='Hauptdarsteller' end
 
local gbp=frame:callParserFunction('FULLPAGENAME',geschichte)
 
local gbp=frame:callParserFunction('FULLPAGENAME',geschichte)
return erzeugeKoordinaten(frame,gbp)
+
return erzeugeKoordinaten(frame,gbp,elementtyp)
 
end
 
end
 
 
 
return p
 
return p

Aktuelle Version vom 17. Mai 2021, 14:38 Uhr

Dokumentation und Testfälle unter Modul:Koordinaten/Doku.
	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 split(inputstr,sep)
		if sep==nil then sep="%s" end
		local t={}
		local i=1
		for str in mw.ustring.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]=tonumber(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)
			if(koord~="") then
				result=result.."\n\n"..elementtyp..':'..geschichte..";0!14;;"..koord
			end
		end
		
		return result
	end
	
	function p.Koordinaten()
		local frame=mw.getCurrentFrame()
		local geschichte=robusttrim(frame.args[1])
		if(geschichte=='') then return '' end
		local elementtyp=frame:callParserFunction('#var','Elementtyp')
		if(elementtyp=='') then elementtyp='Hauptdarsteller' end
		local gbp=frame:callParserFunction('FULLPAGENAME',geschichte)
		return erzeugeKoordinaten(frame,gbp,elementtyp)
	end
	
	return p