From 20fd0091ef4d873fb1ce8b2bbb278664514cac7a Mon Sep 17 00:00:00 2001 From: Akianonymus Date: Thu, 22 Sep 2022 21:23:11 +0530 Subject: Fix: Error when - in hex color | #24 --- lua/colorizer/color.lua | 5 +++-- lua/colorizer/utils.lua | 10 +++++++--- test/expectation.txt | 1 + 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/lua/colorizer/color.lua b/lua/colorizer/color.lua index 711c8e4..9cfac2a 100644 --- a/lua/colorizer/color.lua +++ b/lua/colorizer/color.lua @@ -11,6 +11,7 @@ local Trie = require "colorizer.trie" local utils = require "colorizer.utils" local byte_is_alphanumeric = utils.byte_is_alphanumeric local byte_is_hex = utils.byte_is_hex +local byte_is_valid_colorchar = utils.byte_is_valid_colorchar local parse_hex = utils.parse_hex local percent_or_hex = utils.percent_or_hex @@ -256,7 +257,7 @@ function color.name_parser(line, i, opts) return end - if i > 1 and byte_is_alphanumeric(line:byte(i - 1)) then + if i > 1 and byte_is_valid_colorchar(line:byte(i - 1)) then return end @@ -266,7 +267,7 @@ function color.name_parser(line, i, opts) -- Take the Blue out of Blueberry -- Line end or non-letter. local next_byte_index = i + #prefix - if #line >= next_byte_index and byte_is_alphanumeric(line:byte(next_byte_index)) then + if #line >= next_byte_index and byte_is_valid_colorchar(line:byte(next_byte_index)) then return end return #prefix, COLOR_MAP[prefix] diff --git a/lua/colorizer/utils.lua b/lua/colorizer/utils.lua index c83c32d..22fa6eb 100644 --- a/lua/colorizer/utils.lua +++ b/lua/colorizer/utils.lua @@ -28,7 +28,6 @@ do -- do not run the loop multiple times local b = string.byte local byte_values = { ["0"] = b "0", ["9"] = b "9", ["a"] = b "a", ["f"] = b "f", ["z"] = b "z" } - local extra_char = { [b "-"] = true } for i = 0, 255 do local v = 0 @@ -45,8 +44,6 @@ do v = bor(v, lshift(1, 2)) v = bor(v, lshift(lowercase - byte_values["a"] + 10, 4)) end - elseif extra_char[i] then - v = i end BYTE_CATEGORY[i] = v end @@ -67,6 +64,13 @@ function utils.byte_is_hex(byte) return band(BYTE_CATEGORY[byte], CATEGORY_HEX) ~= 0 end +---Obvious. +---@param byte number +---@return boolean +function utils.byte_is_valid_colorchar(byte) + return utils.byte_is_alphanumeric(byte) or byte == ("-"):byte() +end + --- Get last modified time of a file ---@param path string: file path ---@return number|nil: modified time diff --git a/test/expectation.txt b/test/expectation.txt index 7ae3484..d04bf92 100644 --- a/test/expectation.txt +++ b/test/expectation.txt @@ -26,6 +26,7 @@ hsla(360,50%,50%,1.0000000000000001) ]] --[[ FAIL +#--- #F0FF #F0FFF #F0FFF0F -- cgit v1.2.3-70-g09d2