blob: 1ff4fffc745c64fe8d2a222eb4790444cbdf086d [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>
Bram Moolenaar0fcd2372010-08-13 14:58:53 +02004" Latest Revision: 2010-08-12
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 Moolenaare37d50a2008-08-06 17:06:04 +000013syn keyword yamlTodo contained TODO FIXME XXX NOTE
Bram Moolenaar071d4272004-06-13 20:20:40 +000014
Bram Moolenaare37d50a2008-08-06 17:06:04 +000015syn region yamlComment display oneline start='\%(^\|\s\)#' end='$'
16 \ contains=yamlTodo,@Spell
Bram Moolenaar071d4272004-06-13 20:20:40 +000017
Bram Moolenaare37d50a2008-08-06 17:06:04 +000018syn match yamlNodeProperty '!\%(![^\\^% ]\+\|[^!][^:/ ]*\)'
Bram Moolenaar071d4272004-06-13 20:20:40 +000019
Bram Moolenaar0fcd2372010-08-13 14:58:53 +020020syn match yamlAnchor '&.\+'
Bram Moolenaar071d4272004-06-13 20:20:40 +000021
Bram Moolenaare37d50a2008-08-06 17:06:04 +000022syn match yamlAlias '\*.\+'
Bram Moolenaar071d4272004-06-13 20:20:40 +000023
Bram Moolenaare37d50a2008-08-06 17:06:04 +000024syn match yamlDelimiter '[-,:]'
25syn match yamlBlock '[\[\]{}>|]'
26syn match yamlOperator '[?+-]'
27syn match yamlKey '\w\+\(\s\+\w\+\)*\ze\s*:'
Bram Moolenaar42eeac32005-06-29 22:40:58 +000028
Bram Moolenaar0fcd2372010-08-13 14:58:53 +020029syn region yamlString matchgroup=yamlStringDelimiter
30 \ start=+"+ skip=+\\"+ end=+"+
Bram Moolenaare37d50a2008-08-06 17:06:04 +000031 \ contains=yamlEscape
Bram Moolenaar0fcd2372010-08-13 14:58:53 +020032syn region yamlString matchgroup=yamlStringDelimiter
33 \ start=+'+ skip=+''+ end=+'+
Bram Moolenaare37d50a2008-08-06 17:06:04 +000034 \ contains=yamlSingleEscape
35syn match yamlEscape contained display +\\[\\"abefnrtv^0_ NLP]+
36syn match yamlEscape contained display '\\x\x\{2}'
37syn match yamlEscape contained display '\\u\x\{4}'
38syn match yamlEscape contained display '\\U\x\{8}'
Bram Moolenaar071d4272004-06-13 20:20:40 +000039" TODO: how do we get 0x85, 0x2028, and 0x2029 into this?
Bram Moolenaare37d50a2008-08-06 17:06:04 +000040syn match yamlEscape display '\\\%(\r\n\|[\r\n]\)'
Bram Moolenaar0fcd2372010-08-13 14:58:53 +020041syn match yamlSingleEscape contained +''+
Bram Moolenaar071d4272004-06-13 20:20:40 +000042
Bram Moolenaar071d4272004-06-13 20:20:40 +000043" TODO: sexagecimal and fixed (20:30.15 and 1,230.15)
Bram Moolenaare37d50a2008-08-06 17:06:04 +000044syn match yamlNumber display
45 \ '\<[+-]\=\d\+\%(\.\d\+\%([eE][+-]\=\d\+\)\=\)\='
46syn match yamlNumber display '0\o\+'
47syn match yamlNumber display '0x\x\+'
48syn match yamlNumber display '([+-]\=[iI]nf)'
49syn match yamlNumber display '(NaN)'
Bram Moolenaar071d4272004-06-13 20:20:40 +000050
Bram Moolenaare37d50a2008-08-06 17:06:04 +000051syn match yamlConstant '\<[~yn]\>'
52syn keyword yamlConstant true True TRUE false False FALSE
53syn keyword yamlConstant yes Yes on ON no No off OFF
54syn keyword yamlConstant null Null NULL nil Nil NIL
Bram Moolenaar071d4272004-06-13 20:20:40 +000055
Bram Moolenaare37d50a2008-08-06 17:06:04 +000056syn 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 +000057
Bram Moolenaare37d50a2008-08-06 17:06:04 +000058syn region yamlDocumentHeader start='---' end='$' contains=yamlDirective
59syn match yamlDocumentEnd '\.\.\.'
Bram Moolenaar071d4272004-06-13 20:20:40 +000060
Bram Moolenaare37d50a2008-08-06 17:06:04 +000061syn match yamlDirective contained '%[^:]\+:.\+'
Bram Moolenaar071d4272004-06-13 20:20:40 +000062
Bram Moolenaar42eeac32005-06-29 22:40:58 +000063hi def link yamlTodo Todo
64hi def link yamlComment Comment
65hi def link yamlDocumentHeader PreProc
66hi def link yamlDocumentEnd PreProc
67hi def link yamlDirective Keyword
68hi def link yamlNodeProperty Type
69hi def link yamlAnchor Type
70hi def link yamlAlias Type
71hi def link yamlDelimiter Delimiter
72hi def link yamlBlock Operator
73hi def link yamlOperator Operator
74hi def link yamlKey Identifier
75hi def link yamlString String
Bram Moolenaar0fcd2372010-08-13 14:58:53 +020076hi def link yamlStringDelimiter yamlString
Bram Moolenaar42eeac32005-06-29 22:40:58 +000077hi def link yamlEscape SpecialChar
78hi def link yamlSingleEscape SpecialChar
79hi def link yamlNumber Number
80hi def link yamlConstant Constant
81hi def link yamlTimestamp Number
Bram Moolenaar071d4272004-06-13 20:20:40 +000082
83let b:current_syntax = "yaml"
84
Bram Moolenaar42eeac32005-06-29 22:40:58 +000085let &cpo = s:cpo_save
86unlet s:cpo_save