-- This module implements local p =
local function rgbdec2hex(r, g, b, d) if (r >= 0 and g >= 0 and b >= 0) then local baseconvert = require('Module:BaseConvert') local s1 = baseconvert.convert local s2 = baseconvert.convert local s3 = baseconvert.convert s1 = mw.ustring.gsub(s1, '^([0-9A-Fa-f])$', '0%1') s2 = mw.ustring.gsub(s2, '^([0-9A-Fa-f])$', '0%1') s3 = mw.ustring.gsub(s3, '^([0-9A-Fa-f])$', '0%1') return (s1 .. s2 .. s3):upper end return dend
local function rgbdec2hsl(r, g, b) local H, S, L local max = math.max(r, g, b) local min = math.min(r, g, b) -- hue if ((r
b)) then H = 0 elseif ((g >= r) and (g >= b)) then if (r > b) then H = 120 - 60 * (r - b) / (g - b) else H = 120 + 60 * (b - r) / (g - r) end elseif ((b >= r) and (b >= g)) then if (g > r) then H = 240 - 60 * (g - r) / (b - r) else H = 240 + 60 * (r - g) / (b - g) end else if (b > g) then H = 360 - 60 * (b - g) / (r - g) else H = 60 * (g - b) / (r - b) end end -- saturation if ((r
b)) then S = 0 elseif ((max + min) > 255) then S = (max - min) / (510 - max - min) else S = (max - min) / (max + min) end -- luminosity L = (max + min) / (255 * 2) return H, S, Lend
local function hsl2rgbdec(h, s, l) -- This function came from if (0 <= h and h < 360 and 0 <= s and s <= 1 and 0 <= l and l <= 1) then local c = (1 - math.abs(2*l - 1))*s local x = c*(1 - math.abs(math.fmod(h/60, 2) - 1)) local m = l - c/2
local r, g, b = m, m, m if(0 <= h and h < 60) then r = r + c g = g + x elseif(60 <= h and h < 120) then r = r + x g = g + c elseif(120 <= h and h < 180) then g = g + c b = b + x elseif(180 <= h and h < 240) then g = g + x b = b + c elseif(240 <= h and h < 300) then r = r + x b = b + c elseif(300 <= h and h < 360) then r = r + c b = b + x end return 255*r, 255*g, 255*b end return -1, -1, -1end
function p.main(frame) local args = require('Module:Arguments').getArgs(frame) -- Remove nowiki and leading hash signs local c = mw.text.unstrip(args[1] or '#f0e68c') c = mw.ustring.match(c, '^[%s]*(.-)[%s]*$') c = mw.ustring.gsub(c, '^[%s#]*', ) c = mw.ustring.gsub(c, '^#[%s]*', ) -- Lowercase c = c:lower mw.log(c) -- Expand short 3 hex for to 6 hex form c = mw.ustring.gsub(c, '^([0-9A-Fa-f])([0-9A-Fa-f])([0-9A-Fa-f])$', '%1%1%2%2%3%3') mw.log(c) -- Get new value for luminosity local Lnew = tonumber(args[2] or '-1') or 0.6 -- Default return local res = c -- Adjust shading local cs = mw.text.split(c or , ) if(#cs
-- Convert RGBdec to HSL local H, S, L = rgbdec2hsl(R, G, B) mw.log(H, S, L) -- Convert back to RGBdec local R, G, B = hsl2rgbdec(H, S, Lnew) -- Convert back to RGBhex res = rgbdec2hex(R, G, B, c) end res = res:upper if args[3]
return p