vim-polyglot/syntax/json5.vim

72 lines
2.3 KiB
VimL
Raw Normal View History

if exists('g:polyglot_disabled') && index(g:polyglot_disabled, 'json5') != -1
finish
endif
2019-04-23 05:32:40 -04:00
" Modified from the original taken from https://github.com/gutenye/json5.vim
" Syntax setup
2017-12-30 05:34:40 -05:00
if exists('b:current_syntax') && b:current_syntax == 'json5'
finish
endif
2019-04-23 05:32:40 -04:00
" Numbers
syn match json5Number "[-+]\=\%(0\|[1-9]\d*\)\%(\.\d*\)\=\%([eE][-+]\=\d\+\)\="
syn match json5Number "[-+]\=\%(\.\d\+\)\%([eE][-+]\=\d\+\)\="
syn match json5Number "[-+]\=0[xX]\x*"
syn match json5Number "[-+]\=Infinity\|NaN"
2017-12-30 05:34:40 -05:00
2019-04-23 05:32:40 -04:00
" An integer part of 0 followed by other digits is not allowed
syn match json5NumError "[-+]\=0\d\(\d\|\.\)*"
" A hexadecimal number cannot have a fractional part
syn match json5NumError "[-+]\=0x\x*\.\x*"
2017-12-30 05:34:40 -05:00
2019-04-23 05:32:40 -04:00
" Strings
syn region json5String start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=json5Escape,@Spell
syn region json5String start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=json5Escape,@Spell
2017-12-30 05:34:40 -05:00
2019-04-23 05:32:40 -04:00
" Escape sequences
syn match json5Escape "\\['\"\\bfnrtv]" contained
syn match json5Escape "\\u\x\{4}" contained
2017-12-30 05:34:40 -05:00
2019-04-23 05:32:40 -04:00
" Boolean
2017-12-30 05:34:40 -05:00
syn keyword json5Boolean true false
2019-04-23 05:32:40 -04:00
" Null
2017-12-30 05:34:40 -05:00
syn keyword json5Null null
2019-04-23 05:32:40 -04:00
" Delimiters and Operators
syn match json5Delimiter ","
syn match json5Operator ":"
" Braces
2017-12-30 05:34:40 -05:00
syn match json5Braces "[{}\[\]]"
2019-04-23 05:32:40 -04:00
" Keys
syn match json5Key /@\?\%(\I\|\$\)\%(\i\|\$\)*\s*\ze::\@!/ contains=@Spell
syn match json5Key /"\([^"]\|\\"\)\{-}"\ze\s*:/ contains=json5Escape,@Spell
" Comment
syn region json5LineComment start=+\/\/+ end=+$+ keepend contains=@Spell
syn region json5LineComment start=+^\s*\/\/+ skip=+\n\s*\/\/+ end=+$+ keepend fold contains=@Spell
syn region json5Comment start="/\*" end="\*/" fold contains=@Spell
2017-12-30 05:34:40 -05:00
2019-04-23 05:32:40 -04:00
" Define the default highlighting
2017-12-30 05:34:40 -05:00
hi def link json5String String
2019-04-23 05:32:40 -04:00
hi def link json5Key Identifier
2017-12-30 05:34:40 -05:00
hi def link json5Escape Special
hi def link json5Number Number
2019-04-23 05:32:40 -04:00
hi def link json5Delimiter Delimiter
hi def link json5Operator Operator
hi def link json5Braces Delimiter
hi def link json5Null Keyword
2017-12-30 05:34:40 -05:00
hi def link json5Boolean Boolean
hi def link json5LineComment Comment
hi def link json5Comment Comment
hi def link json5NumError Error
if !exists('b:current_syntax')
let b:current_syntax = 'json5'
endif