1" Vim syntax file 2" Language: Sass 3" Maintainer: Tim Pope <[email protected]> 4" Filenames: *.sass 5" Last Change: 2013 May 30 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:]-]\|#{[^{}]*}\)\+\s*:" contains=css.*Prop skipwhite nextgroup=sassCssAttribute contained containedin=sassDefinition 21syn match sassProperty "^\s*\zs\s\%(\%([[:alnum:]-]\|#{[^{}]*}\)\+\s*:\|:[[: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,cssPseudoClass,sassProperty 38 39syn match sassMixinName "[[:alnum:]_-]\+" contained nextgroup=sassCssAttribute 40syn match sassMixin "^=" nextgroup=sassMixinName skipwhite 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" 45syn match sassPlaceholder "\%([{};]\s*\|^\s*\)\@<=%" nextgroup=sassMixinName skipwhite 46 47syn match sassFunctionName "[[:alnum:]_-]\+" contained nextgroup=sassCssAttribute 48syn match sassFunctionDecl "\%([{};]\s*\|^\s*\)\@<=@function" nextgroup=sassFunctionName skipwhite 49syn match sassReturn "\%([{};]\s*\|^\s*\)\@<=@return" 50 51syn match sassEscape "^\s*\zs\\" 52syn match sassIdChar "#[[:alnum:]_-]\@=" nextgroup=sassId 53syn match sassId "[[:alnum:]_-]\+" contained 54syn match sassClassChar "\.[[:alnum:]_-]\@=" nextgroup=sassClass 55syn match sassClass "[[:alnum:]_-]\+" contained 56syn match sassAmpersand "&" 57 58" TODO: Attribute namespaces 59" TODO: Arithmetic (including strings and concatenation) 60 61syn region sassInclude start="@import" end=";\|$" contains=scssComment,cssStringQ,cssStringQQ,cssURL,cssUnicodeEscape,cssMediaType 62syn region sassDebugLine end=";\|$" matchgroup=sassDebug start="@debug\>" contains=@sassCssAttributes,sassVariable,sassFunction 63syn region sassWarnLine end=";\|$" matchgroup=sassWarn start="@warn\>" contains=@sassCssAttributes,sassVariable,sassFunction 64syn region sassControlLine matchgroup=sassControl start="@\%(if\|else\%(\s\+if\)\=\|while\|for\|each\)\>" end="[{};]\@=\|$" contains=sassFor,@sassCssAttributes,sassVariable,sassFunction 65syn keyword sassFor from to through in contained 66 67syn keyword sassTodo FIXME NOTE TODO OPTIMIZE XXX contained 68syn region sassComment start="^\z(\s*\)//" end="^\%(\z1 \)\@!" contains=sassTodo,@Spell 69syn region sassCssComment start="^\z(\s*\)/\*" end="^\%(\z1 \)\@!" contains=sassTodo,@Spell 70 71hi def link sassCssComment sassComment 72hi def link sassComment Comment 73hi def link sassDefault cssImportant 74hi def link sassVariable Identifier 75hi def link sassFunction Function 76hi def link sassMixing PreProc 77hi def link sassMixin PreProc 78hi def link sassPlaceholder PreProc 79hi def link sassExtend PreProc 80hi def link sassFunctionDecl PreProc 81hi def link sassReturn PreProc 82hi def link sassTodo Todo 83hi def link sassInclude Include 84hi def link sassDebug sassControl 85hi def link sassWarn sassControl 86hi def link sassControl PreProc 87hi def link sassFor PreProc 88hi def link sassEscape Special 89hi def link sassIdChar Special 90hi def link sassClassChar Special 91hi def link sassInterpolationDelimiter Delimiter 92hi def link sassAmpersand Character 93hi def link sassId Identifier 94hi def link sassClass Type 95 96let b:current_syntax = "sass" 97 98" vim:set sw=2: 99