1" Vim syntax file 2" Language: Sass 3" Maintainer: Tim Pope <[email protected]> 4" Filenames: *.sass 5" Last Change: 2016 Aug 29 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,sassEndOfLineComment,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 sassMediaQuery matchgroup=sassMedia start="@media" end="[{};]\@=\|$" contains=sassMediaOperators 62syn keyword sassMediaOperators and not only contained 63syn region sassCharset start="@charset" end=";\|$" contains=scssComment,cssStringQ,cssStringQQ,cssURL,cssUnicodeEscape,cssMediaType 64syn region sassInclude start="@import" end=";\|$" contains=scssComment,cssStringQ,cssStringQQ,cssURL,cssUnicodeEscape,cssMediaType 65syn region sassDebugLine end=";\|$" matchgroup=sassDebug start="@debug\>" contains=@sassCssAttributes,sassVariable,sassFunction 66syn region sassWarnLine end=";\|$" matchgroup=sassWarn start="@warn\>" contains=@sassCssAttributes,sassVariable,sassFunction 67syn region sassControlLine matchgroup=sassControl start="@\%(if\|else\%(\s\+if\)\=\|while\|for\|each\)\>" end="[{};]\@=\|$" contains=sassFor,@sassCssAttributes,sassVariable,sassFunction 68syn keyword sassFor from to through in contained 69 70syn keyword sassTodo FIXME NOTE TODO OPTIMIZE XXX contained 71syn region sassComment start="^\z(\s*\)//" end="^\%(\z1 \)\@!" contains=sassTodo,@Spell 72syn region sassCssComment start="^\z(\s*\)/\*" end="^\%(\z1 \)\@!" contains=sassTodo,@Spell 73syn match sassEndOfLineComment "//.*" contains=sassComment,sassTodo,@Spell 74 75hi def link sassEndOfLineComment sassComment 76hi def link sassCssComment sassComment 77hi def link sassComment Comment 78hi def link sassDefault cssImportant 79hi def link sassVariable Identifier 80hi def link sassFunction Function 81hi def link sassMixing PreProc 82hi def link sassMixin PreProc 83hi def link sassPlaceholder PreProc 84hi def link sassExtend PreProc 85hi def link sassFunctionDecl PreProc 86hi def link sassReturn PreProc 87hi def link sassTodo Todo 88hi def link sassCharset PreProc 89hi def link sassMedia PreProc 90hi def link sassMediaOperators PreProc 91hi def link sassInclude Include 92hi def link sassDebug sassControl 93hi def link sassWarn sassControl 94hi def link sassControl PreProc 95hi def link sassFor PreProc 96hi def link sassEscape Special 97hi def link sassIdChar Special 98hi def link sassClassChar Special 99hi def link sassInterpolationDelimiter Delimiter 100hi def link sassAmpersand Character 101hi def link sassId Identifier 102hi def link sassClass Type 103 104let b:current_syntax = "sass" 105 106" vim:set sw=2: 107