blob: b51a0ae26b755c6a71a7f29f8b50a66674602504 [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 Moolenaarc08ee742019-12-05 22:47:25 +01005" Last Change: 2019 Dec 05
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 Moolenaar89bcfda2016-08-30 23:26:57 +020016syn cluster sassCssAttributes contains=css.*Attr,sassEndOfLineComment,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 Moolenaar543b7ef2013-06-01 14:50:56 +020020syn 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
Bram Moolenaar0ed0eea2010-07-26 22:21:27 +020022syn match sassProperty "^\s*\zs\s\%(:\=[[:alnum:]-]\+\s*=\)"hs=s+1 contains=css.*Prop skipwhite nextgroup=sassCssAttribute
Bram Moolenaar6af737f2010-08-09 20:13:35 +020023syn match sassCssAttribute +\%("\%([^"]\|\\"\)*"\|'\%([^']\|\\'\)*'\|#{[^{}]*}\|[^{};]\)*+ contained contains=@sassCssAttributes,sassVariable,sassFunction,sassInterpolation
Bram Moolenaarc08ee742019-12-05 22:47:25 +010024syn match sassFlag "!\%(default\|global\|optional\)\>" contained
Bram Moolenaar0ed0eea2010-07-26 22:21:27 +020025syn match sassVariable "$[[:alnum:]_-]\+"
26syn match sassVariableAssignment "\%([!$][[:alnum:]_-]\+\s*\)\@<=\%(||\)\==" nextgroup=sassCssAttribute skipwhite
27syn match sassVariableAssignment "\%([!$][[:alnum:]_-]\+\s*\)\@<=:" nextgroup=sassCssAttribute skipwhite
28
29syn match sassFunction "\<\%(rgb\|rgba\|red\|green\|blue\|mix\)\>(\@=" contained
30syn match sassFunction "\<\%(hsl\|hsla\|hue\|saturation\|lightness\|adjust-hue\|lighten\|darken\|saturate\|desaturate\|grayscale\|complement\)\>(\@=" contained
31syn match sassFunction "\<\%(alpha\|opacity\|rgba\|opacify\|fade-in\|transparentize\|fade-out\)\>(\@=" contained
32syn match sassFunction "\<\%(unquote\|quote\)\>(\@=" contained
33syn match sassFunction "\<\%(percentage\|round\|ceil\|floor\|abs\)\>(\@=" contained
34syn match sassFunction "\<\%(type-of\|unit\|unitless\|comparable\)\>(\@=" contained
35
Bram Moolenaar543b7ef2013-06-01 14:50:56 +020036syn region sassInterpolation matchgroup=sassInterpolationDelimiter start="#{" end="}" contains=@sassCssAttributes,sassVariable,sassFunction containedin=cssStringQ,cssStringQQ,cssPseudoClass,sassProperty
Bram Moolenaar0ed0eea2010-07-26 22:21:27 +020037
38syn match sassMixinName "[[:alnum:]_-]\+" contained nextgroup=sassCssAttribute
Bram Moolenaar543b7ef2013-06-01 14:50:56 +020039syn match sassMixin "^=" nextgroup=sassMixinName skipwhite
Bram Moolenaar6af737f2010-08-09 20:13:35 +020040syn match sassMixin "\%([{};]\s*\|^\s*\)\@<=@mixin" nextgroup=sassMixinName skipwhite
Bram Moolenaar0ed0eea2010-07-26 22:21:27 +020041syn match sassMixing "^\s\+\zs+" nextgroup=sassMixinName
Bram Moolenaar6af737f2010-08-09 20:13:35 +020042syn match sassMixing "\%([{};]\s*\|^\s*\)\@<=@include" nextgroup=sassMixinName skipwhite
43syn match sassExtend "\%([{};]\s*\|^\s*\)\@<=@extend"
Bram Moolenaar543b7ef2013-06-01 14:50:56 +020044
45syn match sassFunctionName "[[:alnum:]_-]\+" contained nextgroup=sassCssAttribute
46syn match sassFunctionDecl "\%([{};]\s*\|^\s*\)\@<=@function" nextgroup=sassFunctionName skipwhite
47syn match sassReturn "\%([{};]\s*\|^\s*\)\@<=@return"
Bram Moolenaarc236c162008-07-13 17:41:49 +000048
49syn match sassEscape "^\s*\zs\\"
50syn match sassIdChar "#[[:alnum:]_-]\@=" nextgroup=sassId
51syn match sassId "[[:alnum:]_-]\+" contained
52syn match sassClassChar "\.[[:alnum:]_-]\@=" nextgroup=sassClass
Bram Moolenaarc08ee742019-12-05 22:47:25 +010053syn match sassPlaceholder "\%([{};]\s*\|^\s*\)\@<=%" nextgroup=sassClass
Bram Moolenaarc236c162008-07-13 17:41:49 +000054syn match sassClass "[[:alnum:]_-]\+" contained
55syn match sassAmpersand "&"
56
57" TODO: Attribute namespaces
58" TODO: Arithmetic (including strings and concatenation)
59
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020060syn region sassMediaQuery matchgroup=sassMedia start="@media" end="[{};]\@=\|$" contains=sassMediaOperators
61syn keyword sassMediaOperators and not only contained
62syn region sassCharset start="@charset" end=";\|$" contains=scssComment,cssStringQ,cssStringQQ,cssURL,cssUnicodeEscape,cssMediaType
Bram Moolenaar543b7ef2013-06-01 14:50:56 +020063syn region sassInclude start="@import" end=";\|$" contains=scssComment,cssStringQ,cssStringQQ,cssURL,cssUnicodeEscape,cssMediaType
Bram Moolenaar0ed0eea2010-07-26 22:21:27 +020064syn region sassDebugLine end=";\|$" matchgroup=sassDebug start="@debug\>" contains=@sassCssAttributes,sassVariable,sassFunction
65syn region sassWarnLine end=";\|$" matchgroup=sassWarn start="@warn\>" contains=@sassCssAttributes,sassVariable,sassFunction
Bram Moolenaar543b7ef2013-06-01 14:50:56 +020066syn region sassControlLine matchgroup=sassControl start="@\%(if\|else\%(\s\+if\)\=\|while\|for\|each\)\>" end="[{};]\@=\|$" contains=sassFor,@sassCssAttributes,sassVariable,sassFunction
67syn keyword sassFor from to through in contained
Bram Moolenaarc236c162008-07-13 17:41:49 +000068
69syn keyword sassTodo FIXME NOTE TODO OPTIMIZE XXX contained
Bram Moolenaar0ed0eea2010-07-26 22:21:27 +020070syn region sassComment start="^\z(\s*\)//" end="^\%(\z1 \)\@!" contains=sassTodo,@Spell
71syn region sassCssComment start="^\z(\s*\)/\*" end="^\%(\z1 \)\@!" contains=sassTodo,@Spell
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020072syn match sassEndOfLineComment "//.*" contains=sassComment,sassTodo,@Spell
Bram Moolenaarc236c162008-07-13 17:41:49 +000073
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020074hi def link sassEndOfLineComment sassComment
Bram Moolenaarc236c162008-07-13 17:41:49 +000075hi def link sassCssComment sassComment
76hi def link sassComment Comment
Bram Moolenaarc08ee742019-12-05 22:47:25 +010077hi def link sassFlag cssImportant
Bram Moolenaar0ed0eea2010-07-26 22:21:27 +020078hi def link sassVariable Identifier
79hi def link sassFunction Function
Bram Moolenaarc236c162008-07-13 17:41:49 +000080hi def link sassMixing PreProc
81hi def link sassMixin PreProc
Bram Moolenaarc08ee742019-12-05 22:47:25 +010082hi def link sassPlaceholder sassClassChar
Bram Moolenaar0ed0eea2010-07-26 22:21:27 +020083hi def link sassExtend PreProc
Bram Moolenaar543b7ef2013-06-01 14:50:56 +020084hi def link sassFunctionDecl PreProc
85hi def link sassReturn PreProc
Bram Moolenaarc236c162008-07-13 17:41:49 +000086hi def link sassTodo Todo
Bram Moolenaar89bcfda2016-08-30 23:26:57 +020087hi def link sassCharset PreProc
88hi def link sassMedia PreProc
89hi def link sassMediaOperators PreProc
Bram Moolenaarc236c162008-07-13 17:41:49 +000090hi def link sassInclude Include
Bram Moolenaar0ed0eea2010-07-26 22:21:27 +020091hi def link sassDebug sassControl
92hi def link sassWarn sassControl
Bram Moolenaar7a329912010-05-21 12:05:36 +020093hi def link sassControl PreProc
94hi def link sassFor PreProc
Bram Moolenaarc236c162008-07-13 17:41:49 +000095hi def link sassEscape Special
96hi def link sassIdChar Special
97hi def link sassClassChar Special
Bram Moolenaar0ed0eea2010-07-26 22:21:27 +020098hi def link sassInterpolationDelimiter Delimiter
Bram Moolenaarc236c162008-07-13 17:41:49 +000099hi def link sassAmpersand Character
100hi def link sassId Identifier
101hi def link sassClass Type
102
103let b:current_syntax = "sass"
104
105" vim:set sw=2: