mirror of
https://codeberg.org/pnx/skift.nvim.git
synced 2026-06-18 05:10:02 +02:00
Initial Commit
This commit is contained in:
commit
694515c168
16 changed files with 1325 additions and 0 deletions
71
lua/skift/utils/hsl.lua
Normal file
71
lua/skift/utils/hsl.lua
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
-- https://github.com/EmmanuelOga/columns/blob/master/utils/color.lua
|
||||
|
||||
local M = {}
|
||||
|
||||
--- Converts an HSL color value to RGB. Conversion formula
|
||||
--- adapted from http://en.wikipedia.org/wiki/HSL_color_space.
|
||||
--- Assumes h, s, and l are contained in the set [0, 1] and
|
||||
--- returns r, g, and b in the set [0, 255].
|
||||
---
|
||||
--- @param h number The hue
|
||||
--- @param s number The saturation
|
||||
--- @param l number The lightness
|
||||
--- @return number, number, number # The RGB representation
|
||||
function M.hslToRgb(h, s, l)
|
||||
--- @type number, number, number
|
||||
local r, g, b
|
||||
|
||||
if s == 0 then
|
||||
r, g, b = l, l, l -- achromatic
|
||||
else
|
||||
--- @param p number
|
||||
--- @param q number
|
||||
--- @param t number
|
||||
local function hue2rgb(p, q, t)
|
||||
if t < 0 then
|
||||
t = t + 1
|
||||
end
|
||||
if t > 1 then
|
||||
t = t - 1
|
||||
end
|
||||
if t < 1 / 6 then
|
||||
return p + (q - p) * 6 * t
|
||||
end
|
||||
if t < 1 / 2 then
|
||||
return q
|
||||
end
|
||||
if t < 2 / 3 then
|
||||
return p + (q - p) * (2 / 3 - t) * 6
|
||||
end
|
||||
return p
|
||||
end
|
||||
|
||||
--- @type number
|
||||
local q
|
||||
if l < 0.5 then
|
||||
q = l * (1 + s)
|
||||
else
|
||||
q = l + s - l * s
|
||||
end
|
||||
local p = 2 * l - q
|
||||
|
||||
r = hue2rgb(p, q, h + 1 / 3)
|
||||
g = hue2rgb(p, q, h)
|
||||
b = hue2rgb(p, q, h - 1 / 3)
|
||||
end
|
||||
|
||||
return r * 255, g * 255, b * 255
|
||||
end
|
||||
|
||||
--- Converts an HSL color value to RGB in Hex representation.
|
||||
--- @param h number The hue
|
||||
--- @param s number The saturation
|
||||
--- @param l number The lightness
|
||||
--- @return string # The hex representation
|
||||
function M.hslToHex(h, s, l)
|
||||
local r, g, b = M.hslToRgb(h / 360, s / 100, l / 100)
|
||||
|
||||
return string.format("#%02x%02x%02x", r, g, b)
|
||||
end
|
||||
|
||||
return M
|
||||
Loading…
Add table
Add a link
Reference in a new issue