Modulo:Colori
La documentazione per questo modulo può essere creata in Modulo:Colori/man
-- Questo modulo fornisce funzioni base per manipolare i colori in CSS
local p={};
--[[
is_rgb
Restituisce '1' se la stringa passata come primo argomento combacia con l'espressione regolare /#?([0-9A-Fa-f]{3,4}|[0-9A-Fa-f]{6})/,
'0' altrimenti.
Uso:
{{#invoke:colori|is_rgb|code|rigorous=eventuale_stringa}}
Parametri
code: La stringa su cui si vuole effettuare la verifica.
rigorous: Da valorizzare se si vuole forzare la funzione a riconoscere un pattern di 6 caratteri esadecimali.
Esempi di chiamata:
{{#invoke:colori|is_rgb|abcxyz}} (resituisce '0')
{{#invoke:colori|is_rgb|abcdef}} (resituisce '1')
{{#invoke:colori|is_rgb|#abcDEF}} (resituisce '1')
{{#invoke:colori|is_rgb|#012}} (resituisce '1')
{{#invoke:colori|is_rgb|#012|rigorous=sì}} (resituisce '0')
{{#invoke:colori|is_rgb|#012ABC|rigorous=sì}} (resituisce '1')
]]
function p.is_rgb(frame)
local code = frame.args[1] or nil
local rigorous = frame.args.rigorous or false -- sarà equivalente a "true" se è una stringa con qualunque valore
if code == nil then return nil end
if code:match("^#?[0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]$") or
( not rigorous and code:match("^#?[0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f][0-9A-Fa-f]?$") ) then
return '1';
else
return '0';
end
end
--[[
rgba
Restituisce la funzione CSS3 'rgba( x, y, z, t )' (dove x, y e z sono i codici decimali dei colori e t è l'opacità)
se la stringa in ingresso è in formato esadecimale completo,
altrimenti restituisce la stringa in input.
Uso:
{{#invoke:colori|rgba|code|alpha_value}}
Parametri
code: La stringa che si vuole trasformare in funzione RGBa.
alpha_value: Percentuale di opacità.
Valori ammessi:
- numero decimale, da 0.0 a 1.0;
- valore percentuale intero, da 0% a 100%.
Il valore di default è massimo (1.0).
Esempi di chiamata:
{{#invoke:colori|rgba|abcDEF}}
{{#invoke:colori|rgba|#012ABC}}
{{#invoke:colori|rgba|#AABBCC|0.6}}
]]
function p.rgba(frame)
local code = frame.args[1]
local alpha = frame.args[2] or "1.0"
if code == nil or code == "" then return nil end
frame.args.rigorous = true
if p.is_rgb(frame) ~= '1' then return code
else
if alpha:match("^0*%d?%d%%") then
alpha = alpha:gsub("%%","")
alpha = tostring(tonumber(alpha) / 100)
elseif not alpha:match("^0?%.%d+$") and not alpha:match("^0+$") then
alpha = "1.0"
end
rgba_values = {}
for substr in code:gmatch("(%w%w)") do
table.insert(rgba_values, tostring(tonumber(substr, 16)))
end
table.insert(rgba_values, alpha)
return string.format("rgba( %s )", table.concat(rgba_values, ", "))
end
end
return p