Module:BSto
Appearance
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