Module:Formatnum: Difference between revisions
From Neodyland Wiki
More actions
m spelling |
simpler version |
||
| Line 2: | Line 2: | ||
local p = {} | local p = {} | ||
local digit = { -- languages not supported by the Lua of wikimedia software | |||
["ml-old"] = { '൦', '൧', '൨', '൩', '൪', '൫', '൬', '൭', '൮', '൯' }, | |||
["mn"] = { '᠐', '᠑', '᠒', '᠓', '᠔', '᠕', '᠖', '᠗', '᠘', '᠙'}, | |||
["te"] = { '౦', '౧', '౨', '౩', '౪', '౫', '౬', '౭', '౮', '౯'}, | |||
["th"] = { '๐', '๑', '๒', '๓', '๔', '๕', '๖', '๗', '๘', '๙'} | |||
} | |||
function p.main(frame) | function p.main(frame) | ||
local pframe = frame:getParent() | local pframe = frame:getParent() | ||
local config = frame.args | local config = frame.args | ||
local args = pframe.args | local prec = pframe.args.prec | ||
local number = pframe.args[1] | |||
local lang = string.lower(pframe.args[2]) | |||
local sep = pframe.args.sep or "" | |||
if not lang or not mw.language.isSupportedLanguage(lang) then | |||
lang = frame:preprocess( "{{int:lang}}" ) | |||
end | |||
return p._main(number, lang, sep, prec, config) | |||
end | |||
function p._main(number, lang, sep, prec, config) | |||
-- Preprocessing prec | -- Preprocessing prec | ||
local precNum = tonumber(prec) | |||
if string.find(tostring( | if precNum ~= nil and precNum > 0 and tonumber(number) ~= nil then | ||
if (string.len( | if string.find(tostring(number), "%.") ~= nil then | ||
precnumber = "" .. | if (string.len(number) - string.find(tostring(number), "%.")) < precNum then | ||
elseif (string.len( | precnumber = "" .. number .. string.rep("0", precNum - (string.len(number) - string.find(tostring(number), "%."))) | ||
local proc = string.gsub( | elseif (string.len(number) - string.find(tostring(number), "%.")) > precNum then | ||
if (string.len(proc) - string.find(tostring(proc), "%.")) < | local proc = string.gsub(number, "0+$", "") | ||
precnumber = proc .. string.rep("0", | if (string.len(proc) - string.find(tostring(proc), "%.")) < precNum then | ||
precnumber = proc .. string.rep("0", precNum - (string.len(proc) - string.find(tostring(proc), "%."))) | |||
else | else | ||
precnumber = proc | precnumber = proc | ||
end | end | ||
elseif (string.len( | elseif (string.len(number) - string.find(tostring(number), "%.")) == precNum then | ||
precnumber = | precnumber = number | ||
end | end | ||
else | else | ||
precnumber = "" .. | precnumber = "" .. number .. "." .. string.rep("0", prec) | ||
end | end | ||
number = precnumber .. "1" | number = precnumber .. "1" | ||
precA = "true" | precA = "true" | ||
end | end | ||
if lang == "arabic-indic" then | |||
lang = "ks" | |||
if | |||
end | end | ||
-- Formatnum | -- Formatnum | ||
if tonumber(number) ~= nil and mw.language.isKnownLanguageTag( | if tonumber(number) ~= nil and mw.language.isKnownLanguageTag(lang) == true then | ||
formatnum = mw.getLanguage( | formatnum = mw.getLanguage( lang ):formatNum( tonumber(number) ) | ||
else | else | ||
formatnum = number | formatnum = number | ||
| Line 100: | Line 60: | ||
-- Formatnum, special cases | -- Formatnum, special cases | ||
local numsc = formatnum | local numsc = formatnum | ||
if | if lang == "ml-old" or lang == "mn" or lang == "te" or lang == "th" then | ||
for i, v in ipairs( digit[lang] ) do | |||
numsc = mw.ustring.gsub(numsc, tostring(i-1), v) | |||
for | |||
numsc = mw.ustring.gsub(numsc, | |||
end | end | ||
end | end | ||
| Line 126: | Line 74: | ||
-- separator | -- separator | ||
if | if sep ~= "" and formatA ~= "true" then | ||
local replace = mw.ustring.gsub( "", "%%", "%%%%" ) | local replace = mw.ustring.gsub( "", "%%", "%%%%" ) | ||
local separator = mw.ustring.sub(mw.getLanguage(lang):formatNum(tonumber("10000")), 3, 3) | |||
if tostring(mw.ustring.find(separator, "%s")) == "1" then | |||
pattern = mw.ustring.format(separator, "%s") | |||
elseif tostring(mw.ustring.find(separator, "%p")) == "1" then | |||
pattern = mw.ustring.gsub(separator, "([%(%)%.%%%+%-%*%?%[%^%$%]])", "%%%1") | |||
else | else | ||
pattern = "" | |||
end | end | ||
return tostring(mw.ustring.gsub( postprec, pattern, replace )) | |||
else | else | ||
return postprec | return postprec | ||
Revision as of 14:43, 29 December 2014
This documentation is transcluded from Module:Formatnum/doc.
-- This module is intended to replace the functionality of Template:Formatnum and related templates.
local p = {}
local digit = { -- languages not supported by the Lua of wikimedia software
["ml-old"] = { '൦', '൧', '൨', '൩', '൪', '൫', '൬', '൭', '൮', '൯' },
["mn"] = { '᠐', '᠑', '᠒', '᠓', '᠔', '᠕', '᠖', '᠗', '᠘', '᠙'},
["te"] = { '౦', '౧', '౨', '౩', '౪', '౫', '౬', '౭', '౮', '౯'},
["th"] = { '๐', '๑', '๒', '๓', '๔', '๕', '๖', '๗', '๘', '๙'}
}
function p.main(frame)
local pframe = frame:getParent()
local config = frame.args
local prec = pframe.args.prec
local number = pframe.args[1]
local lang = string.lower(pframe.args[2])
local sep = pframe.args.sep or ""
if not lang or not mw.language.isSupportedLanguage(lang) then
lang = frame:preprocess( "{{int:lang}}" )
end
return p._main(number, lang, sep, prec, config)
end
function p._main(number, lang, sep, prec, config)
-- Preprocessing prec
local precNum = tonumber(prec)
if precNum ~= nil and precNum > 0 and tonumber(number) ~= nil then
if string.find(tostring(number), "%.") ~= nil then
if (string.len(number) - string.find(tostring(number), "%.")) < precNum then
precnumber = "" .. number .. string.rep("0", precNum - (string.len(number) - string.find(tostring(number), "%.")))
elseif (string.len(number) - string.find(tostring(number), "%.")) > precNum then
local proc = string.gsub(number, "0+$", "")
if (string.len(proc) - string.find(tostring(proc), "%.")) < precNum then
precnumber = proc .. string.rep("0", precNum - (string.len(proc) - string.find(tostring(proc), "%.")))
else
precnumber = proc
end
elseif (string.len(number) - string.find(tostring(number), "%.")) == precNum then
precnumber = number
end
else
precnumber = "" .. number .. "." .. string.rep("0", prec)
end
number = precnumber .. "1"
precA = "true"
end
if lang == "arabic-indic" then
lang = "ks"
end
-- Formatnum
if tonumber(number) ~= nil and mw.language.isKnownLanguageTag(lang) == true then
formatnum = mw.getLanguage( lang ):formatNum( tonumber(number) )
else
formatnum = number
formatA = "true"
end
-- Formatnum, special cases
local numsc = formatnum
if lang == "ml-old" or lang == "mn" or lang == "te" or lang == "th" then
for i, v in ipairs( digit[lang] ) do
numsc = mw.ustring.gsub(numsc, tostring(i-1), v)
end
end
--Postprocessing prec
if precA == "true" then
postprec = mw.ustring.sub(numsc, 1, (mw.ustring.len(numsc) - 1))
else
postprec = numsc
end
-- separator
if sep ~= "" and formatA ~= "true" then
local replace = mw.ustring.gsub( "", "%%", "%%%%" )
local separator = mw.ustring.sub(mw.getLanguage(lang):formatNum(tonumber("10000")), 3, 3)
if tostring(mw.ustring.find(separator, "%s")) == "1" then
pattern = mw.ustring.format(separator, "%s")
elseif tostring(mw.ustring.find(separator, "%p")) == "1" then
pattern = mw.ustring.gsub(separator, "([%(%)%.%%%+%-%*%?%[%^%$%]])", "%%%1")
else
pattern = ""
end
return tostring(mw.ustring.gsub( postprec, pattern, replace ))
else
return postprec
end
end
return p