User:DaxServer/Module Indian Rupee

Source: Wikipedia, the free encyclopedia.

local p = {} local getArgs = require('Module:Arguments').getArgs local yesno = require('Module:Yesno') local lang = mw.language.getContentLanguage(); local MINUS = '−' -- Unicode U+2212 MINUS SIGN (UTF-8: e2 88 92)

local function format(num) local parsedNumber = lang:parseFormattedNumber(num) return parsedNumber and lang:formatNum(parsedNumber) or num end

-- Returns: number of elements, split table local function validWithMinus(num) local split = mw.text.split(num, '-', true)

if #split == 1 then -- Input: 100 return {1, split} end

if #split == 2 then for k, v in pairs(split) do if k == 1 and v == then return {1, split} -- Input: -100 (Minus 100) end end

return {2, split} -- Input: 100-1000 end

return {3, split} -- unacceptable format end

local function formatnum(num) local data = validWithMinus(num)

if data[1] == 1 then -- Input: 100 return format(num) elseif data[1] == 2 then -- Input: -100 (Minus 100) return format(data[2][1]) .. MINUS .. format(data[2][2]) -- Input: 100-1000 end

-- Disable range for Inflation error('Invalid format') -- Input: -1000--100 or 1-2-3 end

function p.main( frame ) local args = getArgs(frame) local code = 'INR'

frame = mw.getCurrentFrame()

local symbol local properties

local presentation = mw.loadData ('Module:Currency/Presentation'); if presentation.currency_properties[code] then -- if code is an iso 4217 code properties = presentation.currency_properties; elseif presentation.code_translation[code] then -- not iso 4217 but can be translated code = presentation.code_translation[code]; -- then translate properties = presentation.currency_properties; elseif presentation.non_standard_properties[code] then -- last chance, is it a non-standard code? properties = presentation.non_standard_properties; else return '{{currency}} – invalid amount (help) – invalid code (help)'; end

if yesno(args['link']) or false then symbol = string.format ('%s', properties[code].page, properties[code].symbol); -- make wikilink of page and symbol else symbol = properties[code].symbol; end

local inflationText = local year = tonumber(args[2] or args['year'] or 0) local deformattedNum

if year ~= 0 then local data = validWithMinus(args[1])

if data[1] == 3 then error('Invalid format') end

local startyear = tonumber(frame:expandTemplate{ title = 'Inflation/IN/startyear' }) local lastyear = tonumber(frame:expandTemplate{ title = 'Inflation/year', args = { 'IN' } })

if startyear < year and year < lastyear then inflationText = ' ('

local inflation local inflationFormatted =

if (args['about'] or ) ~= then inflationText = mw.ustring.format ('%sequivalent to about %s', inflationText, symbol)

if data[1] == 1 then deformattedNum = lang:parseFormattedNumber(args[1]) inflation = frame:expandTemplate{ title = 'Inflation', args = {'IN', deformattedNum, year, r = args['round'] or 0}} inflationFormatted = mw.ustring.format ('%s%s', inflationFormatted, format(inflation)) end

if data[1] == 2 then deformattedNum = lang:parseFormattedNumber(data[2][1]) inflation = frame:expandTemplate{ title = 'Inflation', args = {'IN', deformattedNum, year, r = args['round'] or 0}} inflationFormatted = mw.ustring.format ('%s%s', inflationFormatted, format(inflation))

deformattedNum = lang:parseFormattedNumber(data[2][2]) inflation = frame:expandTemplate{ title = 'Inflation', args = {'IN', deformattedNum, year, r = args['round'] or 0}} inflationFormatted = mw.ustring.format ('%s%s%s', inflationFormatted, MINUS, format(inflation)) end else inflationText = mw.ustring.format ('%sequivalent to %s', inflationText, symbol) local round

if data[1] == 1 then deformattedNum = lang:parseFormattedNumber(args[1]) inflation = tonumber(frame:expandTemplate{ title = 'Inflation', args = {'IN', deformattedNum, year}}) round = args['round'] or ((inflation > 1000 or inflation < -1000) and 0 or 2) inflation = frame:expandTemplate{ title = 'Inflation', args = {'IN', deformattedNum, year, r = round}} inflationFormatted = mw.ustring.format ('%s%s', inflationFormatted, format(inflation)) end

if data[1] == 2 then deformattedNum = lang:parseFormattedNumber(data[2][1]) inflation = tonumber(frame:expandTemplate{ title = 'Inflation', args = {'IN', deformattedNum, year}}) round = args['round'] or ((inflation > 1000 or inflation < -1000) and 0 or 2) inflation = frame:expandTemplate{ title = 'Inflation', args = {'IN', deformattedNum, year, r = round}} inflationFormatted = mw.ustring.format ('%s%s', inflationFormatted, format(inflation))

deformattedNum = lang:parseFormattedNumber(data[2][2]) inflation = tonumber(frame:expandTemplate{ title = 'Inflation', args = {'IN', deformattedNum, year}}) round = args['round'] or ((inflation > 1000 or inflation < -1000) and 0 or 2) inflation = frame:expandTemplate{ title = 'Inflation', args = {'IN', deformattedNum, year, r = round}} inflationFormatted = mw.ustring.format ('%s%s%s', inflationFormatted, MINUS, format(inflation)) end end

inflationText = mw.ustring.format ('%s%s in %s)', inflationText, inflationFormatted, lastyear) end end

local formattedvalue = args[1] == nil and or formatnum(args[1])

return mw.ustring.format('%s%s%s', symbol, formattedvalue, inflationText) end

return p