xref: /vim-8.2.3635/runtime/syntax/cpp.vim (revision 89a9c159)
1071d4279SBram Moolenaar" Vim syntax file
2071d4279SBram Moolenaar" Language:	C++
3d8b77f7dSBram Moolenaar" Current Maintainer:	vim-jp (https://github.com/vim-jp/vim-cpp)
4ac7bd638SBram Moolenaar" Previous Maintainer:	Ken Shan <[email protected]>
5*89a9c159SBram Moolenaar" Last Change:	2021 Aug 23
6071d4279SBram Moolenaar
789bcfda6SBram Moolenaar" quit when a syntax file was already loaded
889bcfda6SBram Moolenaarif exists("b:current_syntax")
9071d4279SBram Moolenaar  finish
10071d4279SBram Moolenaarendif
11071d4279SBram Moolenaar
1298a29d00SBram Moolenaar" inform C syntax that the file was included from cpp.vim
1398a29d00SBram Moolenaarlet b:filetype_in_cpp_family = 1
1498a29d00SBram Moolenaar
15071d4279SBram Moolenaar" Read the C syntax to start with
16071d4279SBram Moolenaarruntime! syntax/c.vim
17071d4279SBram Moolenaarunlet b:current_syntax
18071d4279SBram Moolenaar
19ac7bd638SBram Moolenaar" C++ extensions
20071d4279SBram Moolenaarsyn keyword cppStatement	new delete this friend using
21071d4279SBram Moolenaarsyn keyword cppAccess		public protected private
22b4ff518dSBram Moolenaarsyn keyword cppModifier		inline virtual explicit export
23b4ff518dSBram Moolenaarsyn keyword cppType		bool wchar_t
24071d4279SBram Moolenaarsyn keyword cppExceptions	throw try catch
25071d4279SBram Moolenaarsyn keyword cppOperator		operator typeid
26071d4279SBram Moolenaarsyn keyword cppOperator		and bitor or xor compl bitand and_eq or_eq xor_eq not not_eq
27071d4279SBram Moolenaarsyn match cppCast		"\<\(const\|static\|dynamic\|reinterpret\)_cast\s*<"me=e-1
28071d4279SBram Moolenaarsyn match cppCast		"\<\(const\|static\|dynamic\|reinterpret\)_cast\s*$"
29071d4279SBram Moolenaarsyn keyword cppStorageClass	mutable
30071d4279SBram Moolenaarsyn keyword cppStructure	class typename template namespace
31071d4279SBram Moolenaarsyn keyword cppBoolean		true false
32d8b77f7dSBram Moolenaarsyn keyword cppConstant		__cplusplus
33071d4279SBram Moolenaar
34ac7bd638SBram Moolenaar" C++ 11 extensions
35ac7bd638SBram Moolenaarif !exists("cpp_no_cpp11")
36b4ff518dSBram Moolenaar  syn keyword cppModifier	override final
37b4ada79aSBram Moolenaar  syn keyword cppType		nullptr_t auto
38ac7bd638SBram Moolenaar  syn keyword cppExceptions	noexcept
39d8b77f7dSBram Moolenaar  syn keyword cppStorageClass	constexpr decltype thread_local
40ac7bd638SBram Moolenaar  syn keyword cppConstant	nullptr
41d8b77f7dSBram Moolenaar  syn keyword cppConstant	ATOMIC_FLAG_INIT ATOMIC_VAR_INIT
42d8b77f7dSBram Moolenaar  syn keyword cppConstant	ATOMIC_BOOL_LOCK_FREE ATOMIC_CHAR_LOCK_FREE
43d8b77f7dSBram Moolenaar  syn keyword cppConstant	ATOMIC_CHAR16_T_LOCK_FREE ATOMIC_CHAR32_T_LOCK_FREE
44d8b77f7dSBram Moolenaar  syn keyword cppConstant	ATOMIC_WCHAR_T_LOCK_FREE ATOMIC_SHORT_LOCK_FREE
45d8b77f7dSBram Moolenaar  syn keyword cppConstant	ATOMIC_INT_LOCK_FREE ATOMIC_LONG_LOCK_FREE
46d8b77f7dSBram Moolenaar  syn keyword cppConstant	ATOMIC_LLONG_LOCK_FREE ATOMIC_POINTER_LOCK_FREE
47d2ea7cf1SBram Moolenaar  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
4895a9dd1eSBram Moolenaar  syn match cppCast		"\<\(const\|static\|dynamic\)_pointer_cast\s*<"me=e-1
4995a9dd1eSBram Moolenaar  syn match cppCast		"\<\(const\|static\|dynamic\)_pointer_cast\s*$"
50ac7bd638SBram Moolenaarendif
51ac7bd638SBram Moolenaar
52b4ff518dSBram Moolenaar" C++ 14 extensions
53b4ff518dSBram Moolenaarif !exists("cpp_no_cpp14")
54d2ea7cf1SBram Moolenaar  syn match cppNumbers		display transparent "\<\d\|\.\d" contains=cppNumber,cppFloat
55d2ea7cf1SBram Moolenaar  syn match cppNumber		display contained "\<0\([Uu]\=\([Ll]\|LL\|ll\)\|\([Ll]\|LL\|ll\)\=[Uu]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>"
56d2ea7cf1SBram Moolenaar  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*\)\=\>"
57d2ea7cf1SBram Moolenaar  syn match cppNumber		display contained "\<0\o\+\([Uu]\=\([Ll]\|LL\|ll\)\|\([Ll]\|LL\|ll\)\=[Uu]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>"
58d2ea7cf1SBram Moolenaar  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*\)\=\>"
59d2ea7cf1SBram Moolenaar  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*\)\=\>"
60d2ea7cf1SBram Moolenaar  syn match cppFloat		display contained "\<\d\+\.\d*\(e[-+]\=\d\+\)\=\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>"
61d2ea7cf1SBram Moolenaar  syn match cppFloat		display contained "\<\.\d\+\(e[-+]\=\d\+\)\=\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>"
62d2ea7cf1SBram Moolenaar  syn match cppFloat		display contained "\<\d\+e[-+]\=\d\+\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>"
63*89a9c159SBram Moolenaar  syn region cppString		start=+\(L\|u\|u8\|U\)\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"\(sv\|s\|_\i*\)\=+ end='$' contains=cSpecial,cFormat,@Spell
6495a9dd1eSBram Moolenaarendif
6595a9dd1eSBram Moolenaar
6695a9dd1eSBram Moolenaar" C++ 17 extensions
6795a9dd1eSBram Moolenaarif !exists("cpp_no_cpp17")
6895a9dd1eSBram Moolenaar  syn match cppCast		"\<reinterpret_pointer_cast\s*<"me=e-1
6995a9dd1eSBram Moolenaar  syn match cppCast		"\<reinterpret_pointer_cast\s*$"
70d2ea7cf1SBram Moolenaar  syn match cppFloat		display contained "\<0x\x*\.\x\+p[-+]\=\d\+\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>"
71d2ea7cf1SBram Moolenaar  syn match cppFloat		display contained "\<0x\x\+\.\=p[-+]\=\d\+\([FfLl]\|i[fl]\=\|h\|min\|s\|ms\|us\|ns\|_\i*\)\=\>"
72*89a9c159SBram Moolenaar
73*89a9c159SBram Moolenaar  " TODO: push this up to c.vim if/when supported in C23
74*89a9c159SBram Moolenaar  syn match cppCharacter	"u8'[^\\]'"
75*89a9c159SBram Moolenaar  syn match cppCharacter	"u8'[^']*'" contains=cSpecial
76*89a9c159SBram Moolenaar  if exists("c_gnu")
77*89a9c159SBram Moolenaar    syn match cppSpecialError	  "u8'\\[^'\"?\\abefnrtv]'"
78*89a9c159SBram Moolenaar    syn match cppSpecialCharacter "u8'\\['\"?\\abefnrtv]'"
79*89a9c159SBram Moolenaar  else
80*89a9c159SBram Moolenaar    syn match cppSpecialError	  "u8'\\[^'\"?\\abfnrtv]'"
81*89a9c159SBram Moolenaar    syn match cppSpecialCharacter "u8'\\['\"?\\abfnrtv]'"
82*89a9c159SBram Moolenaar  endif
83*89a9c159SBram Moolenaar  syn match cppSpecialCharacter display "u8'\\\o\{1,3}'"
84*89a9c159SBram Moolenaar  syn match cppSpecialCharacter display "u8'\\x\x\+'"
85*89a9c159SBram Moolenaar
86d2ea7cf1SBram Moolenaarendif
87d2ea7cf1SBram Moolenaar
88d2ea7cf1SBram Moolenaar" C++ 20 extensions
89d2ea7cf1SBram Moolenaarif !exists("cpp_no_cpp20")
90d2ea7cf1SBram Moolenaar  syn match cppNumber		display contained "\<0\(y\|d\)\>"
91d2ea7cf1SBram Moolenaar  syn match cppNumber		display contained "\<[1-9]\('\=\d\+\)*\(y\|d\)\>"
92d2ea7cf1SBram Moolenaar  syn match cppNumber		display contained "\<0\o\+\(y\|d\)\>"
93d2ea7cf1SBram Moolenaar  syn match cppNumber		display contained "\<0b[01]\('\=[01]\+\)*\(y\|d\)\>"
94d2ea7cf1SBram Moolenaar  syn match cppNumber		display contained "\<0x\x\('\=\x\+\)*\(y\|d\)\>"
95d2ea7cf1SBram Moolenaar  syn keyword cppStatement	co_await co_return co_yield requires
96d2ea7cf1SBram Moolenaar  syn keyword cppStorageClass	consteval constinit
97d2ea7cf1SBram Moolenaar  syn keyword cppStructure	concept
98d2ea7cf1SBram Moolenaar  syn keyword cppType		char8_t
99d2ea7cf1SBram Moolenaar  syn keyword cppModule		import module export
10095a9dd1eSBram Moolenaarendif
10195a9dd1eSBram Moolenaar
102071d4279SBram Moolenaar" The minimum and maximum operators in GNU C++
103071d4279SBram Moolenaarsyn match cppMinMax "[<>]?"
104071d4279SBram Moolenaar
105071d4279SBram Moolenaar" Default highlighting
106f37506f6SBram Moolenaarhi def link cppAccess		cppStatement
107f37506f6SBram Moolenaarhi def link cppCast		cppStatement
108f37506f6SBram Moolenaarhi def link cppExceptions		Exception
109f37506f6SBram Moolenaarhi def link cppOperator		Operator
110f37506f6SBram Moolenaarhi def link cppStatement		Statement
111f37506f6SBram Moolenaarhi def link cppModifier		Type
112f37506f6SBram Moolenaarhi def link cppType		Type
113f37506f6SBram Moolenaarhi def link cppStorageClass	StorageClass
114f37506f6SBram Moolenaarhi def link cppStructure		Structure
115f37506f6SBram Moolenaarhi def link cppBoolean		Boolean
116*89a9c159SBram Moolenaarhi def link cppCharacter		cCharacter
117*89a9c159SBram Moolenaarhi def link cppSpecialCharacter		cSpecialCharacter
118*89a9c159SBram Moolenaarhi def link cppSpecialError		cSpecialError
119f37506f6SBram Moolenaarhi def link cppConstant		Constant
120f37506f6SBram Moolenaarhi def link cppRawStringDelimiter	Delimiter
121f37506f6SBram Moolenaarhi def link cppRawString		String
122d2ea7cf1SBram Moolenaarhi def link cppString		String
123f37506f6SBram Moolenaarhi def link cppNumber		Number
124d2ea7cf1SBram Moolenaarhi def link cppFloat		Number
12595a9dd1eSBram Moolenaarhi def link cppModule		Include
126071d4279SBram Moolenaar
127071d4279SBram Moolenaarlet b:current_syntax = "cpp"
128071d4279SBram Moolenaar
129071d4279SBram Moolenaar" vim: ts=8
130