codekingpro/portable-devtools
114k
1" Vim syntax file2" Language: YAML (YAML Ain't Markup Language) 1.23" Maintainer: Nikolai Pavlov <zyx.vim@gmail.com>4" First author: Nikolai Weibull <now@bitwi.se>5" Latest Revision: 2024-04-016 7if exists('b:current_syntax')8 finish9endif10 11let s:cpo_save = &cpo12set cpo&vim13 14" Choose the schema to use15" TODO: Validate schema16if !exists('b:yaml_schema')17 if exists('g:yaml_schema')18 let b:yaml_schema = g:yaml_schema19 else20 let b:yaml_schema = 'core'21 endif22endif23 24let s:ns_char = '\%([\n\r\uFEFF \t]\@!\p\)'25let s:ns_word_char = '[[:alnum:]_\-]'26let s:ns_uri_char = '\%(%\x\x\|'.s:ns_word_char.'\|[#/;?:@&=+$,.!~*''()[\]]\)'27let s:ns_tag_char = '\%(%\x\x\|'.s:ns_word_char.'\|[#/;?:@&=+$.~*''()]\)'28let s:c_indicator = '[\-?:,[\]{}#&*!|>''"%@`]'29let s:c_flow_indicator = '[,[\]{}]'30 31let s:ns_anchor_char = substitute(s:ns_char, '\v\C[\zs', '\=s:c_flow_indicator[1:-2]', '')32let s:ns_char_without_c_indicator = substitute(s:ns_char, '\v\C[\zs', '\=s:c_indicator[1:-2]', '')33 34let s:_collection = '[^\@!\(\%(\\\.\|\[^\\\]]\)\+\)]'35let s:_neg_collection = '[^\(\%(\\\.\|\[^\\\]]\)\+\)]'36function s:SimplifyToAssumeAllPrintable(p)37 return substitute(a:p, '\V\C\\%('.s:_collection.'\\@!\\p\\)', '[^\1]', '')38endfunction39let s:ns_char = s:SimplifyToAssumeAllPrintable(s:ns_char)40let s:ns_anchor_char = s:SimplifyToAssumeAllPrintable(s:ns_anchor_char)41let s:ns_char_without_c_indicator = s:SimplifyToAssumeAllPrintable(s:ns_char_without_c_indicator)42 43function s:SimplifyAdjacentCollections(p)44 return substitute(a:p, '\V\C'.s:_collection.'\\|'.s:_collection, '[\1\2]', 'g')45endfunction46let s:ns_uri_char = s:SimplifyAdjacentCollections(s:ns_uri_char)47let s:ns_tag_char = s:SimplifyAdjacentCollections(s:ns_tag_char)48 49let s:c_verbatim_tag = '!<'.s:ns_uri_char.'\+>'50let s:c_named_tag_handle = '!'.s:ns_word_char.'\+!'51let s:c_secondary_tag_handle = '!!'52let s:c_primary_tag_handle = '!'53let s:c_tag_handle = '\%('.s:c_named_tag_handle.54 \ '\|'.s:c_secondary_tag_handle.55 \ '\|'.s:c_primary_tag_handle.'\)'56let s:c_ns_shorthand_tag = s:c_tag_handle . s:ns_tag_char.'\+'57let s:c_non_specific_tag = '!'58let s:c_ns_tag_property = s:c_verbatim_tag.59 \ '\|'.s:c_ns_shorthand_tag.60 \ '\|'.s:c_non_specific_tag61 62let s:c_ns_anchor_name = s:ns_anchor_char.'\+'63let s:c_ns_anchor_property = '&'.s:c_ns_anchor_name64let s:c_ns_alias_node = '\*'.s:c_ns_anchor_name65let s:c_ns_properties = '\%(\%('.s:c_ns_tag_property.'\|'.s:c_ns_anchor_property.'\)\s\+\)\+'66 67let s:ns_directive_name = s:ns_char.'\+'68 69let s:ns_local_tag_prefix = '!'.s:ns_uri_char.'*'70let s:ns_global_tag_prefix = s:ns_tag_char.s:ns_uri_char.'*'71let s:ns_tag_prefix = s:ns_local_tag_prefix.72 \ '\|'.s:ns_global_tag_prefix73 74let s:ns_plain_safe_out = s:ns_char75let s:ns_plain_safe_in = '\%('.s:c_flow_indicator.'\@!'.s:ns_char.'\)'76 77let s:ns_plain_safe_in = substitute(s:ns_plain_safe_in, '\V\C\\%('.s:_collection.'\\@!'.s:_neg_collection.'\\)', '[^\1\2]', '')78let s:ns_plain_safe_in_without_colhash = substitute(s:ns_plain_safe_in, '\V\C'.s:_neg_collection, '[^\1:#]', '')79let s:ns_plain_safe_out_without_colhash = substitute(s:ns_plain_safe_out, '\V\C'.s:_neg_collection, '[^\1:#]', '')80 81let s:ns_plain_first_in = '\%('.s:ns_char_without_c_indicator.'\|[?:\-]\%('.s:ns_plain_safe_in.'\)\@=\)'82let s:ns_plain_first_out = '\%('.s:ns_char_without_c_indicator.'\|[?:\-]\%('.s:ns_plain_safe_out.'\)\@=\)'83 84let s:ns_plain_char_in = '\%('.s:ns_char.'#\|:'.s:ns_plain_safe_in.'\|'.s:ns_plain_safe_in_without_colhash.'\)'85let s:ns_plain_char_out = '\%('.s:ns_char.'#\|:'.s:ns_plain_safe_out.'\|'.s:ns_plain_safe_out_without_colhash.'\)'86 87let s:ns_plain_out = s:ns_plain_first_out . s:ns_plain_char_out.'*'88let s:ns_plain_in = s:ns_plain_first_in . s:ns_plain_char_in.'*'89 90 91syn keyword yamlTodo contained TODO FIXME XXX NOTE92 93syn region yamlComment display oneline start='\%\(^\|\s\)#' end='$'94 \ contains=yamlTodo95 96execute 'syn region yamlDirective oneline start='.string('^\ze%'.s:ns_directive_name.'\s\+').' '.97 \ 'end="$" '.98 \ 'contains=yamlTAGDirective,'.99 \ 'yamlYAMLDirective,'.100 \ 'yamlReservedDirective '.101 \ 'keepend'102 103syn match yamlTAGDirective /%TAG\ze\s/ contained nextgroup=yamlTagHandle skipwhite104execute 'syn match yamlTagHandle' string(s:c_tag_handle) 'contained nextgroup=yamlTagPrefix skipwhite'105execute 'syn match yamlTagPrefix' string(s:ns_tag_prefix) 'contained nextgroup=yamlComment skipwhite'106 107syn match yamlYAMLDirective /%YAML\ze\s/ contained nextgroup=yamlYAMLVersion skipwhite108syn match yamlYAMLVersion /\d\+\.\d\+/ contained nextgroup=yamlComment skipwhite109 110execute 'syn match yamlReservedDirective contained nextgroup=yamlComment '.111 \string('%\%(\%(TAG\|YAML\)\s\)\@!'.s:ns_directive_name)112 113syn region yamlFlowString matchgroup=yamlFlowStringDelimiter start='"' skip='\\"' end='"'114 \ contains=yamlEscape contained nextgroup=yamlFlowMappingDelimiter,yamlComment skipwhite115syn region yamlFlowString matchgroup=yamlFlowStringDelimiter start="'" skip="''" end="'"116 \ contains=yamlSingleEscape contained nextgroup=yamlFlowMappingDelimiter,yamlComment skipwhite117syn match yamlEscape contained '\\\%([\\"abefnrtv\^0_ NLP\n]\|x\x\x\|u\x\{4}\|U\x\{8}\)'118syn match yamlSingleEscape contained "''"119 120syn cluster yamlConstant contains=yamlBool,yamlNull121 122syn cluster yamlFlowNode contains=yamlFlowString,yamlFlowMapping,yamlFlowCollection123syn cluster yamlFlowNode add=yamlFlowMappingKey,yamlFlowMappingKeyStart,yamlFlowMappingMerge124syn cluster yamlFlowNode add=@yamlConstant,yamlPlainScalar,yamlFloat,yamlComment125syn cluster yamlFlowNode add=yamlTimestamp,yamlInteger,yamlAlias,yamlFlowNodeProperties126syn region yamlFlowMapping matchgroup=yamlFlowIndicator start='{\@<!{{\@!' end='}' contains=@yamlFlowNode127syn region yamlFlowCollection matchgroup=yamlFlowIndicator start='\[' end='\]' contains=@yamlFlowNode128 129execute 'syn match yamlPlainScalar /'.s:ns_plain_out.'/'130execute 'syn match yamlPlainScalar contained /'.s:ns_plain_in.'/'131 132execute 'syn match yamlFlowMappingKey /'.s:ns_plain_in.'\%(\s\+'.s:ns_plain_in.'\)*\ze\s*:\%(\s\|$\)/ contained '.133 \'nextgroup=yamlFlowMappingDelimiter skipwhite'134syn match yamlFlowMappingKeyStart /?/ contained nextgroup=@yamlFlowNode skipwhite135syn match yamlFlowMappingMerge /<<\ze\s*:/ contained nextgroup=yamlFlowMappingDelimiter skipwhite136syn match yamlFlowMappingDelimiter /:/ contained nextgroup=@yamlFlowNode skipwhite137execute 'syn match yamlFlowNodeProperties' string(s:c_ns_properties)138 \ 'contained contains=yamlNodeTag,yamlAnchor nextgroup=@yamlFlowNode skipwhite'139 140execute 'syn match yamlBlockMappingKey /^\s*\zs'.s:ns_plain_out.'\%(\s\+'.s:ns_plain_out.'\)*\ze\s*:\%(\s\|$\)/ '.141 \'nextgroup=yamlBlockMappingDelimiter skipwhite'142execute 'syn match yamlBlockMappingKey /'.s:ns_plain_out.'\%(\s\+'.s:ns_plain_out.'\)*\ze\s*:\%(\s\|$\)/ contained '.143 \'nextgroup=yamlBlockMappingDelimiter skipwhite'144syn match yamlBlockMappingKeyString /^\s*\zs\%("\%([^"]\|\\"\)*"\|'\%([^']\|''\)*'\)\ze\s*:\%(\s\|$\)/145 \ contains=yamlFlowString nextgroup=yamlBlockMappingDelimiter skipwhite146syn match yamlBlockMappingKeyString /\%("\%([^"]\|\\"\)*"\|'\%([^']\|''\)*'\)\ze\s*:\%(\s\|$\)/ contained147 \ contains=yamlFlowString nextgroup=yamlBlockMappingDelimiter skipwhite148syn match yamlBlockMappingMerge /^\s*\zs<<\ze\s*:\%(\s\|$\)/ nextgroup=yamlBlockMappingDelimiter skipwhite149syn match yamlBlockMappingMerge /<<\ze\s*:\%(\s\|$\)/ contained nextgroup=yamlBlockMappingDelimiter skipwhite150 151syn match yamlBlockMappingDelimiter /^\s*\zs:\ze\%(\s\|$\)/ nextgroup=@yamlBlockNode skipwhite152syn match yamlBlockMappingDelimiter /:\ze\%(\s\|$\)/ contained nextgroup=@yamlBlockNode skipwhite153syn match yamlBlockMappingKeyStart /^\s*\zs?\ze\%(\s\|$\)/ nextgroup=@yamlBlockNode skipwhite154syn match yamlBlockMappingKeyStart /?\ze\%(\s\|$\)/ contained nextgroup=@yamlBlockNode skipwhite155 156syn match yamlBlockCollectionItemStart /^\s*\zs-\ze\%(\s\|$\)/ nextgroup=@yamlBlockNode skipwhite157syn match yamlBlockCollectionItemStart /-\ze\%(\s\|$\)/ contained nextgroup=@yamlBlockNode skipwhite158 159execute 'syn match yamlBlockNodeProperties' string(s:c_ns_properties)160 \ 'contained contains=yamlNodeTag,yamlAnchor nextgroup=@yamlFlowNode,yamlBlockScalarHeader skipwhite'161syn match yamlBlockScalarHeader '[|>]\%([1-9][+-]\|[+-]\?[1-9]\?\)\%(\s\+#.*\)\?$' contained162 \ contains=yamlComment nextgroup=yamlBlockString skipnl163syn region yamlBlockString start=/^\z(\s\+\)/ skip=/^$/ end=/^\%(\z1\)\@!/ contained164 165syn cluster yamlBlockNode contains=@yamlFlowNode,yamlBlockMappingKey,yamlBlockMappingKeyString,166 \yamlBlockMappingMerge,yamlBlockMappingKeyStart,yamlBlockCollectionItemStart,167 \yamlBlockNodeProperties,yamlBlockScalarHeader168 169syn cluster yamlScalarWithSpecials contains=yamlPlainScalar,yamlBlockMappingKey,yamlFlowMappingKey170 171let s:_bounder = s:SimplifyToAssumeAllPrintable('\%([[\]{}, \t]\@!\p\)')172if b:yaml_schema is# 'json'173 syn keyword yamlNull null contained containedin=@yamlScalarWithSpecials174 syn keyword yamlBool true false175 exe 'syn match yamlInteger /'.s:_bounder.'\@1<!\%(0\|-\=[1-9][0-9]*\)'.s:_bounder.'\@!/ contained containedin=@yamlScalarWithSpecials'176 exe 'syn match yamlFloat /'.s:_bounder.'\@1<!\%(-\=[1-9][0-9]*\%(\.[0-9]*\)\=\(e[-+]\=[0-9]\+\)\=\|0\|-\=\.inf\|\.nan\)'.s:_bounder.'\@!/ contained containedin=@yamlScalarWithSpecials'177elseif b:yaml_schema is# 'core'178 syn keyword yamlNull null Null NULL contained containedin=@yamlScalarWithSpecials179 syn keyword yamlBool true True TRUE false False FALSE contained containedin=@yamlScalarWithSpecials180 exe 'syn match yamlNull /'.s:_bounder.'\@1<!\~'.s:_bounder.'\@!/ contained containedin=@yamlScalarWithSpecials'181 exe 'syn match yamlInteger /'.s:_bounder.'\@1<!\%([-+]\=\%(\%(0\%(b[0-1_]\+\|o\?[0-7_]\+\|x[0-9a-fA-F_]\+\)\=\|\%([1-9][0-9_]*\%(:[0-5]\=\d\)\+\)\)\|[1-9][0-9_]*\)\)'.s:_bounder.'\@!/ contained containedin=@yamlScalarWithSpecials'182 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'183elseif b:yaml_schema is# 'pyyaml'184 syn keyword yamlNull null Null NULL contained containedin=@yamlScalarWithSpecials185 syn keyword yamlBool true True TRUE false False FALSE yes Yes YES no No NO on On ON off Off OFF contained containedin=@yamlScalarWithSpecials186 exe 'syn match yamlNull /'.s:_bounder.'\@1<!\~'.s:_bounder.'\@!/ contained containedin=@yamlScalarWithSpecials'187 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'188 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'189 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'190elseif b:yaml_schema is# 'failsafe'191 " Nothing192endif193unlet s:_bounder194 195 196execute 'syn match yamlNodeTag '.string(s:c_ns_tag_property)197execute 'syn match yamlAnchor '.string(s:c_ns_anchor_property)198execute 'syn match yamlAlias '.string(s:c_ns_alias_node)199 200syn match yamlDocumentStart '^---\ze\%(\s\|$\)'201syn match yamlDocumentEnd '^\.\.\.\ze\%(\s\|$\)'202 203hi def link yamlTodo Todo204hi def link yamlComment Comment205 206hi def link yamlDocumentStart PreProc207hi def link yamlDocumentEnd PreProc208 209hi def link yamlDirectiveName Keyword210 211hi def link yamlTAGDirective yamlDirectiveName212hi def link yamlTagHandle String213hi def link yamlTagPrefix String214 215hi def link yamlYAMLDirective yamlDirectiveName216hi def link yamlReservedDirective Error217hi def link yamlYAMLVersion Number218 219hi def link yamlString String220hi def link yamlFlowString yamlString221hi def link yamlFlowStringDelimiter yamlString222hi def link yamlEscape SpecialChar223hi def link yamlSingleEscape SpecialChar224 225hi def link yamlMappingKey Identifier226hi def link yamlMappingKeyStart Special227hi def link yamlMappingMerge Special228hi def link yamlKeyValueDelimiter Special229 230hi def link yamlFlowIndicator Special231hi def link yamlFlowMappingKey yamlMappingKey232hi def link yamlFlowMappingKeyStart yamlMappingKeyStart233hi def link yamlFlowMappingMerge yamlMappingMerge234hi def link yamlFlowMappingDelimiter yamlKeyValueDelimiter235 236hi def link yamlBlockMappingKey yamlMappingKey237hi def link yamlBlockMappingKeyStart yamlMappingKeyStart238hi def link yamlBlockMappingMerge yamlMappingMerge239hi def link yamlBlockMappingDelimiter yamlKeyValueDelimiter240hi def link yamlBlockCollectionItemStart Label241hi def link yamlBlockScalarHeader Special242" We do not link yamlBlockString to yamlString, because yamlPlainScalar is243" not highlighted as string neighter, and also due to historical reasons.244" hi def link yamlBlockString yamlString245 246hi def link yamlConstant Constant247 248hi def link yamlNull yamlConstant249hi def link yamlBool yamlConstant250 251hi def link yamlAnchor Type252hi def link yamlAlias Type253hi def link yamlNodeTag Type254 255hi def link yamlInteger Number256hi def link yamlFloat Float257hi def link yamlTimestamp Number258 259let b:current_syntax = "yaml"260 261unlet s:ns_char s:ns_word_char s:ns_uri_char s:ns_tag_char s:c_indicator s:c_flow_indicator262 \ s:ns_anchor_char s:ns_char_without_c_indicator s:_collection s:_neg_collection263 \ s:c_verbatim_tag s:c_named_tag_handle s:c_secondary_tag_handle s:c_primary_tag_handle264 \ s:c_tag_handle s:c_ns_shorthand_tag s:c_non_specific_tag s:c_ns_tag_property265 \ s:c_ns_anchor_name s:c_ns_anchor_property s:c_ns_alias_node s:c_ns_properties266 \ s:ns_directive_name s:ns_local_tag_prefix s:ns_global_tag_prefix s:ns_tag_prefix267 \ s:ns_plain_safe_out s:ns_plain_safe_in s:ns_plain_safe_in_without_colhash s:ns_plain_safe_out_without_colhash268 \ 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_in269delfunction s:SimplifyAdjacentCollections270delfunction s:SimplifyToAssumeAllPrintable271 272let &cpo = s:cpo_save273unlet s:cpo_save274 275" vim: set et sw=4 sts=4 ts=8:276 