Module:Infobox road/length

local p = {}

local math = require "Module:Math"

local function getLengths(args, num) local precision = math._precision local round = math._round local format = math._precision_format local lengths = {} local km = args["length_km" .. num] or '' local mi = args["length_mi" .. num] or '' local prec = tonumber(args["length_round" .. num]) if '' == km then local n = tonumber(mi) prec = prec or precision(mi) if n then lengths.km = format(tostring(n * 1.609344), tostring(prec)) else lengths.km = '0' end else prec = prec or precision(km) lengths.km = format(km, tostring(prec)) lengths.orig = "km" lengths.comp = "mi" end if '' == mi then local n = tonumber(km) prec = prec or precision(km) if n then lengths.mi = format(tostring(n / 1.609344), tostring(prec)) else lengths.mi = '0' end else prec = prec or precision(mi) lengths.mi = format(mi, tostring(prec)) lengths.orig = "mi" lengths.comp = "km" end return lengths end

function p._length(num, args) local ref = args["length_ref" .. num] or '' local notes = args["length_notes" .. num] or '' local lengths = getLengths(args, num) local first, second if lengths.orig == "mi" then first = lengths.mi       second = lengths.km    else first = lengths.km       second = lengths.mi    end if first == '0' and second == '0' then return end local text = {first, " ", lengths.orig, ref, " (", second, " ", lengths.comp, ")", } if notes ~= '' then table.insert(text, " " .. notes .. " ") end return table.concat(text) end

function p.length(frame) local pframe = frame:getParent local config = frame.args -- the arguments passed BY the template, in the wikitext of the template itself local args = pframe.args -- the arguments passed TO the template, in the wikitext that transcludes the template local num = config.num or '' return p._length(num, args) end

return p