diff --git a/after/syntax/css.vim b/after/syntax/css.vim index a470b97..a7ed7ff 100644 --- a/after/syntax/css.vim +++ b/after/syntax/css.vim @@ -9,7 +9,10 @@ " vim:et:ts=2 sw=2 sts=2 let s:hex={} -let w:matchescache = {} +let b:matchescache = {} +let b:color_pattern = {} + +let w:colorDictRegExp='' for i in range(0, 255) let s:hex[ printf( '%02x', i ) ] = i endfor @@ -26,10 +29,24 @@ function! s:FGForBG(color) return r*30 + g*59 + b*11 > 12000 ? s:black : s:white endfunction -"let b:color_pattern = {} let s:color_prefix = 'gui' let s:fg_color_calc = 'let color = "#" . toupper(a:color)' +function! s:RestoreColors() + for part in keys(b:color_pattern) + let group = 'cssColor' . tolower(strpart(b:color_pattern[part], 1)) + "exe 'syn match' group '/'.escape(pattern, '/').'/ contained' + exe 'syn cluster cssColors add='.group + exe 'hi' group s:color_prefix.'bg='.b:color_pattern[part] s:color_prefix.'fg='.s:FGForBG(strpart(b:color_pattern[part], 1)) + + if !exists('b:matchescache') + let b:matchescache={} + endif + + let b:matchescache[part] = matchadd(group, part) + endfor +endfunction + function! s:MatchColorValue(color, pattern, part) if ! len(a:color) | return | endif @@ -38,13 +55,18 @@ function! s:MatchColorValue(color, pattern, part) if pattern =~ '\>$' | let pattern .= '\>' | endif let group = 'cssColor' . tolower(a:color) - "exe 'syn match' group '/'.escape(pattern, '/').'/ contained' - exe 'syn cluster cssColors add='.group - exe s:fg_color_calc - exe 'hi' group s:color_prefix.'bg='.color s:color_prefix.'fg='.s:FGForBG(a:color) + if !exists('b:color_pattern[a:part]') + let b:color_pattern[a:part]='#'.toupper(a:color) + "exe 'syn match' group '/'.escape(pattern, '/').'/ contained' + exe 'syn cluster cssColors add='.group + exe s:fg_color_calc + exe 'hi' group s:color_prefix.'bg='.color s:color_prefix.'fg='.s:FGForBG(a:color) + endif - if !exists("w:matchescache[a:part]") - let w:matchescache[a:part] = matchadd(group, a:part) + if !exists('b:matchescache') + let b:matchescache = {} + elseif !exists('b:matchescache[a:part]') + let b:matchescache[a:part] = matchadd(group, a:part) endif return '' @@ -78,30 +100,209 @@ function! s:HexForHSLValue(h,s,l) endfunction function! s:ClearMatches() - if !exists('w:matchescache') + if !exists('b:matchescache') return endif - for i in values(w:matchescache) - call matchdelete(i) - endfor - unlet w:matchescache + "for i in values(b:matchescache) + "call matchdelete(i) + "endfor + unlet b:matchescache endfunction function! s:VimCssInit(update) if a:update==1 call s:ClearMatches() endif + + if exists('b:color_pattern')&&len(keys(b:color_pattern))>0 + call s:RestoreColors() + return + endif - let w:matchescache = {} + "let b:matchescache = {} - for i in range(1, line("$")) - call s:PreviewCSSColorInLine(i) - endfor + call s:AdditionalColors() + + "for i in range(1, line("$")) + call s:PreviewCSSColor(join(getline(1,'$'), "\n")) + "endfor endfunction -function! s:PreviewCSSColorInLine(w) - let line=getline(a:w) +function! s:AdditionalColors() + if exists('&w:colorDictRegExp')&&w:colorDictRegExp!='' + return + endif + + " w3c Colors + " plus extra colors + let w:colorDict = { + \'black': '#000000', + \'red': '#ff0000', + \'silver': '#c0c0c0', + \'gray': '#808080', + \'white': '#ffffff', + \'maroon': '#800000', + \'purple': '#800080', + \'fuchsia': '#ff00ff', + \'green': '#008000', + \'lime': '#00ff00', + \'olive': '#808000', + \'yellow': '#ffff00', + \'navy': '#000080', + \'blue': '#0000ff', + \'teal': '#008080', + \'aqua': '#00ffff', + \'aliceblue': '#f0f8ff', + \'antiquewhite': '#faebd7', + \'aquamarine': '#7fffd4', + \'azure': '#f0ffff', + \'beige': '#f5f5dc', + \'bisque': '#ffe4c4', + \'blanchedalmond': '#ffebcd', + \'blueviolet': '#8a2be2', + \'brown': '#a52a2a', + \'burlywood': '#deb887', + \'cadetblue': '#5f9ea0', + \'chartreuse': '#7fff00', + \'chocolate': '#d2691e', + \'coral': '#ff7f50', + \'cornflowerblue': '#6495ed', + \'cornsilk': '#fff8dc', + \'crimson': '#dc143c', + \'cyan': '#00ffff', + \'darkblue': '#00008b', + \'darkcyan': '#008b8b', + \'darkgoldenrod': '#b8860b', + \'darkgray': '#a9a9a9', + \'darkgreen': '#006400', + \'darkgrey': '#a9a9a9', + \'darkkhaki': '#bdb76b', + \'darkmagenta': '#8b008b', + \'darkolivegreen': '#556b2f', + \'darkorchid': '#9932cc', + \'darkred': '#8b0000', + \'darksalmon': '#e9967a', + \'darkseagreen': '#8fbc8f', + \'darkslateblue': '#483d8b', + \'darkslategray': '#2f4f4f', + \'darkslategrey': '#2f4f4f', + \'darkturquoise': '#00ced1', + \'darkviolet': '#9400d3', + \'darkorange': '#ff8c00', + \'deeppink': '#ff1493', + \'deepskyblue': '#00bfff', + \'dimgray': '#696969', + \'dimgrey': '#696969', + \'dodgerblue': '#1e90ff', + \'firebrick': '#b22222', + \'floralwhite': '#fffaf0', + \'forestgreen': '#228b22', + \'gainsboro': '#dcdcdc', + \'ghostwhite': '#f8f8ff', + \'gold': '#ffd700', + \'goldenrod': '#daa520', + \'greenyellow': '#adff2f', + \'grey': '#808080', + \'honeydew': '#f0fff0', + \'hotpink': '#ff69b4', + \'indianred': '#cd5c5c', + \'indigo': '#4b0082', + \'ivory': '#fffff0', + \'khaki': '#f0e68c', + \'lavender': '#e6e6fa', + \'lavenderblush': '#fff0f5', + \'lawngreen': '#7cfc00', + \'lemonchiffon': '#fffacd', + \'lightblue': '#add8e6', + \'lightcoral': '#f08080', + \'lightcyan': '#e0ffff', + \'lightgoldenrodyellow': '#fafad2', + \'lightgray': '#d3d3d3', + \'lightgreen': '#90ee90', + \'lightgrey': '#d3d3d3', + \'lightpink': '#ffb6c1', + \'lightsalmon': '#ffa07a', + \'lightseagreen': '#20b2aa', + \'lightskyblue': '#87cefa', + \'lightslategray': '#778899', + \'lightslategrey': '#778899', + \'lightsteelblue': '#b0c4de', + \'lightyellow': '#ffffe0', + \'limegreen': '#32cd32', + \'linen': '#faf0e6', + \'magenta': '#ff00ff', + \'mediumaquamarine': '#66cdaa', + \'mediumblue': '#0000cd', + \'mediumorchid': '#ba55d3', + \'mediumpurple': '#9370d8', + \'mediumseagreen': '#3cb371', + \'mediumslateblue': '#7b68ee', + \'mediumspringgreen': '#00fa9a', + \'mediumturquoise': '#48d1cc', + \'mediumvioletred': '#c71585', + \'midnightblue': '#191970', + \'mintcream': '#f5fffa', + \'mistyrose': '#ffe4e1', + \'moccasin': '#ffe4b5', + \'navajowhite': '#ffdead', + \'oldlace': '#fdf5e6', + \'olivedrab': '#6b8e23', + \'orange': '#ffa500', + \'orangered': '#ff4500', + \'orchid': '#da70d6', + \'palegoldenrod': '#eee8aa', + \'palegreen': '#98fb98', + \'paleturquoise': '#afeeee', + \'palevioletred': '#d87093', + \'papayawhip': '#ffefd5', + \'peachpuff': '#ffdab9', + \'peru': '#cd853f', + \'pink': '#ffc0cb', + \'plum': '#dda0dd', + \'powderblue': '#b0e0e6', + \'rosybrown': '#bc8f8f', + \'royalblue': '#4169e1', + \'saddlebrown': '#8b4513', + \'salmon': '#fa8072', + \'sandybrown': '#f4a460', + \'seagreen': '#2e8b57', + \'seashell': '#fff5ee', + \'sienna': '#a0522d', + \'skyblue': '#87ceeb', + \'slateblue': '#6a5acd', + \'slategray': '#708090', + \'slategrey': '#708090', + \'snow': '#fffafa', + \'springgreen': '#00ff7f', + \'steelblue': '#4682b4', + \'tan': '#d2b48c', + \'thistle': '#d8bfd8', + \'tomato': '#ff6347', + \'turquoise': '#40e0d0', + \'violet': '#ee82ee', + \'wheat': '#f5deb3', + \'whitesmoke': '#f5f5f5', + \'yellowgreen': '#9acd32', + \} + + let w:colorDictRegExp = '\(' + for _color in keys(w:colorDict) + let w:colorDictRegExp.='\<'._color.'\>\|' + endfor + let w:colorDictRegExp=strpart(w:colorDictRegExp, 0, len(w:colorDictRegExp)-2).'\)\c' +endfunction + +function! s:ProcessByLine(w) + call s:PreviewCSSColor(getline(a:w)) +endfunction + +function! s:PreviewCSSColor(str) + if !exists('&w:colorDictRegExp') + call s:AdditionalColors() + endif + + let line=a:str "getline(a:w) let colorexps = { \ 'hex3' : '#\(\x\)\(\x\)\(\x\)\>', \ 'hex' : '#\(\x\{6}\)\>', @@ -116,8 +317,8 @@ function! s:PreviewCSSColorInLine(w) let place=0 while 1 - let foundcolor = matchstr(line, colorexps[exp], place) - let place = matchend(line, colorexps[exp], place) + let foundcolor = matchstr(a:str, colorexps[exp], place) + let place = matchend(a:str, colorexps[exp], place) if empty(foundcolor) break @@ -403,167 +604,10 @@ if has("gui_running") || &t_Co==256 hi cssColorfffff0 guibg=#FFFFF0 guifg=#000000 ctermbg=15 ctermfg=16 | syn cluster cssColors add=cssColorfffff0 hi cssColorffffff guibg=#FFFFFF guifg=#000000 ctermbg=231 ctermfg=16 | syn cluster cssColors add=cssColorffffff - " w3c Colors - " plus extra colors - let w:colorDict = { - \'black': '#000000', - \'red': '#ff0000', - \'silver': '#c0c0c0', - \'gray': '#808080', - \'white': '#ffffff', - \'maroon': '#800000', - \'purple': '#800080', - \'fuchsia': '#ff00ff', - \'green': '#008000', - \'lime': '#00ff00', - \'olive': '#808000', - \'yellow': '#ffff00', - \'navy': '#000080', - \'blue': '#0000ff', - \'teal': '#008080', - \'aqua': '#00ffff', - \'aliceblue': '#f0f8ff', - \'antiquewhite': '#faebd7', - \'aquamarine': '#7fffd4', - \'azure': '#f0ffff', - \'beige': '#f5f5dc', - \'bisque': '#ffe4c4', - \'blanchedalmond': '#ffebcd', - \'blueviolet': '#8a2be2', - \'brown': '#a52a2a', - \'burlywood': '#deb887', - \'cadetblue': '#5f9ea0', - \'chartreuse': '#7fff00', - \'chocolate': '#d2691e', - \'coral': '#ff7f50', - \'cornflowerblue': '#6495ed', - \'cornsilk': '#fff8dc', - \'crimson': '#dc143c', - \'cyan': '#00ffff', - \'darkblue': '#00008b', - \'darkcyan': '#008b8b', - \'darkgoldenrod': '#b8860b', - \'darkgray': '#a9a9a9', - \'darkgreen': '#006400', - \'darkgrey': '#a9a9a9', - \'darkkhaki': '#bdb76b', - \'darkmagenta': '#8b008b', - \'darkolivegreen': '#556b2f', - \'darkorchid': '#9932cc', - \'darkred': '#8b0000', - \'darksalmon': '#e9967a', - \'darkseagreen': '#8fbc8f', - \'darkslateblue': '#483d8b', - \'darkslategray': '#2f4f4f', - \'darkslategrey': '#2f4f4f', - \'darkturquoise': '#00ced1', - \'darkviolet': '#9400d3', - \'darkorange': '#ff8c00', - \'deeppink': '#ff1493', - \'deepskyblue': '#00bfff', - \'dimgray': '#696969', - \'dimgrey': '#696969', - \'dodgerblue': '#1e90ff', - \'firebrick': '#b22222', - \'floralwhite': '#fffaf0', - \'forestgreen': '#228b22', - \'gainsboro': '#dcdcdc', - \'ghostwhite': '#f8f8ff', - \'gold': '#ffd700', - \'goldenrod': '#daa520', - \'greenyellow': '#adff2f', - \'grey': '#808080', - \'honeydew': '#f0fff0', - \'hotpink': '#ff69b4', - \'indianred': '#cd5c5c', - \'indigo': '#4b0082', - \'ivory': '#fffff0', - \'khaki': '#f0e68c', - \'lavender': '#e6e6fa', - \'lavenderblush': '#fff0f5', - \'lawngreen': '#7cfc00', - \'lemonchiffon': '#fffacd', - \'lightblue': '#add8e6', - \'lightcoral': '#f08080', - \'lightcyan': '#e0ffff', - \'lightgoldenrodyellow': '#fafad2', - \'lightgray': '#d3d3d3', - \'lightgreen': '#90ee90', - \'lightgrey': '#d3d3d3', - \'lightpink': '#ffb6c1', - \'lightsalmon': '#ffa07a', - \'lightseagreen': '#20b2aa', - \'lightskyblue': '#87cefa', - \'lightslategray': '#778899', - \'lightslategrey': '#778899', - \'lightsteelblue': '#b0c4de', - \'lightyellow': '#ffffe0', - \'limegreen': '#32cd32', - \'linen': '#faf0e6', - \'magenta': '#ff00ff', - \'mediumaquamarine': '#66cdaa', - \'mediumblue': '#0000cd', - \'mediumorchid': '#ba55d3', - \'mediumpurple': '#9370d8', - \'mediumseagreen': '#3cb371', - \'mediumslateblue': '#7b68ee', - \'mediumspringgreen': '#00fa9a', - \'mediumturquoise': '#48d1cc', - \'mediumvioletred': '#c71585', - \'midnightblue': '#191970', - \'mintcream': '#f5fffa', - \'mistyrose': '#ffe4e1', - \'moccasin': '#ffe4b5', - \'navajowhite': '#ffdead', - \'oldlace': '#fdf5e6', - \'olivedrab': '#6b8e23', - \'orange': '#ffa500', - \'orangered': '#ff4500', - \'orchid': '#da70d6', - \'palegoldenrod': '#eee8aa', - \'palegreen': '#98fb98', - \'paleturquoise': '#afeeee', - \'palevioletred': '#d87093', - \'papayawhip': '#ffefd5', - \'peachpuff': '#ffdab9', - \'peru': '#cd853f', - \'pink': '#ffc0cb', - \'plum': '#dda0dd', - \'powderblue': '#b0e0e6', - \'rosybrown': '#bc8f8f', - \'royalblue': '#4169e1', - \'saddlebrown': '#8b4513', - \'salmon': '#fa8072', - \'sandybrown': '#f4a460', - \'seagreen': '#2e8b57', - \'seashell': '#fff5ee', - \'sienna': '#a0522d', - \'skyblue': '#87ceeb', - \'slateblue': '#6a5acd', - \'slategray': '#708090', - \'slategrey': '#708090', - \'snow': '#fffafa', - \'springgreen': '#00ff7f', - \'steelblue': '#4682b4', - \'tan': '#d2b48c', - \'thistle': '#d8bfd8', - \'tomato': '#ff6347', - \'turquoise': '#40e0d0', - \'violet': '#ee82ee', - \'wheat': '#f5deb3', - \'whitesmoke': '#f5f5f5', - \'yellowgreen': '#9acd32', - \} - - let w:colorDictRegExp = '\(' - for _color in keys(w:colorDict) - let w:colorDictRegExp.='\<'._color.'\>\|' - endfor - let w:colorDictRegExp=strpart(w:colorDictRegExp, 0, len(w:colorDictRegExp)-2).'\)\c' - call s:VimCssInit(1) - autocmd CursorMoved silent call s:PreviewCSSColorInLine('.') - autocmd CursorMovedI silent call s:PreviewCSSColorInLine('.') + autocmd CursorMoved silent call s:ProcessByLine('.') + autocmd CursorMovedI silent call s:ProcessByLine('.') autocmd ColorScheme silent call s:VimCssInit(1) + autocmd BufEnter silent call s:VimCssInit(1) endif