|
fyrenmoo@2671
|
1 |
#!/usr/bin/perl -w |
|
fyrenmoo@2671
|
2 |
|
|
fyrenmoo@2671
|
3 |
use strict; |
|
fyrenmoo@2671
|
4 |
|
|
fyrenmoo@2671
|
5 |
my $group = 4; |
|
fyrenmoo@2671
|
6 |
|
|
fyrenmoo@2671
|
7 |
my @files = <*.inc>; |
|
fyrenmoo@2671
|
8 |
|
|
fyrenmoo@2671
|
9 |
#the header and footer strings come from naris' original SourcePawn syntax file |
|
fyrenmoo@2671
|
10 |
#skip way down below for actual code |
|
fyrenmoo@2671
|
11 |
my $header = <<'HEADER'; |
|
fyrenmoo@2671
|
12 |
" Vim syntax file |
|
fyrenmoo@2671
|
13 |
" Language: SourcePawn |
|
fyrenmoo@2671
|
14 |
" Generated by vimsyntax.pl |
|
fyrenmoo@2671
|
15 |
|
|
fyrenmoo@2671
|
16 |
" Quit when a (custom) syntax file was already loaded |
|
fyrenmoo@2671
|
17 |
"if exists("b:current_syntax") |
|
fyrenmoo@2671
|
18 |
" finish |
|
fyrenmoo@2671
|
19 |
"endif |
|
fyrenmoo@2671
|
20 |
|
|
fyrenmoo@2671
|
21 |
" A bunch of useful C keywords |
|
fyrenmoo@2671
|
22 |
syn keyword cStatement goto break return continue assert state sleep exit |
|
fyrenmoo@2671
|
23 |
syn keyword cLabel case default |
|
fyrenmoo@2671
|
24 |
syn keyword cConditional if else switch |
|
fyrenmoo@2671
|
25 |
syn keyword cRepeat while for do |
|
fyrenmoo@2671
|
26 |
|
|
fyrenmoo@2671
|
27 |
syn keyword cTodo contained TODO FIXME XXX |
|
fyrenmoo@2671
|
28 |
|
|
fyrenmoo@2671
|
29 |
" cCommentGroup allows adding matches for special things in comments |
|
fyrenmoo@2671
|
30 |
syn cluster cCommentGroup contains=cTodo |
|
fyrenmoo@2671
|
31 |
|
|
fyrenmoo@2671
|
32 |
" String and Character constants |
|
fyrenmoo@2671
|
33 |
" Highlight special characters (those which have a backslash) differently |
|
fyrenmoo@2671
|
34 |
syn match cSpecial display contained "\\\(x\x\+\|\o\{1,3}\|.\|$\)" |
|
fyrenmoo@2671
|
35 |
if !exists("c_no_utf") |
|
fyrenmoo@2671
|
36 |
syn match cSpecial display contained "\\\(u\x\{4}\|U\x\{8}\)" |
|
fyrenmoo@2671
|
37 |
endif |
|
fyrenmoo@2671
|
38 |
if exists("c_no_cformat") |
|
fyrenmoo@2671
|
39 |
syn region cString start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,@Spell |
|
fyrenmoo@2671
|
40 |
" cCppString: same as cString, but ends at end of line |
|
fyrenmoo@2671
|
41 |
syn region cCppString start=+L\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=cSpecial,@Spell |
|
fyrenmoo@2671
|
42 |
else |
|
fyrenmoo@2671
|
43 |
if !exists("c_no_c99") " ISO C99 |
|
fyrenmoo@2671
|
44 |
syn match cFormat display "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlLjzt]\|ll\|hh\)\=\([aAbdiuoxXDOUfFeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained |
|
fyrenmoo@2671
|
45 |
else |
|
fyrenmoo@2671
|
46 |
syn match cFormat display "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlL]\|ll\)\=\([bdiuoxXDOUfeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained |
|
fyrenmoo@2671
|
47 |
endif |
|
fyrenmoo@2671
|
48 |
syn match cFormat display "%%" contained |
|
fyrenmoo@2671
|
49 |
syn region cString start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,cFormat,@Spell |
|
fyrenmoo@2671
|
50 |
" cCppString: same as cString, but ends at end of line |
|
fyrenmoo@2671
|
51 |
syn region cCppString start=+L\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=cSpecial,cFormat,@Spell |
|
fyrenmoo@2671
|
52 |
endif |
|
fyrenmoo@2671
|
53 |
|
|
fyrenmoo@2671
|
54 |
syn match cCharacter "L\='[^\\]'" |
|
fyrenmoo@2671
|
55 |
syn match cCharacter "L'[^']*'" contains=cSpecial |
|
fyrenmoo@2671
|
56 |
if exists("c_gnu") |
|
fyrenmoo@2671
|
57 |
syn match cSpecialError "L\='\\[^'\"?\\abefnrtv]'" |
|
fyrenmoo@2671
|
58 |
syn match cSpecialCharacter "L\='\\['\"?\\abefnrtv]'" |
|
fyrenmoo@2671
|
59 |
else |
|
fyrenmoo@2671
|
60 |
syn match cSpecialError "L\='\\[^'\"?\\abfnrtv]'" |
|
fyrenmoo@2671
|
61 |
syn match cSpecialCharacter "L\='\\['\"?\\abfnrtv]'" |
|
fyrenmoo@2671
|
62 |
endif |
|
fyrenmoo@2671
|
63 |
syn match cSpecialCharacter display "L\='\\\o\{1,3}'" |
|
fyrenmoo@2671
|
64 |
syn match cSpecialCharacter display "'\\x\x\{1,2}'" |
|
fyrenmoo@2671
|
65 |
syn match cSpecialCharacter display "L'\\x\x\+'" |
|
fyrenmoo@2671
|
66 |
|
|
fyrenmoo@2671
|
67 |
"when wanted, highlight trailing white space |
|
fyrenmoo@2671
|
68 |
if exists("c_space_errors") |
|
fyrenmoo@2671
|
69 |
if !exists("c_no_trail_space_error") |
|
fyrenmoo@2671
|
70 |
syn match cSpaceError display excludenl "\s\+$" |
|
fyrenmoo@2671
|
71 |
endif |
|
fyrenmoo@2671
|
72 |
if !exists("c_no_tab_space_error") |
|
fyrenmoo@2671
|
73 |
syn match cSpaceError display " \+\t"me=e-1 |
|
fyrenmoo@2671
|
74 |
endif |
|
fyrenmoo@2671
|
75 |
endif |
|
fyrenmoo@2671
|
76 |
|
|
fyrenmoo@2671
|
77 |
" This should be before cErrInParen to avoid problems with #define ({ xxx }) |
|
fyrenmoo@2671
|
78 |
syntax region cBlock start="{" end="}" transparent fold |
|
fyrenmoo@2671
|
79 |
|
|
fyrenmoo@2671
|
80 |
"catch errors caused by wrong parenthesis and brackets |
|
fyrenmoo@2671
|
81 |
" also accept <% for {, %> for }, <: for [ and :> for ] (C99) |
|
fyrenmoo@2671
|
82 |
" But avoid matching <::. |
|
fyrenmoo@2671
|
83 |
syn cluster cParenGroup contains=cParenError,cIncluded,cSpecial,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cUserCont,cUserLabel,cCommentSkip,cCppOut,cCppOut2,cCppSkip,cFormat,cNumber,cFloat,cNumbersCom |
|
fyrenmoo@2671
|
84 |
if exists("c_no_curly_error") |
|
fyrenmoo@2671
|
85 |
syn region cParen transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cCppString,@Spell |
|
fyrenmoo@2671
|
86 |
" cCppParen: same as cParen but ends at end-of-line; used in cDefine |
|
fyrenmoo@2671
|
87 |
syn region cCppParen transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell |
|
fyrenmoo@2671
|
88 |
syn match cParenError display ")" |
|
fyrenmoo@2671
|
89 |
syn match cErrInParen display contained "^[{}]\|^<%\|^%>" |
|
fyrenmoo@2671
|
90 |
elseif exists("c_no_bracket_error") |
|
fyrenmoo@2671
|
91 |
syn region cParen transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cCppString,@Spell |
|
fyrenmoo@2671
|
92 |
" cCppParen: same as cParen but ends at end-of-line; used in cDefine |
|
fyrenmoo@2671
|
93 |
syn region cCppParen transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell |
|
fyrenmoo@2671
|
94 |
syn match cParenError display ")" |
|
fyrenmoo@2671
|
95 |
syn match cErrInParen display contained "[{}]\|<%\|%>" |
|
fyrenmoo@2671
|
96 |
else |
|
fyrenmoo@2671
|
97 |
syn region cParen transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cErrInBracket,cCppBracket,cCppString,@Spell |
|
fyrenmoo@2671
|
98 |
" cCppParen: same as cParen but ends at end-of-line; used in cDefine |
|
fyrenmoo@2671
|
99 |
syn region cCppParen transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cErrInBracket,cParen,cBracket,cString,@Spell |
|
fyrenmoo@2671
|
100 |
syn match cParenError display "[\])]" |
|
fyrenmoo@2671
|
101 |
syn match cErrInParen display contained "[\]{}]\|<%\|%>" |
|
fyrenmoo@2671
|
102 |
syn region cBracket transparent start='\[\|<::\@!' end=']\|:>' contains=ALLBUT,@cParenGroup,cErrInParen,cCppParen,cCppBracket,cCppString,@Spell |
|
fyrenmoo@2671
|
103 |
" cCppBracket: same as cParen but ends at end-of-line; used in cDefine |
|
fyrenmoo@2671
|
104 |
syn region cCppBracket transparent start='\[\|<::\@!' skip='\\$' excludenl end=']\|:>' end='$' contained contains=ALLBUT,@cParenGroup,cErrInParen,cParen,cBracket,cString,@Spell |
|
fyrenmoo@2671
|
105 |
syn match cErrInBracket display contained "[);{}]\|<%\|%>" |
|
fyrenmoo@2671
|
106 |
endif |
|
fyrenmoo@2671
|
107 |
|
|
fyrenmoo@2671
|
108 |
"integer number, or floating point number without a dot and with "f". |
|
fyrenmoo@2671
|
109 |
syn case ignore |
|
fyrenmoo@2671
|
110 |
syn match cNumbers display transparent "\<\d\|\.\d" contains=cNumber,cFloat |
|
fyrenmoo@2671
|
111 |
" Same (for comments) |
|
fyrenmoo@2671
|
112 |
syn match cNumbersCom display contained transparent "\<\d\|\.\d" contains=cNumber,cFloat |
|
fyrenmoo@2671
|
113 |
syn match cNumber display contained "\d\+\(u\=l\{0,2}\|ll\=u\)\>" |
|
fyrenmoo@2671
|
114 |
"hex number |
|
fyrenmoo@2671
|
115 |
syn match cNumber display contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>" |
|
fyrenmoo@2671
|
116 |
syn match cFloat display contained "\d\+f" |
|
fyrenmoo@2671
|
117 |
"floating point number, with dot, optional exponent |
|
fyrenmoo@2671
|
118 |
syn match cFloat display contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\=" |
|
fyrenmoo@2671
|
119 |
"floating point number, starting with a dot, optional exponent |
|
fyrenmoo@2671
|
120 |
syn match cFloat display contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>" |
|
fyrenmoo@2671
|
121 |
"floating point number, without dot, with exponent |
|
fyrenmoo@2671
|
122 |
syn match cFloat display contained "\d\+e[-+]\=\d\+[fl]\=\>" |
|
fyrenmoo@2671
|
123 |
if !exists("c_no_c99") |
|
fyrenmoo@2671
|
124 |
"hexadecimal floating point number, optional leading digits, with dot, with exponent |
|
fyrenmoo@2671
|
125 |
syn match cFloat display contained "0x\x*\.\x\+p[-+]\=\d\+[fl]\=\>" |
|
fyrenmoo@2671
|
126 |
"hexadecimal floating point number, with leading digits, optional dot, with exponent |
|
fyrenmoo@2671
|
127 |
syn match cFloat display contained "0x\x\+\.\=p[-+]\=\d\+[fl]\=\>" |
|
fyrenmoo@2671
|
128 |
endif |
|
fyrenmoo@2671
|
129 |
|
|
fyrenmoo@2671
|
130 |
syn case match |
|
fyrenmoo@2671
|
131 |
|
|
fyrenmoo@2671
|
132 |
if exists("c_comment_strings") |
|
fyrenmoo@2671
|
133 |
" A comment can contain cString, cCharacter and cNumber. |
|
fyrenmoo@2671
|
134 |
" But a "*/" inside a cString in a cComment DOES end the comment! So we |
|
fyrenmoo@2671
|
135 |
" need to use a special type of cString: cCommentString, which also ends on |
|
fyrenmoo@2671
|
136 |
" "*/", and sees a "*" at the start of the line as comment again. |
|
fyrenmoo@2671
|
137 |
" Unfortunately this doesn't very well work for // type of comments :-( |
|
fyrenmoo@2671
|
138 |
syntax match cCommentSkip contained "^\s*\*\($\|\s\+\)" |
|
fyrenmoo@2671
|
139 |
syntax region cCommentString contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=cSpecial,cCommentSkip |
|
fyrenmoo@2671
|
140 |
syntax region cComment2String contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=cSpecial |
|
fyrenmoo@2671
|
141 |
syntax region cCommentL start="//" skip="\\$" end="$" keepend contains=@cCommentGroup,cComment2String,cCharacter,cNumbersCom,cSpaceError,@Spell |
|
fyrenmoo@2671
|
142 |
if exists("c_no_comment_fold") |
|
fyrenmoo@2671
|
143 |
" Use "extend" here to have preprocessor lines not terminate halfway a |
|
fyrenmoo@2671
|
144 |
" comment. |
|
fyrenmoo@2671
|
145 |
syntax region cComment matchgroup=cCommentStart start="/\*" end="\*/" contains=@cCommentGroup,cCommentStartError,cCommentString,cCharacter,cNumbersCom,cSpaceError,@Spell extend |
|
fyrenmoo@2671
|
146 |
else |
|
fyrenmoo@2671
|
147 |
syntax region cComment matchgroup=cCommentStart start="/\*" end="\*/" contains=@cCommentGroup,cCommentStartError,cCommentString,cCharacter,cNumbersCom,cSpaceError,@Spell fold extend |
|
fyrenmoo@2671
|
148 |
endif |
|
fyrenmoo@2671
|
149 |
else |
|
fyrenmoo@2671
|
150 |
syn region cCommentL start="//" skip="\\$" end="$" keepend contains=@cCommentGroup,cSpaceError,@Spell |
|
fyrenmoo@2671
|
151 |
if exists("c_no_comment_fold") |
|
fyrenmoo@2671
|
152 |
syn region cComment matchgroup=cCommentStart start="/\*" end="\*/" contains=@cCommentGroup,cCommentStartError,cSpaceError,@Spell |
|
fyrenmoo@2671
|
153 |
else |
|
fyrenmoo@2671
|
154 |
syn region cComment matchgroup=cCommentStart start="/\*" end="\*/" contains=@cCommentGroup,cCommentStartError,cSpaceError,@Spell fold |
|
fyrenmoo@2671
|
155 |
endif |
|
fyrenmoo@2671
|
156 |
endif |
|
fyrenmoo@2671
|
157 |
" keep a // comment separately, it terminates a preproc. conditional |
|
fyrenmoo@2671
|
158 |
syntax match cCommentError display "\*/" |
|
fyrenmoo@2671
|
159 |
syntax match cCommentStartError display "/\*"me=e-1 contained |
|
fyrenmoo@2671
|
160 |
|
|
fyrenmoo@2671
|
161 |
syn keyword cOperator sizeof tagof state defined char |
|
fyrenmoo@2671
|
162 |
|
|
fyrenmoo@2671
|
163 |
syn keyword cTag any bool Fixed Float String Function |
|
fyrenmoo@2671
|
164 |
|
|
fyrenmoo@2671
|
165 |
syn keyword cStructure enum |
|
fyrenmoo@2671
|
166 |
syn keyword cStorageClass static const stock native forward |
|
fyrenmoo@2671
|
167 |
|
|
fyrenmoo@2671
|
168 |
" Constants |
|
fyrenmoo@2671
|
169 |
" ====== |
|
fyrenmoo@2671
|
170 |
syn keyword cConstant cellbits cellmax cellmin charbits charmax charmin ucharmax __Pawn debug |
|
fyrenmoo@2671
|
171 |
syn keyword cConstant true false |
|
fyrenmoo@2671
|
172 |
HEADER |
|
fyrenmoo@2671
|
173 |
|
|
fyrenmoo@2671
|
174 |
my $footer = <<'FOOTER'; |
|
fyrenmoo@2671
|
175 |
" Accept %: for # (C99) |
|
fyrenmoo@2671
|
176 |
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 |
|
fyrenmoo@2671
|
177 |
syn match cPreCondit display "^\s*\(%:\|#\)\s*\(else\|endif\)\>" |
|
fyrenmoo@2671
|
178 |
if !exists("c_no_if0") |
|
fyrenmoo@2671
|
179 |
if !exists("c_no_if0_fold") |
|
fyrenmoo@2671
|
180 |
syn region cCppOut start="^\s*\(%:\|#\)\s*if\s\+0\+\>" end=".\@=\|$" contains=cCppOut2 fold |
|
fyrenmoo@2671
|
181 |
else |
|
fyrenmoo@2671
|
182 |
syn region cCppOut start="^\s*\(%:\|#\)\s*if\s\+0\+\>" end=".\@=\|$" contains=cCppOut2 |
|
fyrenmoo@2671
|
183 |
endif |
|
fyrenmoo@2671
|
184 |
syn region cCppOut2 contained start="0" end="^\s*\(%:\|#\)\s*\(endif\>\|else\>\|elif\>\)" contains=cSpaceError,cCppSkip |
|
fyrenmoo@2671
|
185 |
syn region cCppSkip contained start="^\s*\(%:\|#\)\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*\(%:\|#\)\s*endif\>" contains=cSpaceError,cCppSkip |
|
fyrenmoo@2671
|
186 |
endif |
|
fyrenmoo@2671
|
187 |
syn region cIncluded display contained start=+"+ skip=+\\\\\|\\"+ end=+"+ |
|
fyrenmoo@2671
|
188 |
syn match cIncluded display contained "<[^>]*>" |
|
fyrenmoo@2671
|
189 |
syn match cInclude display "^\s*\(%:\|#\)\s*\(include\>\|tryinclude\>\)\s*["<]" contains=cIncluded |
|
fyrenmoo@2671
|
190 |
"syn match cLineSkip "\\$" |
|
fyrenmoo@2671
|
191 |
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 |
|
fyrenmoo@2671
|
192 |
syn region cDefine start="^\s*\(%:\|#\)\s*\(define\|undef\)\>" skip="\\$" end="$" end="//"me=s-1 keepend contains=ALLBUT,@cPreProcGroup,@Spell |
|
fyrenmoo@2671
|
193 |
syn region cPreProc start="^\s*\(%:\|#\)\s*\(assert\>\|emit\>\|endinput\>\|endscript\>\|pragma\>\|line\>\|section\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@cPreProcGroup,@Spell |
|
fyrenmoo@2671
|
194 |
|
|
fyrenmoo@2671
|
195 |
" Highlight User Labels |
|
fyrenmoo@2671
|
196 |
syn cluster cMultiGroup contains=cIncluded,cSpecial,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cUserCont,cUserLabel,cCppOut,cCppOut2,cCppSkip,cFormat,cNumber,cFloat,cNumbersCom,cCppParen,cCppBracket,cCppString |
|
fyrenmoo@2671
|
197 |
syn region cMulti transparent start='?' skip='::' end=':' contains=ALLBUT,@cMultiGroup,@Spell |
|
fyrenmoo@2671
|
198 |
" Avoid matching foo::bar() in C++ by requiring that the next char is not ':' |
|
fyrenmoo@2671
|
199 |
syn cluster cLabelGroup contains=cUserLabel |
|
fyrenmoo@2671
|
200 |
syn match cUserCont display "^\s*\I\i*\s*:$" contains=@cLabelGroup |
|
fyrenmoo@2671
|
201 |
syn match cUserCont display ";\s*\I\i*\s*:$" contains=@cLabelGroup |
|
fyrenmoo@2671
|
202 |
syn match cUserCont display "^\s*\I\i*\s*:[^:]"me=e-1 contains=@cLabelGroup |
|
fyrenmoo@2671
|
203 |
syn match cUserCont display ";\s*\I\i*\s*:[^:]"me=e-1 contains=@cLabelGroup |
|
fyrenmoo@2671
|
204 |
|
|
fyrenmoo@2671
|
205 |
syn match cUserLabel display "\I\i*" contained |
|
fyrenmoo@2671
|
206 |
|
|
fyrenmoo@2671
|
207 |
" C++ extentions |
|
fyrenmoo@2671
|
208 |
syn keyword cppStatement new decl |
|
fyrenmoo@2671
|
209 |
syn keyword cppAccess public |
|
fyrenmoo@2671
|
210 |
syn keyword cppOperator operator |
|
fyrenmoo@2671
|
211 |
|
|
fyrenmoo@2671
|
212 |
if exists("c_minlines") |
|
fyrenmoo@2671
|
213 |
let b:c_minlines = c_minlines |
|
fyrenmoo@2671
|
214 |
else |
|
fyrenmoo@2671
|
215 |
if !exists("c_no_if0") |
|
fyrenmoo@2671
|
216 |
let b:c_minlines = 50 " #if 0 constructs can be long |
|
fyrenmoo@2671
|
217 |
else |
|
fyrenmoo@2671
|
218 |
let b:c_minlines = 15 " mostly for () constructs |
|
fyrenmoo@2671
|
219 |
endif |
|
fyrenmoo@2671
|
220 |
endif |
|
fyrenmoo@2671
|
221 |
exec "syn sync ccomment cComment minlines=" . b:c_minlines |
|
fyrenmoo@2671
|
222 |
|
|
fyrenmoo@2671
|
223 |
" Define the default highlighting. |
|
fyrenmoo@2671
|
224 |
" Only used when an item doesn't have highlighting yet |
|
fyrenmoo@2671
|
225 |
hi def link cFormat cSpecial |
|
fyrenmoo@2671
|
226 |
hi def link cCppString cString |
|
fyrenmoo@2671
|
227 |
hi def link cCommentL cComment |
|
fyrenmoo@2671
|
228 |
hi def link cCommentStart cComment |
|
fyrenmoo@2671
|
229 |
hi def link cLabel Label |
|
fyrenmoo@2671
|
230 |
hi def link cUserLabel Label |
|
fyrenmoo@2671
|
231 |
hi def link cConditional Conditional |
|
fyrenmoo@2671
|
232 |
hi def link cRepeat Repeat |
|
fyrenmoo@2671
|
233 |
hi def link cCharacter Character |
|
fyrenmoo@2671
|
234 |
hi def link cSpecialCharacter cSpecial |
|
fyrenmoo@2671
|
235 |
hi def link cNumber Number |
|
fyrenmoo@2671
|
236 |
hi def link cFloat Float |
|
fyrenmoo@2671
|
237 |
hi def link cParenError cError |
|
fyrenmoo@2671
|
238 |
hi def link cErrInParen cError |
|
fyrenmoo@2671
|
239 |
hi def link cErrInBracket cError |
|
fyrenmoo@2671
|
240 |
hi def link cCommentError cError |
|
fyrenmoo@2671
|
241 |
hi def link cCommentStartError cError |
|
fyrenmoo@2671
|
242 |
hi def link cSpaceError cError |
|
fyrenmoo@2671
|
243 |
hi def link cSpecialError cError |
|
fyrenmoo@2671
|
244 |
hi def link cOperator Operator |
|
fyrenmoo@2671
|
245 |
hi def link cStructure Structure |
|
fyrenmoo@2671
|
246 |
hi def link cStorageClass StorageClass |
|
fyrenmoo@2671
|
247 |
hi def link cInclude Include |
|
fyrenmoo@2671
|
248 |
hi def link cPreProc PreProc |
|
fyrenmoo@2671
|
249 |
hi def link cDefine Macro |
|
fyrenmoo@2671
|
250 |
hi def link cIncluded cString |
|
fyrenmoo@2671
|
251 |
hi def link cError Error |
|
fyrenmoo@2671
|
252 |
hi def link cStatement Statement |
|
fyrenmoo@2671
|
253 |
hi def link cPreCondit PreCondit |
|
fyrenmoo@2671
|
254 |
hi def link cTag Type |
|
fyrenmoo@2671
|
255 |
hi def link cConstant Constant |
|
fyrenmoo@2671
|
256 |
hi def link cCommentString cString |
|
fyrenmoo@2671
|
257 |
hi def link cComment2String cString |
|
fyrenmoo@2671
|
258 |
hi def link cCommentSkip cComment |
|
fyrenmoo@2671
|
259 |
hi def link cString String |
|
fyrenmoo@2671
|
260 |
hi def link cComment Comment |
|
fyrenmoo@2671
|
261 |
hi def link cSpecial SpecialChar |
|
fyrenmoo@2671
|
262 |
hi def link cTodo Todo |
|
fyrenmoo@2671
|
263 |
hi def link cCppSkip cCppOut |
|
fyrenmoo@2671
|
264 |
hi def link cCppOut2 cCppOut |
|
fyrenmoo@2671
|
265 |
hi def link cCppOut Comment |
|
fyrenmoo@2671
|
266 |
|
|
fyrenmoo@2671
|
267 |
hi def link cppAccess cppStatement |
|
fyrenmoo@2671
|
268 |
hi def link cppOperator Operator |
|
fyrenmoo@2671
|
269 |
hi def link cppStatement Statement |
|
fyrenmoo@2671
|
270 |
|
|
fyrenmoo@2671
|
271 |
hi def link cFunction Function |
|
fyrenmoo@2671
|
272 |
hi def link cForward Function |
|
fyrenmoo@2671
|
273 |
|
|
fyrenmoo@2671
|
274 |
let b:current_syntax = "sourcepawn" |
|
fyrenmoo@2671
|
275 |
|
|
fyrenmoo@2671
|
276 |
" vim: ts=4 |
|
fyrenmoo@2671
|
277 |
FOOTER |
|
fyrenmoo@2671
|
278 |
|
|
fyrenmoo@2671
|
279 |
print $header; |
|
fyrenmoo@2671
|
280 |
|
|
fyrenmoo@2671
|
281 |
for my $file (@files) |
|
fyrenmoo@2671
|
282 |
{ |
|
fyrenmoo@2671
|
283 |
my @constants; |
|
fyrenmoo@2671
|
284 |
my @tags; |
|
fyrenmoo@2671
|
285 |
my @functions; |
|
fyrenmoo@2671
|
286 |
my @forwards; |
|
fyrenmoo@2671
|
287 |
my $inEnum = 0; |
|
fyrenmoo@2671
|
288 |
|
|
fyrenmoo@2671
|
289 |
open(FILE, $file) or die "couldn't open $file: $!"; |
|
fyrenmoo@2671
|
290 |
|
|
fyrenmoo@2671
|
291 |
foreach (<FILE>) |
|
fyrenmoo@2671
|
292 |
{ |
|
fyrenmoo@2671
|
293 |
if ($inEnum == 0) |
|
fyrenmoo@2671
|
294 |
{ |
|
fyrenmoo@2671
|
295 |
if (/^\s*#define\s+([^_]\w+)\s+\S/) { push(@constants, $1); } |
|
fyrenmoo@2671
|
296 |
elsif (/^\s*public(?:\s+const)?\s+(?:\w+:)?([^_](?>\w+))(?!:)/) { push(@constants, $1); } |
|
fyrenmoo@2671
|
297 |
elsif (/^\s*(?:native|stock)\s+(?:\w+:)?(\w+)\(/) { push(@functions, $1); } |
|
fyrenmoo@2671
|
298 |
elsif (/^\s*functag public\s+(?:\w+:)?(\w+)/) { push(@tags, $1); } |
|
fyrenmoo@2671
|
299 |
elsif (/^\s*enum\s+(\w+)/) { push(@tags, $1); $inEnum = 1; } |
|
fyrenmoo@2671
|
300 |
elsif (/^\s*(?:struct|funcenum)\s+(\w+)/) { push(@tags, $1); } |
|
fyrenmoo@2671
|
301 |
elsif (/^\s*forward\s+(?:\w+:)?(\w+)\(/) { push(@forwards, $1); } |
|
fyrenmoo@2671
|
302 |
} |
|
fyrenmoo@2671
|
303 |
else |
|
fyrenmoo@2671
|
304 |
{ |
|
fyrenmoo@2671
|
305 |
if (/^\s*}/) { $inEnum = 0; } |
|
fyrenmoo@2671
|
306 |
elsif (/^\t?(\w+)/) { push(@constants, $1); } |
|
fyrenmoo@2671
|
307 |
} |
|
fyrenmoo@2671
|
308 |
} |
|
fyrenmoo@2671
|
309 |
|
|
fyrenmoo@2671
|
310 |
print "\n\" $file\n"; |
|
fyrenmoo@2671
|
311 |
|
|
fyrenmoo@2671
|
312 |
if (@constants % $group) { push @constants, ("") x ($group - (@constants % $group)); } |
|
fyrenmoo@2671
|
313 |
if (@tags % $group) { push @tags, ("") x ($group - (@tags % $group)); } |
|
fyrenmoo@2671
|
314 |
if (@functions % $group) { push @functions, ("") x ($group - (@functions % $group)); } |
|
fyrenmoo@2671
|
315 |
if (@forwards % $group) { push @forwards, ("") x ($group - (@forwards % $group)); } |
|
fyrenmoo@2671
|
316 |
|
|
fyrenmoo@2671
|
317 |
$, = " "; |
|
fyrenmoo@2671
|
318 |
for (my $i = 0; $i <= $#functions; $i += $group) { print "syn keyword\tcFunction\t@functions[$i .. $i + $group - 1]\n"; } |
|
fyrenmoo@2671
|
319 |
for (my $i = 0; $i <= $#constants; $i += $group) { print "syn keyword\tcConstant\t@constants[$i .. $i + $group - 1]\n"; } |
|
fyrenmoo@2671
|
320 |
for (my $i = 0; $i <= $#tags; $i += $group) { print "syn keyword\tcTag\t\t@tags[$i .. $i + $group - 1]\n"; } |
|
fyrenmoo@2671
|
321 |
for (my $i = 0; $i <= $#forwards; $i += $group) { print "syn keyword\tcForward\t@forwards[$i .. $i + $group - 1]\n"; } |
|
fyrenmoo@2671
|
322 |
} |
|
fyrenmoo@2671
|
323 |
|
|
fyrenmoo@2671
|
324 |
print $footer; |