Módulo:Fmtn
La decumentaçon pa este módulo puode ser criada na páigina Módulo:Fmtn/doc
local p = {}
-- Padrones de custruçon coincidos, cun ua trasformaçon para que se torne
-- un padron bálido.
-- L padron nun percisa ser purfeito, pus el ye balidado cumo númaro
-- passado la trasformaçon. Anton nun hai porblemas se el eibentualmente podir
-- porduzir númaros ambálidos. Hai solo de tomar l cuidado para que nó
-- porduza númaros ancorretos.
-- Obs.: Ouserbar que muitos REGEXes nun son bálidos an Lua.
-- Beija la documentaçon an:
-- https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual#Patterns
local padrones_coincidos = {
{ "^[%d,]*%.%d*$", -- formato 1,123,123.123
false, -- nun necessita de rebison
{
{ ",", "" }, -- remobe bírgulas
}
},
{ "^[%d.]*,%d*$", -- formato 1.123.123,123 ou 1123123,123
false, -- nun marcar para rebison
{
{ "%.", "" }, -- remobe puntos
{ ",", "."}, -- sustitui bírgula por punto
}
},
{ "^[%d%s]*[,.]%d*$", -- formato 1 123 123,123 ou 1 123 123.123
false, -- nun marcar para rebison
{
{ "%s", "" }, -- remobe spácios
{ ",", "."}, -- sustitui bírgula por punto, se houbir
}
},
{ "^[%d,]*,%d%d%d$", -- formato 1,123,123
false, -- nun marcar para rebison
{
{ ",", "" }, -- remobe bírgulas
}
},
{ "^[%d.]*%.%d%d%d$", -- formato 1.123.123 (trés dígitos ne l radadeiro bloco)
false, -- nun marcar para rebison
{
{ ",", "" }, -- remobe puntos
}
},
{ "^[%d,]*,%d%d%d$", -- formato 1,123,123 (trés dígitos ne l radadeiro bloco)
false, -- nun marcar para rebison
{
{ ",", "" }, -- remobe bírgulas
}
},
{ "^[%d%s]*%s%d%d%d$", -- formato 1 123 123 (trés dígitos ne l radadeiro bloco)
false, -- nun marcar para rebison
{
{ "%s", "" }, -- remobe spácios
}
},
{ "^[%d.]*%.%d%d$", -- formato 1.123.12 (dous dígitos ne l radadeiro bloco)
true, -- marcar para rebison
{
{ ".", "" }, -- remobe puntos
{ "(%d%d)$", ".%1" }, -- ansere un punto antes de ls dous radadeiros dígitos
}
},
{ "^[%d,]*,%d%d$", -- formato 1,123,12 (dois dígitos no último bloco)
true, -- marcar para rebison
{
{ ",", "" }, -- remobe bírgulas
{ "(%d%d)$", ".%1" }, -- ansere un punto antes de ls dous radadeiros dígitos
}
},
{ "^[%d%s]%s%d%d$", -- formato 1 123 12 (dous dígitos ne l radadeiro bloco)
true, -- marcar para rebison
{
{ "%s", "" }, -- remobe spácios
{ "(%d%d)$", ".%1" }, -- ansere un punto antes de ls dous radadeiros dígitos
}
},
}
function p.fmtn(frame)
local param1 = frame.args[1] or ""
local param2 = frame.args[2] or ""
local param3 = frame.args[3] or ""
num1, isnumber1, needcheck1 = recoince_numaro(param1)
num2, isnumber2, needcheck2 = recoince_numaro(param2)
num3, isnumber3, needcheck3 = recoince_numaro(param3)
isarticle = mw.title.getCurrentTitle().namespace == 0
prefixo = ''
sufixo = ''
if isnumber1 and not isnumber2 and not isnumber3 then
-- solamente l purmeiro númaro ye bálido
mynum = num1
needcheck = needcheck1
if param2 ~= '' then sufixo = sufixo .. ' ' .. param2 end
if param3 ~= '' then sufixo = sufixo .. ' ' .. param3 end
elseif not isnumber1 and isnumber2 and not isnumber3 then
-- solamente l segundo númaro ye bálido
mynum = num2
needcheck = needcheck2
if param1 ~= '' then prefixo = prefixo .. param1 .. ' ' end
if param3 ~= '' then sufixo = sufixo .. ' ' .. param3 end
elseif not isnumber1 and not isnumber2 and isnumber3 then
-- solamente l terceiro númaro ye bálido
mynum = num3
needcheck = needcheck3
if param1 ~= '' then prefixo = prefixo .. param1 .. ' ' end
if param2 ~= '' then prefixo = prefixo .. param2 .. ' ' end
else
-- ERRO: eisisten mais de dous númaros bálidos, ó nanhun ye bálido
-- Nesse causo, faç l que yá era feito antes, tenta formatar de la forma
-- que fur possible i retorna ls parámetros na orde que fúrun
-- apersentados
-- Eiqui usa-se l "callParserFunction" para copiar l cumportamiento que yá
-- era persenciado antes desse módulo eisistir i eibitar qu'erros séian
-- ampressos ne ls artigos
res = ''
if param1 ~= '' then
res = res .. formatnum(param1)
end
if param2 ~= '' then
if res ~= '' then res = res .. ' ' end
res = res .. formatnum(param2)
end
if param3 ~= '' then
if res ~= '' then res = res .. ' ' end
res = res .. formatnum(param3)
end
if isarticle then
res = res .. "[[Catadorie:!Páiginas cun erro d'outelizaçon de l modelo Fmtn]]"
end
return res
end
res = prefixo .. formatnum(mynum) .. sufixo
if needcheck and isarticle then
res = res .. '[[Catadorie:!Páiginas cuja outelizaçon de l modelo Fmtn debe ser rebisada]]'
end
return res
end
function formatnum(num)
frame = mw.getCurrentFrame()
return frame:callParserFunction{ name = 'formatnum', args = { num } }
-- Nun ye outelizado pus nun preserba l númaro de dígitos passado la casa decimal
-- lang = mw.language.getContentLanguage()
-- return lang:formatNum(mynum)
end
function recoince_numaro(num)
if tonumber(num) then
-- yá ye un númaro bálido, nun percisa fazer nada
isnumber = true
needcheck = false
else
isnumber = false
needcheck = true
-- nun ye un númaro bálido, ouserba ls padrones para ber
-- se puode ser cumbertido nun padron bálido
for _, rule in pairs(padrones_coincidos) do
checkpattern = rule[1]
if string.find(num, checkpattern) then
newneedcheck = rule[2]
substitutions = rule[3]
newstr = num
for _, subs in pairs(substitutions) do
-- aplica la sustituiçon na string
newstr = string.gsub(newstr, subs[1], subs[2])
end
if tonumber(newstr) then
-- berifica se la trasformaçon porduziu un númaro bálido
-- causo positibo, ancerra l loop
num = newstr
isnumber = true
needcheck = newneedcheck
break
end
end
end
-- se nanhun padron funcionou, anton debe ser ambálido
-- deixa l código retornar l mesmo númaro passado i deixa que
-- l chamador faga l sou trabalho
end
return num, isnumber, needcheck
end
return p