1
1
" Vim syntax file
2
2
" Language: C
3
3
" Maintainer: Bram Moolenaar <Bram@vim.org>
4
- " Last Change: 2013 Jul 05
4
+ " Last Change: 2014 Nov 13
5
5
6
6
" Quit when a (custom) syntax file was already loaded
7
7
if exists (" b:current_syntax" )
@@ -35,28 +35,36 @@ syn match cSpecial display contained "\\\(x\x\+\|\o\{1,3}\|.\|$\)"
35
35
if ! exists (" c_no_utf" )
36
36
syn match cSpecial display contained " \\\( u\x\{ 4}\| U\x\{ 8}\) "
37
37
endif
38
- if exists (" c_no_cformat" )
39
- syn region cString start =+ L\= "+ skip =+ \\\\\|\\ "+ end =+ "+ contains =cSpecial,@Spell extend
40
- " cCppString: same as cString, but ends at end of line
41
- if ! exists (" cpp_no_cpp11" ) " ISO C++11
42
- syn region cCppString start =+ \( L\| u\| u8\| U\| R\| LR\| u8R\| uR\| UR\)\= "+ skip =+ \\\\\|\\ "\|\\ $+ excludenl end =+ "+ end =' $' contains =cSpecial,cFormat,@Spell
43
- else
44
- syn region cCppString start =+ L\= "+ skip =+ \\\\\|\\ "\|\\ $+ excludenl end =+ "+ end =' $' contains =cSpecial,cFormat,@Spell
45
- endif
46
- syn region cCppOut2 contained start =" 0" end =" ^\s *\( %:\| #\)\s *\( endif\>\| else\>\| elif\>\) " contains =cSpaceError,cCppSkip
47
- syn region cCppSkip contained start =" ^\s *\( %:\| #\)\s *\( if\>\| ifdef\>\| ifndef\>\) " skip =" \\ $" end =" ^\s *\( %:\| #\)\s *endif\> " contains =cSpaceError,cCppSkip
48
- else
38
+
39
+ if ! exists (" c_no_cformat" )
40
+ " Highlight % items in strings.
49
41
if ! exists (" c_no_c99" ) " ISO C99
50
42
syn match cFormat display " %\(\d\+\$\)\= [-+' #0*]*\(\d *\|\*\|\*\d\+\$\)\(\.\(\d *\|\*\|\*\d\+\$\)\)\=\( [hlLjzt]\| ll\| hh\)\=\( [aAbdiuoxXDOUfFeEgGcCsSpn]\|\[\^\= .[^]]*\]\) " contained
51
43
else
52
44
syn match cFormat display " %\(\d\+\$\)\= [-+' #0*]*\(\d *\|\*\|\*\d\+\$\)\(\.\(\d *\|\*\|\*\d\+\$\)\)\=\( [hlL]\| ll\)\=\( [bdiuoxXDOUfeEgGcCsSpn]\|\[\^\= .[^]]*\]\) " contained
53
45
endif
54
46
syn match cFormat display " %%" contained
6D40
47
+ endif
48
+
49
+ " cCppString: same as cString, but ends at end of line
50
+ if s: ft == # " cpp" && ! exists (" cpp_no_cpp11" )
51
+ " ISO C++11
52
+ syn region cString start =+ \( L\| u\| u8\| U\| R\| LR\| u8R\| uR\| UR\)\= "+ skip =+ \\\\\|\\ "+ end =+ "+ contains =cSpecial,cFormat,@Spell extend
53
+ syn region cCppString start =+ \( L\| u\| u8\| U\| R\| LR\| u8R\| uR\| UR\)\= "+ skip =+ \\\\\|\\ "\|\\ $+ excludenl end =+ "+ end =' $' contains =cSpecial,cFormat,@Spell
54
+ elseif s: ft == # " c" && ! exists (" c_no_c11" )
55
+ " ISO C99
56
+ syn region cString start =+ \% (L\| U\| u8\)\= "+ skip =+ \\\\\|\\ "+ end =+ "+ contains =cSpecial,cFormat,@Spell extend
57
+ syn region cCppString start =+ \% (L\| U\| u8\)\= "+ skip =+ \\\\\|\\ "\|\\ $+ excludenl end =+ "+ end =' $' contains =cSpecial,cFormat,@Spell
58
+ else
59
+ " older C or C++
55
60
syn region cString start =+ L\= "+ skip =+ \\\\\|\\ "+ end =+ "+ contains =cSpecial,cFormat,@Spell extend
56
- " cCppString: same as cString, but ends at end of line
57
61
syn region cCppString start =+ L\= "+ skip =+ \\\\\|\\ "\|\\ $+ excludenl end =+ "+ end =' $' contains =cSpecial,cFormat,@Spell
58
62
endif
59
63
64
+ syn region cCppSkip contained start =" ^\s *\( %:\| #\)\s *\( if\>\| ifdef\>\| ifndef\>\) " skip =" \\ $" end =" ^\s *\( %:\| #\)\s *endif\> " contains =cSpaceError,cCppSkip
65
+
66
+ syn cluster cStringGroup contains =cCppString,cCppSkip
67
+
60
68
syn match cCharacter " L\= '[^\\ ]'"
61
69
syn match cCharacter " L'[^']*'" contains =cSpecial
62
70
if exists (" c_gnu" )
@@ -70,12 +78,9 @@ syn match cSpecialCharacter display "L\='\\\o\{1,3}'"
70
78
syn match cSpecialCharacter display " '\\ x\x\{ 1,2}'"
71
79
syn match cSpecialCharacter display " L'\\ x\x\+ '"
72
80
73
- if ! exists (" c_no_c11" ) " ISO C11
74
- if exists (" c_no_cformat" )
75
- syn region cString start =+ \% (U\| u8\=\) "+ skip =+ \\\\\|\\ "+ end =+ "+ contains =cSpecial,@Spell extend
76
- else
77
- syn region cString start =+ \% (U\| u8\=\) "+ skip =+ \\\\\|\\ "+ end =+ "+ contains =cSpecial,cFormat,@Spell extend
78
- endif
81
+ if (s: ft == # " c" && ! exists (" c_no_c11" )) || (s: ft == # " cpp" && ! exists (" cpp_no_cpp11" ))
82
+ " ISO C11 or ISO C++ 11
83
+ syn region cString start =+ \% (U\| u8\=\) "+ skip =+ \\\\\|\\ "+ end =+ "+ contains =cSpecial,cFormat,@Spell extend
79
84
syn match cCharacter " [Uu]'[^\\ ]'"
80
85
syn match cCharacter " [Uu]'[^']*'" contains =cSpecial
81
86
if exists (" c_gnu" )
@@ -102,58 +107,58 @@ endif
102
107
" This should be before cErrInParen to avoid problems with #define ({ xxx })
103
108
if exists (" c_curly_error" )
104
109
syn match cCurlyError " }"
105
- syn region cBlock start =" {" end =" }" contains =ALLBUT,cBadBlock,cCurlyError,@cParenGroup,cErrInParen,cCppParen,cErrInBracket,cCppBracket,cCppString ,@Spell fold
110
+ syn region cBlock start =" {" end =" }" contains =ALLBUT,cBadBlock,cCurlyError,@cParenGroup,cErrInParen,cCppParen,cErrInBracket,cCppBracket,@cStringGroup ,@Spell fold
106
111
else
107
112
syn region cBlock start =" {" end =" }" transparent fold
108
113
endif
109
114
110
- " catch errors caused by wrong parenthesis and brackets
111
- " also accept <% for {, %> for }, <: for [ and :> for ] (C99)
115
+ " Catch errors caused by wrong parenthesis and brackets.
116
+ " Also accept <% for {, %> for }, <: for [ and :> for ] (C99)
112
117
" But avoid matching <::.
113
118
syn cluster cParenGroup contains =cParenError,cIncluded,cSpecial,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cUserLabel,cBitField,cOctalZero,@cCppOutInGroup,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom
114
119
if exists (" c_no_curly_error" )
115
120
if s: ft == # ' cpp' && ! exists (" cpp_no_cpp11" )
116
- syn region cParen transparent start =' (' end =' )' contains =ALLBUT,@cParenGroup,cCppParen,cCppString ,@Spell
121
+ syn region cParen transparent start =' (' end =' )' contains =ALLBUT,@cParenGroup,cCppParen,@cStringGroup ,@Spell
117
122
" cCppParen: same as cParen but ends at end-of-line; used in cDefine
118
123
syn region cCppParen transparent start =' (' skip =' \\ $' excludenl end =' )' end =' $' contained contains =ALLBUT,@cParenGroup,cParen,cString,@Spell
119
124
syn match cParenError display " )"
120
125
syn match cErrInParen display contained " ^^<%\| ^%>"
121
126
else
122
- syn region cParen transparent start =' (' end =' )' end =' }' me =s - 1 contains =ALLBUT,cBlock,@cParenGroup,cCppParen,cCppString ,@Spell
127
+ syn region cParen transparent start =' (' end =' )' end =' }' me =s - 1 contains =ALLBUT,cBlock,@cParenGroup,cCppParen,@cStringGroup ,@Spell
123
128
" cCppParen: same as cParen but ends at end-of-line; used in cDefine
124
129
syn region cCppParen transparent start =' (' skip =' \\ $' excludenl end =' )' end =' $' contained contains =ALLBUT,@cParenGroup,cParen,cString,@Spell
125
130
syn match cParenError display " )"
126
131
syn match cErrInParen display contained " ^[{}]\| ^<%\| ^%>"
127
132
endif
128
133
elseif exists (" c_no_bracket_error" )
129
134
if s: ft == # ' cpp' && ! exists (" cpp_no_cpp11" )
130
- syn region cParen transparent start =' (' end =' )' contains =ALLBUT,@cParenGroup,cCppParen,cCppString ,@Spell
135
+ syn region cParen transparent start =' (' end =' )' contains =ALLBUT,@cParenGroup,cCppParen,@cStringGroup ,@Spell
131
136
" cCppParen: same as cParen but ends at end-of-line; used in cDefine
132
137
syn region cCppParen transparent start =' (' skip =' \\ $' excludenl end =' )' end =' $' contained contains =ALLBUT,@cParenGroup,cParen,cString,@Spell
133
138
syn match cParenError display " )"
134
139
syn match cErrInParen display contained " <%\| %>"
135
140
else
136
- syn region cParen transparent start =' (' end =' )' end =' }' me =s - 1 contains =ALLBUT,cBlock,@cParenGroup,cCppParen,cCppString ,@Spell
141
+ syn region cParen transparent start =' (' end =' )' end =' }' me =s - 1 contains =ALLBUT,cBlock,@cParenGroup,cCppParen,@cStringGroup ,@Spell
137
142
" cCppParen: same as cParen but ends at end-of-line; used in cDefine
138
143
syn region cCppParen transparent start =' (' skip =' \\ $' excludenl end =' )' end =' $' contained contains =ALLBUT,@cParenGroup,cParen,cString,@Spell
139
144
syn match cParenError display " )"
140
145
syn match cErrInParen display contained " [{}]\| <%\| %>"
141
146
endif
142
147
else
143
148
if s: ft == # ' cpp' && ! exists (" cpp_no_cpp11" )
144
- syn region cParen transparent start =' (' end =' )' contains =ALLBUT,@cParenGroup,cCppParen,cErrInBracket,cCppBracket,cCppString ,@Spell
149
+ syn region cParen transparent start =' (' end =' )' contains =ALLBUT,@cParenGroup,cCppParen,cErrInBracket,cCppBracket,@cStringGroup ,@Spell
145
150
" cCppParen: same as cParen but ends at end-of-line; used in cDefine
146
151
syn region cCppParen transparent start =' (' skip =' \\ $' excludenl end =' )' end =' $' contained contains =ALLBUT,@cParenGroup,cErrInBracket,cParen,cBracket,cString,@Spell
147
152
syn match cParenError display " [\] )]"
148
153
syn match cErrInParen display contained " <%\| %>"
149
- syn region cBracket transparent start =' \[\| <::\@ !' end =' ]\| :>' contains =ALLBUT,@cParenGroup,cErrInParen,cCppParen,cCppBracket,cCppString ,@Spell
154
+ syn region cBracket transparent start =' \[\| <::\@ !' end =' ]\| :>' contains =ALLBUT,@cParenGroup,cErrInParen,cCppParen,cCppBracket,@cStringGroup ,@Spell
150
155
else
151
- syn region cParen transparent start =' (' end =' )' end =' }' me =s - 1 contains =ALLBUT,cBlock,@cParenGroup,cCppParen,cErrInBracket,cCppBracket,cCppString ,@Spell
156
+ syn region cParen transparent start =' (' end =' )' end =' }' me =s - 1 contains =ALLBUT,cBlock,@cParenGroup,cCppParen,cErrInBracket,cCppBracket,@cStringGroup ,@Spell
152
157
" cCppParen: same as cParen but ends at end-of-line; used in cDefine
153
158
syn region cCppParen transparent start =' (' skip =' \\ $' excludenl end =' )' end =' $' contained contains =ALLBUT,@cParenGroup,cErrInBracket,cParen,cBracket,cString,@Spell
154
159
syn match cParenError display " [\] )]"
155
160
syn match cErrInParen display contained " [\] {}]\| <%\| %>"
156
- syn region cBracket transparent start =' \[\| <::\@ !' end =' ]\| :>' end =' }' me =s - 1 contains =ALLBUT,cBlock,@cParenGroup,cErrInParen,cCppParen,cCppBracket,cCppString ,@Spell
161
+ syn region cBracket transparent start =' \[\| <::\@ !' end =' ]\| :>' end =' }' me =s - 1 contains =ALLBUT,cBlock,@cParenGroup,cErrInParen,cCppParen,cCppBracket,@cStringGroup ,@Spell
157
162
endif
158
163
" cCppBracket: same as cParen but ends at end-of-line; used in cDefine
159
164
syn region cCppBracket transparent start =' \[\| <::\@ !' skip =' \\ $' excludenl end =' ]\| :>' end =' $' contained contains =ALLBUT,@cParenGroup,cErrInParen,cParen,cBracket,cString,@Spell
@@ -322,6 +327,9 @@ if !exists("c_no_ansi") || exists("c_ansi_constants") || exists("c_gnu")
322
327
syn keyword cConstant SEEK_CUR SEEK_END SEEK_SET
323
328
syn keyword cConstant TMP_MAX stderr stdin stdout
324
329
syn keyword cConstant EXIT_FAILURE EXIT_SUCCESS RAND_MAX
330
+ " POSIX 2001
331
+ syn keyword cConstant SIGBUS SIGPOLL SIGPROF SIGSYS SIGURG
332
+ syn keyword cConstant SIGVTALRM SIGXCPU SIGXFSZ
325
333
" Add POSIX errors as well
326
334
syn keyword cConstant E2BIG EACCES EAGAIN EBADF EBADMSG EBUSY
327
335
syn keyword cConstant ECANCELED ECHILD EDEADLK EDOM EEXIST EFAULT
@@ -373,19 +381,14 @@ syn region cPreProc start="^\s*\(%:\|#\)\s*\(pragma\>\|line\>\|warning\>\|warn\>
373
381
" Highlight User Labels
374
382
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
375
383
if s: ft == # ' c' || exists (" cpp_no_cpp11" )
376
- syn region cMulti transparent start =' ?' skip =' ::' end =' :' contains =ALLBUT,@cMultiGroup,@Spell
384
+ syn region cMulti transparent start =' ?' skip =' ::' end =' :' contains =ALLBUT,@cMultiGroup,@Spell,@cStringGroup
377
385
endif
378
386
" Avoid matching foo::bar() in C++ by requiring that the next char is not ':'
379
387
syn cluster cLabelGroup contains =cUserLabel
380
388
syn match cUserCont display " ^\s *\I\i *\s *:$" contains =@cLabelGroup
381
389
syn match cUserCont display " ;\s *\I\i *\s *:$" contains =@cLabelGroup
382
- if s: ft == # ' cpp'
383
- syn match cUserCont display " ^\s *\% (class\| struct\| enum\)\@ !\I\i *\s *:[^:]" me =e - 1 contains =@cLabelGroup
38
F438
4
- syn match cUserCont display " ;\s *\% (class\| struct\| enum\)\@ !\I\i *\s *:[^:]" me =e - 1 contains =@cLabelGroup
385
- else
386
- syn match cUserCont display " ^\s *\I\i *\s *:[^:]" me =e - 1 contains =@cLabelGroup
387
- syn match cUserCont display " ;\s *\I\i *\s *:[^:]" me =e - 1 contains =@cLabelGroup
388
- endif
390
+ syn match cUserCont display " ^\s *\I\i *\s *:[^:]" me =e - 1 contains =@cLabelGroup
391
+ syn match cUserCont display " ;\s *\I\i *\s *:[^:]" me =e - 1 contains =@cLabelGroup
389
392
390
393
syn match cUserLabel display " \I\i *" contained
391
394
@@ -458,8 +461,7 @@ hi def link cTodo Todo
458
461
hi def link cBadContinuation Error
459
462
hi def link cCppOutSkip cCppOutIf2
460
463
hi def link cCppInElse2 cCppOutIf2
461
- hi def link cCppOutIf2 cCppOut2 " Old syntax group for #if 0 body
462
- hi def link cCppOut2 cCppOut " Old syntax group for #if of #if 0
464
+ hi def link cCppOutIf2 cCppOut
463
465
hi def link cCppOut Comment
464
466
465
467
let b: current_syntax = " c"
0 commit comments