blob: 56e578b303e4e907c5484cc167ac76c179f469b7 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
2" Language: YAML (YAML Ain't Markup Language)
3" Maintainer: Nikolai Weibull <source@pcppopper.org>
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: