Module:Infobox road/route
local p = {} 
 
 local format = mw.ustring.format
 require('strict')
 local getArgs = require('Module:Arguments').getArgs	
 local parserModule = require 'Module:Road data/parser'
 local parser = parserModule.parser
 
 local function banner(args, style)
 	if args.marker_image then return nil end
 	
 	local bannerSize
 		if style == 'small' then
 			bannerSize = &quot;40px&quot;
 		else
 			bannerSize = &quot;72px&quot;
 		end
 	
 	local shield = parser(args, 'banner')
 	local alt = parser(args, 'banner')
 
 	if not shield or shield == '' then
 		return nil
 	else
 		return string.format('[[File:%s|%s|alt=%s]]', shield, bannerSize, alt)
 	end
 end
 
 
 
 local function shield(args, style)
 
 	if args.marker_image then return args.marker_image end
 	
 	local horizontalSize
 	local verticalSize
 		if style == 'small' then
 			horizontalSize = &quot;90x40px&quot;
 			verticalSize = &quot;40x90px&quot;
 		else
 			horizontalSize = &quot;154x72px&quot;
 			verticalSize = &quot;72x154px&quot;
 		end
 
 	local shield = parser(args, 'shieldmain') or parser(args, 'shield') or ''
 	
 	local label = parser(args, 'name') or parser(args, 'abbr') or ''
 	local alt = label .. ' marker'
 	local orientation = parser(args, 'orientation')
 	
 	local function simpleSize(args)
 		if orientation and orientation == 'upright' then
 			return verticalSize
 		else
 			return horizontalSize
 		end
 	end
 	
 	local function shield_size(image_name, orientation)
 		local image = 'File:' .. image_name
 		local title = mw.title.new(image)
 
 		local width = title.file.width
 		local height = title.file.height
 		
 		if (orientation and orientation == 'upright') or height &gt; width then
 			return verticalSize
 		else
 			return horizontalSize
 		end
 	end
 	
 	
 	
 	if not shield or shield == '' then
 		return nil
 	elseif type(shield) == 'table' then
 		local res = {}
 		local sizes = {}
 		for i,v in ipairs(shield) do
 			sizes[i] = v
 			res[i] = string.format('[[File:%s|%s|alt=%s]]', v, shield_size(v), alt)
 		end
     	return table.concat(res, ' ')
 	else
 		return string.format('[[File:%s|%s|alt=%s]]', shield, simpleSize(args), alt)
 	end
 end
 
 -- Links/abbreviations
 local function name(args)
 	local name = args.name or parser(args, 'name') or parser(args, 'abbr')
 	return name
 end
 
 function p._routeInfo(args)
 	
 	local style = args.style
 	local banner = banner(args, style)
 	local shield = shield(args, style)
 	local name = name(args)
 
 	if not args.type and not args.route and not args.name and not args.marker_image then
 		local container = nil
 	else local container = mw.html.create('div'):cssText('text-align:center;')
 		if shield == nil or args.marker_image == 'none' or args.name and not args.marker_image and not args.type and not args.route then 
 			container:tag('p'):cssText('margin:0.1em;'):wikitext(name)
 		elseif args.marker_image ~= '' and args.name == '' or args.name == nil and not args.type and not args.route then
 			container:tag('p'):cssText('margin:0.1em;'):wikitext(shield)
 		elseif args.country == 'AUS' then
 			container:tag('p'):cssText('margin:0.1em;'):wikitext(name)
 			container:tag('p'):cssText('margin:0.1em 0 0 0;'):wikitext(shield)
 		else
 			container:tag('p'):cssText('margin:0.1em 0 0 0;'):wikitext(banner)
 			container:tag('p'):cssText('margin:0 0 0.1em;'):wikitext(shield)
 			container:tag('p'):cssText('margin:0.1em;'):wikitext(name)
 		end
 		return tostring(container)
 	end
 end
 
 function p.routeInfo(frame)
 	local args = getArgs(frame)
 	return p._routeInfo(args);
 end
 
 function p._shields(args)
 	
 	local style = args.style
 	local banner = banner(args, style)
 	local shield = shield(args, style)
 
 	if not args.type and not args.route and not args.name and not args.marker_image then
 		local container = nil
 	else local container = mw.html.create('div'):cssText('text-align:center; display: inline-block; vertical-align: baseline; line-height: 0;')
 		container:tag('p'):cssText('margin:0.1em 0 0 0;'):wikitext(banner)
 		container:tag('p'):cssText('margin:0 0 0.1em;'):wikitext(shield)
 	return tostring(container)
 	end
 end
 
 function p.shields(frame)
 	local args = getArgs(frame)
 	return p._shields(args);
 end
 
 
 function p._names(args)
 	local name = name(args)
 	return name
 end
 
 function p.names(frame)
 	local args = getArgs(frame)
 	return p._names(args);
 end