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