home *** CD-ROM | disk | FTP | other *** search
/ vim.ftp.fu-berlin.de / 2015-02-03.vim.ftp.fu-berlin.de.tar / vim.ftp.fu-berlin.de / runtime / syntax / liquid.vim < prev    next >
Encoding:
Text File  |  2010-08-14  |  5.9 KB  |  138 lines

  1. " Vim syntax file
  2. " Language:     Liquid
  3. " Maintainer:   Tim Pope <vimNOSPAM@tpope.org>
  4. " Filenames:    *.liquid
  5. " Last Change:    2010 May 21
  6.  
  7. if exists('b:current_syntax')
  8.   finish
  9. endif
  10.  
  11. if !exists('main_syntax')
  12.   let main_syntax = 'liquid'
  13. endif
  14.  
  15. if !exists('g:liquid_default_subtype')
  16.   let g:liquid_default_subtype = 'html'
  17. endif
  18.  
  19. if !exists('b:liquid_subtype') && main_syntax == 'liquid'
  20.   let s:lines = getline(1)."\n".getline(2)."\n".getline(3)."\n".getline(4)."\n".getline(5)."\n".getline("$")
  21.   let b:liquid_subtype = matchstr(s:lines,'liquid_subtype=\zs\w\+')
  22.   if b:liquid_subtype == ''
  23.     let b:liquid_subtype = matchstr(&filetype,'^liquid\.\zs\w\+')
  24.   endif
  25.   if b:liquid_subtype == ''
  26.     let b:liquid_subtype = matchstr(substitute(expand('%:t'),'\c\%(\.liquid\)\+$','',''),'\.\zs\w\+$')
  27.   endif
  28.   if b:liquid_subtype == ''
  29.     let b:liquid_subtype = g:liquid_default_subtype
  30.   endif
  31. endif
  32.  
  33. if exists('b:liquid_subtype') && b:liquid_subtype != ''
  34.   exe 'runtime! syntax/'.b:liquid_subtype.'.vim'
  35.   unlet! b:current_syntax
  36. endif
  37.  
  38. syn case match
  39.  
  40. if exists('b:liquid_subtype') && b:liquid_subtype != 'yaml'
  41.   " YAML Front Matter
  42.   syn include @liquidYamlTop syntax/yaml.vim
  43.   unlet! b:current_syntax
  44.   syn region liquidYamlHead start="\%^---$" end="^---\s*$" keepend contains=@liquidYamlTop,@Spell
  45. endif
  46.  
  47. if !exists('g:liquid_highlight_types')
  48.   let g:liquid_highlight_types = []
  49. endif
  50.  
  51. if !exists('s:subtype')
  52.   let s:subtype = exists('b:liquid_subtype') ? b:liquid_subtype : ''
  53.  
  54.   for s:type in map(copy(g:liquid_highlight_types),'matchstr(v:val,"[^=]*$")')
  55.     if s:type =~ '\.'
  56.       let b:{matchstr(s:type,'[^.]*')}_subtype = matchstr(s:type,'\.\zs.*')
  57.     endif
  58.     exe 'syn include @liquidHighlight'.substitute(s:type,'\.','','g').' syntax/'.matchstr(s:type,'[^.]*').'.vim'
  59.     unlet! b:current_syntax
  60.   endfor
  61.   unlet! s:type
  62.  
  63.   if s:subtype == ''
  64.     unlet! b:liquid_subtype
  65.   else
  66.     let b:liquid_subtype = s:subtype
  67.   endif
  68.   unlet s:subtype
  69. endif
  70.  
  71. syn region  liquidStatement  matchgroup=liquidDelimiter start="{%" end="%}" contains=@liquidStatement containedin=ALLBUT,@liquidExempt keepend
  72. syn region  liquidExpression matchgroup=liquidDelimiter start="{{" end="}}" contains=@liquidExpression  containedin=ALLBUT,@liquidExempt keepend
  73. syn region  liquidComment    matchgroup=liquidDelimiter start="{%\s*comment\s*%}" end="{%\s*endcomment\s*%}" contains=liquidTodo,@Spell containedin=ALLBUT,@liquidExempt keepend
  74.  
  75. syn cluster liquidExempt contains=liquidStatement,liquidExpression,liquidComment,@liquidStatement,liquidYamlHead
  76. syn cluster liquidStatement contains=liquidConditional,liquidRepeat,liquidKeyword,@liquidExpression
  77. syn cluster liquidExpression contains=liquidOperator,liquidString,liquidNumber,liquidFloat,liquidBoolean,liquidNull,liquidEmpty,liquidPipe,liquidForloop
  78.  
  79. syn keyword liquidKeyword highlight nextgroup=liquidTypeHighlight skipwhite contained
  80. syn keyword liquidKeyword endhighlight contained
  81. syn region liquidHighlight start="{%\s*highlight\s\+\w\+\s*%}" end="{% endhighlight %}" keepend
  82.  
  83. for s:type in g:liquid_highlight_types
  84.   exe 'syn match liquidTypeHighlight "\<'.matchstr(s:type,'[^=]*').'\>" contained'
  85.   exe 'syn region liquidHighlight'.substitute(matchstr(s:type,'[^=]*$'),'\..*','','').' start="{%\s*highlight\s\+'.matchstr(s:type,'[^=]*').'\s*%}" end="{% endhighlight %}" keepend contains=@liquidHighlight'.substitute(matchstr(s:type,'[^=]*$'),'\.','','g')
  86. endfor
  87. unlet! s:type
  88.  
  89. syn region liquidString matchgroup=liquidQuote start=+"+ end=+"+ contained
  90. syn region liquidString matchgroup=liquidQuote start=+'+ end=+'+ contained
  91. syn match liquidNumber "-\=\<\d\+\>" contained
  92. syn match liquidFloat "-\=\<\d\+\>\.\.\@!\%(\d\+\>\)\=" contained
  93. syn keyword liquidBoolean true false contained
  94. syn keyword liquidNull null nil contained
  95. syn match liquidEmpty "\<empty\>" contained
  96.  
  97. syn keyword liquidOperator and or not contained
  98. syn match liquidPipe '|' contained skipwhite nextgroup=liquidFilter
  99.  
  100. syn keyword liquidFilter date capitalize downcase upcase first last join sort size strip_html strip_newlines newline_to_br replace replace_first remove remove_first truncate truncatewords prepend append minus plus times divided_by contained
  101.  
  102. syn keyword liquidConditional if elsif else endif unless endunless case when endcase ifchanged endifchanged contained
  103. syn keyword liquidRepeat      for endfor tablerow endtablerow in contained
  104. syn match   liquidRepeat      "\%({%\s*\)\@<=empty\>" contained
  105. syn keyword liquidKeyword     assign cycle include with contained
  106.  
  107. syn keyword liquidForloop forloop nextgroup=liquidForloopDot contained
  108. syn match liquidForloopDot "\." nextgroup=liquidForloopAttribute contained
  109. syn keyword liquidForloopAttribute length index index0 rindex rindex0 first last contained
  110.  
  111. syn keyword liquidTablerowloop tablerowloop nextgroup=liquidTablerowloopDot contained
  112. syn match liquidTablerowloopDot "\." nextgroup=liquidTableForloopAttribute contained
  113. syn keyword liquidTablerowloopAttribute length index index0 col col0 index0 rindex rindex0 first last col_first col_last contained
  114.  
  115. hi def link liquidDelimiter             PreProc
  116. hi def link liquidComment               Comment
  117. hi def link liquidTypeHighlight         Type
  118. hi def link liquidConditional           Conditional
  119. hi def link liquidRepeat                Repeat
  120. hi def link liquidKeyword               Keyword
  121. hi def link liquidOperator              Operator
  122. hi def link liquidString                String
  123. hi def link liquidQuote                 Delimiter
  124. hi def link liquidNumber                Number
  125. hi def link liquidFloat                 Float
  126. hi def link liquidEmpty                 liquidNull
  127. hi def link liquidNull                  liquidBoolean
  128. hi def link liquidBoolean               Boolean
  129. hi def link liquidFilter                Function
  130. hi def link liquidForloop               Identifier
  131. hi def link liquidForloopAttribute      Identifier
  132.  
  133. let b:current_syntax = 'liquid'
  134.  
  135. if exists('main_syntax') && main_syntax == 'liquid'
  136.   unlet main_syntax
  137. endif
  138.