diff --git a/README.md b/README.md index be6ce2b..e215e22 100644 --- a/README.md +++ b/README.md @@ -79,6 +79,7 @@ If you need full functionality of any plugin, please use it directly with your p - [jasmine](https://github.com/glanotte/vim-jasmine) (syntax) - [javascript](https://github.com/pangloss/vim-javascript) (syntax, indent, compiler, ftplugin, extras) - [jenkins](https://github.com/martinda/Jenkinsfile-vim-syntax) (syntax, indent) +- [json5](https://github.com/GutenYe/json5.vim) (syntax) - [json](https://github.com/elzr/vim-json) (syntax, indent, ftplugin) - [jst](https://github.com/briancollins/vim-jst) (syntax, indent) - [jsx](https://github.com/mxw/vim-jsx) (after) diff --git a/build b/build index b7c449c..cd00ddc 100755 --- a/build +++ b/build @@ -152,6 +152,7 @@ PACKS=" javascript:pangloss/vim-javascript:_JAVASCRIPT jenkins:martinda/Jenkinsfile-vim-syntax json:elzr/vim-json + json5:GutenYe/json5.vim jst:briancollins/vim-jst jsx:mxw/vim-jsx:_ALL julia:JuliaEditorSupport/julia-vim diff --git a/ftdetect/polyglot.vim b/ftdetect/polyglot.vim index ed5f39c..4ae4ec4 100644 --- a/ftdetect/polyglot.vim +++ b/ftdetect/polyglot.vim @@ -447,6 +447,11 @@ autocmd BufNewFile,BufRead *.geojson setlocal filetype=json autocmd BufNewFile,BufRead *.template setlocal filetype=json augroup END +augroup filetypedetect +" json5:GutenYe/json5.vim +au BufNewFile,BufRead *.json5 setfiletype json5 +augroup END + augroup filetypedetect " jst:briancollins/vim-jst au BufNewFile,BufRead *.ejs set filetype=jst diff --git a/syntax/json5.vim b/syntax/json5.vim new file mode 100644 index 0000000..15943f7 --- /dev/null +++ b/syntax/json5.vim @@ -0,0 +1,56 @@ +if !exists('g:polyglot_disabled') || index(g:polyglot_disabled, 'json5') == -1 + +" Syntax setup {{{1 +if exists('b:current_syntax') && b:current_syntax == 'json5' + finish +endif + +" Syntax: Strings {{{1 +syn region json5String start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=json5Escape +syn region json5String start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=json5Escape + +" Syntax: Escape sequences +syn match json5Escape "\\["\\/bfnrt]" contained +syn match json5Escape "\\u\x\{4}" contained + +" Syntax: Numbers {{{1 +syn match json5Number "-\=\<\%(0\|[1-9]\d*\)\%(\.\d\+\)\=\%([eE][-+]\=\d\+\)\=\>" +syn keyword json5Number Infinity -Infinity + +" Syntax: An integer part of 0 followed by other digits is not allowed. +syn match json5NumError "-\=\<0\d\.\d*\>" + +" Syntax: Boolean {{{1 +syn keyword json5Boolean true false + +" Syntax: Null {{{1 +syn keyword json5Null null + +" Syntax: Braces {{{1 +syn match json5Braces "[{}\[\]]" +syn match json5ObjAssign /@\?\%(\I\|\$\)\%(\i\|\$\)*\s*\ze::\@!/ + +" Syntax: Comment {{{1 +syn region json5LineComment start=+\/\/+ end=+$+ keepend +syn region json5LineComment start=+^\s*\/\/+ skip=+\n\s*\/\/+ end=+$+ keepend fold +syn region json5Comment start="/\*" end="\*/" fold + +" Define the default highlighting. {{{1 +hi def link json5String String +hi def link json5ObjAssign Identifier +hi def link json5Escape Special +hi def link json5Number Number +hi def link json5Braces Operator +hi def link json5Null Function +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 + +" vim: fdm=marker + +endif