1" Vim syntax file 2" Language: Sass 3" Maintainer: Tim Pope <[email protected]> 4" Filenames: *.sass 5" Last Change: 2010 Aug 9 6 7if exists("b:current_syntax") 8 finish 9endif 10 11runtime! syntax/css.vim 12 13syn case ignore 14 15syn cluster sassCssProperties contains=cssFontProp,cssFontDescriptorProp,cssColorProp,cssTextProp,cssBoxProp,cssGeneratedContentProp,cssPagingProp,cssUIProp,cssRenderProp,cssAuralProp,cssTableProp 16syn cluster sassCssAttributes contains=css.*Attr,scssComment,cssValue.*,cssColor,cssURL,sassDefault,cssImportant,cssError,cssStringQ,cssStringQQ,cssFunction,cssUnicodeEscape,cssRenderProp 17 18syn region sassDefinition matchgroup=cssBraces start="{" end="}" contains=TOP 19 20syn match sassProperty "\%([{};]\s*\|^\)\@<=\%([[:alnum:]-]\|#{[^{}]*}\)\+:" contains=css.*Prop skipwhite nextgroup=sassCssAttribute contained containedin=sassDefinition 21syn match sassProperty "^\s*\zs\s\%(\%([[:alnum:]-]\|#{[^{}]*}\)\+:\|:[[:alnum:]-]\+\)"hs=s+1 contains=css.*Prop skipwhite nextgroup=sassCssAttribute 22syn match sassProperty "^\s*\zs\s\%(:\=[[:alnum:]-]\+\s*=\)"hs=s+1 contains=css.*Prop skipwhite nextgroup=sassCssAttribute 23syn match sassCssAttribute +\%("\%([^"]\|\\"\)*"\|'\%([^']\|\\'\)*'\|#{[^{}]*}\|[^{};]\)*+ contained contains=@sassCssAttributes,sassVariable,sassFunction,sassInterpolation 24syn match sassDefault "!default\>" contained 25syn match sassVariable "!\%(important\>\|default\>\)\@![[:alnum:]_-]\+" 26syn match sassVariable "$[[:alnum:]_-]\+" 27syn match sassVariableAssignment "\%([!$][[:alnum:]_-]\+\s*\)\@<=\%(||\)\==" nextgroup=sassCssAttribute skipwhite 28syn match sassVariableAssignment "\%([!$][[:alnum:]_-]\+\s*\)\@<=:" nextgroup=sassCssAttribute skipwhite 29 30syn match sassFunction "\<\%(rgb\|rgba\|red\|green\|blue\|mix\)\>(\@=" contained 31syn match sassFunction "\<\%(hsl\|hsla\|hue\|saturation\|lightness\|adjust-hue\|lighten\|darken\|saturate\|desaturate\|grayscale\|complement\)\>(\@=" contained 32syn match sassFunction "\<\%(alpha\|opacity\|rgba\|opacify\|fade-in\|transparentize\|fade-out\)\>(\@=" contained 33syn match sassFunction "\<\%(unquote\|quote\)\>(\@=" contained 34syn match sassFunction "\<\%(percentage\|round\|ceil\|floor\|abs\)\>(\@=" contained 35syn match sassFunction "\<\%(type-of\|unit\|unitless\|comparable\)\>(\@=" contained 36 37syn region sassInterpolation matchgroup=sassInterpolationDelimiter start="#{" end="}" contains=@sassCssAttributes,sassVariable,sassFunction containedin=cssStringQ,cssStringQQ,sassProperty 38 39syn match sassMixinName "[[:alnum:]_-]\+" contained nextgroup=sassCssAttribute 40syn match sassMixin "^=" nextgroup=sassMixinName 41syn match sassMixin "\%([{};]\s*\|^\s*\)\@<=@mixin" nextgroup=sassMixinName skipwhite 42syn match sassMixing "^\s\+\zs+" nextgroup=sassMixinName 43syn match sassMixing "\%([{};]\s*\|^\s*\)\@<=@include" nextgroup=sassMixinName skipwhite 44syn match sassExtend "\%([{};]\s*\|^\s*\)\@<=@extend" 45 46syn match sassEscape "^\s*\zs\\" 47syn match sassIdChar "#[[:alnum:]_-]\@=" nextgroup=sassId 48syn match sassId "[[:alnum:]_-]\+" contained 49syn match sassClassChar "\.[[:alnum:]_-]\@=" nextgroup=sassClass 50syn match sassClass "[[:alnum:]_-]\+" contained 51syn match sassAmpersand "&" 52 53" TODO: Attribute namespaces 54" TODO: Arithmetic (including strings and concatenation) 55 56syn region sassInclude start="@import" end=";\|$" contains=scssComment,cssURL,cssUnicodeEscape,cssMediaType 57syn region sassDebugLine end=";\|$" matchgroup=sassDebug start="@debug\>" contains=@sassCssAttributes,sassVariable,sassFunction 58syn region sassWarnLine end=";\|$" matchgroup=sassWarn start="@warn\>" contains=@sassCssAttributes,sassVariable,sassFunction 59syn region sassControlLine matchgroup=sassControl start="@\%(if\|else\%(\s\+if\)\=\|while\|for\)\>" end="[{};]\@=\|$" contains=sassFor,@sassCssAttributes,sassVariable,sassFunction 60syn keyword sassFor from to through contained 61 62syn keyword sassTodo FIXME NOTE TODO OPTIMIZE XXX contained 63syn region sassComment start="^\z(\s*\)//" end="^\%(\z1 \)\@!" contains=sassTodo,@Spell 64syn region sassCssComment start="^\z(\s*\)/\*" end="^\%(\z1 \)\@!" contains=sassTodo,@Spell 65 66hi def link sassCssComment sassComment 67hi def link sassComment Comment 68hi def link sassDefault cssImportant 69hi def link sassVariable Identifier 70hi def link sassFunction Function 71hi def link sassMixing PreProc 72hi def link sassMixin PreProc 73hi def link sassExtend PreProc 74hi def link sassTodo Todo 75hi def link sassInclude Include 76hi def link sassDebug sassControl 77hi def link sassWarn sassControl 78hi def link sassControl PreProc 79hi def link sassFor PreProc 80hi def link sassEscape Special 81hi def link sassIdChar Special 82hi def link sassClassChar Special 83hi def link sassInterpolationDelimiter Delimiter 84hi def link sassAmpersand Character 85hi def link sassId Identifier 86hi def link sassClass Type 87 88let b:current_syntax = "sass" 89 90" vim:set sw=2: 91