blob: abda3f8b49241604d621ac646bd2d524faf3eafa [file] [log] [blame]
" Vim syntax file
" Language: YAML (YAML Ain't Markup Language)
" Maintainer: Nikolai Weibull <now@bitwi.se>
" Latest Revision: 2007-06-27
if exists("b:current_syntax")
finish
endif
let s:cpo_save = &cpo
set cpo&vim
syn keyword yamlTodo
\ contained
\ TODO
\ FIXME
\ XXX
\ NOTE
syn region yamlComment
\ display
\ oneline
\ start='%(^|s)#'
\ end='$'
\ contains=yamlTodo,@Spell
syn match yamlNodeProperty
\ '!\%(![^\\^% \t]\+\|[^!][^:/ \t]*\)'
syn match yamlAnchor
\ '&.+'
syn match yamlAlias
\ '*.+'
syn match yamlDelimiter
\ '[-,:]'
syn match yamlBlock
\ '[[]{}>|]'
syn match yamlOperator
\ '[?+-]'
syn match yamlKey
\ 'w+(s+w+)*zes*:'
syn region yamlString
\ start=+"+
\ skip=+\"+
\ end=+"+
\ contains=yamlEscape
syn region yamlString
\ start=+'+
\ skip=+''+
\ end=+'+
\ contains=yamlSingleEscape
syn match yamlEscape
\ contained
\ display
\ +\[\"abefnrtv^0_ NLP]+
syn match yamlEscape
\ contained
\ display
\ '\xx{2}'
syn match yamlEscape
\ contained
\ display
\ '\ux{4}'
syn match yamlEscape
\ contained
\ display
\ '\Ux{8}'
" TODO: how do we get 0x85, 0x2028, and 0x2029 into this?
" XXX: Em, what is going on here? This can't be right. Leave out until we
" figure out what this is meant to do.
"syn match yamlEscape
" \ contained
" \ display
" \ '\%(rn|[rn])'
syn match yamlSingleEscape
\ contained
\ display
\ +''+
" TODO: sexagecimal and fixed (20:30.15 and 1,230.15)
syn match yamlNumber
\ display
\ '\<[+-]\=\d\+\%(\.\d\+\%([eE][+-]\=\d\+\)\=\)\='
syn match yamlNumber
\ display
\ '0o+'
syn match yamlNumber
\ display
\ '0xx+'
syn match yamlNumber
\ display
\ '([+-]=[iI]nf)'
syn match yamlNumber
\ display
\ '(NaN)'
syn match yamlConstant
\ '<[~yn]>'
syn keyword yamlConstant
\ true
\ True
\ TRUE
\ false
\ False
\ FALSE
syn keyword yamlConstant
\ yes
\ Yes
\ on
\ ON
\ no
\ No
\ off
\ OFF
syn keyword yamlConstant
\ null
\ Null
\ NULL
\ nil
\ Nil
\ NIL
syn 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\)\='
syn region yamlDocumentHeader
\ start='---'
\ end='$'
\ contains=yamlDirective
syn match yamlDocumentEnd
\ '\.\.\.'
syn match yamlDirective
\ contained
\ '%[^:]+:.+'
syn match yamlIndentation
\ '^s*'
\ contains=yamlIndentationError
syn match yamlIndentationError
\ 't'
hi def link yamlTodo Todo
hi def link yamlComment Comment
hi def link yamlDocumentHeader PreProc
hi def link yamlDocumentEnd PreProc
hi def link yamlDirective Keyword
hi def link yamlNodeProperty Type
hi def link yamlAnchor Type
hi def link yamlAlias Type
hi def link yamlDelimiter Delimiter
hi def link yamlBlock Operator
hi def link yamlOperator Operator
hi def link yamlKey Identifier
hi def link yamlString String
hi def link yamlEscape SpecialChar
hi def link yamlSingleEscape SpecialChar
hi def link yamlNumber Number
hi def link yamlConstant Constant
hi def link yamlTimestamp Number
hi def link yamlIndentationError Error
let b:current_syntax = "yaml"
let &cpo = s:cpo_save
unlet s:cpo_save