7
|
1 " Vim syntax file
|
|
2 " Language: C
|
|
3 " Maintainer: Bram Moolenaar <Bram@vim.org>
|
3513
|
4 " Last Change: 2012 May 03
|
7
|
5
|
344
|
6 " Quit when a (custom) syntax file was already loaded
|
|
7 if exists("b:current_syntax")
|
7
|
8 finish
|
|
9 endif
|
|
10
|
3237
|
11 let s:cpo_save = &cpo
|
|
12 set cpo&vim
|
|
13
|
7
|
14 " A bunch of useful C keywords
|
|
15 syn keyword cStatement goto break return continue asm
|
|
16 syn keyword cLabel case default
|
|
17 syn keyword cConditional if else switch
|
|
18 syn keyword cRepeat while for do
|
|
19
|
|
20 syn keyword cTodo contained TODO FIXME XXX
|
|
21
|
2034
|
22 " It's easy to accidentally add a space after a backslash that was intended
|
|
23 " for line continuation. Some compilers allow it, which makes it
|
|
24 " unpredicatable and should be avoided.
|
|
25 syn match cBadContinuation contained "\\\s\+$"
|
|
26
|
7
|
27 " cCommentGroup allows adding matches for special things in comments
|
2034
|
28 syn cluster cCommentGroup contains=cTodo,cBadContinuation
|
7
|
29
|
|
30 " String and Character constants
|
|
31 " Highlight special characters (those which have a backslash) differently
|
|
32 syn match cSpecial display contained "\\\(x\x\+\|\o\{1,3}\|.\|$\)"
|
|
33 if !exists("c_no_utf")
|
|
34 syn match cSpecial display contained "\\\(u\x\{4}\|U\x\{8}\)"
|
|
35 endif
|
|
36 if exists("c_no_cformat")
|
3513
|
37 syn region cString start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,@Spell extend
|
7
|
38 " cCppString: same as cString, but ends at end of line
|
|
39 syn region cCppString start=+L\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=cSpecial,@Spell
|
|
40 else
|
827
|
41 if !exists("c_no_c99") " ISO C99
|
|
42 syn match cFormat display "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlLjzt]\|ll\|hh\)\=\([aAbdiuoxXDOUfFeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained
|
|
43 else
|
|
44 syn match cFormat display "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlL]\|ll\)\=\([bdiuoxXDOUfeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained
|
|
45 endif
|
7
|
46 syn match cFormat display "%%" contained
|
3513
|
47 syn region cString start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,cFormat,@Spell extend
|
7
|
48 " cCppString: same as cString, but ends at end of line
|
|
49 syn region cCppString start=+L\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=cSpecial,cFormat,@Spell
|
|
50 endif
|
|
51
|
|
52 syn match cCharacter "L\='[^\\]'"
|
|
53 syn match cCharacter "L'[^']*'" contains=cSpecial
|
|
54 if exists("c_gnu")
|
|
55 syn match cSpecialError "L\='\\[^'\"?\\abefnrtv]'"
|
|
56 syn match cSpecialCharacter "L\='\\['\"?\\abefnrtv]'"
|
|
57 else
|
|
58 syn match cSpecialError "L\='\\[^'\"?\\abfnrtv]'"
|
|
59 syn match cSpecialCharacter "L\='\\['\"?\\abfnrtv]'"
|
|
60 endif
|
|
61 syn match cSpecialCharacter display "L\='\\\o\{1,3}'"
|
|
62 syn match cSpecialCharacter display "'\\x\x\{1,2}'"
|
|
63 syn match cSpecialCharacter display "L'\\x\x\+'"
|
|
64
|
3281
|
65 if !exists("c_no_c11") " ISO C11
|
|
66 if exists("c_no_cformat")
|
3513
|
67 syn region cString start=+\%(U\|u8\=\)"+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,@Spell extend
|
3281
|
68 else
|
3513
|
69 syn region cString start=+\%(U\|u8\=\)"+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,cFormat,@Spell extend
|
3281
|
70 endif
|
|
71 syn match cCharacter "[Uu]'[^\\]'"
|
|
72 syn match cCharacter "[Uu]'[^']*'" contains=cSpecial
|
|
73 if exists("c_gnu")
|
|
74 syn match cSpecialError "[Uu]'\\[^'\"?\\abefnrtv]'"
|
|
75 syn match cSpecialCharacter "[Uu]'\\['\"?\\abefnrtv]'"
|
|
76 else
|
|
77 syn match cSpecialError "[Uu]'\\[^'\"?\\abfnrtv]'"
|
|
78 syn match cSpecialCharacter "[Uu]'\\['\"?\\abfnrtv]'"
|
|
79 endif
|
|
80 syn match cSpecialCharacter display "[Uu]'\\\o\{1,3}'"
|
|
81 syn match cSpecialCharacter display "[Uu]'\\x\x\+'"
|
|
82 endif
|
|
83
|
7
|
84 "when wanted, highlight trailing white space
|
|
85 if exists("c_space_errors")
|
|
86 if !exists("c_no_trail_space_error")
|
|
87 syn match cSpaceError display excludenl "\s\+$"
|
|
88 endif
|
|
89 if !exists("c_no_tab_space_error")
|
|
90 syn match cSpaceError display " \+\t"me=e-1
|
|
91 endif
|
|
92 endif
|
|
93
|
1121
|
94 " This should be before cErrInParen to avoid problems with #define ({ xxx })
|
1620
|
95 if exists("c_curly_error")
|
|
96 syntax match cCurlyError "}"
|
2965
|
97 syntax region cBlock start="{" end="}" contains=ALLBUT,cBadBlock,cCurlyError,@cParenGroup,cErrInParen,cCppParen,cErrInBracket,cCppBracket,cCppString,@Spell fold
|
1620
|
98 else
|
|
99 syntax region cBlock start="{" end="}" transparent fold
|
|
100 endif
|
1121
|
101
|
7
|
102 "catch errors caused by wrong parenthesis and brackets
|
|
103 " also accept <% for {, %> for }, <: for [ and :> for ] (C99)
|
|
104 " But avoid matching <::.
|
2965
|
105 syn cluster cParenGroup contains=cParenError,cIncluded,cSpecial,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cUserCont,cUserLabel,cBitField,cOctalZero,@cCppOutInGroup,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom
|
140
|
106 if exists("c_no_curly_error")
|
2965
|
107 syn region cParen transparent start='(' end=')' end='}'me=s-1 contains=ALLBUT,cBlock,@cParenGroup,cCppParen,cCppString,@Spell
|
140
|
108 " cCppParen: same as cParen but ends at end-of-line; used in cDefine
|
|
109 syn region cCppParen transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell
|
|
110 syn match cParenError display ")"
|
|
111 syn match cErrInParen display contained "^[{}]\|^<%\|^%>"
|
|
112 elseif exists("c_no_bracket_error")
|
2965
|
113 syn region cParen transparent start='(' end=')' end='}'me=s-1 contains=ALLBUT,cBlock,@cParenGroup,cCppParen,cCppString,@Spell
|
7
|
114 " cCppParen: same as cParen but ends at end-of-line; used in cDefine
|
|
115 syn region cCppParen transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell
|
|
116 syn match cParenError display ")"
|
|
117 syn match cErrInParen display contained "[{}]\|<%\|%>"
|
|
118 else
|
2965
|
119 syn region cParen transparent start='(' end=')' end='}'me=s-1 contains=ALLBUT,cBlock,@cParenGroup,cCppParen,cErrInBracket,cCppBracket,cCppString,@Spell
|
7
|
120 " cCppParen: same as cParen but ends at end-of-line; used in cDefine
|
|
121 syn region cCppParen transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cErrInBracket,cParen,cBracket,cString,@Spell
|
|
122 syn match cParenError display "[\])]"
|
|
123 syn match cErrInParen display contained "[\]{}]\|<%\|%>"
|
2965
|
124 syn region cBracket transparent start='\[\|<::\@!' end=']\|:>' end='}'me=s-1 contains=ALLBUT,cBlock,@cParenGroup,cErrInParen,cCppParen,cCppBracket,cCppString,@Spell
|
7
|
125 " cCppBracket: same as cParen but ends at end-of-line; used in cDefine
|
|
126 syn region cCppBracket transparent start='\[\|<::\@!' skip='\\$' excludenl end=']\|:>' end='$' contained contains=ALLBUT,@cParenGroup,cErrInParen,cParen,cBracket,cString,@Spell
|
|
127 syn match cErrInBracket display contained "[);{}]\|<%\|%>"
|
|
128 endif
|
|
129
|
3513
|
130 syntax region cBadBlock keepend start="{" end="}" contained containedin=cParen,cBracket,cBadBlock transparent fold
|
2965
|
131
|
7
|
132 "integer number, or floating point number without a dot and with "f".
|
|
133 syn case ignore
|
|
134 syn match cNumbers display transparent "\<\d\|\.\d" contains=cNumber,cFloat,cOctalError,cOctal
|
|
135 " Same, but without octal error (for comments)
|
|
136 syn match cNumbersCom display contained transparent "\<\d\|\.\d" contains=cNumber,cFloat,cOctal
|
|
137 syn match cNumber display contained "\d\+\(u\=l\{0,2}\|ll\=u\)\>"
|
|
138 "hex number
|
|
139 syn match cNumber display contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>"
|
|
140 " Flag the first zero of an octal number as something special
|
|
141 syn match cOctal display contained "0\o\+\(u\=l\{0,2}\|ll\=u\)\>" contains=cOctalZero
|
|
142 syn match cOctalZero display contained "\<0"
|
|
143 syn match cFloat display contained "\d\+f"
|
|
144 "floating point number, with dot, optional exponent
|
|
145 syn match cFloat display contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\="
|
|
146 "floating point number, starting with a dot, optional exponent
|
|
147 syn match cFloat display contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
|
|
148 "floating point number, without dot, with exponent
|
|
149 syn match cFloat display contained "\d\+e[-+]\=\d\+[fl]\=\>"
|
|
150 if !exists("c_no_c99")
|
|
151 "hexadecimal floating point number, optional leading digits, with dot, with exponent
|
|
152 syn match cFloat display contained "0x\x*\.\x\+p[-+]\=\d\+[fl]\=\>"
|
|
153 "hexadecimal floating point number, with leading digits, optional dot, with exponent
|
|
154 syn match cFloat display contained "0x\x\+\.\=p[-+]\=\d\+[fl]\=\>"
|
|
155 endif
|
|
156
|
|
157 " flag an octal number with wrong digits
|
|
158 syn match cOctalError display contained "0\o*[89]\d*"
|
|
159 syn case match
|
|
160
|
|
161 if exists("c_comment_strings")
|
|
162 " A comment can contain cString, cCharacter and cNumber.
|
|
163 " But a "*/" inside a cString in a cComment DOES end the comment! So we
|
|
164 " need to use a special type of cString: cCommentString, which also ends on
|
|
165 " "*/", and sees a "*" at the start of the line as comment again.
|
|
166 " Unfortunately this doesn't very well work for // type of comments :-(
|
|
167 syntax match cCommentSkip contained "^\s*\*\($\|\s\+\)"
|
|
168 syntax region cCommentString contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=cSpecial,cCommentSkip
|
|
169 syntax region cComment2String contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=cSpecial
|
|
170 syntax region cCommentL start="//" skip="\\$" end="$" keepend contains=@cCommentGroup,cComment2String,cCharacter,cNumbersCom,cSpaceError,@Spell
|
36
|
171 if exists("c_no_comment_fold")
|
1121
|
172 " Use "extend" here to have preprocessor lines not terminate halfway a
|
|
173 " comment.
|
|
174 syntax region cComment matchgroup=cCommentStart start="/\*" end="\*/" contains=@cCommentGroup,cCommentStartError,cCommentString,cCharacter,cNumbersCom,cSpaceError,@Spell extend
|
36
|
175 else
|
1121
|
176 syntax region cComment matchgroup=cCommentStart start="/\*" end="\*/" contains=@cCommentGroup,cCommentStartError,cCommentString,cCharacter,cNumbersCom,cSpaceError,@Spell fold extend
|
36
|
177 endif
|
7
|
178 else
|
|
179 syn region cCommentL start="//" skip="\\$" end="$" keepend contains=@cCommentGroup,cSpaceError,@Spell
|
36
|
180 if exists("c_no_comment_fold")
|
1620
|
181 syn region cComment matchgroup=cCommentStart start="/\*" end="\*/" contains=@cCommentGroup,cCommentStartError,cSpaceError,@Spell extend
|
36
|
182 else
|
1620
|
183 syn region cComment matchgroup=cCommentStart start="/\*" end="\*/" contains=@cCommentGroup,cCommentStartError,cSpaceError,@Spell fold extend
|
36
|
184 endif
|
7
|
185 endif
|
|
186 " keep a // comment separately, it terminates a preproc. conditional
|
|
187 syntax match cCommentError display "\*/"
|
|
188 syntax match cCommentStartError display "/\*"me=e-1 contained
|
|
189
|
|
190 syn keyword cOperator sizeof
|
|
191 if exists("c_gnu")
|
|
192 syn keyword cStatement __asm__
|
|
193 syn keyword cOperator typeof __real__ __imag__
|
|
194 endif
|
|
195 syn keyword cType int long short char void
|
|
196 syn keyword cType signed unsigned float double
|
|
197 if !exists("c_no_ansi") || exists("c_ansi_typedefs")
|
1121
|
198 syn keyword cType size_t ssize_t off_t wchar_t ptrdiff_t sig_atomic_t fpos_t
|
7
|
199 syn keyword cType clock_t time_t va_list jmp_buf FILE DIR div_t ldiv_t
|
|
200 syn keyword cType mbstate_t wctrans_t wint_t wctype_t
|
|
201 endif
|
|
202 if !exists("c_no_c99") " ISO C99
|
3256
|
203 syn keyword cType _Bool bool _Complex complex _Imaginary imaginary
|
7
|
204 syn keyword cType int8_t int16_t int32_t int64_t
|
|
205 syn keyword cType uint8_t uint16_t uint32_t uint64_t
|
|
206 syn keyword cType int_least8_t int_least16_t int_least32_t int_least64_t
|
|
207 syn keyword cType uint_least8_t uint_least16_t uint_least32_t uint_least64_t
|
|
208 syn keyword cType int_fast8_t int_fast16_t int_fast32_t int_fast64_t
|
|
209 syn keyword cType uint_fast8_t uint_fast16_t uint_fast32_t uint_fast64_t
|
|
210 syn keyword cType intptr_t uintptr_t
|
|
211 syn keyword cType intmax_t uintmax_t
|
|
212 endif
|
|
213 if exists("c_gnu")
|
|
214 syn keyword cType __label__ __complex__ __volatile__
|
|
215 endif
|
|
216
|
|
217 syn keyword cStructure struct union enum typedef
|
|
218 syn keyword cStorageClass static register auto volatile extern const
|
|
219 if exists("c_gnu")
|
|
220 syn keyword cStorageClass inline __attribute__
|
|
221 endif
|
|
222 if !exists("c_no_c99")
|
|
223 syn keyword cStorageClass inline restrict
|
|
224 endif
|
3256
|
225 if !exists("c_no_c11")
|
|
226 syn keyword cStorageClass _Alignas alignas
|
|
227 syn keyword cOperator _Alignof alignof
|
|
228 syn keyword cStorageClass _Atomic
|
|
229 syn keyword cOperator _Generic
|
|
230 syn keyword cStorageClass _Noreturn noreturn
|
|
231 syn keyword cOperator _Static_assert static_assert
|
|
232 syn keyword cStorageClass _Thread_local thread_local
|
3281
|
233 syn keyword cType char16_t char32_t
|
3256
|
234 endif
|
7
|
235
|
|
236 if !exists("c_no_ansi") || exists("c_ansi_constants") || exists("c_gnu")
|
|
237 if exists("c_gnu")
|
819
|
238 syn keyword cConstant __GNUC__ __FUNCTION__ __PRETTY_FUNCTION__ __func__
|
7
|
239 endif
|
|
240 syn keyword cConstant __LINE__ __FILE__ __DATE__ __TIME__ __STDC__
|
|
241 syn keyword cConstant __STDC_VERSION__
|
|
242 syn keyword cConstant CHAR_BIT MB_LEN_MAX MB_CUR_MAX
|
|
243 syn keyword cConstant UCHAR_MAX UINT_MAX ULONG_MAX USHRT_MAX
|
|
244 syn keyword cConstant CHAR_MIN INT_MIN LONG_MIN SHRT_MIN
|
|
245 syn keyword cConstant CHAR_MAX INT_MAX LONG_MAX SHRT_MAX
|
|
246 syn keyword cConstant SCHAR_MIN SINT_MIN SLONG_MIN SSHRT_MIN
|
|
247 syn keyword cConstant SCHAR_MAX SINT_MAX SLONG_MAX SSHRT_MAX
|
|
248 if !exists("c_no_c99")
|
819
|
249 syn keyword cConstant __func__
|
1620
|
250 syn keyword cConstant LLONG_MIN LLONG_MAX ULLONG_MAX
|
7
|
251 syn keyword cConstant INT8_MIN INT16_MIN INT32_MIN INT64_MIN
|
|
252 syn keyword cConstant INT8_MAX INT16_MAX INT32_MAX INT64_MAX
|
|
253 syn keyword cConstant UINT8_MAX UINT16_MAX UINT32_MAX UINT64_MAX
|
|
254 syn keyword cConstant INT_LEAST8_MIN INT_LEAST16_MIN INT_LEAST32_MIN INT_LEAST64_MIN
|
|
255 syn keyword cConstant INT_LEAST8_MAX INT_LEAST16_MAX INT_LEAST32_MAX INT_LEAST64_MAX
|
|
256 syn keyword cConstant UINT_LEAST8_MAX UINT_LEAST16_MAX UINT_LEAST32_MAX UINT_LEAST64_MAX
|
|
257 syn keyword cConstant INT_FAST8_MIN INT_FAST16_MIN INT_FAST32_MIN INT_FAST64_MIN
|
|
258 syn keyword cConstant INT_FAST8_MAX INT_FAST16_MAX INT_FAST32_MAX INT_FAST64_MAX
|
|
259 syn keyword cConstant UINT_FAST8_MAX UINT_FAST16_MAX UINT_FAST32_MAX UINT_FAST64_MAX
|
|
260 syn keyword cConstant INTPTR_MIN INTPTR_MAX UINTPTR_MAX
|
|
261 syn keyword cConstant INTMAX_MIN INTMAX_MAX UINTMAX_MAX
|
|
262 syn keyword cConstant PTRDIFF_MIN PTRDIFF_MAX SIG_ATOMIC_MIN SIG_ATOMIC_MAX
|
|
263 syn keyword cConstant SIZE_MAX WCHAR_MIN WCHAR_MAX WINT_MIN WINT_MAX
|
|
264 endif
|
|
265 syn keyword cConstant FLT_RADIX FLT_ROUNDS
|
|
266 syn keyword cConstant FLT_DIG FLT_MANT_DIG FLT_EPSILON
|
|
267 syn keyword cConstant DBL_DIG DBL_MANT_DIG DBL_EPSILON
|
|
268 syn keyword cConstant LDBL_DIG LDBL_MANT_DIG LDBL_EPSILON
|
|
269 syn keyword cConstant FLT_MIN FLT_MAX FLT_MIN_EXP FLT_MAX_EXP
|
|
270 syn keyword cConstant FLT_MIN_10_EXP FLT_MAX_10_EXP
|
|
271 syn keyword cConstant DBL_MIN DBL_MAX DBL_MIN_EXP DBL_MAX_EXP
|
|
272 syn keyword cConstant DBL_MIN_10_EXP DBL_MAX_10_EXP
|
|
273 syn keyword cConstant LDBL_MIN LDBL_MAX LDBL_MIN_EXP LDBL_MAX_EXP
|
|
274 syn keyword cConstant LDBL_MIN_10_EXP LDBL_MAX_10_EXP
|
|
275 syn keyword cConstant HUGE_VAL CLOCKS_PER_SEC NULL
|
|
276 syn keyword cConstant LC_ALL LC_COLLATE LC_CTYPE LC_MONETARY
|
|
277 syn keyword cConstant LC_NUMERIC LC_TIME
|
|
278 syn keyword cConstant SIG_DFL SIG_ERR SIG_IGN
|
|
279 syn keyword cConstant SIGABRT SIGFPE SIGILL SIGHUP SIGINT SIGSEGV SIGTERM
|
|
280 " Add POSIX signals as well...
|
|
281 syn keyword cConstant SIGABRT SIGALRM SIGCHLD SIGCONT SIGFPE SIGHUP
|
|
282 syn keyword cConstant SIGILL SIGINT SIGKILL SIGPIPE SIGQUIT SIGSEGV
|
|
283 syn keyword cConstant SIGSTOP SIGTERM SIGTRAP SIGTSTP SIGTTIN SIGTTOU
|
|
284 syn keyword cConstant SIGUSR1 SIGUSR2
|
|
285 syn keyword cConstant _IOFBF _IOLBF _IONBF BUFSIZ EOF WEOF
|
|
286 syn keyword cConstant FOPEN_MAX FILENAME_MAX L_tmpnam
|
|
287 syn keyword cConstant SEEK_CUR SEEK_END SEEK_SET
|
|
288 syn keyword cConstant TMP_MAX stderr stdin stdout
|
|
289 syn keyword cConstant EXIT_FAILURE EXIT_SUCCESS RAND_MAX
|
|
290 " Add POSIX errors as well
|
|
291 syn keyword cConstant E2BIG EACCES EAGAIN EBADF EBADMSG EBUSY
|
|
292 syn keyword cConstant ECANCELED ECHILD EDEADLK EDOM EEXIST EFAULT
|
|
293 syn keyword cConstant EFBIG EILSEQ EINPROGRESS EINTR EINVAL EIO EISDIR
|
|
294 syn keyword cConstant EMFILE EMLINK EMSGSIZE ENAMETOOLONG ENFILE ENODEV
|
|
295 syn keyword cConstant ENOENT ENOEXEC ENOLCK ENOMEM ENOSPC ENOSYS
|
|
296 syn keyword cConstant ENOTDIR ENOTEMPTY ENOTSUP ENOTTY ENXIO EPERM
|
|
297 syn keyword cConstant EPIPE ERANGE EROFS ESPIPE ESRCH ETIMEDOUT EXDEV
|
|
298 " math.h
|
|
299 syn keyword cConstant M_E M_LOG2E M_LOG10E M_LN2 M_LN10 M_PI M_PI_2 M_PI_4
|
|
300 syn keyword cConstant M_1_PI M_2_PI M_2_SQRTPI M_SQRT2 M_SQRT1_2
|
|
301 endif
|
|
302 if !exists("c_no_c99") " ISO C99
|
|
303 syn keyword cConstant true false
|
|
304 endif
|
|
305
|
|
306 " Accept %: for # (C99)
|
2965
|
307 syn region cPreCondit start="^\s*\(%:\|#\)\s*\(if\|ifdef\|ifndef\|elif\)\>" skip="\\$" end="$" keepend contains=cComment,cCommentL,cCppString,cCharacter,cCppParen,cParenError,cNumbers,cCommentError,cSpaceError
|
3082
|
308 syn match cPreConditMatch display "^\s*\(%:\|#\)\s*\(else\|endif\)\>"
|
7
|
309 if !exists("c_no_if0")
|
2965
|
310 syn cluster cCppOutInGroup contains=cCppInIf,cCppInElse,cCppInElse2,cCppOutIf,cCppOutIf2,cCppOutElse,cCppInSkip,cCppOutSkip
|
3082
|
311 syn region cCppOutWrapper start="^\s*\(%:\|#\)\s*if\s\+0\+\s*\($\|//\|/\*\|&\)" end=".\@=\|$" contains=cCppOutIf,cCppOutElse fold
|
2965
|
312 syn region cCppOutIf contained start="0\+" matchgroup=cCppOutWrapper end="^\s*\(%:\|#\)\s*endif\>" contains=cCppOutIf2,cCppOutElse
|
842
|
313 if !exists("c_no_if0_fold")
|
3082
|
314 syn region cCppOutIf2 contained matchgroup=cCppOutWrapper start="0\+" end="^\s*\(%:\|#\)\s*\(else\>\|elif\s\+\(0\+\s*\($\|//\|/\*\|&\)\)\@!\|endif\>\)"me=s-1 contains=cSpaceError,cCppOutSkip fold
|
842
|
315 else
|
3082
|
316 syn region cCppOutIf2 contained matchgroup=cCppOutWrapper start="0\+" end="^\s*\(%:\|#\)\s*\(else\>\|elif\s\+\(0\+\s*\($\|//\|/\*\|&\)\)\@!\|endif\>\)"me=s-1 contains=cSpaceError,cCppOutSkip
|
842
|
317 endif
|
2965
|
318 syn region cCppOutElse contained matchgroup=cCppOutWrapper start="^\s*\(%:\|#\)\s*\(else\|elif\)" end="^\s*\(%:\|#\)\s*endif\>"me=s-1 contains=TOP,cPreCondit
|
3082
|
319 syn region cCppInWrapper start="^\s*\(%:\|#\)\s*if\s\+0*[1-9]\d*\s*\($\|//\|/\*\||\)" end=".\@=\|$" contains=cCppInIf,cCppInElse fold
|
2965
|
320 syn region cCppInIf contained matchgroup=cCppInWrapper start="\d\+" end="^\s*\(%:\|#\)\s*endif\>" contains=TOP,cPreCondit
|
|
321 if !exists("c_no_if0_fold")
|
|
322 syn region cCppInElse contained start="^\s*\(%:\|#\)\s*\(else\>\|elif\s\+\(0*[1-9]\d*\s*\($\|//\|/\*\||\)\)\@!\)" end=".\@=\|$" containedin=cCppInIf contains=cCppInElse2 fold
|
|
323 else
|
|
324 syn region cCppInElse contained start="^\s*\(%:\|#\)\s*\(else\>\|elif\s\+\(0*[1-9]\d*\s*\($\|//\|/\*\||\)\)\@!\)" end=".\@=\|$" containedin=cCppInIf contains=cCppInElse2
|
|
325 endif
|
|
326 syn region cCppInElse2 contained matchgroup=cCppInWrapper start="^\s*\(%:\|#\)\s*\(else\|elif\)\([^/]\|/[^/*]\)*" end="^\s*\(%:\|#\)\s*endif\>"me=s-1 contains=cSpaceError,cCppOutSkip
|
|
327 syn region cCppOutSkip contained start="^\s*\(%:\|#\)\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*\(%:\|#\)\s*endif\>" contains=cSpaceError,cCppOutSkip
|
|
328 syn region cCppInSkip contained matchgroup=cCppInWrapper start="^\s*\(%:\|#\)\s*\(if\s\+\(\d\+\s*\($\|//\|/\*\||\|&\)\)\@!\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*\(%:\|#\)\s*endif\>" containedin=cCppOutElse,cCppInIf,cCppInSkip contains=TOP,cPreProc
|
7
|
329 endif
|
|
330 syn region cIncluded display contained start=+"+ skip=+\\\\\|\\"+ end=+"+
|
|
331 syn match cIncluded display contained "<[^>]*>"
|
|
332 syn match cInclude display "^\s*\(%:\|#\)\s*include\>\s*["<]" contains=cIncluded
|
|
333 "syn match cLineSkip "\\$"
|
3513
|
334 syn cluster cPreProcGroup contains=cPreCondit,cIncluded,cInclude,cDefine,cErrInParen,cErrInBracket,cUserLabel,cSpecial,cOctalZero,cCppOutWrapper,cCppInWrapper,@cCppOutInGroup,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom,cString,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cParen,cBracket,cMulti,cBadBlock
|
2034
|
335 syn region cDefine start="^\s*\(%:\|#\)\s*\(define\|undef\)\>" skip="\\$" end="$" keepend contains=ALLBUT,@cPreProcGroup,@Spell
|
7
|
336 syn region cPreProc start="^\s*\(%:\|#\)\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@cPreProcGroup,@Spell
|
|
337
|
|
338 " Highlight User Labels
|
2965
|
339 syn cluster cMultiGroup contains=cIncluded,cSpecial,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cUserCont,cUserLabel,cBitField,cOctalZero,cCppOutWrapper,cCppInWrapper,@cCppOutInGroup,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom,cCppParen,cCppBracket,cCppString
|
7
|
340 syn region cMulti transparent start='?' skip='::' end=':' contains=ALLBUT,@cMultiGroup,@Spell
|
|
341 " Avoid matching foo::bar() in C++ by requiring that the next char is not ':'
|
|
342 syn cluster cLabelGroup contains=cUserLabel
|
|
343 syn match cUserCont display "^\s*\I\i*\s*:$" contains=@cLabelGroup
|
|
344 syn match cUserCont display ";\s*\I\i*\s*:$" contains=@cLabelGroup
|
|
345 syn match cUserCont display "^\s*\I\i*\s*:[^:]"me=e-1 contains=@cLabelGroup
|
|
346 syn match cUserCont display ";\s*\I\i*\s*:[^:]"me=e-1 contains=@cLabelGroup
|
|
347
|
|
348 syn match cUserLabel display "\I\i*" contained
|
|
349
|
|
350 " Avoid recognizing most bitfields as labels
|
857
|
351 syn match cBitField display "^\s*\I\i*\s*:\s*[1-9]"me=e-1 contains=cType
|
|
352 syn match cBitField display ";\s*\I\i*\s*:\s*[1-9]"me=e-1 contains=cType
|
7
|
353
|
|
354 if exists("c_minlines")
|
|
355 let b:c_minlines = c_minlines
|
|
356 else
|
|
357 if !exists("c_no_if0")
|
|
358 let b:c_minlines = 50 " #if 0 constructs can be long
|
|
359 else
|
|
360 let b:c_minlines = 15 " mostly for () constructs
|
|
361 endif
|
|
362 endif
|
1620
|
363 if exists("c_curly_error")
|
|
364 syn sync fromstart
|
|
365 else
|
|
366 exec "syn sync ccomment cComment minlines=" . b:c_minlines
|
|
367 endif
|
7
|
368
|
|
369 " Define the default highlighting.
|
344
|
370 " Only used when an item doesn't have highlighting yet
|
|
371 hi def link cFormat cSpecial
|
|
372 hi def link cCppString cString
|
|
373 hi def link cCommentL cComment
|
|
374 hi def link cCommentStart cComment
|
|
375 hi def link cLabel Label
|
|
376 hi def link cUserLabel Label
|
|
377 hi def link cConditional Conditional
|
|
378 hi def link cRepeat Repeat
|
|
379 hi def link cCharacter Character
|
|
380 hi def link cSpecialCharacter cSpecial
|
|
381 hi def link cNumber Number
|
|
382 hi def link cOctal Number
|
|
383 hi def link cOctalZero PreProc " link this to Error if you want
|
|
384 hi def link cFloat Float
|
|
385 hi def link cOctalError cError
|
|
386 hi def link cParenError cError
|
|
387 hi def link cErrInParen cError
|
|
388 hi def link cErrInBracket cError
|
|
389 hi def link cCommentError cError
|
|
390 hi def link cCommentStartError cError
|
|
391 hi def link cSpaceError cError
|
|
392 hi def link cSpecialError cError
|
1620
|
393 hi def link cCurlyError cError
|
344
|
394 hi def link cOperator Operator
|
|
395 hi def link cStructure Structure
|
|
396 hi def link cStorageClass StorageClass
|
|
397 hi def link cInclude Include
|
|
398 hi def link cPreProc PreProc
|
|
399 hi def link cDefine Macro
|
|
400 hi def link cIncluded cString
|
|
401 hi def link cError Error
|
|
402 hi def link cStatement Statement
|
2965
|
403 hi def link cCppInWrapper cCppOutWrapper
|
|
404 hi def link cCppOutWrapper cPreCondit
|
|
405 hi def link cPreConditMatch cPreCondit
|
344
|
406 hi def link cPreCondit PreCondit
|
|
407 hi def link cType Type
|
|
408 hi def link cConstant Constant
|
|
409 hi def link cCommentString cString
|
|
410 hi def link cComment2String cString
|
|
411 hi def link cCommentSkip cComment
|
|
412 hi def link cString String
|
|
413 hi def link cComment Comment
|
|
414 hi def link cSpecial SpecialChar
|
|
415 hi def link cTodo Todo
|
2034
|
416 hi def link cBadContinuation Error
|
2965
|
417 hi def link cCppOutSkip cCppOutIf2
|
|
418 hi def link cCppInElse2 cCppOutIf2
|
|
419 hi def link cCppOutIf2 cCppOut2 " Old syntax group for #if 0 body
|
|
420 hi def link cCppOut2 cCppOut " Old syntax group for #if of #if 0
|
344
|
421 hi def link cCppOut Comment
|
7
|
422
|
|
423 let b:current_syntax = "c"
|
|
424
|
3237
|
425 let &cpo = s:cpo_save
|
|
426 unlet s:cpo_save
|
7
|
427 " vim: ts=8
|