Mercurial > vim
comparison runtime/syntax/yaml.vim @ 6741:fbc1131f0ba5
Updated runtime files.
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Mon, 13 Apr 2015 12:43:06 +0200 |
parents | 22da5ab9aaa1 |
children | 8ac85adee561 |
comparison
equal
deleted
inserted
replaced
6740:2ed977b23d68 | 6741:fbc1131f0ba5 |
---|---|
1 " Vim syntax file | 1 " Vim syntax file |
2 " Language: YAML (YAML Ain't Markup Language) 1.2 | 2 " Language: YAML (YAML Ain't Markup Language) 1.2 |
3 " Maintainer: Nikolai Pavlov <zyx.vim@gmail.com> | 3 " Maintainer: Nikolai Pavlov <zyx.vim@gmail.com> |
4 " First author: Nikolai Weibull <now@bitwi.se> | 4 " First author: Nikolai Weibull <now@bitwi.se> |
5 " Latest Revision: 2010-10-08 | 5 " Latest Revision: 2015-03-28 |
6 | 6 |
7 if exists('b:current_syntax') | 7 if exists('b:current_syntax') |
8 finish | 8 finish |
9 endif | 9 endif |
10 | 10 |
11 let s:cpo_save = &cpo | 11 let s:cpo_save = &cpo |
12 set cpo&vim | 12 set cpo&vim |
13 | 13 |
14 let s:ns_char = '\%(\%([\n\r\uFEFF \t]\)\@!\p\)' | 14 " Choose the schema to use |
15 let s:ns_word_char = '\%(\w\|-\)' | 15 " TODO: Validate schema |
16 let s:ns_uri_char = '\%(%\x\x\|'.s:ns_word_char.'\|[#/;?:@&=+$,.!~*''()\[\]]\)' | 16 if !exists('b:yaml_schema') |
17 if exists('g:yaml_schema') | |
18 let b:yaml_schema = g:yaml_schema | |
19 else | |
20 let b:yaml_schema = 'core' | |
21 endif | |
22 endif | |
23 | |
24 let s:ns_char = '\%([\n\r\uFEFF \t]\@!\p\)' | |
25 let s:ns_word_char = '[[:alnum:]_\-]' | |
26 let s:ns_uri_char = '\%(%\x\x\|'.s:ns_word_char.'\|[#/;?:@&=+$,.!~*''()[\]]\)' | |
17 let s:ns_tag_char = '\%(%\x\x\|'.s:ns_word_char.'\|[#/;?:@&=+$.~*''()]\)' | 27 let s:ns_tag_char = '\%(%\x\x\|'.s:ns_word_char.'\|[#/;?:@&=+$.~*''()]\)' |
18 let s:c_ns_anchor_char = '\%(\%([\n\r\uFEFF \t,\[\]{}]\)\@!\p\)' | 28 let s:c_ns_anchor_char = '\%([\n\r\uFEFF \t,[\]{}]\@!\p\)' |
19 let s:c_indicator = '[\-?:,\[\]{}#&*!|>''"%@`]' | 29 let s:c_indicator = '[\-?:,[\]{}#&*!|>''"%@`]' |
20 let s:c_flow_indicator = '[,\[\]{}]' | 30 let s:c_flow_indicator = '[,[\]{}]' |
31 | |
32 let s:ns_char_without_c_indicator = substitute(s:ns_char, '\v\C[\zs', '\=s:c_indicator[1:-2]', '') | |
33 | |
34 let s:_collection = '[^\@!\(\%(\\\.\|\[^\\\]]\)\+\)]' | |
35 let s:_neg_collection = '[^\(\%(\\\.\|\[^\\\]]\)\+\)]' | |
36 function s:SimplifyToAssumeAllPrintable(p) | |
37 return substitute(a:p, '\V\C\\%('.s:_collection.'\\@!\\p\\)', '[^\1]', '') | |
38 endfunction | |
39 let s:ns_char = s:SimplifyToAssumeAllPrintable(s:ns_char) | |
40 let s:ns_char_without_c_indicator = s:SimplifyToAssumeAllPrintable(s:ns_char_without_c_indicator) | |
41 let s:c_ns_anchor_char = s:SimplifyToAssumeAllPrintable(s:c_ns_anchor_char) | |
42 | |
43 function s:SimplifyAdjacentCollections(p) | |
44 return substitute(a:p, '\V\C'.s:_collection.'\\|'.s:_collection, '[\1\2]', 'g') | |
45 endfunction | |
46 let s:ns_uri_char = s:SimplifyAdjacentCollections(s:ns_uri_char) | |
47 let s:ns_tag_char = s:SimplifyAdjacentCollections(s:ns_tag_char) | |
21 | 48 |
22 let s:c_verbatim_tag = '!<'.s:ns_uri_char.'\+>' | 49 let s:c_verbatim_tag = '!<'.s:ns_uri_char.'\+>' |
23 let s:c_named_tag_handle = '!'.s:ns_word_char.'\+!' | 50 let s:c_named_tag_handle = '!'.s:ns_word_char.'\+!' |
24 let s:c_secondary_tag_handle = '!!' | 51 let s:c_secondary_tag_handle = '!!' |
25 let s:c_primary_tag_handle = '!' | 52 let s:c_primary_tag_handle = '!' |
44 \ '\|'.s:ns_global_tag_prefix | 71 \ '\|'.s:ns_global_tag_prefix |
45 | 72 |
46 let s:ns_plain_safe_out = s:ns_char | 73 let s:ns_plain_safe_out = s:ns_char |
47 let s:ns_plain_safe_in = '\%('.s:c_flow_indicator.'\@!'.s:ns_char.'\)' | 74 let s:ns_plain_safe_in = '\%('.s:c_flow_indicator.'\@!'.s:ns_char.'\)' |
48 | 75 |
49 let s:ns_plain_first_in = '\%('.s:c_indicator.'\@!'.s:ns_char.'\|[?:\-]\%('.s:ns_plain_safe_in.'\)\@=\)' | 76 let s:ns_plain_safe_in = substitute(s:ns_plain_safe_in, '\V\C\\%('.s:_collection.'\\@!'.s:_neg_collection.'\\)', '[^\1\2]', '') |
50 let s:ns_plain_first_out = '\%('.s:c_indicator.'\@!'.s:ns_char.'\|[?:\-]\%('.s:ns_plain_safe_out.'\)\@=\)' | 77 let s:ns_plain_safe_in_without_colhash = substitute(s:ns_plain_safe_in, '\V\C'.s:_neg_collection, '[^\1:#]', '') |
51 | 78 let s:ns_plain_safe_out_without_colhash = substitute(s:ns_plain_safe_out, '\V\C'.s:_neg_collection, '[^\1:#]', '') |
52 let s:ns_plain_char_in = '\%('.s:ns_char.'#\|:'.s:ns_plain_safe_in.'\|[:#]\@!'.s:ns_plain_safe_in.'\)' | 79 |
53 let s:ns_plain_char_out = '\%('.s:ns_char.'#\|:'.s:ns_plain_safe_out.'\|[:#]\@!'.s:ns_plain_safe_out.'\)' | 80 let s:ns_plain_first_in = '\%('.s:ns_char_without_c_indicator.'\|[?:\-]\%('.s:ns_plain_safe_in.'\)\@=\)' |
81 let s:ns_plain_first_out = '\%('.s:ns_char_without_c_indicator.'\|[?:\-]\%('.s:ns_plain_safe_out.'\)\@=\)' | |
82 | |
83 let s:ns_plain_char_in = '\%('.s:ns_char.'#\|:'.s:ns_plain_safe_in.'\|'.s:ns_plain_safe_in_without_colhash.'\)' | |
84 let s:ns_plain_char_out = '\%('.s:ns_char.'#\|:'.s:ns_plain_safe_out.'\|'.s:ns_plain_safe_out_without_colhash.'\)' | |
54 | 85 |
55 let s:ns_plain_out = s:ns_plain_first_out . s:ns_plain_char_out.'*' | 86 let s:ns_plain_out = s:ns_plain_first_out . s:ns_plain_char_out.'*' |
56 let s:ns_plain_in = s:ns_plain_first_in . s:ns_plain_char_in.'*' | 87 let s:ns_plain_in = s:ns_plain_first_in . s:ns_plain_char_in.'*' |
57 | 88 |
58 | 89 |
87 syn match yamlEscape contained '\\\%([\\"abefnrtv\^0_ NLP\n]\|x\x\x\|u\x\{4}\|U\x\{8}\)' | 118 syn match yamlEscape contained '\\\%([\\"abefnrtv\^0_ NLP\n]\|x\x\x\|u\x\{4}\|U\x\{8}\)' |
88 syn match yamlSingleEscape contained "''" | 119 syn match yamlSingleEscape contained "''" |
89 | 120 |
90 syn match yamlBlockScalarHeader contained '\s\+\zs[|>]\%([+-]\=[1-9]\|[1-9]\=[+-]\)\=' | 121 syn match yamlBlockScalarHeader contained '\s\+\zs[|>]\%([+-]\=[1-9]\|[1-9]\=[+-]\)\=' |
91 | 122 |
123 syn cluster yamlConstant contains=yamlBool,yamlNull | |
124 | |
92 syn cluster yamlFlow contains=yamlFlowString,yamlFlowMapping,yamlFlowCollection | 125 syn cluster yamlFlow contains=yamlFlowString,yamlFlowMapping,yamlFlowCollection |
93 syn cluster yamlFlow add=yamlFlowMappingKey,yamlFlowMappingMerge | 126 syn cluster yamlFlow add=yamlFlowMappingKey,yamlFlowMappingMerge |
94 syn cluster yamlFlow add=yamlConstant,yamlPlainScalar,yamlFloat | 127 syn cluster yamlFlow add=@yamlConstant,yamlPlainScalar,yamlFloat |
95 syn cluster yamlFlow add=yamlTimestamp,yamlInteger,yamlMappingKeyStart | 128 syn cluster yamlFlow add=yamlTimestamp,yamlInteger,yamlMappingKeyStart |
96 syn cluster yamlFlow add=yamlComment | 129 syn cluster yamlFlow add=yamlComment |
97 syn region yamlFlowMapping matchgroup=yamlFlowIndicator start='{' end='}' contains=@yamlFlow | 130 syn region yamlFlowMapping matchgroup=yamlFlowIndicator start='{' end='}' contains=@yamlFlow |
98 syn region yamlFlowCollection matchgroup=yamlFlowIndicator start='\[' end='\]' contains=@yamlFlow | 131 syn region yamlFlowCollection matchgroup=yamlFlowIndicator start='\[' end='\]' contains=@yamlFlow |
99 | 132 |
101 execute 'syn match yamlPlainScalar contained /'.s:ns_plain_in.'/' | 134 execute 'syn match yamlPlainScalar contained /'.s:ns_plain_in.'/' |
102 | 135 |
103 syn match yamlMappingKeyStart '?\ze\s' | 136 syn match yamlMappingKeyStart '?\ze\s' |
104 syn match yamlMappingKeyStart '?' contained | 137 syn match yamlMappingKeyStart '?' contained |
105 | 138 |
106 execute 'syn match yamlFlowMappingKey /'.s:ns_plain_in.'\ze\s*:/ contained '. | 139 execute 'syn match yamlFlowMappingKey /\%#=1'.s:ns_plain_in.'\%(\s\+'.s:ns_plain_in.'\)*\ze\s*:/ contained '. |
107 \'nextgroup=yamlKeyValueDelimiter' | 140 \'nextgroup=yamlKeyValueDelimiter' |
108 syn match yamlFlowMappingMerge /<<\ze\s*:/ contained nextgroup=yamlKeyValueDelimiter | 141 syn match yamlFlowMappingMerge /<<\ze\s*:/ contained nextgroup=yamlKeyValueDelimiter |
109 | 142 |
110 syn match yamlBlockCollectionItemStart '^\s*\zs-\%(\s\+-\)*\s' nextgroup=yamlBlockMappingKey,yamlBlockMappingMerge | 143 syn match yamlBlockCollectionItemStart '^\s*\zs-\%(\s\+-\)*\s' nextgroup=yamlBlockMappingKey,yamlBlockMappingMerge |
111 " Use the old regexp engine, the NFA engine doesn't like all the \@ items. | 144 " Use the old regexp engine, the NFA engine doesn't like all the \@ items. |
112 execute 'syn match yamlBlockMappingKey /\%#=1^\s*\zs'.s:ns_plain_out.'\ze\s*:\%(\s\|$\)/ '. | 145 execute 'syn match yamlBlockMappingKey /\%#=1^\s*\zs'.s:ns_plain_out.'\%(\s\+'.s:ns_plain_out.'\)*\ze\s*:\%(\s\|$\)/ '. |
113 \'nextgroup=yamlKeyValueDelimiter' | 146 \'nextgroup=yamlKeyValueDelimiter' |
114 execute 'syn match yamlBlockMappingKey /\%#=1\s*\zs'.s:ns_plain_out.'\ze\s*:\%(\s\|$\)/ contained '. | 147 execute 'syn match yamlBlockMappingKey /\%#=1\s*\zs'.s:ns_plain_out.'\%(\s\+'.s:ns_plain_out.'\)*\ze\s*:\%(\s\|$\)/ contained '. |
115 \'nextgroup=yamlKeyValueDelimiter' | 148 \'nextgroup=yamlKeyValueDelimiter' |
116 syn match yamlBlockMappingMerge /^\s*\zs<<\ze:\%(\s\|$\)/ nextgroup=yamlKeyValueDelimiter | 149 syn match yamlBlockMappingMerge /^\s*\zs<<\ze:\%(\s\|$\)/ nextgroup=yamlKeyValueDelimiter |
117 syn match yamlBlockMappingMerge /<<\ze\s*:\%(\s\|$\)/ nextgroup=yamlKeyValueDelimiter contained | 150 syn match yamlBlockMappingMerge /<<\ze\s*:\%(\s\|$\)/ nextgroup=yamlKeyValueDelimiter contained |
118 | 151 |
119 syn match yamlKeyValueDelimiter /\s*:/ contained | 152 syn match yamlKeyValueDelimiter /\s*:/ contained |
120 syn match yamlKeyValueDelimiter /\s*:/ contained | 153 syn match yamlKeyValueDelimiter /\s*:/ contained |
121 | 154 |
122 syn keyword yamlConstant true True TRUE false False FALSE | 155 syn cluster yamlScalarWithSpecials contains=yamlPlainScalar,yamlBlockMappingKey,yamlFlowMappingKey |
123 syn keyword yamlConstant null Null NULL | 156 |
124 syn match yamlConstant '\<\~\>' | 157 let s:_bounder = s:SimplifyToAssumeAllPrintable('\%([[\]{}, \t]\@!\p\)') |
125 | 158 if b:yaml_schema is# 'json' |
126 syn match yamlTimestamp /\%([\[\]{}, \t]\@!\p\)\@<!\%(\d\{4}-\d\d\=-\d\d\=\%(\%([Tt]\|\s\+\)\%(\d\d\=\):\%(\d\d\):\%(\d\d\)\%(\.\%(\d*\)\)\=\%(\s*\%(Z\|[+-]\d\d\=\%(:\d\d\)\=\)\)\=\)\=\)\%([\[\]{}, \t]\@!\p\)\@!/ | 159 syn keyword yamlNull null contained containedin=@yamlScalarWithSpecials |
127 | 160 syn keyword yamlBool true false |
128 syn match yamlInteger /\%([\[\]{}, \t]\@!\p\)\@<!\%([+-]\=\%(0\%(b[0-1_]\+\|[0-7_]\+\|x[0-9a-fA-F_]\+\)\=\|\%([1-9][0-9_]*\%(:[0-5]\=\d\)\+\)\)\|[1-9][0-9_]*\)\%([\[\]{}, \t]\@!\p\)\@!/ | 161 exe 'syn match yamlInteger /'.s:_bounder.'\@1<!\%(0\|-\=[1-9][0-9]*\)'.s:_bounder.'\@!/ contained containedin=@yamlScalarWithSpecials' |
129 syn match yamlFloat /\%([\[\]{}, \t]\@!\p\)\@<!\%([+-]\=\%(\%(\d[0-9_]*\)\.[0-9_]*\%([eE][+-]\d\+\)\=\|\.[0-9_]\+\%([eE][-+][0-9]\+\)\=\|\d[0-9_]*\%(:[0-5]\=\d\)\+\.[0-9_]*\|\.\%(inf\|Inf\|INF\)\)\|\%(\.\%(nan\|NaN\|NAN\)\)\)\%([\[\]{}, \t]\@!\p\)\@!/ | 162 exe 'syn match yamlFloat /'.s:_bounder.'\@1<!\%(-\=[1-9][0-9]*\%(\.[0-9]*\)\=\(e[-+]\=[0-9]\+\)\=\|0\|-\=\.inf\|\.nan\)'.s:_bounder.'\@!/ contained containedin=@yamlScalarWithSpecials' |
163 elseif b:yaml_schema is# 'core' | |
164 syn keyword yamlNull null Null NULL contained containedin=@yamlScalarWithSpecials | |
165 syn keyword yamlBool true True TRUE false False FALSE contained containedin=@yamlScalarWithSpecials | |
166 exe 'syn match yamlNull /'.s:_bounder.'\@1<!\~'.s:_bounder.'\@!/ contained containedin=@yamlScalarWithSpecials' | |
167 exe 'syn match yamlInteger /'.s:_bounder.'\@1<!\%([+-]\=\%(0\%(b[0-1_]\+\|[0-7_]\+\|x[0-9a-fA-F_]\+\)\=\|\%([1-9][0-9_]*\%(:[0-5]\=\d\)\+\)\)\|[1-9][0-9_]*\)'.s:_bounder.'\@!/ contained containedin=@yamlScalarWithSpecials' | |
168 exe 'syn match yamlFloat /'.s:_bounder.'\@1<!\%([+-]\=\%(\%(\d[0-9_]*\)\.[0-9_]*\%([eE][+-]\=\d\+\)\=\|\.[0-9_]\+\%([eE][-+]\=[0-9]\+\)\=\|\d[0-9_]*\%(:[0-5]\=\d\)\+\.[0-9_]*\|\.\%(inf\|Inf\|INF\)\)\|\%(\.\%(nan\|NaN\|NAN\)\)\)'.s:_bounder.'\@!/ contained containedin=@yamlScalarWithSpecials' | |
169 elseif b:yaml_schema is# 'pyyaml' | |
170 syn keyword yamlNull null Null NULL contained containedin=@yamlScalarWithSpecials | |
171 syn keyword yamlBool true True TRUE false False FALSE yes Yes YES no No NO on On ON off Off OFF contained containedin=@yamlScalarWithSpecials | |
172 exe 'syn match yamlNull /'.s:_bounder.'\@1<!\~'.s:_bounder.'\@!/ contained containedin=@yamlScalarWithSpecials' | |
173 exe 'syn match yamlFloat /'.s:_bounder.'\@1<!\%(\v[-+]?%(\d[0-9_]*)\.[0-9_]*%([eE][-+]\d+)?|\.[0-9_]+%([eE][-+]\d+)?|[-+]?\d[0-9_]*%(\:[0-5]?\d)+\.[0-9_]*|[-+]?\.%(inf|Inf|INF)|\.%(nan|NaN|NAN)\m\)'.s:_bounder.'\@!/ contained containedin=@yamlScalarWithSpecials' | |
174 exe 'syn match yamlInteger /'.s:_bounder.'\@1<!\%(\v[-+]?0b[0-1_]+|[-+]?0[0-7_]+|[-+]?%(0|[1-9][0-9_]*)|[-+]?0x[0-9a-fA-F_]+|[-+]?[1-9][0-9_]*%(:[0-5]?\d)+\m\)'.s:_bounder.'\@!/ contained containedin=@yamlScalarWithSpecials' | |
175 exe 'syn match yamlTimestamp /'.s:_bounder.'\@1<!\%(\v\d\d\d\d\-\d\d\-\d\d|\d\d\d\d \-\d\d? \-\d\d?%([Tt]|[ \t]+)\d\d?\:\d\d \:\d\d %(\.\d*)?%([ \t]*%(Z|[-+]\d\d?%(\:\d\d)?))?\m\)'.s:_bounder.'\@!/ contained containedin=@yamlScalarWithSpecials' | |
176 elseif b:yaml_schema is# 'failsafe' | |
177 " Nothing | |
178 endif | |
179 unlet s:_bounder | |
180 | |
130 | 181 |
131 execute 'syn match yamlNodeTag '.string(s:c_ns_tag_property) | 182 execute 'syn match yamlNodeTag '.string(s:c_ns_tag_property) |
132 execute 'syn match yamlAnchor '.string(s:c_ns_anchor_property) | 183 execute 'syn match yamlAnchor '.string(s:c_ns_anchor_property) |
133 execute 'syn match yamlAlias '.string(s:c_ns_alias_node) | 184 execute 'syn match yamlAlias '.string(s:c_ns_alias_node) |
134 | 185 |
168 hi def link yamlFlowIndicator Special | 219 hi def link yamlFlowIndicator Special |
169 hi def link yamlKeyValueDelimiter Special | 220 hi def link yamlKeyValueDelimiter Special |
170 | 221 |
171 hi def link yamlConstant Constant | 222 hi def link yamlConstant Constant |
172 | 223 |
224 hi def link yamlNull yamlConstant | |
225 hi def link yamlBool yamlConstant | |
226 | |
173 hi def link yamlAnchor Type | 227 hi def link yamlAnchor Type |
174 hi def link yamlAlias Type | 228 hi def link yamlAlias Type |
175 hi def link yamlNodeTag Type | 229 hi def link yamlNodeTag Type |
176 | 230 |
177 hi def link yamlInteger Number | 231 hi def link yamlInteger Number |
178 hi def link yamlFloat Float | 232 hi def link yamlFloat Float |
179 hi def link yamlTimestamp Number | 233 hi def link yamlTimestamp Number |
180 | 234 |
181 let b:current_syntax = "yaml" | 235 let b:current_syntax = "yaml" |
182 | 236 |
183 unlet s:ns_word_char s:ns_uri_char s:c_verbatim_tag s:c_named_tag_handle s:c_secondary_tag_handle s:c_primary_tag_handle s:c_tag_handle s:ns_tag_char s:c_ns_shorthand_tag s:c_non_specific_tag s:c_ns_tag_property s:c_ns_anchor_char s:c_ns_anchor_name s:c_ns_anchor_property s:c_ns_alias_node s:ns_char s:ns_directive_name s:ns_local_tag_prefix s:ns_global_tag_prefix s:ns_tag_prefix s:c_indicator s:ns_plain_safe_out s:c_flow_indicator s:ns_plain_safe_in s:ns_plain_first_in s:ns_plain_first_out s:ns_plain_char_in s:ns_plain_char_out s:ns_plain_out s:ns_plain_in | 237 unlet s:ns_word_char s:ns_uri_char s:c_verbatim_tag s:c_named_tag_handle s:c_secondary_tag_handle s:c_primary_tag_handle s:c_tag_handle s:ns_tag_char s:c_ns_shorthand_tag s:c_non_specific_tag s:c_ns_tag_property s:c_ns_anchor_char s:c_ns_anchor_name s:c_ns_anchor_property s:c_ns_alias_node s:ns_char s:ns_directive_name s:ns_local_tag_prefix s:ns_global_tag_prefix s:ns_tag_prefix s:c_indicator s:ns_plain_safe_out s:c_flow_indicator s:ns_plain_safe_in s:ns_plain_first_in s:ns_plain_first_out s:ns_plain_char_in s:ns_plain_char_out s:ns_plain_out s:ns_plain_in s:ns_char_without_c_indicator s:ns_plain_safe_in_without_colhash s:ns_plain_safe_out_without_colhash |
238 unlet s:_collection s:_neg_collection | |
239 delfunction s:SimplifyAdjacentCollections | |
240 delfunction s:SimplifyToAssumeAllPrintable | |
184 | 241 |
185 let &cpo = s:cpo_save | 242 let &cpo = s:cpo_save |
186 unlet s:cpo_save | 243 unlet s:cpo_save |
187 |