Module:Currency
De Semantic MediaWiki - Sandbox
Révision datée du 2 mai 2016 à 08:36 par Alex Mashin (discussion | contributions) (Page créée avec « -- Пересчёт валют, задание единиц измерения для валют: -- Numerals: local data = { -- Экспортируемые имена... »)
La documentation pour ce module peut être créée à Module:Currency/doc
-- Пересчёт валют, задание единиц измерения для валют:
-- Numerals:
local data = {
-- Экспортируемые имена функций:
API = {'объявить', 'Объявить', 'declare', 'Declare'},
-- Ошибки:
noNumber = "Передайте аргумент",
-- Аргументы:
argNumber = 1, -- число
-- Кратные:
mils = {
[1] = {''},
[1000] = {'тыс', 'тыс.', 'тысяч', 'тысячи', 'тысяча'},
[1000000] = {'млн', 'млн.', 'миллионов', 'миллиона', 'миллион'},
[1000000000] = {'млрд', 'млрд.', 'миллиардов', 'миллиарда', 'миллиард'}
}, -- mils = {...}
prop = 'Относится к'
} -- local data = {...}
local function formatNumeralError (message, ...)
if select('#', ... ) > 0 then
message = string.format(message, ...)
end
return "<span class=\"error\">" .. message .. "</span>"
end
--[[
НАЗНАЧЕНИЕ: Эта функция объявляет валюту.
ПАРАМЕТРЫ: names -- массив символов и названий валюты,
rate -- курс валюты к рублю.
ВЫВОД: нет.
ВОЗВРАТ: 0, сообщение об ошибке - Ошибка из-за неверного аргумента
строка - Объявление единиц измерения для валюты
ПРИМЕЧАНИЕ: Все проверки аргумента уже проведены.
--]]
local function implementCurrency (names, rate)
local declarations = {}
for ratio, numerals in pairs (data.mils) do
local units = {}
for _, numeral in ipairs (numerals) do
for __, name in ipairs (names) do
units [#units + 1] = numeral .. ' ' .. name
end
end
declarations [#declarations + 1] = '*** [[' .. data.prop .. '::' .. tostring (1 / rate / ratio) .. ' ' .. table.concat (units, ', ') .. '|' .. units [1] .. ']]'
end
return declarations
end -- local function implementCurrency (names, rate)
-- Загрузка аргументов и вызов реализации:
local function declareCurrency (args)
local ok
local rate = 1
local names = {}
-- Загрузка и проверка аргументов:
for _, arg in ipairs (args) do
if tonumber (arg) ~= nil then
-- Exchange rate:
rate = tonumber (arg)
else
-- Currency symbol or name:
names [#names + 1] = arg
end
end
return table.concat (implementCurrency (names, rate), '\n')
end -- local function declareCurrency (args)
-- Export function:
local m = {}
for _, alias in pairs (data.API) do
m [alias] = function (frame)
return declareCurrency (frame.args)
end
end
return m