| " Vim syntax file |
| " Language: C++ |
| " Current Maintainer: vim-jp (https://github.com/vim-jp/vim-cpp) |
| " Previous Maintainer: Ken Shan <ccshan@post.harvard.edu> |
| " Last Change: 2016 Oct 28 |
| |
| " quit when a syntax file was already loaded |
| if exists("b:current_syntax") |
| finish |
| endif |
| |
| " Read the C syntax to start with |
| runtime! syntax/c.vim |
| unlet b:current_syntax |
| |
| " C++ extensions |
| syn keyword cppStatement new delete this friend using |
| syn keyword cppAccess public protected private |
| syn keyword cppModifier inline virtual explicit export |
| syn keyword cppType bool wchar_t |
| syn keyword cppExceptions throw try catch |
| syn keyword cppOperator operator typeid |
| syn keyword cppOperator and bitor or xor compl bitand and_eq or_eq xor_eq not not_eq |
| syn match cppCast "\<\(const\|static\|dynamic\|reinterpret\)_cast\s*<"me=e-1 |
| syn match cppCast "\<\(const\|static\|dynamic\|reinterpret\)_cast\s*$" |
| syn keyword cppStorageClass mutable |
| syn keyword cppStructure class typename template namespace |
| syn keyword cppBoolean true false |
| syn keyword cppConstant __cplusplus |
| |
| " C++ 11 extensions |
| if !exists("cpp_no_cpp11") |
| syn keyword cppModifier override final |
| syn keyword cppType nullptr_t auto |
| syn keyword cppExceptions noexcept |
| syn keyword cppStorageClass constexpr decltype thread_local |
| syn keyword cppConstant nullptr |
| syn keyword cppConstant ATOMIC_FLAG_INIT ATOMIC_VAR_INIT |
| syn keyword cppConstant ATOMIC_BOOL_LOCK_FREE ATOMIC_CHAR_LOCK_FREE |
| syn keyword cppConstant ATOMIC_CHAR16_T_LOCK_FREE ATOMIC_CHAR32_T_LOCK_FREE |
| syn keyword cppConstant ATOMIC_WCHAR_T_LOCK_FREE ATOMIC_SHORT_LOCK_FREE |
| syn keyword cppConstant ATOMIC_INT_LOCK_FREE ATOMIC_LONG_LOCK_FREE |
| syn keyword cppConstant ATOMIC_LLONG_LOCK_FREE ATOMIC_POINTER_LOCK_FREE |
| syn region cppRawString matchgroup=cppRawStringDelimiter start=+\%(u8\|[uLU]\)\=R"\z([[:alnum:]_{}[\]#<>%:;.?*\+\-/\^&|~!=,"']\{,16}\)(+ end=+)\z1"+ contains=@Spell |
| endif |
| |
| " C++ 14 extensions |
| if !exists("cpp_no_cpp14") |
| syn case ignore |
| syn match cppNumber display "\<0b[01]\('\=[01]\+\)*\(u\=l\{0,2}\|ll\=u\)\>" |
| syn match cppNumber display "\<[1-9]\('\=\d\+\)*\(u\=l\{0,2}\|ll\=u\)\>" |
| syn match cppNumber display "\<0x\x\('\=\x\+\)*\(u\=l\{0,2}\|ll\=u\)\>" |
| syn case match |
| endif |
| |
| " The minimum and maximum operators in GNU C++ |
| syn match cppMinMax "[<>]?" |
| |
| " Default highlighting |
| hi def link cppAccess cppStatement |
| hi def link cppCast cppStatement |
| hi def link cppExceptions Exception |
| hi def link cppOperator Operator |
| hi def link cppStatement Statement |
| hi def link cppModifier Type |
| hi def link cppType Type |
| hi def link cppStorageClass StorageClass |
| hi def link cppStructure Structure |
| hi def link cppBoolean Boolean |
| hi def link cppConstant Constant |
| hi def link cppRawStringDelimiter Delimiter |
| hi def link cppRawString String |
| hi def link cppNumber Number |
| |
| let b:current_syntax = "cpp" |
| |
| " vim: ts=8 |