comparison rc/vim-syntax-slim @ 475:86873b811343

Add slim syntax to vim.
author edogawaconan <me@myconan.net>
date Mon, 22 Jul 2013 12:40:24 +0900
parents
children
comparison
equal deleted inserted replaced
474:8c637534d6cd 475:86873b811343
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"