xref: /vim-8.2.3635/runtime/syntax/liquid.vim (revision 543b7ef7)
17a329911SBram Moolenaar" Vim syntax file
27a329911SBram Moolenaar" Language:     Liquid
37a329911SBram Moolenaar" Maintainer:   Tim Pope <[email protected]>
47a329911SBram Moolenaar" Filenames:    *.liquid
5*543b7ef7SBram Moolenaar" Last Change:	2013 May 30
67a329911SBram Moolenaar
77a329911SBram Moolenaarif exists('b:current_syntax')
87a329911SBram Moolenaar  finish
97a329911SBram Moolenaarendif
107a329911SBram Moolenaar
117a329911SBram Moolenaarif !exists('main_syntax')
127a329911SBram Moolenaar  let main_syntax = 'liquid'
137a329911SBram Moolenaarendif
147a329911SBram Moolenaar
157a329911SBram Moolenaarif !exists('g:liquid_default_subtype')
167a329911SBram Moolenaar  let g:liquid_default_subtype = 'html'
177a329911SBram Moolenaarendif
187a329911SBram Moolenaar
197a329911SBram Moolenaarif !exists('b:liquid_subtype') && main_syntax == 'liquid'
207a329911SBram Moolenaar  let s:lines = getline(1)."\n".getline(2)."\n".getline(3)."\n".getline(4)."\n".getline(5)."\n".getline("$")
217a329911SBram Moolenaar  let b:liquid_subtype = matchstr(s:lines,'liquid_subtype=\zs\w\+')
227a329911SBram Moolenaar  if b:liquid_subtype == ''
237a329911SBram Moolenaar    let b:liquid_subtype = matchstr(&filetype,'^liquid\.\zs\w\+')
247a329911SBram Moolenaar  endif
257a329911SBram Moolenaar  if b:liquid_subtype == ''
267a329911SBram Moolenaar    let b:liquid_subtype = matchstr(substitute(expand('%:t'),'\c\%(\.liquid\)\+$','',''),'\.\zs\w\+$')
277a329911SBram Moolenaar  endif
287a329911SBram Moolenaar  if b:liquid_subtype == ''
297a329911SBram Moolenaar    let b:liquid_subtype = g:liquid_default_subtype
307a329911SBram Moolenaar  endif
317a329911SBram Moolenaarendif
327a329911SBram Moolenaar
337a329911SBram Moolenaarif exists('b:liquid_subtype') && b:liquid_subtype != ''
347a329911SBram Moolenaar  exe 'runtime! syntax/'.b:liquid_subtype.'.vim'
357a329911SBram Moolenaar  unlet! b:current_syntax
367a329911SBram Moolenaarendif
377a329911SBram Moolenaar
387a329911SBram Moolenaarsyn case match
397a329911SBram Moolenaar
407a329911SBram Moolenaarif exists('b:liquid_subtype') && b:liquid_subtype != 'yaml'
417a329911SBram Moolenaar  " YAML Front Matter
427a329911SBram Moolenaar  syn include @liquidYamlTop syntax/yaml.vim
437a329911SBram Moolenaar  unlet! b:current_syntax
447a329911SBram Moolenaar  syn region liquidYamlHead start="\%^---$" end="^---\s*$" keepend contains=@liquidYamlTop,@Spell
457a329911SBram Moolenaarendif
467a329911SBram Moolenaar
477a329911SBram Moolenaarif !exists('g:liquid_highlight_types')
487a329911SBram Moolenaar  let g:liquid_highlight_types = []
497a329911SBram Moolenaarendif
507a329911SBram Moolenaar
517a329911SBram Moolenaarif !exists('s:subtype')
527a329911SBram Moolenaar  let s:subtype = exists('b:liquid_subtype') ? b:liquid_subtype : ''
537a329911SBram Moolenaar
547a329911SBram Moolenaar  for s:type in map(copy(g:liquid_highlight_types),'matchstr(v:val,"[^=]*$")')
557a329911SBram Moolenaar    if s:type =~ '\.'
567a329911SBram Moolenaar      let b:{matchstr(s:type,'[^.]*')}_subtype = matchstr(s:type,'\.\zs.*')
577a329911SBram Moolenaar    endif
587a329911SBram Moolenaar    exe 'syn include @liquidHighlight'.substitute(s:type,'\.','','g').' syntax/'.matchstr(s:type,'[^.]*').'.vim'
597a329911SBram Moolenaar    unlet! b:current_syntax
607a329911SBram Moolenaar  endfor
617a329911SBram Moolenaar  unlet! s:type
627a329911SBram Moolenaar
637a329911SBram Moolenaar  if s:subtype == ''
647a329911SBram Moolenaar    unlet! b:liquid_subtype
657a329911SBram Moolenaar  else
667a329911SBram Moolenaar    let b:liquid_subtype = s:subtype
677a329911SBram Moolenaar  endif
687a329911SBram Moolenaar  unlet s:subtype
697a329911SBram Moolenaarendif
707a329911SBram Moolenaar
717a329911SBram Moolenaarsyn region  liquidStatement  matchgroup=liquidDelimiter start="{%" end="%}" contains=@liquidStatement containedin=ALLBUT,@liquidExempt keepend
727a329911SBram Moolenaarsyn region  liquidExpression matchgroup=liquidDelimiter start="{{" end="}}" contains=@liquidExpression  containedin=ALLBUT,@liquidExempt keepend
737a329911SBram Moolenaarsyn region  liquidComment    matchgroup=liquidDelimiter start="{%\s*comment\s*%}" end="{%\s*endcomment\s*%}" contains=liquidTodo,@Spell containedin=ALLBUT,@liquidExempt keepend
74*543b7ef7SBram Moolenaarsyn region  liquidRaw        matchgroup=liquidDelimiter start="{%\s*raw\s*%}" end="{%\s*endraw\s*%}" contains=TOP,@liquidExempt containedin=ALLBUT,@liquidExempt keepend
757a329911SBram Moolenaar
76*543b7ef7SBram Moolenaarsyn cluster liquidExempt contains=liquidStatement,liquidExpression,liquidComment,liquidRaw,@liquidStatement,liquidYamlHead
777a329911SBram Moolenaarsyn cluster liquidStatement contains=liquidConditional,liquidRepeat,liquidKeyword,@liquidExpression
787a329911SBram Moolenaarsyn cluster liquidExpression contains=liquidOperator,liquidString,liquidNumber,liquidFloat,liquidBoolean,liquidNull,liquidEmpty,liquidPipe,liquidForloop
797a329911SBram Moolenaar
807a329911SBram Moolenaarsyn keyword liquidKeyword highlight nextgroup=liquidTypeHighlight skipwhite contained
817a329911SBram Moolenaarsyn keyword liquidKeyword endhighlight contained
827a329911SBram Moolenaarsyn region liquidHighlight start="{%\s*highlight\s\+\w\+\s*%}" end="{% endhighlight %}" keepend
837a329911SBram Moolenaar
847a329911SBram Moolenaarfor s:type in g:liquid_highlight_types
857a329911SBram Moolenaar  exe 'syn match liquidTypeHighlight "\<'.matchstr(s:type,'[^=]*').'\>" contained'
867a329911SBram Moolenaar  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')
877a329911SBram Moolenaarendfor
887a329911SBram Moolenaarunlet! s:type
897a329911SBram Moolenaar
907a329911SBram Moolenaarsyn region liquidString matchgroup=liquidQuote start=+"+ end=+"+ contained
917a329911SBram Moolenaarsyn region liquidString matchgroup=liquidQuote start=+'+ end=+'+ contained
927a329911SBram Moolenaarsyn match liquidNumber "-\=\<\d\+\>" contained
937a329911SBram Moolenaarsyn match liquidFloat "-\=\<\d\+\>\.\.\@!\%(\d\+\>\)\=" contained
947a329911SBram Moolenaarsyn keyword liquidBoolean true false contained
957a329911SBram Moolenaarsyn keyword liquidNull null nil contained
967a329911SBram Moolenaarsyn match liquidEmpty "\<empty\>" contained
977a329911SBram Moolenaar
987a329911SBram Moolenaarsyn keyword liquidOperator and or not contained
997a329911SBram Moolenaarsyn match liquidPipe '|' contained skipwhite nextgroup=liquidFilter
1007a329911SBram Moolenaar
1017a329911SBram Moolenaarsyn 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
1027a329911SBram Moolenaar
1037a329911SBram Moolenaarsyn keyword liquidConditional if elsif else endif unless endunless case when endcase ifchanged endifchanged contained
1047a329911SBram Moolenaarsyn keyword liquidRepeat      for endfor tablerow endtablerow in contained
1057a329911SBram Moolenaarsyn match   liquidRepeat      "\%({%\s*\)\@<=empty\>" contained
1067a329911SBram Moolenaarsyn keyword liquidKeyword     assign cycle include with contained
1077a329911SBram Moolenaar
1087a329911SBram Moolenaarsyn keyword liquidForloop forloop nextgroup=liquidForloopDot contained
1097a329911SBram Moolenaarsyn match liquidForloopDot "\." nextgroup=liquidForloopAttribute contained
1107a329911SBram Moolenaarsyn keyword liquidForloopAttribute length index index0 rindex rindex0 first last contained
1117a329911SBram Moolenaar
1127a329911SBram Moolenaarsyn keyword liquidTablerowloop tablerowloop nextgroup=liquidTablerowloopDot contained
1137a329911SBram Moolenaarsyn match liquidTablerowloopDot "\." nextgroup=liquidTableForloopAttribute contained
1147a329911SBram Moolenaarsyn keyword liquidTablerowloopAttribute length index index0 col col0 index0 rindex rindex0 first last col_first col_last contained
1157a329911SBram Moolenaar
1167a329911SBram Moolenaarhi def link liquidDelimiter             PreProc
1177a329911SBram Moolenaarhi def link liquidComment               Comment
1187a329911SBram Moolenaarhi def link liquidTypeHighlight         Type
1197a329911SBram Moolenaarhi def link liquidConditional           Conditional
1207a329911SBram Moolenaarhi def link liquidRepeat                Repeat
1217a329911SBram Moolenaarhi def link liquidKeyword               Keyword
1227a329911SBram Moolenaarhi def link liquidOperator              Operator
1237a329911SBram Moolenaarhi def link liquidString                String
1247a329911SBram Moolenaarhi def link liquidQuote                 Delimiter
1257a329911SBram Moolenaarhi def link liquidNumber                Number
1267a329911SBram Moolenaarhi def link liquidFloat                 Float
1277a329911SBram Moolenaarhi def link liquidEmpty                 liquidNull
1287a329911SBram Moolenaarhi def link liquidNull                  liquidBoolean
1297a329911SBram Moolenaarhi def link liquidBoolean               Boolean
1307a329911SBram Moolenaarhi def link liquidFilter                Function
1317a329911SBram Moolenaarhi def link liquidForloop               Identifier
1327a329911SBram Moolenaarhi def link liquidForloopAttribute      Identifier
1337a329911SBram Moolenaar
1347a329911SBram Moolenaarlet b:current_syntax = 'liquid'
1357a329911SBram Moolenaar
1367a329911SBram Moolenaarif exists('main_syntax') && main_syntax == 'liquid'
1377a329911SBram Moolenaar  unlet main_syntax
1387a329911SBram Moolenaarendif
139