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