475
|
1 " Vim syntax file
|
|
2 " Language: Slim
|
|
3 " Maintainer: Andrew Stone <andy@stonean.com>
|
|
4 " Version: 1
|
|
5 " Last Change: 2010 Sep 25
|
|
6 " TODO: Feedback is welcomed.
|
|
7
|
|
8 " Quit when a syntax file is already loaded.
|
|
9 if exists("b:current_syntax")
|
|
10 finish
|
|
11 endif
|
|
12
|
|
13 if !exists("main_syntax")
|
|
14 let main_syntax = 'slim'
|
|
15 endif
|
|
16
|
|
17 " Allows a per line syntax evaluation.
|
|
18 let b:ruby_no_expensive = 1
|
|
19
|
|
20 " Include Ruby syntax highlighting
|
|
21 syn include @slimRubyTop syntax/ruby.vim
|
|
22 unlet! b:current_syntax
|
|
23 " Include Haml syntax highlighting
|
|
24 syn include @slimHaml syntax/haml.vim
|
|
25 unlet! b:current_syntax
|
|
26
|
|
27 syn match slimBegin "^\s*\(&[^= ]\)\@!" nextgroup=slimTag,slimClassChar,slimIdChar,slimRuby
|
|
28
|
|
29 syn region rubyCurlyBlock start="{" end="}" contains=@slimRubyTop contained
|
|
30 syn cluster slimRubyTop add=rubyCurlyBlock
|
|
31
|
|
32 syn cluster slimComponent contains=slimClassChar,slimIdChar,slimWrappedAttrs,slimRuby,slimAttr,slimInlineTagChar
|
|
33
|
|
34 syn keyword slimDocType contained html 5 1.1 strict frameset mobile basic transitional
|
|
35 syn match slimDocTypeKeyword "^\s*\(doctype\)\s\+" nextgroup=slimDocType
|
|
36
|
|
37 syn keyword slimTodo FIXME TODO NOTE OPTIMIZE XXX contained
|
|
38
|
|
39 syn match slimTag "\w\+" contained contains=htmlTagName nextgroup=@slimComponent
|
|
40 syn match slimIdChar "#{\@!" contained nextgroup=slimId
|
|
41 syn match slimId "\%(\w\|-\)\+" contained nextgroup=@slimComponent
|
|
42 syn match slimClassChar "\." contained nextgroup=slimClass
|
|
43 syn match slimClass "\%(\w\|-\)\+" contained nextgroup=@slimComponent
|
|
44 syn match slimInlineTagChar "\s*:\s*" contained nextgroup=slimTag,slimClassChar,slimIdChar
|
|
45
|
|
46 syn region slimWrappedAttrs matchgroup=slimWrappedAttrsDelimiter start="\s*{\s*" skip="}\s*\"" end="\s*}\s*" contained contains=slimAttr nextgroup=slimRuby
|
|
47 syn region slimWrappedAttrs matchgroup=slimWrappedAttrsDelimiter start="\s*\[\s*" end="\s*\]\s*" contained contains=slimAttr nextgroup=slimRuby
|
|
48 syn region slimWrappedAttrs matchgroup=slimWrappedAttrsDelimiter start="\s*(\s*" end="\s*)\s*" contained contains=slimAttr nextgroup=slimRuby
|
|
49
|
|
50 syn match slimAttr "\s*\%(\w\|-\)\+\s*" contained contains=htmlArg nextgroup=slimAttrAssignment
|
|
51 syn match slimAttrAssignment "\s*=\s*" contained nextgroup=slimWrappedAttrValue,slimAttrString
|
|
52
|
|
53 syn region slimWrappedAttrValue matchgroup=slimWrappedAttrValueDelimiter start="{" end="}" contained contains=slimAttrString,@slimRubyTop nextgroup=slimAttr,slimRuby,slimInlineTagChar
|
|
54 syn region slimWrappedAttrValue matchgroup=slimWrappedAttrValueDelimiter start="\[" end="\]" contained contains=slimAttrString,@slimRubyTop nextgroup=slimAttr,slimRuby,slimInlineTagChar
|
|
55 syn region slimWrappedAttrValue matchgroup=slimWrappedAttrValueDelimiter start="(" end=")" contained contains=slimAttrString,@slimRubyTop nextgroup=slimAttr,slimRuby,slimInlineTagChar
|
|
56
|
|
57 syn region slimAttrString start=+\s*"+ skip=+\%(\\\\\)*\\"+ end=+"\s*+ contained contains=slimInterpolation,slimInterpolationEscape nextgroup=slimAttr,slimRuby,slimInlineTagChar
|
|
58 syn region slimAttrString start=+\s*'+ skip=+\%(\\\\\)*\\"+ end=+'\s*+ contained contains=slimInterpolation,slimInterpolationEscape nextgroup=slimAttr,slimRuby,slimInlineTagChar
|
|
59
|
|
60 syn region slimInnerAttrString start=+\s*"+ skip=+\%(\\\\\)*\\"+ end=+"\s*+ contained contains=slimInterpolation,slimInterpolationEscape nextgroup=slimAttr
|
|
61 syn region slimInnerAttrString start=+\s*'+ skip=+\%(\\\\\)*\\"+ end=+'\s*+ contained contains=slimInterpolation,slimInterpolationEscape nextgroup=slimAttr
|
|
62
|
|
63 syn region slimInterpolation matchgroup=slimInterpolationDelimiter start="#{" end="}" contains=@hamlRubyTop containedin=javascriptStringS,javascriptStringD,slimWrappedAttrs
|
|
64 syn match slimInterpolationEscape "\\\@<!\%(\\\\\)*\\\%(\\\ze#{\|#\ze{\)"
|
|
65
|
|
66 syn region slimRuby matchgroup=slimRubyOutputChar start="\s*[=]\==[']\=" skip=",\s*$" end="$" contained contains=@slimRubyTop keepend
|
|
67 syn region slimRuby matchgroup=slimRubyChar start="\s*-" skip=",\s*$" end="$" contained contains=@slimRubyTop keepend
|
|
68
|
|
69 syn match slimComment /^\(\s*\)[/].*\(\n\1\s.*\)*/ contains=slimTodo
|
|
70 syn match slimText /^\(\s*\)[`|'].*\(\n\1\s.*\)*/
|
|
71
|
|
72 syn match slimFilter /\s*\w\+:\s*/ contained
|
|
73 syn match slimHaml /^\(\s*\)\<haml:\>.*\(\n\1\s.*\)*/ contains=@slimHaml,slimFilter
|
|
74
|
|
75 syn match slimIEConditional "\%(^\s*/\)\@<=\[\s*if\>[^]]*]" contained containedin=slimComment
|
|
76
|
|
77 hi def link slimAttrString String
|
|
78 hi def link slimBegin String
|
|
79 hi def link slimClass Type
|
|
80 hi def link slimClassChar Type
|
|
81 hi def link slimComment Comment
|
|
82 hi def link slimDocType Identifier
|
|
83 hi def link slimDocTypeKeyword Keyword
|
|
84 hi def link slimFilter Keyword
|
|
85 hi def link slimIEConditional SpecialComment
|
|
86 hi def link slimId Identifier
|
|
87 hi def link slimIdChar Identifier
|
|
88 hi def link slimInnerAttrString String
|
|
89 hi def link slimInterpolationDelimiter Delimiter
|
|
90 hi def link slimRubyChar Special
|
|
91 hi def link slimRubyOutputChar Special
|
|
92 hi def link slimText String
|
|
93 hi def link slimTodo Todo
|
|
94 hi def link slimWrappedAttrValueDelimiter Delimiter
|
|
95 hi def link slimWrappedAttrsDelimiter Delimiter
|
|
96 hi def link slimInlineTagChar Delimiter
|
|
97
|
|
98 let b:current_syntax = "slim"
|