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