Mercurial > vim
annotate runtime/syntax/liquid.vim @ 20528:489cb75c76b6 v8.2.0818
patch 8.2.0818: Vim9: using a discovery phase doesn't work well
Commit: https://github.com/vim/vim/commit/822ba24743af9ee1b5e7f656a7a61a38f3638bca
Author: Bram Moolenaar <Bram@vim.org>
Date: Sun May 24 23:00:18 2020 +0200
patch 8.2.0818: Vim9: using a discovery phase doesn't work well
Problem: Vim9: using a discovery phase doesn't work well.
Solution: Remove the discovery phase, instead compile a function only when
it is used. Add :defcompile to compile def functions earlier.
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sun, 24 May 2020 23:15:04 +0200 |
parents | 2eb30f341e8d |
children | dce918af0c00 |
rev | line source |
---|---|
2202 | 1 " Vim syntax file |
2 " Language: Liquid | |
3 " Maintainer: Tim Pope <vimNOSPAM@tpope.org> | |
4 " Filenames: *.liquid | |
4681
2eb30f341e8d
Updated runtime files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2202
diff
changeset
|
5 " Last Change: 2013 May 30 |
2202 | 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 | |
4681
2eb30f341e8d
Updated runtime files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2202
diff
changeset
|
74 syn region liquidRaw matchgroup=liquidDelimiter start="{%\s*raw\s*%}" end="{%\s*endraw\s*%}" contains=TOP,@liquidExempt containedin=ALLBUT,@liquidExempt keepend |
2202 | 75 |
4681
2eb30f341e8d
Updated runtime files and translations.
Bram Moolenaar <bram@vim.org>
parents:
2202
diff
changeset
|
76 syn cluster liquidExempt contains=liquidStatement,liquidExpression,liquidComment,liquidRaw,@liquidStatement,liquidYamlHead |
2202 | 77 syn cluster liquidStatement contains=liquidConditional,liquidRepeat,liquidKeyword,@liquidExpression |
78 syn cluster liquidExpression contains=liquidOperator,liquidString,liquidNumber,liquidFloat,liquidBoolean,liquidNull,liquidEmpty,liquidPipe,liquidForloop | |
79 | |
80 syn keyword liquidKeyword highlight nextgroup=liquidTypeHighlight skipwhite contained | |
81 syn keyword liquidKeyword endhighlight contained | |
82 syn region liquidHighlight start="{%\s*highlight\s\+\w\+\s*%}" end="{% endhighlight %}" keepend | |
83 | |
84 for s:type in g:liquid_highlight_types | |
85 exe 'syn match liquidTypeHighlight "\<'.matchstr(s:type,'[^=]*').'\>" contained' | |
86 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') | |
87 endfor | |
88 unlet! s:type | |
89 | |
90 syn region liquidString matchgroup=liquidQuote start=+"+ end=+"+ contained | |
91 syn region liquidString matchgroup=liquidQuote start=+'+ end=+'+ contained | |
92 syn match liquidNumber "-\=\<\d\+\>" contained | |
93 syn match liquidFloat "-\=\<\d\+\>\.\.\@!\%(\d\+\>\)\=" contained | |
94 syn keyword liquidBoolean true false contained | |
95 syn keyword liquidNull null nil contained | |
96 syn match liquidEmpty "\<empty\>" contained | |
97 | |
98 syn keyword liquidOperator and or not contained | |
99 syn match liquidPipe '|' contained skipwhite nextgroup=liquidFilter | |
100 | |
101 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 | |
102 | |
103 syn keyword liquidConditional if elsif else endif unless endunless case when endcase ifchanged endifchanged contained | |
104 syn keyword liquidRepeat for endfor tablerow endtablerow in contained | |
105 syn match liquidRepeat "\%({%\s*\)\@<=empty\>" contained | |
106 syn keyword liquidKeyword assign cycle include with contained | |
107 | |
108 syn keyword liquidForloop forloop nextgroup=liquidForloopDot contained | |
109 syn match liquidForloopDot "\." nextgroup=liquidForloopAttribute contained | |
110 syn keyword liquidForloopAttribute length index index0 rindex rindex0 first last contained | |
111 | |
112 syn keyword liquidTablerowloop tablerowloop nextgroup=liquidTablerowloopDot contained | |
113 syn match liquidTablerowloopDot "\." nextgroup=liquidTableForloopAttribute contained | |
114 syn keyword liquidTablerowloopAttribute length index index0 col col0 index0 rindex rindex0 first last col_first col_last contained | |
115 | |
116 hi def link liquidDelimiter PreProc | |
117 hi def link liquidComment Comment | |
118 hi def link liquidTypeHighlight Type | |
119 hi def link liquidConditional Conditional | |
120 hi def link liquidRepeat Repeat | |
121 hi def link liquidKeyword Keyword | |
122 hi def link liquidOperator Operator | |
123 hi def link liquidString String | |
124 hi def link liquidQuote Delimiter | |
125 hi def link liquidNumber Number | |
126 hi def link liquidFloat Float | |
127 hi def link liquidEmpty liquidNull | |
128 hi def link liquidNull liquidBoolean | |
129 hi def link liquidBoolean Boolean | |
130 hi def link liquidFilter Function | |
131 hi def link liquidForloop Identifier | |
132 hi def link liquidForloopAttribute Identifier | |
133 | |
134 let b:current_syntax = 'liquid' | |
135 | |
136 if exists('main_syntax') && main_syntax == 'liquid' | |
137 unlet main_syntax | |
138 endif |