Modulo:CAS

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca

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 = '&nbsp;<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