Modulo:CAS
Istruzioni per l'uso
Questo è un modulo scritto in Lua. Le istruzioni che seguono sono contenute nella sottopagina Modulo:CAS/man (modifica · cronologia)
Sandbox: Modulo:CAS/sandbox (modifica · cronologia) · Sottopagine: lista · Test: Modulo:CAS/test (modifica · cronologia · Esegui)
Questo è un modulo scritto in Lua. Le istruzioni che seguono sono contenute nella sottopagina Modulo:CAS/man (modifica · cronologia)
Sandbox: Modulo:CAS/sandbox (modifica · cronologia) · Sottopagine: lista · Test: Modulo:CAS/test (modifica · cronologia · Esegui)
Modulo che implementa il template {{CAS}}.
local p = {}
local dump = {}
local function check_CAS(cas_string)
--Ritorna true se cas_string è un numero CAS valido.
--cas_string deve essere una stringa di 4-10 cifre senza spazi o altri separatori
if #cas_string<4 or #cas_string>10 then
return false
end
local somma = 0
local moltiplicatore = 0
local not_number = false
local reverse_cas = cas_string.reverse(cas_string)
for c in reverse_cas:gmatch('.') do
cifra = tonumber(c)
if cifra == nil then
not_number = true
else
somma = somma + moltiplicatore * cifra
end
moltiplicatore = moltiplicatore + 1
end
if not_number then return false end
if (somma % 10) == tonumber(cas_string:sub(-1)) then
return true
else
return false
end
end
function p.CAS(frame)
-- Se chiamata mediante #invoke, usa gli argomenti passati al template invocante.
-- Altrimenti a scopo di test assume che gli argomenti siano passati direttamente
if frame == mw.getCurrentFrame() then
origArgs = frame:getParent().args
else
origArgs = frame.args
end
local args = {}
-- unisco i parametri ordinali se più di uno
for _, sub_cas in ipairs(origArgs) do
args[#args+1] = mw.text.trim(sub_cas)
end
cas_string = table.concat(args)
--pulisco da eventuali trattini
cas_string = string.gsub(cas_string, '-', '')
--Alcuni template invocano questo modulo senza preventivamente controllare
--se sia stato fornito un CAS (manualmente o tramite Wikidata). Anziché
--considerarlo un errore, è più opportuno non emettere alcun output, in modo
--tale che sia a sua volta considerato un parametro assente.
if #cas_string == 0 then
return ''
end
--controllo se è un CAS valido
local check_result = check_CAS(cas_string)
--compongo la stringa di risposta
CAS_formattato = cas_string
error_string = ''
if check_result then
CAS_formattato = cas_string:sub(1, -4) .. '-' .. cas_string:sub(-3, -2) .. '-' .. cas_string:sub(-1)
else
error_string = ' <strong class="error">numero CAS non valido</strong>'
end
reply = '<span class="reflink plainlinksneverexpand"><span class="noarchive">[' ..
tostring(mw.uri.fullUrl('toollabs:magnustools/cas.php',
{['cas']=CAS_formattato, ['language']='it'})) .. ' ' ..
CAS_formattato .. ']</span></span>' .. error_string
return reply
end
return p