blob: 879ff87e85e5746acaed3bee0932c36e5e770e06 [file] [log] [blame]
Bram Moolenaarc236c162008-07-13 17:41:49 +00001" Vim syntax file
Bram Moolenaar0ed0eea2010-07-26 22:21:27 +02002" Language: Sass
3" Maintainer: Tim Pope <vimNOSPAM@tpope.org>
4" Filenames: *.sass
Bram Moolenaar59c03952010-07-28 12:52:27 +02005" Last Change: 2010 Jul 28
Bram Moolenaarc236c162008-07-13 17:41:49 +00006
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
Bram Moolenaar0ed0eea2010-07-26 22:21:27 +020016syn cluster sassCssAttributes contains=css.*Attr,scssComment,cssValue.*,cssColor,cssURL,sassDefault,cssImportant,cssError,cssStringQ,cssStringQQ,cssFunction,cssUnicodeEscape,cssRenderProp
Bram Moolenaarc236c162008-07-13 17:41:49 +000017
Bram Moolenaar0ed0eea2010-07-26 22:21:27 +020018syn region sassDefinition matchgroup=cssBraces start="{" end="}" contains=TOP
19
Bram Moolenaar59c03952010-07-28 12:52:27 +020020syn 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
Bram Moolenaar0ed0eea2010-07-26 22:21:27 +020022syn match sassProperty "^\s*\zs\s\%(:\=[[:alnum:]-]\+\s*=\)"hs=s+1 contains=css.*Prop skipwhite nextgroup=sassCssAttribute
23syn match sassCssAttribute +\%("\%([^"]\|\\"\)*"\|'\%([^']\|\\'\)*'\|[^{};]\)*+ contained contains=@sassCssAttributes,sassVariable,sassFunction
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
Bram Moolenaar59c03952010-07-28 12:52:27 +020037syn region sassInterpolation matchgroup=sassInterpolationDelimiter start="#{" end="}" contains=@sassCssAttributes,sassVariable,sassFunction containedin=cssStringQ,cssStringQQ,sassCssAttribute,sassProperty
Bram Moolenaar0ed0eea2010-07-26 22:21:27 +020038
39syn match sassMixinName "[[:alnum:]_-]\+" contained nextgroup=sassCssAttribute
40syn match sassMixin "^=" nextgroup=sassMixinName
41syn match sassMixin "^\s*\zs@mixin" nextgroup=sassMixinName skipwhite
42syn match sassMixing "^\s\+\zs+" nextgroup=sassMixinName
43syn match sassMixing "^\s\+\zs@include" nextgroup=sassMixinName skipwhite
44syn match sassMixing "\%([{};]\s*\|^\)\@<=@include" nextgroup=sassMixinName skipwhite contained containedin=sassDefinition
45syn match sassExtend "^\s\+\zs@extend"
Bram Moolenaarc236c162008-07-13 17:41:49 +000046
47syn match sassEscape "^\s*\zs\\"
48syn match sassIdChar "#[[:alnum:]_-]\@=" nextgroup=sassId
49syn match sassId "[[:alnum:]_-]\+" contained
50syn match sassClassChar "\.[[:alnum:]_-]\@=" nextgroup=sassClass
51syn match sassClass "[[:alnum:]_-]\+" contained
52syn match sassAmpersand "&"
53
54" TODO: Attribute namespaces
55" TODO: Arithmetic (including strings and concatenation)
56
Bram Moolenaar0ed0eea2010-07-26 22:21:27 +020057syn region sassInclude start="@import" end=";\|$" contains=scssComment,cssURL,cssUnicodeEscape,cssMediaType
58syn region sassDebugLine end=";\|$" matchgroup=sassDebug start="@debug\>" contains=@sassCssAttributes,sassVariable,sassFunction
59syn region sassWarnLine end=";\|$" matchgroup=sassWarn start="@warn\>" contains=@sassCssAttributes,sassVariable,sassFunction
60syn region sassControlLine matchgroup=sassControl start="@\%(if\|else\%(\s\+if\)\=\|while\|for\)\>" end="[{};]\@=\|$" contains=sassFor,@sassCssAttributes,sassVariable,sassFunction
Bram Moolenaar7a329912010-05-21 12:05:36 +020061syn keyword sassFor from to through contained
Bram Moolenaarc236c162008-07-13 17:41:49 +000062
63syn keyword sassTodo FIXME NOTE TODO OPTIMIZE XXX contained
Bram Moolenaar0ed0eea2010-07-26 22:21:27 +020064syn region sassComment start="^\z(\s*\)//" end="^\%(\z1 \)\@!" contains=sassTodo,@Spell
65syn region sassCssComment start="^\z(\s*\)/\*" end="^\%(\z1 \)\@!" contains=sassTodo,@Spell
Bram Moolenaarc236c162008-07-13 17:41:49 +000066
67hi def link sassCssComment sassComment
68hi def link sassComment Comment
Bram Moolenaar0ed0eea2010-07-26 22:21:27 +020069hi def link sassDefault cssImportant
70hi def link sassVariable Identifier
71hi def link sassFunction Function
Bram Moolenaarc236c162008-07-13 17:41:49 +000072hi def link sassMixing PreProc
73hi def link sassMixin PreProc
Bram Moolenaar0ed0eea2010-07-26 22:21:27 +020074hi def link sassExtend PreProc
Bram Moolenaarc236c162008-07-13 17:41:49 +000075hi def link sassTodo Todo
76hi def link sassInclude Include
Bram Moolenaar0ed0eea2010-07-26 22:21:27 +020077hi def link sassDebug sassControl
78hi def link sassWarn sassControl
Bram Moolenaar7a329912010-05-21 12:05:36 +020079hi def link sassControl PreProc
80hi def link sassFor PreProc
Bram Moolenaarc236c162008-07-13 17:41:49 +000081hi def link sassEscape Special
82hi def link sassIdChar Special
83hi def link sassClassChar Special
Bram Moolenaar0ed0eea2010-07-26 22:21:27 +020084hi def link sassInterpolationDelimiter Delimiter
Bram Moolenaarc236c162008-07-13 17:41:49 +000085hi def link sassAmpersand Character
86hi def link sassId Identifier
87hi def link sassClass Type
88
89let b:current_syntax = "sass"
90
91" vim:set sw=2: