mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-02-03 21:50:05 +08:00
130 lines
3.2 KiB
Lua
130 lines
3.2 KiB
Lua
--=============================================================================
|
|
-- cmyk.lua ---
|
|
-- Copyright (c) 2019-2024 Wang Shidong & Contributors
|
|
-- Author: Wang Shidong < wsdjeg@outlook.com >
|
|
-- URL: https://spacevim.org
|
|
-- License: GPLv3
|
|
--=============================================================================
|
|
local M = {}
|
|
|
|
local color = require('spacevim.api.color')
|
|
local util = require('cpicker.util')
|
|
|
|
local cyan = 0
|
|
local magenta = 0
|
|
local yellow = 0
|
|
local black = 0
|
|
|
|
M.color_code_regex = [[\scmyk(\d\+%,\s\d\+%,\s\d\+%,\s\d\+%)]]
|
|
|
|
local function on_change_argv()
|
|
return 'cmyk', { cyan, magenta, yellow, black }
|
|
end
|
|
|
|
function M.buf_text()
|
|
local rst = {}
|
|
local c_bar = util.generate_bar(cyan, '+')
|
|
local m_bar = util.generate_bar(magenta, '+')
|
|
local y_bar = util.generate_bar(yellow, '+')
|
|
local k_bar = util.generate_bar(black, '+')
|
|
table.insert(rst, 'CMYK: C: ' .. string.format('%4s', math.floor(cyan * 100 + 0.5)) .. ' ' .. c_bar)
|
|
table.insert(rst, ' M: ' .. string.format('%4s', math.floor(magenta * 100 + 0.5)) .. ' ' .. m_bar)
|
|
table.insert(rst, ' Y: ' .. string.format('%4s', math.floor(yellow * 100 + 0.5)) .. ' ' .. y_bar)
|
|
table.insert(rst, ' K: ' .. string.format('%4s', math.floor(black * 100 + 0.5)) .. ' ' .. k_bar)
|
|
return rst
|
|
end
|
|
|
|
function M.color_code()
|
|
return
|
|
' =========' .. string.format(
|
|
' cmyk(%s%%, %s%%, %s%%, %s%%)',
|
|
math.floor(cyan * 100 + 0.5),
|
|
math.floor(magenta * 100 + 0.5),
|
|
math.floor(yellow * 100 + 0.5),
|
|
math.floor(black * 100 + 0.5)
|
|
)
|
|
end
|
|
|
|
local function increase_cyan()
|
|
if cyan <= 0.99 then
|
|
cyan = cyan + 0.01
|
|
elseif cyan < 1 then
|
|
cyan = 1
|
|
end
|
|
return on_change_argv()
|
|
end
|
|
local function reduce_cyan()
|
|
if cyan > 0.01 then
|
|
cyan = cyan - 0.01
|
|
elseif cyan > 0 then
|
|
cyan = 0
|
|
end
|
|
return on_change_argv()
|
|
end
|
|
local function increase_magenta()
|
|
if magenta <= 0.99 then
|
|
magenta = magenta + 0.01
|
|
elseif magenta < 1 then
|
|
magenta = 1
|
|
end
|
|
return on_change_argv()
|
|
end
|
|
local function reduce_magenta()
|
|
if magenta > 0.01 then
|
|
magenta = magenta - 0.01
|
|
elseif magenta > 0 then
|
|
magenta = 0
|
|
end
|
|
return on_change_argv()
|
|
end
|
|
local function increase_yellow()
|
|
if yellow <= 0.99 then
|
|
yellow = yellow + 0.01
|
|
elseif yellow < 1 then
|
|
yellow = 1
|
|
end
|
|
return on_change_argv()
|
|
end
|
|
local function reduce_yellow()
|
|
if yellow > 0.01 then
|
|
yellow = yellow - 0.01
|
|
elseif yellow > 0 then
|
|
yellow = 0
|
|
end
|
|
return on_change_argv()
|
|
end
|
|
local function increase_black()
|
|
if black <= 0.99 then
|
|
black = black + 0.01
|
|
elseif black < 1 then
|
|
black = 1
|
|
end
|
|
return on_change_argv()
|
|
end
|
|
local function reduce_black()
|
|
if black > 0.01 then
|
|
black = black - 0.01
|
|
elseif black > 0 then
|
|
black = 0
|
|
end
|
|
return on_change_argv()
|
|
end
|
|
function M.increase_reduce_functions()
|
|
return {
|
|
{ increase_cyan, reduce_cyan },
|
|
{ increase_magenta, reduce_magenta },
|
|
{ increase_yellow, reduce_yellow },
|
|
{ increase_black, reduce_black },
|
|
}
|
|
end
|
|
|
|
function M.on_change(f, code)
|
|
if f == 'cmyk' then
|
|
cyan, magenta, yellow, black = unpack(code)
|
|
return
|
|
end
|
|
cyan, magenta, yellow, black = color[f .. '2cmyk'](unpack(code))
|
|
end
|
|
|
|
return M
|