1071d4279SBram Moolenaar" Vim syntax file 224ea3babSBram Moolenaar" Language: YAML (YAML Ain't Markup Language) 1.2 324ea3babSBram Moolenaar" Maintainer: Nikolai Pavlov <[email protected]> 424ea3babSBram Moolenaar" First author: Nikolai Weibull <[email protected]> 55a5f4591SBram Moolenaar" Latest Revision: 2015-03-28 6*8fe1000eSBram Moolenaar" removed duplicate yamlKeyValueDelimiter (pull #4799) 7071d4279SBram Moolenaar 824ea3babSBram Moolenaarif exists('b:current_syntax') 9071d4279SBram Moolenaar finish 10071d4279SBram Moolenaarendif 11071d4279SBram Moolenaar 1242eeac35SBram Moolenaarlet s:cpo_save = &cpo 1342eeac35SBram Moolenaarset cpo&vim 1442eeac35SBram Moolenaar 155a5f4591SBram Moolenaar" Choose the schema to use 165a5f4591SBram Moolenaar" TODO: Validate schema 175a5f4591SBram Moolenaarif !exists('b:yaml_schema') 185a5f4591SBram Moolenaar if exists('g:yaml_schema') 195a5f4591SBram Moolenaar let b:yaml_schema = g:yaml_schema 205a5f4591SBram Moolenaar else 215a5f4591SBram Moolenaar let b:yaml_schema = 'core' 225a5f4591SBram Moolenaar endif 235a5f4591SBram Moolenaarendif 245a5f4591SBram Moolenaar 255a5f4591SBram Moolenaarlet s:ns_char = '\%([\n\r\uFEFF \t]\@!\p\)' 265a5f4591SBram Moolenaarlet s:ns_word_char = '[[:alnum:]_\-]' 275a5f4591SBram Moolenaarlet s:ns_uri_char = '\%(%\x\x\|'.s:ns_word_char.'\|[#/;?:@&=+$,.!~*''()[\]]\)' 2824ea3babSBram Moolenaarlet s:ns_tag_char = '\%(%\x\x\|'.s:ns_word_char.'\|[#/;?:@&=+$.~*''()]\)' 295a5f4591SBram Moolenaarlet s:c_ns_anchor_char = '\%([\n\r\uFEFF \t,[\]{}]\@!\p\)' 305a5f4591SBram Moolenaarlet s:c_indicator = '[\-?:,[\]{}#&*!|>''"%@`]' 315a5f4591SBram Moolenaarlet s:c_flow_indicator = '[,[\]{}]' 325a5f4591SBram Moolenaar 335a5f4591SBram Moolenaarlet s:ns_char_without_c_indicator = substitute(s:ns_char, '\v\C[\zs', '\=s:c_indicator[1:-2]', '') 345a5f4591SBram Moolenaar 355a5f4591SBram Moolenaarlet s:_collection = '[^\@!\(\%(\\\.\|\[^\\\]]\)\+\)]' 365a5f4591SBram Moolenaarlet s:_neg_collection = '[^\(\%(\\\.\|\[^\\\]]\)\+\)]' 375a5f4591SBram Moolenaarfunction s:SimplifyToAssumeAllPrintable(p) 385a5f4591SBram Moolenaar return substitute(a:p, '\V\C\\%('.s:_collection.'\\@!\\p\\)', '[^\1]', '') 395a5f4591SBram Moolenaarendfunction 405a5f4591SBram Moolenaarlet s:ns_char = s:SimplifyToAssumeAllPrintable(s:ns_char) 415a5f4591SBram Moolenaarlet s:ns_char_without_c_indicator = s:SimplifyToAssumeAllPrintable(s:ns_char_without_c_indicator) 425a5f4591SBram Moolenaarlet s:c_ns_anchor_char = s:SimplifyToAssumeAllPrintable(s:c_ns_anchor_char) 435a5f4591SBram Moolenaar 445a5f4591SBram Moolenaarfunction s:SimplifyAdjacentCollections(p) 455a5f4591SBram Moolenaar return substitute(a:p, '\V\C'.s:_collection.'\\|'.s:_collection, '[\1\2]', 'g') 465a5f4591SBram Moolenaarendfunction 475a5f4591SBram Moolenaarlet s:ns_uri_char = s:SimplifyAdjacentCollections(s:ns_uri_char) 485a5f4591SBram Moolenaarlet s:ns_tag_char = s:SimplifyAdjacentCollections(s:ns_tag_char) 4924ea3babSBram Moolenaar 5024ea3babSBram Moolenaarlet s:c_verbatim_tag = '!<'.s:ns_uri_char.'\+>' 5124ea3babSBram Moolenaarlet s:c_named_tag_handle = '!'.s:ns_word_char.'\+!' 5224ea3babSBram Moolenaarlet s:c_secondary_tag_handle = '!!' 5324ea3babSBram Moolenaarlet s:c_primary_tag_handle = '!' 5424ea3babSBram Moolenaarlet s:c_tag_handle = '\%('.s:c_named_tag_handle. 5524ea3babSBram Moolenaar \ '\|'.s:c_secondary_tag_handle. 5624ea3babSBram Moolenaar \ '\|'.s:c_primary_tag_handle.'\)' 5724ea3babSBram Moolenaarlet s:c_ns_shorthand_tag = s:c_tag_handle . s:ns_tag_char.'\+' 5824ea3babSBram Moolenaarlet s:c_non_specific_tag = '!' 5924ea3babSBram Moolenaarlet s:c_ns_tag_property = s:c_verbatim_tag. 6024ea3babSBram Moolenaar \ '\|'.s:c_ns_shorthand_tag. 6124ea3babSBram Moolenaar \ '\|'.s:c_non_specific_tag 6224ea3babSBram Moolenaar 6324ea3babSBram Moolenaarlet s:c_ns_anchor_name = s:c_ns_anchor_char.'\+' 6424ea3babSBram Moolenaarlet s:c_ns_anchor_property = '&'.s:c_ns_anchor_name 6524ea3babSBram Moolenaarlet s:c_ns_alias_node = '\*'.s:c_ns_anchor_name 6624ea3babSBram Moolenaar 6724ea3babSBram Moolenaarlet s:ns_directive_name = s:ns_char.'\+' 6824ea3babSBram Moolenaar 6924ea3babSBram Moolenaarlet s:ns_local_tag_prefix = '!'.s:ns_uri_char.'*' 7024ea3babSBram Moolenaarlet s:ns_global_tag_prefix = s:ns_tag_char.s:ns_uri_char.'*' 7124ea3babSBram Moolenaarlet s:ns_tag_prefix = s:ns_local_tag_prefix. 7224ea3babSBram Moolenaar \ '\|'.s:ns_global_tag_prefix 7324ea3babSBram Moolenaar 7424ea3babSBram Moolenaarlet s:ns_plain_safe_out = s:ns_char 7524ea3babSBram Moolenaarlet s:ns_plain_safe_in = '\%('.s:c_flow_indicator.'\@!'.s:ns_char.'\)' 7624ea3babSBram Moolenaar 775a5f4591SBram Moolenaarlet s:ns_plain_safe_in = substitute(s:ns_plain_safe_in, '\V\C\\%('.s:_collection.'\\@!'.s:_neg_collection.'\\)', '[^\1\2]', '') 785a5f4591SBram Moolenaarlet s:ns_plain_safe_in_without_colhash = substitute(s:ns_plain_safe_in, '\V\C'.s:_neg_collection, '[^\1:#]', '') 795a5f4591SBram Moolenaarlet s:ns_plain_safe_out_without_colhash = substitute(s:ns_plain_safe_out, '\V\C'.s:_neg_collection, '[^\1:#]', '') 8024ea3babSBram Moolenaar 815a5f4591SBram Moolenaarlet s:ns_plain_first_in = '\%('.s:ns_char_without_c_indicator.'\|[?:\-]\%('.s:ns_plain_safe_in.'\)\@=\)' 825a5f4591SBram Moolenaarlet s:ns_plain_first_out = '\%('.s:ns_char_without_c_indicator.'\|[?:\-]\%('.s:ns_plain_safe_out.'\)\@=\)' 835a5f4591SBram Moolenaar 845a5f4591SBram Moolenaarlet s:ns_plain_char_in = '\%('.s:ns_char.'#\|:'.s:ns_plain_safe_in.'\|'.s:ns_plain_safe_in_without_colhash.'\)' 855a5f4591SBram Moolenaarlet s:ns_plain_char_out = '\%('.s:ns_char.'#\|:'.s:ns_plain_safe_out.'\|'.s:ns_plain_safe_out_without_colhash.'\)' 8624ea3babSBram Moolenaar 8724ea3babSBram Moolenaarlet s:ns_plain_out = s:ns_plain_first_out . s:ns_plain_char_out.'*' 8824ea3babSBram Moolenaarlet s:ns_plain_in = s:ns_plain_first_in . s:ns_plain_char_in.'*' 8924ea3babSBram Moolenaar 9024ea3babSBram Moolenaar 91e37d50a5SBram Moolenaarsyn keyword yamlTodo contained TODO FIXME XXX NOTE 92071d4279SBram Moolenaar 9324ea3babSBram Moolenaarsyn region yamlComment display oneline start='\%\(^\|\s\)#' end='$' 9424ea3babSBram Moolenaar \ contains=yamlTodo 95071d4279SBram Moolenaar 9624ea3babSBram Moolenaarexecute 'syn region yamlDirective oneline start='.string('^\ze%'.s:ns_directive_name.'\s\+').' '. 9724ea3babSBram Moolenaar \ 'end="$" '. 9824ea3babSBram Moolenaar \ 'contains=yamlTAGDirective,'. 9924ea3babSBram Moolenaar \ 'yamlYAMLDirective,'. 10024ea3babSBram Moolenaar \ 'yamlReservedDirective '. 10124ea3babSBram Moolenaar \ 'keepend' 102071d4279SBram Moolenaar 10324ea3babSBram Moolenaarsyn match yamlTAGDirective '%TAG\s\+' contained nextgroup=yamlTagHandle 10424ea3babSBram Moolenaarexecute 'syn match yamlTagHandle contained nextgroup=yamlTagPrefix '.string(s:c_tag_handle.'\s\+') 10524ea3babSBram Moolenaarexecute 'syn match yamlTagPrefix contained nextgroup=yamlComment ' . string(s:ns_tag_prefix) 106071d4279SBram Moolenaar 10724ea3babSBram Moolenaarsyn match yamlYAMLDirective '%YAML\s\+' contained nextgroup=yamlYAMLVersion 10824ea3babSBram Moolenaarsyn match yamlYAMLVersion '\d\+\.\d\+' contained nextgroup=yamlComment 109071d4279SBram Moolenaar 11024ea3babSBram Moolenaarexecute 'syn match yamlReservedDirective contained nextgroup=yamlComment '. 11124ea3babSBram Moolenaar \string('%\%(\%(TAG\|YAML\)\s\)\@!'.s:ns_directive_name) 112071d4279SBram Moolenaar 11324ea3babSBram Moolenaarsyn region yamlFlowString matchgroup=yamlFlowStringDelimiter start='"' skip='\\"' end='"' 11442eeac35SBram Moolenaar \ contains=yamlEscape 11524ea3babSBram Moolenaar \ nextgroup=yamlKeyValueDelimiter 11624ea3babSBram Moolenaarsyn region yamlFlowString matchgroup=yamlFlowStringDelimiter start="'" skip="''" end="'" 11742eeac35SBram Moolenaar \ contains=yamlSingleEscape 11824ea3babSBram Moolenaar \ nextgroup=yamlKeyValueDelimiter 11924ea3babSBram Moolenaarsyn match yamlEscape contained '\\\%([\\"abefnrtv\^0_ NLP\n]\|x\x\x\|u\x\{4}\|U\x\{8}\)' 12024ea3babSBram Moolenaarsyn match yamlSingleEscape contained "''" 121071d4279SBram Moolenaar 12224ea3babSBram Moolenaarsyn match yamlBlockScalarHeader contained '\s\+\zs[|>]\%([+-]\=[1-9]\|[1-9]\=[+-]\)\=' 123071d4279SBram Moolenaar 1245a5f4591SBram Moolenaarsyn cluster yamlConstant contains=yamlBool,yamlNull 1255a5f4591SBram Moolenaar 12624ea3babSBram Moolenaarsyn cluster yamlFlow contains=yamlFlowString,yamlFlowMapping,yamlFlowCollection 12724ea3babSBram Moolenaarsyn cluster yamlFlow add=yamlFlowMappingKey,yamlFlowMappingMerge 1285a5f4591SBram Moolenaarsyn cluster yamlFlow add=@yamlConstant,yamlPlainScalar,yamlFloat 12924ea3babSBram Moolenaarsyn cluster yamlFlow add=yamlTimestamp,yamlInteger,yamlMappingKeyStart 13024ea3babSBram Moolenaarsyn cluster yamlFlow add=yamlComment 13124ea3babSBram Moolenaarsyn region yamlFlowMapping matchgroup=yamlFlowIndicator start='{' end='}' contains=@yamlFlow 13224ea3babSBram Moolenaarsyn region yamlFlowCollection matchgroup=yamlFlowIndicator start='\[' end='\]' contains=@yamlFlow 13324ea3babSBram Moolenaar 13424ea3babSBram Moolenaarexecute 'syn match yamlPlainScalar /'.s:ns_plain_out.'/' 13524ea3babSBram Moolenaarexecute 'syn match yamlPlainScalar contained /'.s:ns_plain_in.'/' 13624ea3babSBram Moolenaar 13724ea3babSBram Moolenaarsyn match yamlMappingKeyStart '?\ze\s' 13824ea3babSBram Moolenaarsyn match yamlMappingKeyStart '?' contained 13924ea3babSBram Moolenaar 1405a5f4591SBram Moolenaarexecute 'syn match yamlFlowMappingKey /\%#=1'.s:ns_plain_in.'\%(\s\+'.s:ns_plain_in.'\)*\ze\s*:/ contained '. 14124ea3babSBram Moolenaar \'nextgroup=yamlKeyValueDelimiter' 14224ea3babSBram Moolenaarsyn match yamlFlowMappingMerge /<<\ze\s*:/ contained nextgroup=yamlKeyValueDelimiter 14324ea3babSBram Moolenaar 14424ea3babSBram Moolenaarsyn match yamlBlockCollectionItemStart '^\s*\zs-\%(\s\+-\)*\s' nextgroup=yamlBlockMappingKey,yamlBlockMappingMerge 1457cba6c06SBram Moolenaar" Use the old regexp engine, the NFA engine doesn't like all the \@ items. 1465a5f4591SBram Moolenaarexecute 'syn match yamlBlockMappingKey /\%#=1^\s*\zs'.s:ns_plain_out.'\%(\s\+'.s:ns_plain_out.'\)*\ze\s*:\%(\s\|$\)/ '. 14724ea3babSBram Moolenaar \'nextgroup=yamlKeyValueDelimiter' 1485a5f4591SBram Moolenaarexecute 'syn match yamlBlockMappingKey /\%#=1\s*\zs'.s:ns_plain_out.'\%(\s\+'.s:ns_plain_out.'\)*\ze\s*:\%(\s\|$\)/ contained '. 14924ea3babSBram Moolenaar \'nextgroup=yamlKeyValueDelimiter' 15024ea3babSBram Moolenaarsyn match yamlBlockMappingMerge /^\s*\zs<<\ze:\%(\s\|$\)/ nextgroup=yamlKeyValueDelimiter 15124ea3babSBram Moolenaarsyn match yamlBlockMappingMerge /<<\ze\s*:\%(\s\|$\)/ nextgroup=yamlKeyValueDelimiter contained 15224ea3babSBram Moolenaar 15324ea3babSBram Moolenaarsyn match yamlKeyValueDelimiter /\s*:/ contained 15424ea3babSBram Moolenaar 1555a5f4591SBram Moolenaarsyn cluster yamlScalarWithSpecials contains=yamlPlainScalar,yamlBlockMappingKey,yamlFlowMappingKey 156071d4279SBram Moolenaar 1575a5f4591SBram Moolenaarlet s:_bounder = s:SimplifyToAssumeAllPrintable('\%([[\]{}, \t]\@!\p\)') 1585a5f4591SBram Moolenaarif b:yaml_schema is# 'json' 1595a5f4591SBram Moolenaar syn keyword yamlNull null contained containedin=@yamlScalarWithSpecials 1605a5f4591SBram Moolenaar syn keyword yamlBool true false 1615a5f4591SBram Moolenaar exe 'syn match yamlInteger /'.s:_bounder.'\@1<!\%(0\|-\=[1-9][0-9]*\)'.s:_bounder.'\@!/ contained containedin=@yamlScalarWithSpecials' 1625a5f4591SBram Moolenaar exe 'syn match yamlFloat /'.s:_bounder.'\@1<!\%(-\=[1-9][0-9]*\%(\.[0-9]*\)\=\(e[-+]\=[0-9]\+\)\=\|0\|-\=\.inf\|\.nan\)'.s:_bounder.'\@!/ contained containedin=@yamlScalarWithSpecials' 1635a5f4591SBram Moolenaarelseif b:yaml_schema is# 'core' 1645a5f4591SBram Moolenaar syn keyword yamlNull null Null NULL contained containedin=@yamlScalarWithSpecials 1655a5f4591SBram Moolenaar syn keyword yamlBool true True TRUE false False FALSE contained containedin=@yamlScalarWithSpecials 1665a5f4591SBram Moolenaar exe 'syn match yamlNull /'.s:_bounder.'\@1<!\~'.s:_bounder.'\@!/ contained containedin=@yamlScalarWithSpecials' 1675a5f4591SBram Moolenaar 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' 1685a5f4591SBram Moolenaar 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' 1695a5f4591SBram Moolenaarelseif b:yaml_schema is# 'pyyaml' 1705a5f4591SBram Moolenaar syn keyword yamlNull null Null NULL contained containedin=@yamlScalarWithSpecials 1715a5f4591SBram Moolenaar syn keyword yamlBool true True TRUE false False FALSE yes Yes YES no No NO on On ON off Off OFF contained containedin=@yamlScalarWithSpecials 1725a5f4591SBram Moolenaar exe 'syn match yamlNull /'.s:_bounder.'\@1<!\~'.s:_bounder.'\@!/ contained containedin=@yamlScalarWithSpecials' 1735a5f4591SBram Moolenaar 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' 1745a5f4591SBram Moolenaar 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' 1755a5f4591SBram Moolenaar 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' 1765a5f4591SBram Moolenaarelseif b:yaml_schema is# 'failsafe' 1775a5f4591SBram Moolenaar " Nothing 1785a5f4591SBram Moolenaarendif 1795a5f4591SBram Moolenaarunlet s:_bounder 180071d4279SBram Moolenaar 181071d4279SBram Moolenaar 18224ea3babSBram Moolenaarexecute 'syn match yamlNodeTag '.string(s:c_ns_tag_property) 18324ea3babSBram Moolenaarexecute 'syn match yamlAnchor '.string(s:c_ns_anchor_property) 18424ea3babSBram Moolenaarexecute 'syn match yamlAlias '.string(s:c_ns_alias_node) 18524ea3babSBram Moolenaar 18624ea3babSBram Moolenaarsyn match yamlDocumentStart '^---\ze\%(\s\|$\)' 18724ea3babSBram Moolenaarsyn match yamlDocumentEnd '^\.\.\.\ze\%(\s\|$\)' 188071d4279SBram Moolenaar 18942eeac35SBram Moolenaarhi def link yamlTodo Todo 19042eeac35SBram Moolenaarhi def link yamlComment Comment 19124ea3babSBram Moolenaar 19224ea3babSBram Moolenaarhi def link yamlDocumentStart PreProc 19342eeac35SBram Moolenaarhi def link yamlDocumentEnd PreProc 19424ea3babSBram Moolenaar 19524ea3babSBram Moolenaarhi def link yamlDirectiveName Keyword 19624ea3babSBram Moolenaar 19724ea3babSBram Moolenaarhi def link yamlTAGDirective yamlDirectiveName 19824ea3babSBram Moolenaarhi def link yamlTagHandle String 19924ea3babSBram Moolenaarhi def link yamlTagPrefix String 20024ea3babSBram Moolenaar 20124ea3babSBram Moolenaarhi def link yamlYAMLDirective yamlDirectiveName 20224ea3babSBram Moolenaarhi def link yamlReservedDirective Error 20324ea3babSBram Moolenaarhi def link yamlYAMLVersion Number 20424ea3babSBram Moolenaar 20542eeac35SBram Moolenaarhi def link yamlString String 20624ea3babSBram Moolenaarhi def link yamlFlowString yamlString 20724ea3babSBram Moolenaarhi def link yamlFlowStringDelimiter yamlString 20842eeac35SBram Moolenaarhi def link yamlEscape SpecialChar 20942eeac35SBram Moolenaarhi def link yamlSingleEscape SpecialChar 21024ea3babSBram Moolenaar 21124ea3babSBram Moolenaarhi def link yamlBlockCollectionItemStart Label 21224ea3babSBram Moolenaarhi def link yamlBlockMappingKey Identifier 21324ea3babSBram Moolenaarhi def link yamlBlockMappingMerge Special 21424ea3babSBram Moolenaar 21524ea3babSBram Moolenaarhi def link yamlFlowMappingKey Identifier 21624ea3babSBram Moolenaarhi def link yamlFlowMappingMerge Special 21724ea3babSBram Moolenaar 21824ea3babSBram Moolenaarhi def link yamlMappingKeyStart Special 21924ea3babSBram Moolenaarhi def link yamlFlowIndicator Special 22024ea3babSBram Moolenaarhi def link yamlKeyValueDelimiter Special 22124ea3babSBram Moolenaar 22242eeac35SBram Moolenaarhi def link yamlConstant Constant 22324ea3babSBram Moolenaar 2245a5f4591SBram Moolenaarhi def link yamlNull yamlConstant 2255a5f4591SBram Moolenaarhi def link yamlBool yamlConstant 2265a5f4591SBram Moolenaar 22724ea3babSBram Moolenaarhi def link yamlAnchor Type 22824ea3babSBram Moolenaarhi def link yamlAlias Type 22924ea3babSBram Moolenaarhi def link yamlNodeTag Type 23024ea3babSBram Moolenaar 23124ea3babSBram Moolenaarhi def link yamlInteger Number 23224ea3babSBram Moolenaarhi def link yamlFloat Float 23342eeac35SBram Moolenaarhi def link yamlTimestamp Number 234071d4279SBram Moolenaar 235071d4279SBram Moolenaarlet b:current_syntax = "yaml" 236071d4279SBram Moolenaar 2375a5f4591SBram Moolenaarunlet 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 2385a5f4591SBram Moolenaarunlet s:_collection s:_neg_collection 2395a5f4591SBram Moolenaardelfunction s:SimplifyAdjacentCollections 2405a5f4591SBram Moolenaardelfunction s:SimplifyToAssumeAllPrintable 24124ea3babSBram Moolenaar 24242eeac35SBram Moolenaarlet &cpo = s:cpo_save 24342eeac35SBram Moolenaarunlet s:cpo_save 244