Jump to content

Module:BSto

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Jc86035 (talk | contribs) at 09:53, 24 June 2016 (added cvt). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
local p = {}

local function base(t1,t2,link,stn,italic,it,it2,bold,align,style,bg1,bg2,line,fs1,fs2,lh,v1,swap,in1,bs)
	if not align then
		if bs == 'cvt' then
			align = 'right'
		else
			align = 'inherit'
		end
	end
	if not style then style = '' end
	local result = ' \n{|cellspacing="0" cellpadding="0" style="font-size:80%; font-weight:inherit; color:inherit; background-color:transparent; margin-top:-2px; margin-bottom:-2px; display:inline-table; vertical-align:bottom; text-align:'..align
	if italic or it == 'all' then result = result..';font-style:italic' end
	if bold then result = result..';font-weight:bold' end
	local row = '\n|-\n|style="text-align:inherit;padding:0;line-height:'
	result = result..';'..style..'"'..row..lh
	if line then result = result..';border-bottom:1px solid gray' end
	if bg1 then result = result..';padding-left:0.5em;padding-right:0.5em;background-color:'..bg1 end
	if fs1 then result = result..';font-size:'..fs1 end
	result = result..'"|'
	if bs == 'srws' then
		if stn then
			link = t1..' '..t2..' '..stn
		else
			link = t1..' '..t2..' railway station'
		end
	elseif bs == 'cvt' then
		local in2, u1, u2, v2, num, mult
		local cvt = {}
		cvt["mi"] = 1.609344
		cvt["ch"] = 20.1168
		cvt["m"] = 1.0936
		cvt["yd"] = 0.9144
		cvt["ft"] = 0.3048
		if in1 == 'ch' or in1 == 'yd' or in1 == 'ft' then
			in2 = 'm'
		elseif in1 == 'm' then
			in2 = 'yd'
		else
			in1 = 'mi'
			in2 = 'km'
		end
		mult = 10 ^ (mw.ustring.len(v1) - mw.ustring.find(v1, '.'))
		if swap then
			u1, u2 = in2, in1
			num = tonumber(v1) / cvt[in1]
		else
			u1, u2 = in1, in2
			num = tonumber(v1) * cvt[in1]
		end
		v2 = tostring(math.floor(num * mult + 0.5) / mult)
		t1 = v1..u1..' '
		t2 = v2..u2..' '
	end
	if link then
		result = result..'[['..link..'|'..t1..']]'
	else
		result = result..t1
	end
	result = result..row..lh
	if bg2 then result = result..';padding-left:0.5em;padding-right:0.5em;background-color:'..bg2 end
	if fs2 then result = result..';font-size:'..fs2 end
	if (it ~= 'off' and bs == 'to') or it2 == 'italic' then
		result = result..';font-style:italic'
	elseif it == 'off' then
		result = result..';font-style:normal'
	end
	result = result..'"|'
	if link then
		result = result..'[['..link..'|'..t2..']]'
	else
		result = result..t2
	end
	return result..'\n|}'
end

local getArgs = require('Module:Arguments').getArgs

local function makeInvokeFunction(funcName)
	-- makes a function that can be returned from #invoke, using
	-- [[Module:Arguments]].
	return function (frame)
		local args = getArgs(frame, {parentOnly = true})
		return p[funcName](args)
	end
end

p.BSto = makeInvokeFunction('_BSto')

function p._BSto(args)
	args[3] = args[3] or args.L
	args[4] = args[4] or args.it or args.i
	args[5] = args[5] or args.b
	return base(args[1],args[2],args[3],nil,nil,args[4],nil,args[5],args.align,args.style,args.bg1,args.bg2,args.line,'105%','92%','0.9em',nil,nil,nil,'to')
end

p.BSsplit = makeInvokeFunction('_BSsplit')

function p._BSsplit(args)
	args[3] = args[3] or args.L
	args[4] = args[4] or args.it or args.i
	args[5] = args[5] or args.b
	return base(args[1],args[2],args[3],nil,args[4],nil,nil,args[5],args.align,args.style,args.bg1,args.bg2,args.line,'inherit','inherit','0.9em',nil,nil,nil,'split')
end

p.BSsrws = makeInvokeFunction('_BSsrws')

function p._BSsrws(args)
	args[3] = args[3] or args.S
	args[4] = args[4] or args.it or args.i
	args[5] = args[5] or args.b
	return base(args[1],args[2],nil,args[3],args[4],nil,nil,args[5],args.align,args.style,args.bg1,args.bg2,args.line,'inherit','inherit','0.9em',nil,nil,nil,'srws')
end

p.BScvt = makeInvokeFunction('_BScvt')

function p._BScvt(args)
	return base(nil,nil,nil,nil,nil,nil,args.alt,nil,args.align,args.style,args.bg1,args.bg2,args.line,'inherit','inherit','0.9em',args[1],args[2],args['in'],'cvt')
end

return p