| 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" |