blob: 39041fcac278f015a87eca14745a3f2c4af9229c [file] [log] [blame]
Bram Moolenaar071d4272004-06-13 20:20:40 +00001" Vim syntax file
Bram Moolenaar5eb86f92004-07-26 12:53:41 +00002" Language: IDL (Interface Description Language)
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +00003" Created By: Jody Goldberg
4" Maintainer: Michael Geddes <vim@frog.wheelycreek.net>
5" Last Change: Thu Apr 13 2006
6
Bram Moolenaar071d4272004-06-13 20:20:40 +00007
8" This is an experiment. IDL's structure is simple enough to permit a full
9" grammar based approach to rather than using a few heuristics. The result
10" is large and somewhat repetative but seems to work.
11
Bram Moolenaar5eb86f92004-07-26 12:53:41 +000012" There are some Microsoft extensions to idl files that are here. Some of
13" them are disabled by defining idl_no_ms_extensions.
14"
15" The more complex of the extensions are disabled by defining idl_no_extensions.
16"
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +000017" History:
18" 2.0: Michael's new version
19" 2.1: Support for Vim 7 spell (Anduin Withers)
20"
Bram Moolenaar5eb86f92004-07-26 12:53:41 +000021
22if exists("b:current_syntax")
Bram Moolenaar071d4272004-06-13 20:20:40 +000023 finish
24endif
25
Bram Moolenaar5eb86f92004-07-26 12:53:41 +000026if exists("idlsyntax_showerror")
27 syn match idlError +\S+ skipwhite skipempty nextgroup=idlError
28endif
29
30syn region idlCppQuote start='\<cpp_quote\s*(' end=')' contains=idlString
31
Bram Moolenaar071d4272004-06-13 20:20:40 +000032" Misc basic
Bram Moolenaar5eb86f92004-07-26 12:53:41 +000033syn match idlId contained "[a-zA-Z][a-zA-Z0-9_]*" skipwhite skipempty nextgroup=idlEnumComma,idlEnumNumber
34syn match idlEnumComma contained ","
35syn match idlEnumNumber contained "=" skipwhite skipempty nextgroup=idlString,idlLiteral
36syn match idlSemiColon contained ";"
37syn match idlCommaArg contained "," skipempty skipwhite nextgroup=idlSimpDecl
38syn region idlArraySize1 contained start=:\[: end=:\]: skipempty skipwhite nextgroup=idlArraySize1,idlError,idlSemiColon,idlCommaArg contains=idlArraySize1,idlLiteral
39syn match idlSimpDecl contained "[a-zA-Z][a-zA-Z0-9_]*" skipempty skipwhite nextgroup=idlError,idlSemiColon,idlCommaArg,idlArraySize1
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +000040syn region idlString contained start=+"+ skip=+\\\(\\\\\)*"+ end=+"+ contains=@Spell
Bram Moolenaar5eb86f92004-07-26 12:53:41 +000041syn match idlLiteral contained "[1-9]\d*\(\.\d*\)\="
42syn match idlLiteral contained "0"
43syn match idlLiteral contained "\.\d\+"
44syn match idlLiteral contained "0x[0-9A-Fa-f]\+"
45syn match idlLiteral contained "0[0-7]\+"
46syn keyword idlLiteral contained TRUE FALSE
Bram Moolenaar071d4272004-06-13 20:20:40 +000047
48" Comments
Bram Moolenaar5eb86f92004-07-26 12:53:41 +000049syn keyword idlTodo contained TODO FIXME XXX
Bram Moolenaar9e54a0e2006-04-14 20:42:25 +000050syn region idlComment start="/\*" end="\*/" contains=idlTodo,@Spell
51syn match idlComment "//.*" contains=idlTodo,@Spell
Bram Moolenaar5eb86f92004-07-26 12:53:41 +000052syn match idlCommentError "\*/"
Bram Moolenaar071d4272004-06-13 20:20:40 +000053
54" C style Preprocessor
Bram Moolenaar5eb86f92004-07-26 12:53:41 +000055syn region idlIncluded contained start=+"+ skip=+\\\(\\\\\)*"+ end=+"+
56syn match idlIncluded contained "<[^>]*>"
57syn match idlInclude "^[ \t]*#[ \t]*include\>[ \t]*["<]" contains=idlIncluded,idlString
58syn region idlPreCondit start="^[ \t]*#[ \t]*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)" skip="\\$" end="$" contains=idlComment,idlCommentError
59syn region idlDefine start="^[ \t]*#[ \t]*\(define\>\|undef\>\)" skip="\\$" end="$" contains=idlLiteral,idlString
Bram Moolenaar071d4272004-06-13 20:20:40 +000060
61" Constants
Bram Moolenaar5eb86f92004-07-26 12:53:41 +000062syn keyword idlConst const skipempty skipwhite nextgroup=idlBaseType,idlBaseTypeInt
Bram Moolenaar071d4272004-06-13 20:20:40 +000063
64" Attribute
Bram Moolenaar5eb86f92004-07-26 12:53:41 +000065syn keyword idlROAttr readonly skipempty skipwhite nextgroup=idlAttr
66syn keyword idlAttr attribute skipempty skipwhite nextgroup=idlBaseTypeInt,idlBaseType
Bram Moolenaar071d4272004-06-13 20:20:40 +000067
68" Types
Bram Moolenaar5eb86f92004-07-26 12:53:41 +000069syn region idlD4 contained start="<" end=">" skipempty skipwhite nextgroup=idlSimpDecl contains=idlSeqType,idlBaseTypeInt,idlBaseType,idlLiteral
70syn keyword idlSeqType contained sequence skipempty skipwhite nextgroup=idlD4
71syn keyword idlBaseType contained float double char boolean octet any skipempty skipwhite nextgroup=idlSimpDecl
72syn keyword idlBaseTypeInt contained short long skipempty skipwhite nextgroup=idlSimpDecl
73syn keyword idlBaseType contained unsigned skipempty skipwhite nextgroup=idlBaseTypeInt
74syn region idlD1 contained start="<" end=">" skipempty skipwhite nextgroup=idlSimpDecl contains=idlString,idlLiteral
75syn keyword idlBaseType contained string skipempty skipwhite nextgroup=idlD1,idlSimpDecl
76syn match idlBaseType contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*" skipempty skipwhite nextgroup=idlSimpDecl
Bram Moolenaar071d4272004-06-13 20:20:40 +000077
78" Modules
Bram Moolenaar5eb86f92004-07-26 12:53:41 +000079syn region idlModuleContent contained start="{" end="}" skipempty skipwhite nextgroup=idlError,idlSemiColon contains=idlUnion,idlStruct,idlEnum,idlInterface,idlComment,idlTypedef,idlConst,idlException,idlModule
80syn match idlModuleName contained "[a-zA-Z0-9_]\+" skipempty skipwhite nextgroup=idlModuleContent,idlError,idlSemiColon
81syn keyword idlModule module skipempty skipwhite nextgroup=idlModuleName
Bram Moolenaar071d4272004-06-13 20:20:40 +000082
83" Interfaces
Bram Moolenaar5eb86f92004-07-26 12:53:41 +000084syn cluster idlCommentable contains=idlComment
85syn cluster idlContentCluster contains=idlUnion,idlStruct,idlEnum,idlROAttr,idlAttr,idlOp,idlOneWayOp,idlException,idlConst,idlTypedef,idlAttributes,idlErrorSquareBracket,idlErrorBracket,idlInterfaceSections
Bram Moolenaar071d4272004-06-13 20:20:40 +000086
Bram Moolenaar5eb86f92004-07-26 12:53:41 +000087syn region idlInterfaceContent contained start="{" end="}" skipempty skipwhite nextgroup=idlError,idlSemiColon contains=@idlContentCluster,@idlCommentable
88syn match idlInheritFrom2 contained "," skipempty skipwhite nextgroup=idlInheritFrom
89syn match idlInheritFrom contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*" skipempty skipwhite nextgroup=idlInheritFrom2,idlInterfaceContent
90syn match idlInherit contained ":" skipempty skipwhite nextgroup=idlInheritFrom
91syn match idlInterfaceName contained "[a-zA-Z0-9_]\+" skipempty skipwhite nextgroup=idlInterfaceContent,idlInherit,idlError,idlSemiColon
92syn keyword idlInterface interface dispinterface skipempty skipwhite nextgroup=idlInterfaceName
93syn keyword idlInterfaceSections contained properties methods skipempty skipwhite nextgroup=idlSectionColon,idlError
94syn match idlSectionColon contained ":"
95
96
97syn match idlLibraryName contained "[a-zA-Z0-9_]\+" skipempty skipwhite nextgroup=idlLibraryContent,idlError,idlSemiColon
98syn keyword idlLibrary library skipempty skipwhite nextgroup=idlLibraryName
99syn region idlLibraryContent contained start="{" end="}" skipempty skipwhite nextgroup=idlError,idlSemiColon contains=@idlCommentable,idlAttributes,idlErrorSquareBracket,idlErrorBracket,idlImportlib,idlCoclass,idlTypedef,idlInterface
100
101syn keyword idlImportlib contained importlib skipempty skipwhite nextgroup=idlStringArg
102syn region idlStringArg contained start="(" end=")" contains=idlString nextgroup=idlError,idlSemiColon,idlErrorBrace,idlErrorSquareBracket
103
104syn keyword idlCoclass coclass contained skipempty skipwhite nextgroup=idlCoclassName
105syn match idlCoclassName "[a-zA-Z0-9_]\+" contained skipempty skipwhite nextgroup=idlCoclassDefinition,idlError,idlSemiColon
106
107syn region idlCoclassDefinition contained start="{" end="}" contains=idlCoclassAttributes,idlInterface,idlErrorBracket,idlErrorSquareBracket skipempty skipwhite nextgroup=idlError,idlSemiColon
108syn region idlCoclassAttributes contained start=+\[+ end=+]+ skipempty skipwhite nextgroup=idlInterface contains=idlErrorBracket,idlErrorBrace,idlCoclassAttribute
109syn keyword idlCoclassAttribute contained default source
110"syn keyword idlInterface interface skipempty skipwhite nextgroup=idlInterfaceStubName
111
112syn match idlImportString +"\f\+"+ skipempty skipwhite nextgroup=idlError,idlSemiColon
113syn keyword idlImport import skipempty skipwhite nextgroup=idlImportString
114
115syn region idlAttributes start="\[" end="\]" contains=idlAttribute,idlAttributeParam,idlErrorBracket,idlErrorBrace,idlComment
116syn keyword idlAttribute contained propput propget propputref id helpstring object uuid pointer_default
117if !exists('idl_no_ms_extensions')
118syn keyword idlAttribute contained nonextensible dual version aggregatable restricted hidden noncreatable oleautomation
119endif
120syn region idlAttributeParam contained start="(" end=")" contains=idlString,idlUuid,idlLiteral,idlErrorBrace,idlErrorSquareBracket
121" skipwhite nextgroup=idlArraySize,idlParmList contains=idlArraySize,idlLiteral
122syn match idlErrorBrace contained "}"
123syn match idlErrorBracket contained ")"
124syn match idlErrorSquareBracket contained "\]"
125
126syn match idlUuid contained +[0-9a-zA-Z]\{8}-\([0-9a-zA-Z]\{4}-\)\{3}[0-9a-zA-Z]\{12}+
Bram Moolenaar071d4272004-06-13 20:20:40 +0000127
128" Raises
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000129syn keyword idlRaises contained raises skipempty skipwhite nextgroup=idlRaises,idlContext,idlError,idlSemiColon
Bram Moolenaar071d4272004-06-13 20:20:40 +0000130
131" Context
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000132syn keyword idlContext contained context skipempty skipwhite nextgroup=idlRaises,idlContext,idlError,idlSemiColon
Bram Moolenaar071d4272004-06-13 20:20:40 +0000133
134" Operation
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000135syn match idlParmList contained "," skipempty skipwhite nextgroup=idlOpParms
136syn region idlArraySize contained start="\[" end="\]" skipempty skipwhite nextgroup=idlArraySize,idlParmList contains=idlArraySize,idlLiteral
137syn match idlParmName contained "[a-zA-Z0-9_]\+" skipempty skipwhite nextgroup=idlParmList,idlArraySize
138syn keyword idlParmInt contained short long skipempty skipwhite nextgroup=idlParmName
139syn keyword idlParmType contained unsigned skipempty skipwhite nextgroup=idlParmInt
140syn region idlD3 contained start="<" end=">" skipempty skipwhite nextgroup=idlParmName contains=idlString,idlLiteral
141syn keyword idlParmType contained string skipempty skipwhite nextgroup=idlD3,idlParmName
142syn keyword idlParmType contained void float double char boolean octet any skipempty skipwhite nextgroup=idlParmName
143syn match idlParmType contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*" skipempty skipwhite nextgroup=idlParmName
144syn keyword idlOpParms contained in out inout skipempty skipwhite nextgroup=idlParmType
Bram Moolenaar071d4272004-06-13 20:20:40 +0000145
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000146if !exists('idl_no_ms_extensions')
147syn keyword idlOpParms contained retval optional skipempty skipwhite nextgroup=idlParmType
148 syn match idlOpParms contained +\<\(iid_is\|defaultvalue\)\s*([^)]*)+ skipempty skipwhite nextgroup=idlParamType
149
150 syn keyword idlVariantType contained BSTR VARIANT VARIANT_BOOL long short unsigned double CURRENCY DATE
151 syn region idlSafeArray contained matchgroup=idlVariantType start=+SAFEARRAY(\s*+ end=+)+ contains=idlVariantType
152endif
153
154syn region idlOpContents contained start="(" end=")" skipempty skipwhite nextgroup=idlRaises,idlContext,idlError,idlSemiColon contains=idlOpParms,idlSafeArray,idlVariantType,@idlCommentable
155syn match idlOpName contained "[a-zA-Z0-9_]\+" skipempty skipwhite nextgroup=idlOpContents
156syn keyword idlOpInt contained short long skipempty skipwhite nextgroup=idlOpName
157syn region idlD2 contained start="<" end=">" skipempty skipwhite nextgroup=idlOpName contains=idlString,idlLiteral
158syn keyword idlOp contained unsigned skipempty skipwhite nextgroup=idlOpInt
159syn keyword idlOp contained string skipempty skipwhite nextgroup=idlD2,idlOpName
160syn keyword idlOp contained void float double char boolean octet any skipempty skipwhite nextgroup=idlOpName
161syn match idlOp contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*" skipempty skipwhite nextgroup=idlOpName
162syn keyword idlOp contained void skipempty skipwhite nextgroup=idlOpName
163syn keyword idlOneWayOp contained oneway skipempty skipwhite nextgroup=idOp
Bram Moolenaar071d4272004-06-13 20:20:40 +0000164
165" Enum
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000166syn region idlEnumContents contained start="{" end="}" skipempty skipwhite nextgroup=idlError,idlSemiColon,idlSimpDecl contains=idlId,idlAttributes,@idlCommentable
167syn match idlEnumName contained "[a-zA-Z0-9_]\+" skipempty skipwhite nextgroup=idlEnumContents
168syn keyword idlEnum enum skipempty skipwhite nextgroup=idlEnumName,idlEnumContents
Bram Moolenaar071d4272004-06-13 20:20:40 +0000169
170" Typedef
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000171syn keyword idlTypedef typedef skipempty skipwhite nextgroup=idlTypedefOtherTypeQualifier,idlDefBaseType,idlDefBaseTypeInt,idlDefSeqType,idlDefv1Enum,idlDefEnum,idlDefOtherType,idlDefAttributes,idlError
172
173if !exists('idl_no_extensions')
174 syn keyword idlTypedefOtherTypeQualifier contained struct enum interface nextgroup=idlDefBaseType,idlDefBaseTypeInt,idlDefSeqType,idlDefv1Enum,idlDefEnum,idlDefOtherType,idlDefAttributes,idlError skipwhite
175
176 syn region idlDefAttributes contained start="\[" end="\]" contains=idlAttribute,idlAttributeParam,idlErrorBracket,idlErrorBrace skipempty skipwhite nextgroup=idlDefBaseType,idlDefBaseTypeInt,idlDefSeqType,idlDefv1Enum,idlDefEnum,idlDefOtherType,idlError
177
178 syn keyword idlDefBaseType contained float double char boolean octet any skipempty skipwhite nextgroup=idlTypedefDecl,idlError
179 syn keyword idlDefBaseTypeInt contained short long skipempty skipwhite nextgroup=idlTypedefDecl,idlError
180 syn match idlDefOtherType contained +\<\k\+\>+ skipempty nextgroup=idlTypedefDecl,idlError
181 " syn keyword idlDefSeqType contained sequence skipempty skipwhite nextgroup=idlD4
182
183 " Enum typedef
184 syn keyword idlDefEnum contained enum skipempty skipwhite nextgroup=idlDefEnumName,idlDefEnumContents
185 syn match idlDefEnumName contained "[a-zA-Z0-9_]\+" skipempty skipwhite nextgroup=idlDefEnumContents,idlTypedefDecl
186 syn region idlDefEnumContents contained start="{" end="}" skipempty skipwhite nextgroup=idlError,idlTypedefDecl contains=idlId,idlAttributes
187
188 syn match idlTypedefDecl contained "[a-zA-Z0-9_]\+" skipempty skipwhite nextgroup=idlError,idlSemiColon
189endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000190
191" Struct
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000192syn region idlStructContent contained start="{" end="}" skipempty skipwhite nextgroup=idlError,idlSemiColon,idlSimpDecl contains=idlBaseType,idlBaseTypeInt,idlSeqType,@idlCommentable,idlEnum,idlUnion
193syn match idlStructName contained "[a-zA-Z0-9_]\+" skipempty skipwhite nextgroup=idlStructContent
194syn keyword idlStruct struct skipempty skipwhite nextgroup=idlStructName
Bram Moolenaar071d4272004-06-13 20:20:40 +0000195
196" Exception
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000197syn keyword idlException exception skipempty skipwhite nextgroup=idlStructName
Bram Moolenaar071d4272004-06-13 20:20:40 +0000198
199" Union
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000200syn match idlColon contained ":" skipempty skipwhite nextgroup=idlCase,idlSeqType,idlBaseType,idlBaseTypeInt
201syn region idlCaseLabel contained start="" skip="::" end=":"me=e-1 skipempty skipwhite nextgroup=idlColon contains=idlLiteral,idlString
202syn keyword idlCase contained case skipempty skipwhite nextgroup=idlCaseLabel
203syn keyword idlCase contained default skipempty skipwhite nextgroup=idlColon
204syn region idlUnionContent contained start="{" end="}" skipempty skipwhite nextgroup=idlError,idlSemiColon,idlSimpDecl contains=idlCase
205syn region idlSwitchType contained start="(" end=")" skipempty skipwhite nextgroup=idlUnionContent
206syn keyword idlUnionSwitch contained switch skipempty skipwhite nextgroup=idlSwitchType
207syn match idlUnionName contained "[a-zA-Z0-9_]\+" skipempty skipwhite nextgroup=idlUnionSwitch
208syn keyword idlUnion union skipempty skipwhite nextgroup=idlUnionName
Bram Moolenaar071d4272004-06-13 20:20:40 +0000209
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000210if !exists('idl_no_extensions')
211 syn sync match idlInterfaceSync grouphere idlInterfaceContent "\<\(disp\)\=interface\>\s\+\k\+\s*:\s*\k\+\_s*{" skipempty skipwhite nextgroup=idlError,idlSemiColon contains=@idlContentCluster,@idlCommentable
212 syn sync maxlines=1000 minlines=100
213else
214 syn sync lines=200
215endif
216" syn sync fromstart
Bram Moolenaar071d4272004-06-13 20:20:40 +0000217
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000218if !exists("did_idl_syntax_inits")
219 let did_idl_syntax_inits = 1
220 " The default methods for highlighting. Can be overridden later
221 command -nargs=+ HiLink hi def link <args>
222
223 HiLink idlInclude Include
224 HiLink idlPreProc PreProc
225 HiLink idlPreCondit PreCondit
226 HiLink idlDefine Macro
227 HiLink idlIncluded String
228 HiLink idlString String
229 HiLink idlComment Comment
230 HiLink idlTodo Todo
231 HiLink idlLiteral Number
232 HiLink idlUuid Number
233 HiLink idlType Type
234 HiLink idlVariantType idlType
235
236 HiLink idlModule Keyword
237 HiLink idlInterface Keyword
238 HiLink idlEnum Keyword
239 HiLink idlStruct Keyword
240 HiLink idlUnion Keyword
241 HiLink idlTypedef Keyword
242 HiLink idlException Keyword
243 HiLink idlTypedefOtherTypeQualifier keyword
244
245 HiLink idlModuleName Typedef
246 HiLink idlInterfaceName Typedef
247 HiLink idlEnumName Typedef
248 HiLink idlStructName Typedef
249 HiLink idlUnionName Typedef
250
251 HiLink idlBaseTypeInt idlType
252 HiLink idlBaseType idlType
253 HiLink idlSeqType idlType
254 HiLink idlD1 Paren
255 HiLink idlD2 Paren
256 HiLink idlD3 Paren
257 HiLink idlD4 Paren
258 "HiLink idlArraySize Paren
259 "HiLink idlArraySize1 Paren
260 HiLink idlModuleContent Paren
261 HiLink idlUnionContent Paren
262 HiLink idlStructContent Paren
263 HiLink idlEnumContents Paren
264 HiLink idlInterfaceContent Paren
265
266 HiLink idlSimpDecl Identifier
267 HiLink idlROAttr StorageClass
268 HiLink idlAttr Keyword
269 HiLink idlConst StorageClass
270
271 HiLink idlOneWayOp StorageClass
272 HiLink idlOp idlType
273 HiLink idlParmType idlType
274 HiLink idlOpName Function
275 HiLink idlOpParms SpecialComment
276 HiLink idlParmName Identifier
277 HiLink idlInheritFrom Identifier
278 HiLink idlAttribute SpecialComment
279
280 HiLink idlId Constant
281 "HiLink idlCase Keyword
282 HiLink idlCaseLabel Constant
283
284 HiLink idlErrorBracket Error
285 HiLink idlErrorBrace Error
286 HiLink idlErrorSquareBracket Error
287
288 HiLink idlImport Keyword
289 HiLink idlImportString idlString
290 HiLink idlCoclassAttribute StorageClass
291 HiLink idlLibrary Keyword
292 HiLink idlImportlib Keyword
293 HiLink idlCoclass Keyword
294 HiLink idlLibraryName Typedef
295 HiLink idlCoclassName Typedef
296 " hi idlLibraryContent guifg=red
297 HiLink idlTypedefDecl Typedef
298 HiLink idlDefEnum Keyword
299 HiLink idlDefv1Enum Keyword
300 HiLink idlDefEnumName Typedef
301 HiLink idlDefEnumContents Paren
302 HiLink idlDefBaseTypeInt idlType
303 HiLink idlDefBaseType idlType
304 HiLink idlDefSeqType idlType
305 HiLink idlInterfaceSections Label
306
307 if exists("idlsyntax_showerror")
308 if exists("idlsyntax_showerror_soft")
309 hi default idlError guibg=#d0ffd0
310 else
311 HiLink idlError Error
312 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000313 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000314 delcommand HiLink
315endif
316
317let b:current_syntax = "idl"
318
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000319" vim: sw=2 et