xref: /vim-8.2.3635/runtime/syntax/yaml.vim (revision 19a09a18)
1" Vim syntax file
2" Language:	    YAML (YAML Ain't Markup Language)
3" Maintainer:	    Nikolai Weibull <[email protected]>
4" URL:		    http://www.pcppopper.org/vim/syntax/pcp/yaml/
5" Latest Revision:  2004-05-22
6" arch-tag:	    01bf8ef1-335f-4692-a228-4846cb64cd16
7
8if version < 600
9  syntax clear
10elseif exists("b:current_syntax")
11  finish
12endif
13
14" Todo
15syn keyword yamlTodo	contained TODO FIXME XXX NOTE
16
17" Comments (4.2.2)
18syn region  yamlComment	matchgroup=yamlComment start='\%(^\|\s\)#' end='$' contains=yamlTodo
19
20" Node Properties (4.3.4)
21syn match   yamlNodeProperty	'!\%(![^\\^%	 ]\+\|[^!][^:/	 ]*\)'
22
23" Anchors (4.3.6)
24syn match   yamlAnchor	'&.\+'
25
26" Aliases (4.3.7)
27syn match   yamlAlias	'\*.\+'
28
29" Operators, Blocks, Keys, and Delimiters
30syn match   yamlDelimiter   '[-,:]'
31syn match   yamlBlock	    '[\[\]{}>|]'
32syn match   yamlOperator    '[?+-]'
33syn match   yamlKey	    '\w\+\(\s\+\w\+\)*\ze\s*:'
34
35" Strings (4.6.8, 4.6.9)
36syn region  yamlString	start=+"+ skip=+\\"+ end=+"+ contains=yamlEscape
37syn region  yamlString	start=+'+ skip=+''+ end=+'+ contains=yamlSingleEscape
38syn match   yamlEscape	contained +\\[\\"abefnrtv^0_ NLP]+
39syn match   yamlEscape	contained '\\x\x\{2}'
40syn match   yamlEscape	contained '\\u\x\{4}'
41syn match   yamlEscape	contained '\\U\x\{8}'
42" TODO: how do we get 0x85, 0x2028, and 0x2029 into this?
43syn match   yamlEscape	'\\\%(\r\n\|[\r\n]\)'
44syn match   yamlSingleEscape contained +''+
45
46" Numbers
47" TODO: sexagecimal and fixed (20:30.15 and 1,230.15)
48syn match   yamlNumber	'\<[+-]\=\d\+\%(\.\d\+\%([eE][+-]\=\d\+\)\=\)\='
49syn match   yamlNumber	'0\o\+'
50syn match   yamlNumber	'0x\x\+'
51syn match   yamlNumber	'([+-]\=[iI]nf)'
52syn match   yamlNumber	'(NaN)'
53
54" Constants
55syn match   yamlConstant    '\<[~yn]\>'
56syn keyword yamlConstant    true True TRUE false False FALSE
57syn keyword yamlConstant    yes Yes on ON no No off OFF
58syn keyword yamlConstant    null Null NULL nil Nil NIL
59
60" Timestamps
61syn match   yamlTimestamp   '\d\d\d\d-\%(1[0-2]\|\d\)-\%(3[0-2]\|2\d\|1\d\|\d\)\%( \%([01]\d\|2[0-3]\):[0-5]\d:[0-5]\d.\d\d [+-]\%([01]\d\|2[0-3]\):[0-5]\d\|t\%([01]\d\|2[0-3]\):[0-5]\d:[0-5]\d.\d\d[+-]\%([01]\d\|2[0-3]\):[0-5]\d\|T\%([01]\d\|2[0-3]\):[0-5]\d:[0-5]\d.\dZ\)\='
62
63" Documents (4.3.1)
64syn region  yamlDocumentHeader	start='---' end='$' contains=yamlDirective
65syn match   yamlDocumentEnd	'\.\.\.'
66
67" Directives (4.3.2)
68syn match   yamlDirective   contained '%[^:]\+:.\+'
69
70" Define the default highlighting.
71" For version 5.7 and earlier: only when not done already
72" For version 5.8 and later: only when an item doesn't have highlighting yet
73if version >= 508 || !exists("did_yaml_syn_inits")
74  if version < 508
75    let did_yaml_syn_inits = 1
76    command -nargs=+ HiLink hi link <args>
77  else
78    command -nargs=+ HiLink hi def link <args>
79  endif
80
81  HiLink yamlTodo	    Todo
82  HiLink yamlComment	    Comment
83  HiLink yamlDocumentHeader PreProc
84  HiLink yamlDocumentEnd    PreProc
85  HiLink yamlDirective	    Keyword
86  HiLink yamlNodeProperty   Type
87  HiLink yamlAnchor	    Type
88  HiLink yamlAlias	    Type
89  HiLink yamlDelimiter	    Delimiter
90  HiLink yamlBlock	    Operator
91  HiLink yamlOperator	    Operator
92  HiLink yamlKey	    Identifier
93  HiLink yamlString	    String
94  HiLink yamlEscape	    SpecialChar
95  HiLink yamlSingleEscape   SpecialChar
96  HiLink yamlNumber	    Number
97  HiLink yamlConstant	    Constant
98  HiLink yamlTimestamp	    Number
99
100  delcommand HiLink
101endif
102
103let b:current_syntax = "yaml"
104
105" vim: set sts=2 sw=2:
106