diff --git a/after/syntax/css.vim b/after/syntax/css.vim index 1b45f23..4bf3454 100644 --- a/after/syntax/css.vim +++ b/after/syntax/css.vim @@ -1 +1,11 @@ call css_color#init('css', 'extended', 'cssMediaBlock,cssFunction,cssDefinition,cssAttrRegion,cssComment') + +syn clear cssFunction + +" Have to override all of these over again because of the clear :( +" Source: +syn region cssFunction contained matchgroup=cssFunctionName start="\<\(var\|calc\)\s*(" end=")" contains=cssCustomProp,cssValue.*,cssFunction,cssColor,cssStringQ,cssStringQQ oneline +syn region cssFunction contained matchgroup=cssFunctionName start="\<\(rgb\|clip\|attr\|counter\|rect\|cubic-bezier\|steps\)\s*(" end=")" oneline contains=cssValueInteger,cssValueNumber,cssValueLength,cssFunctionComma +syn region cssFunction contained matchgroup=cssFunctionName start="\<\(rgba\|hsl\|hsla\|hsluv\|color-stop\|from\|to\)\s*(" end=")" oneline contains=cssColor,cssValueInteger,cssValueNumber,cssValueLength,cssFunctionComma,cssFunction +syn region cssFunction contained matchgroup=cssFunctionName start="\<\(linear-\|radial-\)\=\gradient\s*(" end=")" oneline contains=cssColor,cssValueInteger,cssValueNumber,cssValueLength,cssFunction,cssGradientAttr,cssFunctionComma +syn region cssFunction contained matchgroup=cssFunctionName start="\<\(matrix\(3d\)\=\|scale\(3d\|X\|Y\|Z\)\=\|translate\(3d\|X\|Y\|Z\)\=\|skew\(X\|Y\)\=\|rotate\(3d\|X\|Y\|Z\)\=\|perspective\)\s*(" end=")" oneline contains=cssValueInteger,cssValueNumber,cssValueLength,cssValueAngle,cssFunctionComma diff --git a/after/syntax/sass.vim b/after/syntax/sass.vim index 79f8bc0..5f0a046 100644 --- a/after/syntax/sass.vim +++ b/after/syntax/sass.vim @@ -1 +1,12 @@ -call css_color#init('css', 'extended', 'sassCssAttribute,sassComment,sassCssComment') +call css_color#init('css', 'extended', 'sassCssAttribute,sassComment,sassCssComment,sassFunction') + +syn clear sassFunction + +" Have to override all of these over again because of the clear :( +" Source: +syn match sassFunction "\<\%(rgb\|rgba\|red\|green\|blue\|mix\)\>(\@=" contained +syn match sassFunction "\<\%(hsl\|hsla\|hsluv\|hue\|saturation\|lightness\|adjust-hue\|lighten\|darken\|saturate\|desaturate\|grayscale\|complement\)\>(\@=" contained +syn match sassFunction "\<\%(alpha\|opacity\|rgba\|opacify\|fade-in\|transparentize\|fade-out\)\>(\@=" contained +syn match sassFunction "\<\%(unquote\|quote\)\>(\@=" contained +syn match sassFunction "\<\%(percentage\|round\|ceil\|floor\|abs\)\>(\@=" contained +syn match sassFunction "\<\%(type-of\|unit\|unitless\|comparable\)\>(\@=" contained diff --git a/after/syntax/scss.vim b/after/syntax/scss.vim index 57569b1..3465b8f 100644 --- a/after/syntax/scss.vim +++ b/after/syntax/scss.vim @@ -1 +1,12 @@ -call css_color#init('css', 'extended', 'scssAttribute,scssComment,scssVariableValue,scssMap,scssMapValue,sassCssAttribute,cssComment') +call css_color#init('css', 'extended', 'scssAttribute,scssComment,scssVariableValue,scssMap,scssMapValue,sassCssAttribute,cssComment,sassFunction') + +syn clear sassFunction + +" Have to override all of these over again because of the clear :( +" Source: +syn match sassFunction "\<\%(rgb\|rgba\|red\|green\|blue\|mix\)\>(\@=" contained +syn match sassFunction "\<\%(hsl\|hsla\|hsluv\|hue\|saturation\|lightness\|adjust-hue\|lighten\|darken\|saturate\|desaturate\|grayscale\|complement\)\>(\@=" contained +syn match sassFunction "\<\%(alpha\|opacity\|rgba\|opacify\|fade-in\|transparentize\|fade-out\)\>(\@=" contained +syn match sassFunction "\<\%(unquote\|quote\)\>(\@=" contained +syn match sassFunction "\<\%(percentage\|round\|ceil\|floor\|abs\)\>(\@=" contained +syn match sassFunction "\<\%(type-of\|unit\|unitless\|comparable\)\>(\@=" contained diff --git a/autoload/css_color.vim b/autoload/css_color.vim index 1d31847..84cd11f 100644 --- a/autoload/css_color.vim +++ b/autoload/css_color.vim @@ -38,6 +38,15 @@ function! s:hsl2color(h,s,l) return printf( '%02x%02x%02x', rgb[0], rgb[1], rgb[2] ) endfunction +function! s:hsluv2color(h,s,l) + let h = str2float(a:h) + let [s,l] = map( [a:s, a:l], 'v:val =~ "%$" ? str2float(v:val) : str2float(v:val) * 100.0' ) + let rgb = hsluv#to_rgb([h,s,l]) + return printf( '%02x%02x%02x', rgb[0], rgb[1], rgb[2] ) +endfunction + +let s:supports_hsluv = get(g:, 'loaded_hsluv', 0) + let s:hex={} for i in range(0, 255) let s:hex[ printf( '%02x', i ) ] = i @@ -141,10 +150,12 @@ function! s:create_syn_match() let hexcolor = submatch(1) let funcname = submatch(2) - if funcname == 'rgb' + if funcname == 'rgb' || funcname == 'rgba' let rgb_color = s:rgb2color(submatch(3),submatch(4),submatch(5)) - elseif funcname == 'hsl' + elseif funcname == 'hsl' || funcname == 'hsla' let rgb_color = s:hsl2color(submatch(3),submatch(4),submatch(5)) + elseif funcname == 'hsluv' && s:supports_hsluv + let rgb_color = s:hsluv2color(submatch(3),submatch(4),submatch(5)) elseif strlen(hexcolor) == 6 let rgb_color = tolower(hexcolor) elseif strlen(hexcolor) == 3 @@ -203,9 +214,9 @@ function! s:create_matches() endfunction let s:_hexcolor = '#\(\x\{3}\|\x\{6}\)\>' " submatch 1 -let s:_funcname = '\(rgb\|hsl\)a\?' " submatch 2 +let s:_funcname = s:supports_hsluv ? '\(rgba\?\|hsla\?\|hsluv\)' : '\(rgba\?\|hsla\?\)' " submatch 2 let s:_ws_ = '\s*' -let s:_numval = s:_ws_ . '\(\d\{1,3}%\?\)' " submatch 3,4,5 +let s:_numval = s:_ws_ . '\(\d\{1,3}\%(.\d\+\)\?%\?\)' " submatch 3,4,5 let s:_listsep = s:_ws_ . ',' let s:_otherargs_ = '\%(,[^)]*\)\?' let s:_funcexpr = s:_funcname . '[(]' . s:_numval . s:_listsep . s:_numval . s:_listsep . s:_numval . s:_ws_ . s:_otherargs_ . '[)]'