Modulo:CAS

Versione del 1 nov 2013 alle 20:39 di Moroboshi (discussione | contributi) (Nuova pagina: local p = {} local function check_CAS(cas_string) --Ritorna true se cas_string è un numero CAS valido. --cas_string deve essere una stringa di 6-10 cifre senza spazi ...)
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

Modulo che implementa il template {{CAS}}.


local p = {}

local function check_CAS(cas_string)
--Ritorna true se cas_string è un numero CAS valido.
--cas_string deve essere una stringa di 6-10 cifre senza spazi o altri separatori

    if #cas_string<6 or #cas_string>10 then
        return false
    end

    local somma = 0
    local moltiplicatore = 0
    local not_number = false
    local reverse_cas = string.reverse(cas_string)
    for c in string:gmatch(reverse_cas, '.') do
        cifra = tonumber(c)
        if c == nil then
            not_number = true
        else
            somma = somma + moltiplicatore * cifra
        end
    end
    if not_number then  return false end
    if modulo == 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] = sub_cas
    end
    cas_string = table.concat(args)
    --pulisco da eventuali trattini
    cas_string = string.gsub(cas_string, '-', '')
    --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