Module:German coord convert

-- This module converts German Wikipedia-style coordinates to a formatted 
-- invocation of the [[template:coord]] template
local p = {}

function p.main(frame)
	local latstr = frame.args[1] or ''
	local lonstr = frame.args[2] or ''
	local tstr   = frame.args[3] or ''
	local fstr   = frame.args['format'] or ''
	local dstr   = frame.args['display'] or ''
	local nmstr  = frame.args['name'] or ''
	local ntstr  = frame.args['notes'] or ''
	local issubst= frame.args['subst'] or ''

	latstr = mw.ustring.gsub(latstr, '[%s]', '')
	lonstr = mw.ustring.gsub(lonstr, '[%s]', '')
	latstr = mw.ustring.gsub(latstr, ',', '.')
	lonstr = mw.ustring.gsub(lonstr, ',', '.')
	lonstr = mw.ustring.gsub(lonstr, '[Oo]', 'E')
	
	while mw.ustring.match(tstr, 'region:[^_/:%s]*/') do
		tstr = mw.ustring.gsub(tstr, '(region:[^_/:%s]*)%s*/', '%1_region:')
	end
	tstr = mw.ustring.gsub(tstr, '%s', '_')
	tstr = mw.ustring.gsub(tstr, '___*', '_')
	
	if (issubst ~= '') then
		local res = ''
		if (tstr ~= '' ) then
			res = '|' .. tstr
		end
		if (fstr ~= '' ) then
			res = res .. '|format=' .. fstr
		end
		if (dstr ~= '' ) then
			res = res .. '|display=' .. dstr
		end
		if (nmstr ~= '' ) then
			res = res .. '|name=' .. nmstr
		end
		if (ntstr ~= '' ) then
			res = res .. '|notes=' .. ntstr
		end
   		latstr = mw.ustring.gsub(latstr, '/[/]*', '|')
   		lonstr = mw.ustring.gsub(lonstr, '/[/]*', '|')
   		return '{{coord|' .. latstr .. '|' .. lonstr .. res .. '}}'
   	else
   		local targs = mw.text.split( latstr .. '/' .. lonstr .. '/' .. tstr, '%s*/[%s/]*')
	   	if fstr ~= '' then
	   		targs['format'] = fstr
	   	end
	   	if dstr ~= '' then
	   		targs['display'] = dstr
	   	end
	   	if nmstr ~= '' then
	   		targs['name'] = nmstr
	   	end
	   	if ntstr ~= '' then
	   		targs['notes'] = ntstr
	   	end
   		return frame:expandTemplate{ title = 'coord', args = targs }
	end
end

return p