7
|
1 " Vim syntax file
|
|
2 " Language: Java
|
|
3 " Maintainer: Claudio Fleiner <claudio@fleiner.com>
|
|
4 " URL: http://www.fleiner.com/vim/syntax/java.vim
|
856
|
5 " Last Change: 2006 Apr 30
|
7
|
6
|
|
7 " Please check :help java.vim for comments on some of the options available.
|
|
8
|
|
9 " Quit when a syntax file was already loaded
|
|
10 if !exists("main_syntax")
|
|
11 if version < 600
|
|
12 syntax clear
|
|
13 elseif exists("b:current_syntax")
|
|
14 finish
|
|
15 endif
|
|
16 " we define it here so that included files can test for it
|
|
17 let main_syntax='java'
|
|
18 endif
|
|
19
|
|
20 " don't use standard HiLink, it will not work with included syntax files
|
|
21 if version < 508
|
|
22 command! -nargs=+ JavaHiLink hi link <args>
|
|
23 else
|
|
24 command! -nargs=+ JavaHiLink hi def link <args>
|
|
25 endif
|
|
26
|
|
27 " some characters that cannot be in a java program (outside a string)
|
|
28 syn match javaError "[\\@`]"
|
|
29 syn match javaError "<<<\|\.\.\|=>\|<>\|||=\|&&=\|[^-]->\|\*\/"
|
|
30 syn match javaOK "\.\.\."
|
|
31
|
|
32 " use separate name so that it can be deleted in javacc.vim
|
|
33 syn match javaError2 "#\|=<"
|
|
34 JavaHiLink javaError2 javaError
|
|
35
|
|
36
|
|
37
|
|
38 " keyword definitions
|
|
39 syn keyword javaExternal native package
|
856
|
40 syn match javaExternal "\<import\>\(\s\+static\>\)\?"
|
7
|
41 syn keyword javaError goto const
|
|
42 syn keyword javaConditional if else switch
|
|
43 syn keyword javaRepeat while for do
|
|
44 syn keyword javaBoolean true false
|
|
45 syn keyword javaConstant null
|
|
46 syn keyword javaTypedef this super
|
|
47 syn keyword javaOperator new instanceof
|
|
48 syn keyword javaType boolean char byte short int long float double
|
|
49 syn keyword javaType void
|
|
50 syn keyword javaStatement return
|
|
51 syn keyword javaStorageClass static synchronized transient volatile final strictfp serializable
|
|
52 syn keyword javaExceptions throw try catch finally
|
|
53 syn keyword javaAssert assert
|
|
54 syn keyword javaMethodDecl synchronized throws
|
|
55 syn keyword javaClassDecl extends implements interface
|
|
56 " to differentiate the keyword class from MyClass.class we use a match here
|
|
57 syn match javaTypedef "\.\s*\<class\>"ms=s+1
|
|
58 syn keyword javaClassDecl enum
|
|
59 syn match javaClassDecl "^class\>"
|
|
60 syn match javaClassDecl "[^.]\s*\<class\>"ms=s+1
|
557
|
61 syn match javaAnnotation "@[_$a-zA-Z][_$a-zA-Z0-9_]*\>"
|
|
62 syn match javaClassDecl "@interface\>"
|
7
|
63 syn keyword javaBranch break continue nextgroup=javaUserLabelRef skipwhite
|
|
64 syn match javaUserLabelRef "\k\+" contained
|
856
|
65 syn match javaVarArg "\.\.\."
|
7
|
66 syn keyword javaScopeDecl public protected private abstract
|
|
67
|
632
|
68 if exists("java_highlight_java_lang_ids")
|
|
69 let java_highlight_all=1
|
|
70 endif
|
856
|
71 if exists("java_highlight_all") || exists("java_highlight_java") || exists("java_highlight_java_lang")
|
7
|
72 " java.lang.*
|
|
73 syn match javaLangClass "\<System\>"
|
632
|
74 syn keyword javaR_JavaLang NegativeArraySizeException ArrayStoreException IllegalStateException RuntimeException IndexOutOfBoundsException UnsupportedOperationException ArrayIndexOutOfBoundsException ArithmeticException ClassCastException EnumConstantNotPresentException StringIndexOutOfBoundsException IllegalArgumentException IllegalMonitorStateException IllegalThreadStateException NumberFormatException NullPointerException TypeNotPresentException SecurityException
|
|
75 syn cluster javaTop add=javaR_JavaLang
|
|
76 syn cluster javaClasses add=javaR_JavaLang
|
|
77 JavaHiLink javaR_JavaLang javaR_Java
|
|
78 syn keyword javaC_JavaLang 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
|
|
79 syn cluster javaTop add=javaC_JavaLang
|
|
80 syn cluster javaClasses add=javaC_JavaLang
|
|
81 JavaHiLink javaC_JavaLang javaC_Java
|
|
82 syn keyword javaE_JavaLang IncompatibleClassChangeError InternalError UnknownError ClassCircularityError AssertionError ThreadDeath IllegalAccessError NoClassDefFoundError ClassFormatError UnsupportedClassVersionError NoSuchFieldError VerifyError ExceptionInInitializerError InstantiationError LinkageError NoSuchMethodError Error UnsatisfiedLinkError StackOverflowError AbstractMethodError VirtualMachineError OutOfMemoryError
|
|
83 syn cluster javaTop add=javaE_JavaLang
|
|
84 syn cluster javaClasses add=javaE_JavaLang
|
|
85 JavaHiLink javaE_JavaLang javaE_Java
|
|
86 syn keyword javaX_JavaLang CloneNotSupportedException Exception NoSuchMethodException IllegalAccessException NoSuchFieldException Throwable InterruptedException ClassNotFoundException InstantiationException
|
|
87 syn cluster javaTop add=javaX_JavaLang
|
|
88 syn cluster javaClasses add=javaX_JavaLang
|
|
89 JavaHiLink javaX_JavaLang javaX_Java
|
|
90
|
|
91 JavaHiLink javaR_Java javaR_
|
|
92 JavaHiLink javaC_Java javaC_
|
|
93 JavaHiLink javaE_Java javaE_
|
|
94 JavaHiLink javaX_Java javaX_
|
|
95 JavaHiLink javaX_ javaExceptions
|
|
96 JavaHiLink javaR_ javaExceptions
|
|
97 JavaHiLink javaE_ javaExceptions
|
|
98 JavaHiLink javaC_ javaConstant
|
|
99
|
7
|
100 syn keyword javaLangObject clone equals finalize getClass hashCode
|
|
101 syn keyword javaLangObject notify notifyAll toString wait
|
|
102 JavaHiLink javaLangObject javaConstant
|
632
|
103 syn cluster javaTop add=javaLangObject
|
7
|
104 endif
|
|
105
|
|
106 if filereadable(expand("<sfile>:p:h")."/javaid.vim")
|
|
107 source <sfile>:p:h/javaid.vim
|
|
108 endif
|
|
109
|
|
110 if exists("java_space_errors")
|
|
111 if !exists("java_no_trail_space_error")
|
|
112 syn match javaSpaceError "\s\+$"
|
|
113 endif
|
|
114 if !exists("java_no_tab_space_error")
|
|
115 syn match javaSpaceError " \+\t"me=e-1
|
|
116 endif
|
|
117 endif
|
|
118
|
|
119 syn region javaLabelRegion transparent matchgroup=javaLabel start="\<case\>" matchgroup=NONE end=":" contains=javaNumber,javaCharacter
|
|
120 syn match javaUserLabel "^\s*[_$a-zA-Z][_$a-zA-Z0-9_]*\s*:"he=e-1 contains=javaLabel
|
|
121 syn keyword javaLabel default
|
|
122
|
|
123 if !exists("java_allow_cpp_keywords")
|
|
124 syn keyword javaError auto delete extern friend inline redeclared
|
|
125 syn keyword javaError register signed sizeof struct template typedef union
|
|
126 syn keyword javaError unsigned operator
|
|
127 endif
|
|
128
|
|
129 " The following cluster contains all java groups except the contained ones
|
557
|
130 syn cluster javaTop add=javaExternal,javaError,javaError,javaBranch,javaLabelRegion,javaLabel,javaConditional,javaRepeat,javaBoolean,javaConstant,javaTypedef,javaOperator,javaType,javaType,javaStatement,javaStorageClass,javaAssert,javaExceptions,javaMethodDecl,javaClassDecl,javaClassDecl,javaClassDecl,javaScopeDecl,javaError,javaError2,javaUserLabel,javaLangObject,javaAnnotation,javaVarArg
|
7
|
131
|
|
132
|
|
133 " Comments
|
|
134 syn keyword javaTodo contained TODO FIXME XXX
|
|
135 if exists("java_comment_strings")
|
|
136 syn region javaCommentString contained start=+"+ end=+"+ end=+$+ end=+\*/+me=s-1,he=s-1 contains=javaSpecial,javaCommentStar,javaSpecialChar,@Spell
|
|
137 syn region javaComment2String contained start=+"+ end=+$\|"+ contains=javaSpecial,javaSpecialChar,@Spell
|
|
138 syn match javaCommentCharacter contained "'\\[^']\{1,6\}'" contains=javaSpecialChar
|
|
139 syn match javaCommentCharacter contained "'\\''" contains=javaSpecialChar
|
|
140 syn match javaCommentCharacter contained "'[^\\]'"
|
|
141 syn cluster javaCommentSpecial add=javaCommentString,javaCommentCharacter,javaNumber
|
|
142 syn cluster javaCommentSpecial2 add=javaComment2String,javaCommentCharacter,javaNumber
|
|
143 endif
|
|
144 syn region javaComment start="/\*" end="\*/" contains=@javaCommentSpecial,javaTodo,@Spell
|
|
145 syn match javaCommentStar contained "^\s*\*[^/]"me=e-1
|
|
146 syn match javaCommentStar contained "^\s*\*$"
|
|
147 syn match javaLineComment "//.*" contains=@javaCommentSpecial2,javaTodo,@Spell
|
|
148 JavaHiLink javaCommentString javaString
|
|
149 JavaHiLink javaComment2String javaString
|
|
150 JavaHiLink javaCommentCharacter javaCharacter
|
|
151
|
|
152 syn cluster javaTop add=javaComment,javaLineComment
|
|
153
|
|
154 if !exists("java_ignore_javadoc") && main_syntax != 'jsp'
|
|
155 syntax case ignore
|
|
156 " syntax coloring for javadoc comments (HTML)
|
|
157 syntax include @javaHtml <sfile>:p:h/html.vim
|
|
158 unlet b:current_syntax
|
632
|
159 syn region javaDocComment start="/\*\*" end="\*/" keepend contains=javaCommentTitle,@javaHtml,javaDocTags,javaDocSeeTag,javaTodo,@Spell
|
|
160 syn region javaCommentTitle contained matchgroup=javaDocComment start="/\*\*" matchgroup=javaCommentTitle keepend end="\.$" end="\.[ \t\r<&]"me=e-1 end="[^{]@"me=s-2,he=s-1 end="\*/"me=s-1,he=s-1 contains=@javaHtml,javaCommentStar,javaTodo,@Spell,javaDocTags,javaDocSeeTag
|
7
|
161
|
632
|
162 syn region javaDocTags contained start="{@\(link\|linkplain\|inherit[Dd]oc\|doc[rR]oot\|value\)" end="}"
|
|
163 syn match javaDocTags contained "@\(param\|exception\|throws\|since\)\s\+\S\+" contains=javaDocParam
|
|
164 syn match javaDocParam contained "\s\S\+"
|
|
165 syn match javaDocTags contained "@\(version\|author\|return\|deprecated\|serial\|serialField\|serialData\)\>"
|
|
166 syn region javaDocSeeTag contained matchgroup=javaDocTags start="@see\s\+" matchgroup=NONE end="\_."re=e-1 contains=javaDocSeeTagParam
|
|
167 syn match javaDocSeeTagParam contained @"\_[^"]\+"\|<a\s\+\_.\{-}</a>\|\(\k\|\.\)*\(#\k\+\((\_[^)]\+)\)\=\)\=@ extend
|
7
|
168 syntax case match
|
|
169 endif
|
|
170
|
|
171 " match the special comment /**/
|
|
172 syn match javaComment "/\*\*/"
|
|
173
|
|
174 " Strings and constants
|
|
175 syn match javaSpecialError contained "\\."
|
|
176 syn match javaSpecialCharError contained "[^']"
|
|
177 syn match javaSpecialChar contained "\\\([4-9]\d\|[0-3]\d\d\|[\"\\'ntbrf]\|u\x\{4\}\)"
|
|
178 syn region javaString start=+"+ end=+"+ end=+$+ contains=javaSpecialChar,javaSpecialError,@Spell
|
|
179 " next line disabled, it can cause a crash for a long line
|
|
180 "syn match javaStringError +"\([^"\\]\|\\.\)*$+
|
|
181 syn match javaCharacter "'[^']*'" contains=javaSpecialChar,javaSpecialCharError
|
|
182 syn match javaCharacter "'\\''" contains=javaSpecialChar
|
|
183 syn match javaCharacter "'[^\\]'"
|
|
184 syn match javaNumber "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>"
|
|
185 syn match javaNumber "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\="
|
|
186 syn match javaNumber "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>"
|
|
187 syn match javaNumber "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>"
|
|
188
|
|
189 " unicode characters
|
|
190 syn match javaSpecial "\\u\d\{4\}"
|
|
191
|
|
192 syn cluster javaTop add=javaString,javaCharacter,javaNumber,javaSpecial,javaStringError
|
|
193
|
|
194 if exists("java_highlight_functions")
|
|
195 if java_highlight_functions == "indent"
|
|
196 syn match javaFuncDef "^\(\t\| \{8\}\)[_$a-zA-Z][_$a-zA-Z0-9_. \[\]]*([^-+*/()]*)" contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses
|
|
197 syn region javaFuncDef start=+^\(\t\| \{8\}\)[$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses
|
|
198 syn match javaFuncDef "^ [$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*)" contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses
|
|
199 syn region javaFuncDef start=+^ [$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*,\s*+ end=+)+ contains=javaScopeDecl,javaType,javaStorageClass,@javaClasses
|
|
200 else
|
|
201 " This line catches method declarations at any indentation>0, but it assumes
|
|
202 " two things:
|
|
203 " 1. class names are always capitalized (ie: Button)
|
|
204 " 2. method names are never capitalized (except constructors, of course)
|
|
205 syn region javaFuncDef start=+^\s\+\(\(public\|protected\|private\|static\|abstract\|final\|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=javaScopeDecl,javaType,javaStorageClass,javaComment,javaLineComment,@javaClasses
|
|
206 endif
|
|
207 syn match javaBraces "[{}]"
|
|
208 syn cluster javaTop add=javaFuncDef,javaBraces
|
|
209 endif
|
|
210
|
|
211 if exists("java_highlight_debug")
|
|
212
|
|
213 " Strings and constants
|
|
214 syn match javaDebugSpecial contained "\\\d\d\d\|\\."
|
|
215 syn region javaDebugString contained start=+"+ end=+"+ contains=javaDebugSpecial
|
|
216 syn match javaDebugStringError +"\([^"\\]\|\\.\)*$+
|
|
217 syn match javaDebugCharacter contained "'[^\\]'"
|
|
218 syn match javaDebugSpecialCharacter contained "'\\.'"
|
|
219 syn match javaDebugSpecialCharacter contained "'\\''"
|
|
220 syn match javaDebugNumber contained "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>"
|
|
221 syn match javaDebugNumber contained "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\="
|
|
222 syn match javaDebugNumber contained "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>"
|
|
223 syn match javaDebugNumber contained "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>"
|
|
224 syn keyword javaDebugBoolean contained true false
|
|
225 syn keyword javaDebugType contained null this super
|
|
226 syn region javaDebugParen start=+(+ end=+)+ contained contains=javaDebug.*,javaDebugParen
|
|
227
|
|
228 " to make this work you must define the highlighting for these groups
|
|
229 syn match javaDebug "\<System\.\(out\|err\)\.print\(ln\)*\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
|
36
|
230 syn match javaDebug "\<p\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
|
7
|
231 syn match javaDebug "[A-Za-z][a-zA-Z0-9_]*\.printStackTrace\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
|
|
232 syn match javaDebug "\<trace[SL]\=\s*("me=e-1 contains=javaDebug.* nextgroup=javaDebugParen
|
|
233
|
|
234 syn cluster javaTop add=javaDebug
|
|
235
|
|
236 if version >= 508 || !exists("did_c_syn_inits")
|
|
237 JavaHiLink javaDebug Debug
|
|
238 JavaHiLink javaDebugString DebugString
|
|
239 JavaHiLink javaDebugStringError javaError
|
|
240 JavaHiLink javaDebugType DebugType
|
|
241 JavaHiLink javaDebugBoolean DebugBoolean
|
|
242 JavaHiLink javaDebugNumber Debug
|
|
243 JavaHiLink javaDebugSpecial DebugSpecial
|
|
244 JavaHiLink javaDebugSpecialCharacter DebugSpecial
|
|
245 JavaHiLink javaDebugCharacter DebugString
|
|
246 JavaHiLink javaDebugParen Debug
|
|
247
|
|
248 JavaHiLink DebugString String
|
|
249 JavaHiLink DebugSpecial Special
|
|
250 JavaHiLink DebugBoolean Boolean
|
|
251 JavaHiLink DebugType Type
|
|
252 endif
|
|
253 endif
|
|
254
|
|
255 if exists("java_mark_braces_in_parens_as_errors")
|
|
256 syn match javaInParen contained "[{}]"
|
|
257 JavaHiLink javaInParen javaError
|
|
258 syn cluster javaTop add=javaInParen
|
|
259 endif
|
|
260
|
|
261 " catch errors caused by wrong parenthesis
|
|
262 syn region javaParenT transparent matchgroup=javaParen start="(" end=")" contains=@javaTop,javaParenT1
|
|
263 syn region javaParenT1 transparent matchgroup=javaParen1 start="(" end=")" contains=@javaTop,javaParenT2 contained
|
|
264 syn region javaParenT2 transparent matchgroup=javaParen2 start="(" end=")" contains=@javaTop,javaParenT contained
|
|
265 syn match javaParenError ")"
|
36
|
266 " catch errors caused by wrong square parenthesis
|
|
267 syn region javaParenT transparent matchgroup=javaParen start="\[" end="\]" contains=@javaTop,javaParenT1
|
|
268 syn region javaParenT1 transparent matchgroup=javaParen1 start="\[" end="\]" contains=@javaTop,javaParenT2 contained
|
|
269 syn region javaParenT2 transparent matchgroup=javaParen2 start="\[" end="\]" contains=@javaTop,javaParenT contained
|
|
270 syn match javaParenError "\]"
|
|
271
|
7
|
272 JavaHiLink javaParenError javaError
|
|
273
|
|
274 if !exists("java_minlines")
|
|
275 let java_minlines = 10
|
|
276 endif
|
|
277 exec "syn sync ccomment javaComment minlines=" . java_minlines
|
|
278
|
|
279 " The default highlighting.
|
|
280 if version >= 508 || !exists("did_java_syn_inits")
|
|
281 if version < 508
|
|
282 let did_java_syn_inits = 1
|
|
283 endif
|
|
284 JavaHiLink javaFuncDef Function
|
557
|
285 JavaHiLink javaVarArg Function
|
7
|
286 JavaHiLink javaBraces Function
|
|
287 JavaHiLink javaBranch Conditional
|
|
288 JavaHiLink javaUserLabelRef javaUserLabel
|
|
289 JavaHiLink javaLabel Label
|
|
290 JavaHiLink javaUserLabel Label
|
|
291 JavaHiLink javaConditional Conditional
|
|
292 JavaHiLink javaRepeat Repeat
|
|
293 JavaHiLink javaExceptions Exception
|
|
294 JavaHiLink javaAssert Statement
|
|
295 JavaHiLink javaStorageClass StorageClass
|
|
296 JavaHiLink javaMethodDecl javaStorageClass
|
|
297 JavaHiLink javaClassDecl javaStorageClass
|
|
298 JavaHiLink javaScopeDecl javaStorageClass
|
|
299 JavaHiLink javaBoolean Boolean
|
|
300 JavaHiLink javaSpecial Special
|
|
301 JavaHiLink javaSpecialError Error
|
|
302 JavaHiLink javaSpecialCharError Error
|
|
303 JavaHiLink javaString String
|
|
304 JavaHiLink javaCharacter Character
|
|
305 JavaHiLink javaSpecialChar SpecialChar
|
|
306 JavaHiLink javaNumber Number
|
|
307 JavaHiLink javaError Error
|
|
308 JavaHiLink javaStringError Error
|
|
309 JavaHiLink javaStatement Statement
|
|
310 JavaHiLink javaOperator Operator
|
|
311 JavaHiLink javaComment Comment
|
|
312 JavaHiLink javaDocComment Comment
|
|
313 JavaHiLink javaLineComment Comment
|
|
314 JavaHiLink javaConstant Constant
|
|
315 JavaHiLink javaTypedef Typedef
|
|
316 JavaHiLink javaTodo Todo
|
557
|
317 JavaHiLink javaAnnotation PreProc
|
7
|
318
|
|
319 JavaHiLink javaCommentTitle SpecialComment
|
|
320 JavaHiLink javaDocTags Special
|
|
321 JavaHiLink javaDocParam Function
|
632
|
322 JavaHiLink javaDocSeeTagParam Function
|
7
|
323 JavaHiLink javaCommentStar javaComment
|
|
324
|
|
325 JavaHiLink javaType Type
|
|
326 JavaHiLink javaExternal Include
|
|
327
|
|
328 JavaHiLink htmlComment Special
|
|
329 JavaHiLink htmlCommentPart Special
|
|
330 JavaHiLink javaSpaceError Error
|
|
331 endif
|
|
332
|
|
333 delcommand JavaHiLink
|
|
334
|
|
335 let b:current_syntax = "java"
|
|
336
|
|
337 if main_syntax == 'java'
|
|
338 unlet main_syntax
|
|
339 endif
|
|
340
|
|
341 let b:spell_options="contained"
|
|
342
|
|
343 " vim: ts=8
|