mirror of
https://github.com/vim/vim
synced 2025-04-29 21:07:49 +02:00
Problem: filetype: SPA (single page application) JSON files are not recognized (used by pipewire and wireplumber) Solution: detect pipewire and wireplumber configuration files as spajson filetype, include filetype, indent and syntax scripts for this new filetype (David Mandelberg). I looked at all the files found by this command to see if the syntax highlighting looked reasonable: ``` find {~/.config,/etc,/usr/share}/{pipewire,wireplumber} -type f -name \*.conf ``` References: * pipewire config files: https://docs.pipewire.org/page_config.html * wireplumber config files: https://pipewire.pages.freedesktop.org/wireplumber/daemon/configuration/conf_file.html and * https://pipewire.pages.freedesktop.org/wireplumber/daemon/locations.html closes: #16950 Signed-off-by: David Mandelberg <david@mandelberg.org> Signed-off-by: Christian Brabandt <cb@256bit.org>
50 lines
1.8 KiB
VimL
50 lines
1.8 KiB
VimL
" Vim syntax file
|
|
" Language: SPA JSON
|
|
" Maintainer: David Mandelberg <david@mandelberg.org>
|
|
" Last Change: 2025 Mar 22
|
|
"
|
|
" Based on parser code:
|
|
" https://gitlab.freedesktop.org/pipewire/pipewire/-/blob/master/spa/include/spa/utils/json-core.h
|
|
|
|
if exists("b:current_syntax")
|
|
finish
|
|
endif
|
|
let b:current_syntax = "spajson"
|
|
|
|
syn sync minlines=500
|
|
|
|
" Treat the __BARE parser state as a keyword, to make it easier to match
|
|
" keywords and numbers only when they're not part of a larger __BARE section.
|
|
" E.g., v4l2 and pipewire-0 probably shouldn't highlight anything as
|
|
" spajsonInt.
|
|
syn iskeyword 32-126,^ ,^",^#,^:,^,,^=,^],^},^\
|
|
|
|
syn match spajsonEscape "\\["\\/bfnrt]" contained
|
|
syn match spajsonEscape "\\u[0-9A-Fa-f]\{4}" contained
|
|
|
|
syn match spajsonError "."
|
|
syn match spajsonBare "\k\+"
|
|
syn match spajsonComment "#.*$" contains=@Spell
|
|
syn region spajsonString start=/"/ skip=/\\\\\|\\"/ end=/"/ contains=spajsonEscape
|
|
syn match spajsonKeyDelimiter "[:=]"
|
|
syn region spajsonArray matchgroup=spajsonBracket start="\[" end="]" contains=ALLBUT,spajsonKeyDelimiter fold
|
|
syn region spajsonObject matchgroup=spajsonBrace start="{" end="}" contains=ALL fold
|
|
syn match spajsonFloat "\<[+-]\?[0-9]\+\(\.[0-9]*\)\?\([Ee][+-]\?[0-9]\+\)\?\>"
|
|
syn match spajsonFloat "\<[+-]\?\.[0-9]\+\([Ee][+-]\?[0-9]\+\)\?\>"
|
|
syn match spajsonInt "\<[+-]\?0[Xx][0-9A-Fa-f]\+\>"
|
|
syn match spajsonInt "\<[+-]\?[1-9][0-9]*\>"
|
|
syn match spajsonInt "\<[+-]\?0[0-7]*\>"
|
|
syn keyword spajsonBoolean true false
|
|
syn keyword spajsonNull null
|
|
syn match spajsonWhitespace "[\x00\t \r\n,]"
|
|
|
|
hi def link spajsonBoolean Boolean
|
|
hi def link spajsonBrace Delimiter
|
|
hi def link spajsonBracket Delimiter
|
|
hi def link spajsonComment Comment
|
|
hi def link spajsonError Error
|
|
hi def link spajsonEscape SpecialChar
|
|
hi def link spajsonFloat Float
|
|
hi def link spajsonInt Number
|
|
hi def link spajsonNull Constant
|
|
hi def link spajsonString String
|