1" Vim syntax file
2" Language:	UnrealScript
3" Maintainer:	Mark Ferrell <major@chaoticdreams.org>
4" URL:		ftp://ftp.chaoticdreams.org/pub/ut/vim/uc.vim
5" Credits:	Based on the java.vim syntax file by Claudio Fleiner
6" Last change:	2003 May 31
7
8" Please check :help uc.vim for comments on some of the options available.
9
10" For version 5.x: Clear all syntax items
11" For version 6.x: Quit when a syntax file was already loaded
12if version < 600
13  syntax clear
14elseif exists("b:current_syntax")
15  finish
16endif
17
18" some characters that cannot be in a UnrealScript program (outside a string)
19syn match ucError "[\\@`]"
20syn match ucError "<<<\|\.\.\|=>\|<>\|||=\|&&=\|[^-]->\|\*\/"
21
22" we define it here so that included files can test for it
23if !exists("main_syntax")
24  let main_syntax='uc'
25endif
26
27syntax case ignore
28
29" keyword definitions
30syn keyword ucBranch	      break continue
31syn keyword ucConditional     if else switch
32syn keyword ucRepeat	      while for do foreach
33syn keyword ucBoolean	      true false
34syn keyword ucConstant	      null
35syn keyword ucOperator	      new instanceof
36syn keyword ucType	      boolean char byte short int long float double
37syn keyword ucType	      void Pawn sound state auto exec function ipaddr
38syn keyword ucType	      ELightType actor ammo defaultproperties bool
39syn keyword ucType	      native noexport var out vector name local string
40syn keyword ucType	      event
41syn keyword ucStatement       return
42syn keyword ucStorageClass    static synchronized transient volatile final
43syn keyword ucMethodDecl      synchronized throws
44
45" UnrealScript defines classes in sorta fscked up fashion
46syn match   ucClassDecl       "^[Cc]lass[\s$]*\S*[\s$]*expands[\s$]*\S*;" contains=ucSpecial,ucSpecialChar,ucClassKeys
47syn keyword ucClassKeys	      class expands extends
48syn match   ucExternal	      "^\#exec.*" contains=ucCommentString,ucNumber
49syn keyword ucScopeDecl       public protected private abstract
50
51" UnrealScript Functions
52syn match   ucFuncDef	      "^.*function\s*[\(]*" contains=ucType,ucStorageClass
53syn match   ucEventDef	      "^.*event\s*[\(]*" contains=ucType,ucStorageClass
54syn match   ucClassLabel      "[a-zA-Z0-9]*\'[a-zA-Z0-9]*\'" contains=ucCharacter
55
56syn region  ucLabelRegion     transparent matchgroup=ucLabel start="\<case\>" matchgroup=NONE end=":" contains=ucNumber
57syn match   ucUserLabel       "^\s*[_$a-zA-Z][_$a-zA-Z0-9_]*\s*:"he=e-1 contains=ucLabel
58syn keyword ucLabel	      default
59
60" The following cluster contains all java groups except the contained ones
61syn cluster ucTop contains=ucExternal,ucError,ucError,ucBranch,ucLabelRegion,ucLabel,ucConditional,ucRepeat,ucBoolean,ucConstant,ucTypedef,ucOperator,ucType,ucType,ucStatement,ucStorageClass,ucMethodDecl,ucClassDecl,ucClassDecl,ucClassDecl,ucScopeDecl,ucError,ucError2,ucUserLabel,ucClassLabel
62
63" Comments
64syn keyword ucTodo	       contained TODO FIXME XXX
65syn region  ucCommentString    contained start=+"+ end=+"+ end=+\*/+me=s-1,he=s-1 contains=ucSpecial,ucCommentStar,ucSpecialChar
66syn region  ucComment2String   contained start=+"+  end=+$\|"+  contains=ucSpecial,ucSpecialChar
67syn match   ucCommentCharacter contained "'\\[^']\{1,6\}'" contains=ucSpecialChar
68syn match   ucCommentCharacter contained "'\\''" contains=ucSpecialChar
69syn match   ucCommentCharacter contained "'[^\\]'"
70syn region  ucComment	       start="/\*"  end="\*/" contains=ucCommentString,ucCommentCharacter,ucNumber,ucTodo
71syn match   ucCommentStar      contained "^\s*\*[^/]"me=e-1
72syn match   ucCommentStar      contained "^\s*\*$"
73syn match   ucLineComment      "//.*" contains=ucComment2String,ucCommentCharacter,ucNumber,ucTodo
74hi link ucCommentString ucString
75hi link ucComment2String ucString
76hi link ucCommentCharacter ucCharacter
77
78syn cluster ucTop add=ucComment,ucLineComment
79
80" match the special comment /**/
81syn match   ucComment	       "/\*\*/"
82
83" Strings and constants
84syn match   ucSpecialError     contained "\\."
85"syn match   ucSpecialCharError contained "[^']"
86syn match   ucSpecialChar      contained "\\\([4-9]\d\|[0-3]\d\d\|[\"\\'ntbrf]\|u\x\{4\}\)"
87syn region  ucString	       start=+"+ end=+"+  contains=ucSpecialChar,ucSpecialError
88syn match   ucStringError      +"\([^"\\]\|\\.\)*$+
89syn match   ucCharacter        "'[^']*'" contains=ucSpecialChar,ucSpecialCharError
90syn match   ucCharacter        "'\\''" contains=ucSpecialChar
91syn match   ucCharacter        "'[^\\]'"
92syn match   ucNumber	       "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>"
93syn match   ucNumber	       "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\="
94syn match   ucNumber	       "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>"
95syn match   ucNumber	       "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>"
96
97" unicode characters
98syn match   ucSpecial "\\u\d\{4\}"
99
100syn cluster ucTop add=ucString,ucCharacter,ucNumber,ucSpecial,ucStringError
101
102" catch errors caused by wrong parenthesis
103syn region  ucParen	       transparent start="(" end=")" contains=@ucTop,ucParen
104syn match   ucParenError       ")"
105hi link     ucParenError       ucError
106
107if !exists("uc_minlines")
108  let uc_minlines = 10
109endif
110exec "syn sync ccomment ucComment minlines=" . uc_minlines
111
112" Define the default highlighting.
113" For version 5.7 and earlier: only when not done already
114" For version 5.8 and later: only when an item doesn't have highlighting yet
115if version >= 508 || !exists("did_uc_syntax_inits")
116  if version < 508
117    let did_uc_syntax_inits = 1
118    command -nargs=+ HiLink hi link <args>
119  else
120    command -nargs=+ HiLink hi def link <args>
121  endif
122
123  HiLink ucFuncDef			Conditional
124  HiLink ucEventDef			Conditional
125  HiLink ucBraces			Function
126  HiLink ucBranch			Conditional
127  HiLink ucLabel			Label
128  HiLink ucUserLabel			Label
129  HiLink ucConditional			Conditional
130  HiLink ucRepeat			Repeat
131  HiLink ucStorageClass			StorageClass
132  HiLink ucMethodDecl			ucStorageClass
133  HiLink ucClassDecl			ucStorageClass
134  HiLink ucScopeDecl			ucStorageClass
135  HiLink ucBoolean			Boolean
136  HiLink ucSpecial			Special
137  HiLink ucSpecialError			Error
138  HiLink ucSpecialCharError		Error
139  HiLink ucString			String
140  HiLink ucCharacter			Character
141  HiLink ucSpecialChar			SpecialChar
142  HiLink ucNumber			Number
143  HiLink ucError			Error
144  HiLink ucStringError			Error
145  HiLink ucStatement			Statement
146  HiLink ucOperator			Operator
147  HiLink ucOverLoaded			Operator
148  HiLink ucComment			Comment
149  HiLink ucDocComment			Comment
150  HiLink ucLineComment			Comment
151  HiLink ucConstant			ucBoolean
152  HiLink ucTypedef			Typedef
153  HiLink ucTodo				Todo
154
155  HiLink ucCommentTitle			SpecialComment
156  HiLink ucDocTags			Special
157  HiLink ucDocParam			Function
158  HiLink ucCommentStar			ucComment
159
160  HiLink ucType				Type
161  HiLink ucExternal			Include
162
163  HiLink ucClassKeys			Conditional
164  HiLink ucClassLabel			Conditional
165
166  HiLink htmlComment			Special
167  HiLink htmlCommentPart		Special
168
169  delcommand HiLink
170endif
171
172let b:current_syntax = "uc"
173
174if main_syntax == 'uc'
175  unlet main_syntax
176endif
177
178" vim: ts=8
179