blob: 9ebab70689ba2452341785c39f5b18de237b7457 [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
Bram Moolenaar42eeac32005-06-29 22:40:58 +00002" Language: YAML (YAML Ain't Markup Language)
Bram Moolenaar57657d82006-04-21 22:12:41 +00003" Maintainer: Nikolai Weibull <now@bitwi.se>
4" Latest Revision: 2006-04-19
Bram Moolenaar071d4272004-06-13 20:20:40 +00005
Bram Moolenaar42eeac32005-06-29 22:40:58 +00006if exists("b:current_syntax")
Bram Moolenaar071d4272004-06-13 20:20:40 +00007 finish
8endif
9
Bram Moolenaar42eeac32005-06-29 22:40:58 +000010let s:cpo_save = &cpo
11set cpo&vim
Bram Moolenaar071d4272004-06-13 20:20:40 +000012
Bram Moolenaar42eeac32005-06-29 22:40:58 +000013syn keyword yamlTodo contained TODO FIXME XXX NOTE
Bram Moolenaar071d4272004-06-13 20:20:40 +000014
Bram Moolenaar0dc065e2005-07-04 22:49:24 +000015syn region yamlComment display oneline start='\%(^\|\s\)#' end='$'
16 \ contains=yamlTodo,@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +000017
Bram Moolenaar42eeac32005-06-29 22:40:58 +000018syn match yamlNodeProperty '!\%(![^\\^% ]\+\|[^!][^:/ ]*\)'
Bram Moolenaar071d4272004-06-13 20:20:40 +000019
Bram Moolenaar42eeac32005-06-29 22:40:58 +000020syn match yamlAnchor '&.\+'
Bram Moolenaar071d4272004-06-13 20:20:40 +000021
Bram Moolenaar42eeac32005-06-29 22:40:58 +000022syn match yamlAlias '\*.\+'
Bram Moolenaar071d4272004-06-13 20:20:40 +000023
Bram Moolenaar42eeac32005-06-29 22:40:58 +000024syn match yamlDelimiter '[-,:]'
25syn match yamlBlock '[\[\]{}>|]'
26syn match yamlOperator '[?+-]'
27syn match yamlKey '\w\+\(\s\+\w\+\)*\ze\s*:'
28
29syn region yamlString start=+"+ skip=+\\"+ end=+"+
30 \ contains=yamlEscape
31syn region yamlString start=+'+ skip=+''+ end=+'+
32 \ contains=yamlSingleEscape
33syn match yamlEscape contained display +\\[\\"abefnrtv^0_ NLP]+
34syn match yamlEscape contained display '\\x\x\{2}'
35syn match yamlEscape contained display '\\u\x\{4}'
36syn match yamlEscape contained display '\\U\x\{8}'
Bram Moolenaar071d4272004-06-13 20:20:40 +000037" TODO: how do we get 0x85, 0x2028, and 0x2029 into this?
Bram Moolenaar42eeac32005-06-29 22:40:58 +000038syn match yamlEscape display '\\\%(\r\n\|[\r\n]\)'
39syn match yamlSingleEscape contained display +''+
Bram Moolenaar071d4272004-06-13 20:20:40 +000040
Bram Moolenaar071d4272004-06-13 20:20:40 +000041" TODO: sexagecimal and fixed (20:30.15 and 1,230.15)
Bram Moolenaar42eeac32005-06-29 22:40:58 +000042syn match yamlNumber display
43 \ '\<[+-]\=\d\+\%(\.\d\+\%([eE][+-]\=\d\+\)\=\)\='
44syn match yamlNumber display '0\o\+'
45syn match yamlNumber display '0x\x\+'
46syn match yamlNumber display '([+-]\=[iI]nf)'
47syn match yamlNumber display '(NaN)'
Bram Moolenaar071d4272004-06-13 20:20:40 +000048
Bram Moolenaar42eeac32005-06-29 22:40:58 +000049syn match yamlConstant '\<[~yn]\>'
50syn keyword yamlConstant true True TRUE false False FALSE
51syn keyword yamlConstant yes Yes on ON no No off OFF
52syn keyword yamlConstant null Null NULL nil Nil NIL
Bram Moolenaar071d4272004-06-13 20:20:40 +000053
Bram Moolenaar42eeac32005-06-29 22:40:58 +000054syn 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\)\='
Bram Moolenaar071d4272004-06-13 20:20:40 +000055
Bram Moolenaar42eeac32005-06-29 22:40:58 +000056syn region yamlDocumentHeader start='---' end='$' contains=yamlDirective
57syn match yamlDocumentEnd '\.\.\.'
Bram Moolenaar071d4272004-06-13 20:20:40 +000058
Bram Moolenaar42eeac32005-06-29 22:40:58 +000059syn match yamlDirective contained '%[^:]\+:.\+'
Bram Moolenaar071d4272004-06-13 20:20:40 +000060
Bram Moolenaar42eeac32005-06-29 22:40:58 +000061hi def link yamlTodo Todo
62hi def link yamlComment Comment
63hi def link yamlDocumentHeader PreProc
64hi def link yamlDocumentEnd PreProc
65hi def link yamlDirective Keyword
66hi def link yamlNodeProperty Type
67hi def link yamlAnchor Type
68hi def link yamlAlias Type
69hi def link yamlDelimiter Delimiter
70hi def link yamlBlock Operator
71hi def link yamlOperator Operator
72hi def link yamlKey Identifier
73hi def link yamlString String
74hi def link yamlEscape SpecialChar
75hi def link yamlSingleEscape SpecialChar
76hi def link yamlNumber Number
77hi def link yamlConstant Constant
78hi def link yamlTimestamp Number
Bram Moolenaar071d4272004-06-13 20:20:40 +000079
80let b:current_syntax = "yaml"
81
Bram Moolenaar42eeac32005-06-29 22:40:58 +000082let &cpo = s:cpo_save
83unlet s:cpo_save