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