editor/vim/vim.pl
author Nicholas Hastings <skamonkey@gmail.com>
Tue Jan 22 23:18:27 2013 -0500 (2013-01-22)
changeset 3749 4dc3d723c490
parent 2671 960e54008eab
permissions -rw-r--r--
Triggering build against new mac libprotobuf.
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;