Skip to content

Commit 0493ae5

Browse files
authored
Merge pull request vim-jp#55 from adah1972/user-defined-literals
Add C++ syntax support for user-defined literals
2 parents 5df5e05 + 42ea453 commit 0493ae5

File tree

1 file changed

+27
-13
lines changed

1 file changed

+27
-13
lines changed

syntax/cpp.vim

Lines changed: 27 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
" Language: C++
33
" Current Maintainer: vim-jp (https://github.com/vim-jp/vim-cpp)
44
" Previous Maintainer: Ken Shan <[email protected]>
5-
" Last Change: 2021 Jan 12
5+
" Last Change: 2021 May 04
66

77
" quit when a syntax file was already loaded
88
if exists("b:current_syntax")
@@ -44,35 +44,47 @@ if !exists("cpp_no_cpp11")
4444
syn keyword cppConstant ATOMIC_WCHAR_T_LOCK_FREE ATOMIC_SHORT_LOCK_FREE
4545
syn keyword cppConstant ATOMIC_INT_LOCK_FREE ATOMIC_LONG_LOCK_FREE
4646
syn keyword cppConstant ATOMIC_LLONG_LOCK_FREE ATOMIC_POINTER_LOCK_FREE
47-
syn region cppRawString matchgroup=cppRawStringDelimiter start=+\%(u8\|[uLU]\)\=R"\z([[:alnum:]_{}[\]#<>%:;.?*\+\-/\^&|~!=,"']\{,16}\)(+ end=+)\z1"+ contains=@Spell
47+
syn region cppRawString matchgroup=cppRawStringDelimiter start=+\%(u8\|[uLU]\)\=R"\z([[:alnum:]_{}[\]#<>%:;.?*\+\-/\^&|~!=,"']\{,16}\)(+ end=+)\z1"\(sv\|s\|_[_a-zA-Z][_a-zA-Z0-9]*\)\=+ contains=@Spell
4848
syn match cppCast "\<\(const\|static\|dynamic\)_pointer_cast\s*<"me=e-1
4949
syn match cppCast "\<\(const\|static\|dynamic\)_pointer_cast\s*$"
5050
endif
5151

5252
" C++ 14 extensions
5353
if !exists("cpp_no_cpp14")
54-
syn case ignore
55-
syn match cppNumber display "\<0b[01]\('\=[01]\+\)*\(u\=l\{0,2}\|ll\=u\)\>"
56-
syn match cppNumber display "\<[1-9]\('\=\d\+\)*\(u\=l\{0,2}\|ll\=u\)\>" contains=cFloat
57-
syn match cppNumber display "\<0x\x\('\=\x\+\)*\(u\=l\{0,2}\|ll\=u\)\>"
58-
syn case match
54+
syn match cppNumbers display transparent "\<\d\|\.\d" contains=cppNumber,cppFloat
55+
syn match cppNumber display contained "\<0\([Uu]\=\([Ll]\|LL\|ll\)\|\([Ll]\|LL\|ll\)\=[Uu]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>"
56+
syn match cppNumber display contained "\<[1-9]\('\=\d\+\)*\([Uu]\=\([Ll]\|LL\|ll\)\|\([Ll]\|LL\|ll\)\=[Uu]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>"
57+
syn match cppNumber display contained "\<0\o\+\([Uu]\=\([Ll]\|LL\|ll\)\|\([Ll]\|LL\|ll\)\=[Uu]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>"
58+
syn match cppNumber display contained "\<0b[01]\('\=[01]\+\)*\([Uu]\=\([Ll]\|LL\|ll\)\|\([Ll]\|LL\|ll\)\=[Uu]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>"
59+
syn match cppNumber display contained "\<0x\x\('\=\x\+\)*\([Uu]\=\([Ll]\|LL\|ll\)\|\([Ll]\|LL\|ll\)\=[Uu]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>"
60+
syn match cppFloat display contained "\<\d\+\.\d*\(e[-+]\=\d\+\)\=\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>"
61+
syn match cppFloat display contained "\<\.\d\+\(e[-+]\=\d\+\)\=\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>"
62+
syn match cppFloat display contained "\<\d\+e[-+]\=\d\+\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>"
63+
syn region cppString start=+\(L\|u\|u8\|U\|R\|LR\|u8R\|uR\|UR\)\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"\(sv\|s\|_\i*\)\=+ end='$' contains=cSpecial,cFormat,@Spell
64+
endif
65+
66+
" C++ 17 extensions
67+
if !exists("cpp_no_cpp17")
68+
syn match cppCast "\<reinterpret_pointer_cast\s*<"me=e-1
69+
syn match cppCast "\<reinterpret_pointer_cast\s*$"
70+
syn match cppFloat display contained "\<0x\x*\.\x\+p[-+]\=\d\+\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>"
71+
syn match cppFloat display contained "\<0x\x\+\.\=p[-+]\=\d\+\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>"
5972
endif
6073

6174
" C++ 20 extensions
6275
if !exists("cpp_no_cpp20")
76+
syn match cppNumber display contained "\<0\(y\|d\)\>"
77+
syn match cppNumber display contained "\<[1-9]\('\=\d\+\)*\(y\|d\)\>"
78+
syn match cppNumber display contained "\<0\o\+\(y\|d\)\>"
79+
syn match cppNumber display contained "\<0b[01]\('\=[01]\+\)*\(y\|d\)\>"
80+
syn match cppNumber display contained "\<0x\x\('\=\x\+\)*\(y\|d\)\>"
6381
syn keyword cppStatement co_await co_return co_yield requires
6482
syn keyword cppStorageClass consteval constinit
6583
syn keyword cppStructure concept
6684
syn keyword cppType char8_t
6785
syn keyword cppModule import module export
6886
endif
6987

70-
" C++ 17 extensions
71-
if !exists("cpp_no_cpp17")
72-
syn match cppCast "\<reinterpret_pointer_cast\s*<"me=e-1
73-
syn match cppCast "\<reinterpret_pointer_cast\s*$"
74-
endif
75-
7688
" The minimum and maximum operators in GNU C++
7789
syn match cppMinMax "[<>]?"
7890

@@ -90,7 +102,9 @@ hi def link cppBoolean Boolean
90102
hi def link cppConstant Constant
91103
hi def link cppRawStringDelimiter Delimiter
92104
hi def link cppRawString String
105+
hi def link cppString String
93106
hi def link cppNumber Number
107+
hi def link cppFloat Number
94108
hi def link cppModule Include
95109

96110
let b:current_syntax = "cpp"

0 commit comments

Comments
 (0)