-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathraft.vim
More file actions
343 lines (300 loc) · 17 KB
/
raft.vim
File metadata and controls
343 lines (300 loc) · 17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
if !exists("main_syntax")
if version < 600
syntax clear
elseif exists("b:current_syntax")
finish
endif
" we define it here so that included files can test for it
let main_syntax='raft'
syn region raftFold start="{" end="}" transparent fold
endif
" don't use standard HiLink, it will not work with included syntax files
if version < 508
command! -nargs=+ RaftHiLink hi link <args>
else
command! -nargs=+ RaftHiLink hi def link <args>
endif
" some characters that cannot be in a raft program (outside a string)
syn match raftError "[`]"
syn match raftError "<<<\|\.\.\|=>\|<>\|||=\|&&=\\|\*\/"
syn match raftOK "\.\.\."
" use separate name so that it can be deleted in raftcc.vim
RaftHiLink raftError2 raftError
" keyword definitions
syn keyword raftExternal native package
syn match raftExternal "#include"
syn keyword raftError goto
syn keyword raftConditional if else switch
syn keyword raftRepeat while for do
syn match raftRepeat "@/"
syn keyword raftBoolean true false
syn keyword raftConstant null
syn match raftConstant "\$"
" syn match raftConstant '\#'
syn keyword raftTypedef this super
syn keyword raftOperator func stream var new alloc free const
syn keyword raftConditional onsignal
syn keyword raftType bool int8 int16 int32 int64 uint8 uint16 uint32 uint64 float32 float64 float96 String atomic nonatomic auto struct
syn keyword raftType void
syn keyword raftStatement return
syn match raftType "->"
syn keyword raftStorageClass static synchronized transient volatile final
syn keyword raftExceptions throw try catch finally
syn keyword raftAssert assert
syn keyword raftClassDecl extends implements interface elof
" to differentiate the keyword class from MyClass.class we use a match here
syn match raftTypedef "\.\s*\<class\>"ms=s+1
syn keyword raftClassDecl enum
syn match raftClassDecl "^class\>"
syn match raftClassDecl "[^.]\s*\<class\>"ms=s+1
syn match raftAnnotation "@\([_$a-zA-Z][_$a-zA-Z0-9]*\.\)*[_$a-zA-Z][_$a-zA-Z0-9]*\>"
syn match raftClassDecl "@interface\>"
syn keyword raftBranch break continue nextgroup=raftUserLabelRef skipwhite
syn match raftUserLabelRef "\k\+" contained
syn match raftVarArg "\.\.\."
syn keyword raftScopeDecl @ports @public @protected @private @configs
syn keyword raftAnnotation overrides implements
if exists("raft_highlight_raft_lang_ids")
let raft_highlight_all=1
endif
if exists("raft_highlight_all") || exists("raft_highlight_raft") || exists("raft_highlight_raft_lang")
" raft.lang.*
syn match raftLangClass "\<System\>"
syn keyword raftR_RaftLang NegativeArraySizeException ArrayStoreException IllegalStateException RuntimeException IndexOutOfBoundsException UnsupportedOperationException ArrayIndexOutOfBoundsException ArithmeticException ClassCastException EnumConstantNotPresentException StringIndexOutOfBoundsException IllegalArgumentException IllegalMonitorStateException IllegalThreadStateException NumberFormatException NullPointerException TypeNotPresentException SecurityException
syn cluster raftTop add=raftR_RaftLang
syn cluster raftClasses add=raftR_RaftLang
RaftHiLink raftR_RaftLang raftR_Raft
syn keyword raftC_RaftLang Process RuntimePermission StringKeySet CharacterData01 Class ThreadLocal ThreadLocalMap CharacterData0E Package Character StringCoding Long ProcessImpl ProcessEnvironment Short AssertionStatusDirectives 1PackageInfoProxy UnicodeBlock InheritableThreadLocal AbstractStringBuilder StringEnvironment ClassLoader ConditionalSpecialCasing CharacterDataPrivateUse StringBuffer StringDecoder Entry StringEntry WrappedHook StringBuilder StrictMath State ThreadGroup Runtime CharacterData02 MethodArray Object CharacterDataUndefined Integer Gate Boolean Enum Variable Subset StringEncoder Void Terminator CharsetSD IntegerCache CharacterCache Byte CharsetSE Thread SystemClassLoaderAction CharacterDataLatin1 StringValues StackTraceElement Shutdown ShortCache String ConverterSD ByteCache Lock EnclosingMethodInfo Math Float Value Double SecurityManager LongCache ProcessBuilder StringEntrySet Compiler Number UNIXProcess ConverterSE ExternalData CaseInsensitiveComparator CharacterData00 NativeLibrary
syn cluster raftTop add=raftC_RaftLang
syn cluster raftClasses add=raftC_RaftLang
RaftHiLink raftC_RaftLang raftC_Raft
syn keyword raftE_RaftLang IncompatibleClassChangeError InternalError UnknownError ClassCircularityError AssertionError ThreadDeath IllegalAccessError NoClassDefFoundError ClassFormatError UnsupportedClassVersionError NoSuchFieldError VerifyError ExceptionInInitializerError InstantiationError LinkageError NoSuchMethodError Error UnsatisfiedLinkError StackOverflowError AbstractMethodError VirtualMachineError OutOfMemoryError
syn cluster raftTop add=raftE_RaftLang
syn cluster raftClasses add=raftE_RaftLang
RaftHiLink raftE_RaftLang raftE_Raft
syn keyword raftX_RaftLang CloneNotSupportedException Exception NoSuchMethodException IllegalAccessException NoSuchFieldException Throwable InterruptedException ClassNotFoundException InstantiationException
syn cluster raftTop add=raftX_RaftLang
syn cluster raftClasses add=raftX_RaftLang
RaftHiLink raftX_RaftLang raftX_Raft
RaftHiLink raftR_Raft raftR_
RaftHiLink raftC_Raft raftC_
RaftHiLink raftE_Raft raftE_
RaftHiLink raftX_Raft raftX_
RaftHiLink raftX_ raftExceptions
RaftHiLink raftR_ raftExceptions
RaftHiLink raftE_ raftExceptions
RaftHiLink raftC_ raftConstant
syn keyword raftLangObject clone equals finalize getClass hashCode
syn keyword raftLangObject notify notifyAll toString wait
RaftHiLink raftLangObject raftConstant
syn cluster raftTop add=raftLangObject
endif
if filereadable(expand("<sfile>:p:h")."/raftid.vim")
source <sfile>:p:h/raftid.vim
endif
if exists("raft_space_errors")
if !exists("raft_no_trail_space_error")
syn match raftSpaceError "\s\+$"
endif
if !exists("raft_no_tab_space_error")
syn match raftSpaceError " \+\t"me=e-1
endif
endif
syn region raftLabelRegion transparent matchgroup=raftLabel start="\<case\>" matchgroup=NONE end=":" contains=raftNumber,raftCharacter
syn match raftUserLabel "^\s*[_$a-zA-Z][_$a-zA-Z0-9_]*\s*:"he=e-1 contains=raftLabel
syn keyword raftLabel default
if !exists("raft_allow_cpp_keywords")
syn keyword raftError extern friend inline redeclared
syn keyword raftError register signed template typedef union
syn keyword raftError unsigned operator
endif
" The following cluster contains all raft groups except the contained ones
syn cluster raftTop add=raftExternal,raftError,raftError,raftBranch,raftLabelRegion,raftLabel,raftConditional,raftRepeat,raftBoolean,raftConstant,raftTypedef,raftOperator,raftType,raftType,raftStatement,raftStorageClass,raftAssert,raftExceptions,raftMethodDecl,raftClassDecl,raftClassDecl,raftClassDecl,raftScopeDecl,raftError,raftError2,raftUserLabel,raftLangObject,raftAnnotation,raftVarArg
" Comments
syn keyword raftTodo contained TODO FIXME XXX
if exists("raft_comment_strings")
syn region raftCommentString contained start=+"+ end=+"+ end=+$+ end=+\*/+me=s-1,he=s-1 contains=raftSpecial,raftCommentStar,raftSpecialChar,@Spell
syn region raftComment2String contained start=+"+ end=+$\|"+ contains=raftSpecial,raftSpecialChar,@Spell
syn match raftCommentCharacter contained "'\\[^']\{1,6\}'" contains=raftSpecialChar
syn match raftCommentCharacter contained "'\\''" contains=raftSpecialChar
syn match raftCommentCharacter contained "'[^\\]'"
syn cluster raftCommentSpecial add=raftCommentString,raftCommentCharacter,raftNumber
syn cluster raftCommentSpecial2 add=raftComment2String,raftCommentCharacter,raftNumber
endif
syn region raftComment start="/\*" end="\*/" contains=@raftCommentSpecial,raftTodo,@Spell
syn match raftCommentStar contained "^\s*\*[^/]"me=e-1
syn match raftCommentStar contained "^\s*\*$"
syn match raftLineComment "//.*" contains=@raftCommentSpecial2,raftTodo,@Spell
RaftHiLink raftCommentString raftString
RaftHiLink raftComment2String raftString
RaftHiLink raftCommentCharacter raftCharacter
syn cluster raftTop add=raftComment,raftLineComment
if !exists("raft_ignore_raftdoc") && main_syntax != 'jsp'
syntax case ignore
" syntax coloring for raftdoc comments (HTML)
" syntax include @raftHtml <sfile>:p:h/html.vim
" unlet b:current_syntax
" HTML enables spell checking for all text that is not in a syntax item. This
" is wrong for Raft (all identifiers would be spell-checked), so it's undone
" here.
syntax spell default
syn region raftDocComment start="/\*\*" end="\*/" keepend contains=raftCommentTitle,@raftHtml,raftDocTags,raftDocSeeTag,raftTodo,@Spell
syn region raftCommentTitle contained matchgroup=raftDocComment start="/\*\*" matchgroup=raftCommentTitle keepend end="\.$" end="\.[ \t\r<&]"me=e-1 end="[^{]@"me=s-2,he=s-1 end="\*/"me=s-1,he=s-1 contains=@raftHtml,raftCommentStar,raftTodo,@Spell,raftDocTags,raftDocSeeTag
syn region raftDocTags contained start="{@\(link\|linkplain\|inherit[Dd]oc\|doc[rR]oot\|value\)" end="}"
syn match raftDocTags contained "@\(param\|exception\|throws\|since\)\s\+\S\+" contains=raftDocParam
syn match raftDocParam contained "\s\S\+"
syn match raftDocTags contained "@\(version\|author\|return\|deprecated\|serial\|serialField\|serialData\)\>"
syn region raftDocSeeTag contained matchgroup=raftDocTags start="@see\s\+" matchgroup=NONE end="\_."re=e-1 contains=raftDocSeeTagParam
syn match raftDocSeeTagParam contained @"\_[^"]\+"\|<a\s\+\_.\{-}</a>\|\(\k\|\.\)*\(#\k\+\((\_[^)]\+)\)\=\)\=@ extend
syntax case match
endif
" match the special comment /**/
syn match raftComment "/\*\*/"
" Strings and constants
syn match raftSpecialError contained "\\."
syn match raftSpecialCharError contained "[^']"
syn match raftSpecialChar contained "\\\([4-9]\d\|[0-3]\d\d\|[\"\\'ntbrf]\|u\x\{4\}\)"
syn region raftString start=+"+ end=+"+ end=+$+ contains=raftSpecialChar,raftSpecialError,@Spell
" next line disabled, it can cause a crash for a long line
"syn match raftStringError +"\([^"\\]\|\\.\)*$+
syn match raftCharacter "'[^']*'" contains=raftSpecialChar,raftSpecialCharError
syn match raftCharacter "'\\''" contains=raftSpecialChar
syn match raftCharacter "'[^\\]'"
syn match raftNumber "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>"
syn match raftNumber "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\="
syn match raftNumber "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>"
syn match raftNumber "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>"
" unicode characters
syn match raftSpecial "\\u\d\{4\}"
syn cluster raftTop add=raftString,raftCharacter,raftNumber,raftSpecial,raftStringError
if exists("raft_highlight_functions")
if raft_highlight_functions == "indent"
syn match raftFuncDef "^\(\t\| \{8\}\)[_$a-zA-Z][_$a-zA-Z0-9_. \[\]]*([^-+*/()]*)" contains=raftScopeDecl,raftType,raftStorageClass,@raftClasses
syn region raftFuncDef start=+^\(\t\| \{8\}\)[$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*,\s*+ end=+)+ contains=raftScopeDecl,raftType,raftStorageClass,@raftClasses
syn match raftFuncDef "^ [$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*)" contains=raftScopeDecl,raftType,raftStorageClass,@raftClasses
syn region raftFuncDef start=+^ [$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*,\s*+ end=+)+ contains=raftScopeDecl,raftType,raftStorageClass,@raftClasses
else
" This line catches method declarations at any indentation>0, but it assumes
" two things:
" 1. class names are always capitalized (ie: Button)
" 2. method names are never capitalized (except constructors, of course)
syn region raftFuncDef start=+^\s\+\(\(public\|protected\|private\|static\|abstract\|final\|system\|implements\|native\|synchronized\)\s\+\)*\(\(void\|boolean\|char\|byte\|short\|int\|long\|float\|double\|\([A-Za-z_][A-Za-z0-9_$]*\.\)*[A-Z][A-Za-z0-9_$]*\)\(<[^>]*>\)\=\(\[\]\)*\s\+[a-z][A-Za-z0-9_$]*\|[A-Z][A-Za-z0-9_$]*\)\s*([^0-9]+ end=+)+ contains=raftScopeDecl,raftType,raftStorageClass,raftComment,raftLineComment,@raftClasses
endif
syn match raftBraces "[{}]"
syn cluster raftTop add=raftFuncDef,raftBraces
endif
if exists("raft_highlight_debug")
" Strings and constants
syn match raftDebugSpecial contained "\\\d\d\d\|\\."
syn region raftDebugString contained start=+"+ end=+"+ contains=raftDebugSpecial
syn match raftDebugStringError +"\([^"\\]\|\\.\)*$+
syn match raftDebugCharacter contained "'[^\\]'"
syn match raftDebugSpecialCharacter contained "'\\.'"
syn match raftDebugSpecialCharacter contained "'\\''"
syn match raftDebugNumber contained "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>"
syn match raftDebugNumber contained "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\="
syn match raftDebugNumber contained "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>"
syn match raftDebugNumber contained "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>"
syn keyword raftDebugBoolean contained true false
syn keyword raftDebugType contained null this super
syn region raftDebugParen start=+(+ end=+)+ contained contains=raftDebug.*,raftDebugParen
" to make this work you must define the highlighting for these groups
syn match raftDebug "\<System\.\(out\|err\)\.print\(ln\)*\s*("me=e-1 contains=raftDebug.* nextgroup=raftDebugParen
syn match raftDebug "\<p\s*("me=e-1 contains=raftDebug.* nextgroup=raftDebugParen
syn match raftDebug "[A-Za-z][a-zA-Z0-9_]*\.printStackTrace\s*("me=e-1 contains=raftDebug.* nextgroup=raftDebugParen
syn match raftDebug "\<trace[SL]\=\s*("me=e-1 contains=raftDebug.* nextgroup=raftDebugParen
syn cluster raftTop add=raftDebug
if version >= 508 || !exists("did_c_syn_inits")
RaftHiLink raftDebug Debug
RaftHiLink raftDebugString DebugString
RaftHiLink raftDebugStringError raftError
RaftHiLink raftDebugType DebugType
RaftHiLink raftDebugBoolean DebugBoolean
RaftHiLink raftDebugNumber Debug
RaftHiLink raftDebugSpecial DebugSpecial
RaftHiLink raftDebugSpecialCharacter DebugSpecial
RaftHiLink raftDebugCharacter DebugString
RaftHiLink raftDebugParen Debug
RaftHiLink DebugString String
RaftHiLink DebugSpecial Special
RaftHiLink DebugBoolean Boolean
RaftHiLink DebugType Type
endif
endif
if exists("raft_mark_braces_in_parens_as_errors")
syn match raftInParen contained "[{}]"
RaftHiLink raftInParen raftError
syn cluster raftTop add=raftInParen
endif
" catch errors caused by wrong parenthesis
syn region raftParenT transparent matchgroup=raftParen start="(" end=")" contains=@raftTop,raftParenT1
syn region raftParenT1 transparent matchgroup=raftParen1 start="(" end=")" contains=@raftTop,raftParenT2 contained
syn region raftParenT2 transparent matchgroup=raftParen2 start="(" end=")" contains=@raftTop,raftParenT contained
syn match raftParenError ")"
" catch errors caused by wrong square parenthesis
syn region raftParenT transparent matchgroup=raftParen start="\[" end="\]" contains=@raftTop,raftParenT1
syn region raftParenT1 transparent matchgroup=raftParen1 start="\[" end="\]" contains=@raftTop,raftParenT2 contained
syn region raftParenT2 transparent matchgroup=raftParen2 start="\[" end="\]" contains=@raftTop,raftParenT contained
syn match raftParenError "\]"
RaftHiLink raftParenError raftError
if !exists("raft_minlines")
let raft_minlines = 10
endif
exec "syn sync ccomment raftComment minlines=" . raft_minlines
" The default highlighting.
if version >= 508 || !exists("did_raft_syn_inits")
if version < 508
let did_raft_syn_inits = 1
endif
RaftHiLink raftFuncDef Function
RaftHiLink raftVarArg Function
RaftHiLink raftBraces Function
RaftHiLink raftBranch Conditional
RaftHiLink raftUserLabelRef raftUserLabel
RaftHiLink raftLabel Label
RaftHiLink raftUserLabel Label
RaftHiLink raftConditional Conditional
RaftHiLink raftRepeat Repeat
RaftHiLink raftExceptions Exception
RaftHiLink raftAssert Statement
RaftHiLink raftStorageClass StorageClass
RaftHiLink raftMethodDecl raftStorageClass
RaftHiLink raftClassDecl raftStorageClass
RaftHiLink raftScopeDecl raftStorageClass
RaftHiLink raftBoolean Boolean
RaftHiLink raftSpecial Special
RaftHiLink raftSpecialError Error
RaftHiLink raftSpecialCharError Error
RaftHiLink raftString String
RaftHiLink raftCharacter Character
RaftHiLink raftSpecialChar SpecialChar
RaftHiLink raftNumber Number
RaftHiLink raftError Error
RaftHiLink raftStringError Error
RaftHiLink raftStatement Statement
RaftHiLink raftOperator Operator
RaftHiLink raftComment Comment
RaftHiLink raftDocComment Comment
RaftHiLink raftLineComment Comment
RaftHiLink raftConstant Constant
RaftHiLink raftTypedef Typedef
RaftHiLink raftTodo Todo
RaftHiLink raftAnnotation PreProc
RaftHiLink raftCommentTitle SpecialComment
RaftHiLink raftDocTags Special
RaftHiLink raftDocParam Function
RaftHiLink raftDocSeeTagParam Function
RaftHiLink raftCommentStar raftComment
RaftHiLink raftType Type
RaftHiLink raftExternal Include
RaftHiLink htmlComment Special
RaftHiLink htmlCommentPart Special
RaftHiLink raftSpaceError Error
endif
delcommand RaftHiLink
let b:current_syntax = "raft"
if main_syntax == 'raft'
unlet main_syntax
endif
let b:spell_options="contained"
" vim: ts=8