xref: /vim-8.2.3635/runtime/syntax/cpp.vim (revision d8b77f7d)
1" Vim syntax file
2" Language:	C++
3" Current Maintainer:	vim-jp (https://github.com/vim-jp/vim-cpp)
4" Previous Maintainer:	Ken Shan <[email protected]>
5" Last Change:	2015 Mar 1
6
7" For version 5.x: Clear all syntax items
8" For version 6.x: Quit when a syntax file was already loaded
9if version < 600
10  syntax clear
11elseif exists("b:current_syntax")
12  finish
13endif
14
15" Read the C syntax to start with
16if version < 600
17  so <sfile>:p:h/c.vim
18else
19  runtime! syntax/c.vim
20  unlet b:current_syntax
21endif
22
23" C++ extensions
24syn keyword cppStatement	new delete this friend using
25syn keyword cppAccess		public protected private
26syn keyword cppType		inline virtual explicit export bool wchar_t
27syn keyword cppExceptions	throw try catch
28syn keyword cppOperator		operator typeid
29syn keyword cppOperator		and bitor or xor compl bitand and_eq or_eq xor_eq not not_eq
30syn match cppCast		"\<\(const\|static\|dynamic\|reinterpret\)_cast\s*<"me=e-1
31syn match cppCast		"\<\(const\|static\|dynamic\|reinterpret\)_cast\s*$"
32syn keyword cppStorageClass	mutable
33syn keyword cppStructure	class typename template namespace
34syn keyword cppBoolean		true false
35syn keyword cppConstant		__cplusplus
36
37" C++ 11 extensions
38if !exists("cpp_no_cpp11")
39  syn keyword cppType		override final
40  syn keyword cppExceptions	noexcept
41  syn keyword cppStorageClass	constexpr decltype thread_local
42  syn keyword cppConstant	nullptr
43  syn keyword cppConstant	ATOMIC_FLAG_INIT ATOMIC_VAR_INIT
44  syn keyword cppConstant	ATOMIC_BOOL_LOCK_FREE ATOMIC_CHAR_LOCK_FREE
45  syn keyword cppConstant	ATOMIC_CHAR16_T_LOCK_FREE ATOMIC_CHAR32_T_LOCK_FREE
46  syn keyword cppConstant	ATOMIC_WCHAR_T_LOCK_FREE ATOMIC_SHORT_LOCK_FREE
47  syn keyword cppConstant	ATOMIC_INT_LOCK_FREE ATOMIC_LONG_LOCK_FREE
48  syn keyword cppConstant	ATOMIC_LLONG_LOCK_FREE ATOMIC_POINTER_LOCK_FREE
49  syn region cppRawString	matchgroup=cppRawDelimiter start=+\%(u8\|[uLU]\)\=R"\z([[:alnum:]_{}[\]#<>%:;.?*\+\-/\^&|~!=,"']\{,16}\)(+ end=+)\z1"+ contains=@Spell
50endif
51
52" The minimum and maximum operators in GNU C++
53syn match cppMinMax "[<>]?"
54
55" Default highlighting
56if version >= 508 || !exists("did_cpp_syntax_inits")
57  if version < 508
58    let did_cpp_syntax_inits = 1
59    command -nargs=+ HiLink hi link <args>
60  else
61    command -nargs=+ HiLink hi def link <args>
62  endif
63  HiLink cppAccess		cppStatement
64  HiLink cppCast		cppStatement
65  HiLink cppExceptions		Exception
66  HiLink cppOperator		Operator
67  HiLink cppStatement		Statement
68  HiLink cppType		Type
69  HiLink cppStorageClass	StorageClass
70  HiLink cppStructure		Structure
71  HiLink cppBoolean		Boolean
72  HiLink cppConstant		Constant
73  HiLink cppRawDelimiter	Delimiter
74  HiLink cppRawString		String
75  delcommand HiLink
76endif
77
78let b:current_syntax = "cpp"
79
80" vim: ts=8
81