From f986d9a0ea1feff1388b5c7d297ec3faa19036a7 Mon Sep 17 00:00:00 2001 From: Akianonymus Date: Fri, 9 Sep 2022 23:55:43 +0530 Subject: [FEATURE] Add support for sass variables Import support import using use and import keyword multiple imports in single line multiple imports in multiple lines ( using commas ) recursive imports watch imports for changes and automatically rehighlight buffer buffer variables recursive variables support multiple variables in single line parse imported files only when they are changed Loosely based on https://github.com/norcalli/nvim-colorizer.lua/pull/22/files --- lua/colorizer/matcher_utils.lua | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'lua/colorizer/matcher_utils.lua') diff --git a/lua/colorizer/matcher_utils.lua b/lua/colorizer/matcher_utils.lua index 29cd5e9..7803eac 100644 --- a/lua/colorizer/matcher_utils.lua +++ b/lua/colorizer/matcher_utils.lua @@ -5,6 +5,7 @@ local min, max = math.min, math.max local color_utils = require "colorizer.color_utils" local color_name_parser = color_utils.color_name_parser +local sass_name_parser = color_utils.sass_name_parser local rgba_hex_parser = color_utils.rgba_hex_parser local parser = {} @@ -13,6 +14,7 @@ parser["_rgb"] = color_utils.rgb_function_parser parser["_rgba"] = color_utils.rgba_function_parser parser["_hsl"] = color_utils.hsl_function_parser parser["_hsla"] = color_utils.hsla_function_parser +local b_hash, dollar_hash = ("#"):byte(), ("$"):byte() ---Form a trie stuct with the given prefixes ---@param matchers table: List of prefixes, {"rgb", "hsl"} @@ -21,8 +23,7 @@ parser["_hsla"] = color_utils.hsla_function_parser local function compile_matcher(matchers, matchers_trie) local trie = Trie(matchers_trie) - local b_hash = ("#"):byte() - local function parse_fn(line, i) + local function parse_fn(line, i, buf) -- prefix # if matchers.rgba_hex_parser then if line:byte(i) == b_hash then @@ -30,6 +31,13 @@ local function compile_matcher(matchers, matchers_trie) end end + -- prefix $, SASS Colour names + if matchers.sass_name_parser then + if line:byte(i) == dollar_hash then + return sass_name_parser(line, i, buf) + end + end + -- Prefix 0x, rgba, rgb, hsla, hsl local prefix = trie:longest_prefix(line, i) if prefix then @@ -55,6 +63,7 @@ local MATCHER_CACHE = {} ---@return function|boolean: function which will just parse the line for enabled parsers local function make_matcher(options) local enable_names = options.css or options.names + local enable_sass = options.sass and options.sass.enable local enable_tailwind = options.tailwind local enable_RGB = options.css or options.RGB local enable_RRGGBB = options.css or options.RRGGBB @@ -74,6 +83,7 @@ local function make_matcher(options) + ((enable_tailwind == true or enable_tailwind == "normal") and 1 or 7) + (enable_tailwind == "lsp" and 1 or 8) + (enable_tailwind == "both" and 1 or 9) + + (enable_sass and 1 or 10) if matcher_key == 0 then return false @@ -92,6 +102,10 @@ local function make_matcher(options) matchers.color_name_parser = { tailwind = options.tailwind } end + if enable_sass then + matchers.sass_name_parser = true + end + local valid_lengths = { [3] = enable_RGB, [6] = enable_RRGGBB, [8] = enable_RRGGBBAA } local minlen, maxlen for k, v in pairs(valid_lengths) do -- cgit v1.2.3-70-g09d2