blob: 855dc2172932f8afca822e6b3d2ca9f9527e60af [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)
3" Created By: Jody Goldberg <jody@gnome.org>
4" Maintainer: Michael Geddes <michaelrgeddes@optushome.com.au>
5" Last Change: 2004 Jul 20
Bram Moolenaar071d4272004-06-13 20:20:40 +00006
7" This is an experiment. IDL's structure is simple enough to permit a full
8" grammar based approach to rather than using a few heuristics. The result
9" is large and somewhat repetative but seems to work.
10
Bram Moolenaar5eb86f92004-07-26 12:53:41 +000011" There are some Microsoft extensions to idl files that are here. Some of
12" them are disabled by defining idl_no_ms_extensions.
13"
14" The more complex of the extensions are disabled by defining idl_no_extensions.
15"
16
17if exists("b:current_syntax")
Bram Moolenaar071d4272004-06-13 20:20:40 +000018 finish
19endif
20
Bram Moolenaar5eb86f92004-07-26 12:53:41 +000021if exists("idlsyntax_showerror")
22 syn match idlError +\S+ skipwhite skipempty nextgroup=idlError
23endif
24
25syn region idlCppQuote start='\<cpp_quote\s*(' end=')' contains=idlString
26
Bram Moolenaar071d4272004-06-13 20:20:40 +000027" Misc basic
Bram Moolenaar5eb86f92004-07-26 12:53:41 +000028syn match idlId contained "[a-zA-Z][a-zA-Z0-9_]*" skipwhite skipempty nextgroup=idlEnumComma,idlEnumNumber
29syn match idlEnumComma contained ","
30syn match idlEnumNumber contained "=" skipwhite skipempty nextgroup=idlString,idlLiteral
31syn match idlSemiColon contained ";"
32syn match idlCommaArg contained "," skipempty skipwhite nextgroup=idlSimpDecl
33syn region idlArraySize1 contained start=:\[: end=:\]: skipempty skipwhite nextgroup=idlArraySize1,idlError,idlSemiColon,idlCommaArg contains=idlArraySize1,idlLiteral
34syn match idlSimpDecl contained "[a-zA-Z][a-zA-Z0-9_]*" skipempty skipwhite nextgroup=idlError,idlSemiColon,idlCommaArg,idlArraySize1
35syn region idlString contained start=+"+ skip=+\\\(\\\\\)*"+ end=+"+
36syn match idlLiteral contained "[1-9]\d*\(\.\d*\)\="
37syn match idlLiteral contained "0"
38syn match idlLiteral contained "\.\d\+"
39syn match idlLiteral contained "0x[0-9A-Fa-f]\+"
40syn match idlLiteral contained "0[0-7]\+"
41syn keyword idlLiteral contained TRUE FALSE
Bram Moolenaar071d4272004-06-13 20:20:40 +000042
43" Comments
Bram Moolenaar5eb86f92004-07-26 12:53:41 +000044syn keyword idlTodo contained TODO FIXME XXX
45syn region idlComment start="/\*" end="\*/" contains=idlTodo
46syn match idlComment "//.*" contains=idlTodo
47syn match idlCommentError "\*/"
Bram Moolenaar071d4272004-06-13 20:20:40 +000048
49" C style Preprocessor
Bram Moolenaar5eb86f92004-07-26 12:53:41 +000050syn region idlIncluded contained start=+"+ skip=+\\\(\\\\\)*"+ end=+"+
51syn match idlIncluded contained "<[^>]*>"
52syn match idlInclude "^[ \t]*#[ \t]*include\>[ \t]*["<]" contains=idlIncluded,idlString
53syn region idlPreCondit start="^[ \t]*#[ \t]*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)" skip="\\$" end="$" contains=idlComment,idlCommentError
54syn region idlDefine start="^[ \t]*#[ \t]*\(define\>\|undef\>\)" skip="\\$" end="$" contains=idlLiteral,idlString
Bram Moolenaar071d4272004-06-13 20:20:40 +000055
56" Constants
Bram Moolenaar5eb86f92004-07-26 12:53:41 +000057syn keyword idlConst const skipempty skipwhite nextgroup=idlBaseType,idlBaseTypeInt
Bram Moolenaar071d4272004-06-13 20:20:40 +000058
59" Attribute
Bram Moolenaar5eb86f92004-07-26 12:53:41 +000060syn keyword idlROAttr readonly skipempty skipwhite nextgroup=idlAttr
61syn keyword idlAttr attribute skipempty skipwhite nextgroup=idlBaseTypeInt,idlBaseType
Bram Moolenaar071d4272004-06-13 20:20:40 +000062
63" Types
Bram Moolenaar5eb86f92004-07-26 12:53:41 +000064syn region idlD4 contained start="<" end=">" skipempty skipwhite nextgroup=idlSimpDecl contains=idlSeqType,idlBaseTypeInt,idlBaseType,idlLiteral
65syn keyword idlSeqType contained sequence skipempty skipwhite nextgroup=idlD4
66syn keyword idlBaseType contained float double char boolean octet any skipempty skipwhite nextgroup=idlSimpDecl
67syn keyword idlBaseTypeInt contained short long skipempty skipwhite nextgroup=idlSimpDecl
68syn keyword idlBaseType contained unsigned skipempty skipwhite nextgroup=idlBaseTypeInt
69syn region idlD1 contained start="<" end=">" skipempty skipwhite nextgroup=idlSimpDecl contains=idlString,idlLiteral
70syn keyword idlBaseType contained string skipempty skipwhite nextgroup=idlD1,idlSimpDecl
71syn match idlBaseType contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*" skipempty skipwhite nextgroup=idlSimpDecl
Bram Moolenaar071d4272004-06-13 20:20:40 +000072
73" Modules
Bram Moolenaar5eb86f92004-07-26 12:53:41 +000074syn region idlModuleContent contained start="{" end="}" skipempty skipwhite nextgroup=idlError,idlSemiColon contains=idlUnion,idlStruct,idlEnum,idlInterface,idlComment,idlTypedef,idlConst,idlException,idlModule
75syn match idlModuleName contained "[a-zA-Z0-9_]\+" skipempty skipwhite nextgroup=idlModuleContent,idlError,idlSemiColon
76syn keyword idlModule module skipempty skipwhite nextgroup=idlModuleName
Bram Moolenaar071d4272004-06-13 20:20:40 +000077
78" Interfaces
Bram Moolenaar5eb86f92004-07-26 12:53:41 +000079syn cluster idlCommentable contains=idlComment
80syn cluster idlContentCluster contains=idlUnion,idlStruct,idlEnum,idlROAttr,idlAttr,idlOp,idlOneWayOp,idlException,idlConst,idlTypedef,idlAttributes,idlErrorSquareBracket,idlErrorBracket,idlInterfaceSections
Bram Moolenaar071d4272004-06-13 20:20:40 +000081
Bram Moolenaar5eb86f92004-07-26 12:53:41 +000082syn region idlInterfaceContent contained start="{" end="}" skipempty skipwhite nextgroup=idlError,idlSemiColon contains=@idlContentCluster,@idlCommentable
83syn match idlInheritFrom2 contained "," skipempty skipwhite nextgroup=idlInheritFrom
84syn match idlInheritFrom contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*" skipempty skipwhite nextgroup=idlInheritFrom2,idlInterfaceContent
85syn match idlInherit contained ":" skipempty skipwhite nextgroup=idlInheritFrom
86syn match idlInterfaceName contained "[a-zA-Z0-9_]\+" skipempty skipwhite nextgroup=idlInterfaceContent,idlInherit,idlError,idlSemiColon
87syn keyword idlInterface interface dispinterface skipempty skipwhite nextgroup=idlInterfaceName
88syn keyword idlInterfaceSections contained properties methods skipempty skipwhite nextgroup=idlSectionColon,idlError
89syn match idlSectionColon contained ":"
90
91
92syn match idlLibraryName contained "[a-zA-Z0-9_]\+" skipempty skipwhite nextgroup=idlLibraryContent,idlError,idlSemiColon
93syn keyword idlLibrary library skipempty skipwhite nextgroup=idlLibraryName
94syn region idlLibraryContent contained start="{" end="}" skipempty skipwhite nextgroup=idlError,idlSemiColon contains=@idlCommentable,idlAttributes,idlErrorSquareBracket,idlErrorBracket,idlImportlib,idlCoclass,idlTypedef,idlInterface
95
96syn keyword idlImportlib contained importlib skipempty skipwhite nextgroup=idlStringArg
97syn region idlStringArg contained start="(" end=")" contains=idlString nextgroup=idlError,idlSemiColon,idlErrorBrace,idlErrorSquareBracket
98
99syn keyword idlCoclass coclass contained skipempty skipwhite nextgroup=idlCoclassName
100syn match idlCoclassName "[a-zA-Z0-9_]\+" contained skipempty skipwhite nextgroup=idlCoclassDefinition,idlError,idlSemiColon
101
102syn region idlCoclassDefinition contained start="{" end="}" contains=idlCoclassAttributes,idlInterface,idlErrorBracket,idlErrorSquareBracket skipempty skipwhite nextgroup=idlError,idlSemiColon
103syn region idlCoclassAttributes contained start=+\[+ end=+]+ skipempty skipwhite nextgroup=idlInterface contains=idlErrorBracket,idlErrorBrace,idlCoclassAttribute
104syn keyword idlCoclassAttribute contained default source
105"syn keyword idlInterface interface skipempty skipwhite nextgroup=idlInterfaceStubName
106
107syn match idlImportString +"\f\+"+ skipempty skipwhite nextgroup=idlError,idlSemiColon
108syn keyword idlImport import skipempty skipwhite nextgroup=idlImportString
109
110syn region idlAttributes start="\[" end="\]" contains=idlAttribute,idlAttributeParam,idlErrorBracket,idlErrorBrace,idlComment
111syn keyword idlAttribute contained propput propget propputref id helpstring object uuid pointer_default
112if !exists('idl_no_ms_extensions')
113syn keyword idlAttribute contained nonextensible dual version aggregatable restricted hidden noncreatable oleautomation
114endif
115syn region idlAttributeParam contained start="(" end=")" contains=idlString,idlUuid,idlLiteral,idlErrorBrace,idlErrorSquareBracket
116" skipwhite nextgroup=idlArraySize,idlParmList contains=idlArraySize,idlLiteral
117syn match idlErrorBrace contained "}"
118syn match idlErrorBracket contained ")"
119syn match idlErrorSquareBracket contained "\]"
120
121syn 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 +0000122
123" Raises
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000124syn keyword idlRaises contained raises skipempty skipwhite nextgroup=idlRaises,idlContext,idlError,idlSemiColon
Bram Moolenaar071d4272004-06-13 20:20:40 +0000125
126" Context
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000127syn keyword idlContext contained context skipempty skipwhite nextgroup=idlRaises,idlContext,idlError,idlSemiColon
Bram Moolenaar071d4272004-06-13 20:20:40 +0000128
129" Operation
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000130syn match idlParmList contained "," skipempty skipwhite nextgroup=idlOpParms
131syn region idlArraySize contained start="\[" end="\]" skipempty skipwhite nextgroup=idlArraySize,idlParmList contains=idlArraySize,idlLiteral
132syn match idlParmName contained "[a-zA-Z0-9_]\+" skipempty skipwhite nextgroup=idlParmList,idlArraySize
133syn keyword idlParmInt contained short long skipempty skipwhite nextgroup=idlParmName
134syn keyword idlParmType contained unsigned skipempty skipwhite nextgroup=idlParmInt
135syn region idlD3 contained start="<" end=">" skipempty skipwhite nextgroup=idlParmName contains=idlString,idlLiteral
136syn keyword idlParmType contained string skipempty skipwhite nextgroup=idlD3,idlParmName
137syn keyword idlParmType contained void float double char boolean octet any skipempty skipwhite nextgroup=idlParmName
138syn match idlParmType contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*" skipempty skipwhite nextgroup=idlParmName
139syn keyword idlOpParms contained in out inout skipempty skipwhite nextgroup=idlParmType
Bram Moolenaar071d4272004-06-13 20:20:40 +0000140
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000141if !exists('idl_no_ms_extensions')
142syn keyword idlOpParms contained retval optional skipempty skipwhite nextgroup=idlParmType
143 syn match idlOpParms contained +\<\(iid_is\|defaultvalue\)\s*([^)]*)+ skipempty skipwhite nextgroup=idlParamType
144
145 syn keyword idlVariantType contained BSTR VARIANT VARIANT_BOOL long short unsigned double CURRENCY DATE
146 syn region idlSafeArray contained matchgroup=idlVariantType start=+SAFEARRAY(\s*+ end=+)+ contains=idlVariantType
147endif
148
149syn region idlOpContents contained start="(" end=")" skipempty skipwhite nextgroup=idlRaises,idlContext,idlError,idlSemiColon contains=idlOpParms,idlSafeArray,idlVariantType,@idlCommentable
150syn match idlOpName contained "[a-zA-Z0-9_]\+" skipempty skipwhite nextgroup=idlOpContents
151syn keyword idlOpInt contained short long skipempty skipwhite nextgroup=idlOpName
152syn region idlD2 contained start="<" end=">" skipempty skipwhite nextgroup=idlOpName contains=idlString,idlLiteral
153syn keyword idlOp contained unsigned skipempty skipwhite nextgroup=idlOpInt
154syn keyword idlOp contained string skipempty skipwhite nextgroup=idlD2,idlOpName
155syn keyword idlOp contained void float double char boolean octet any skipempty skipwhite nextgroup=idlOpName
156syn match idlOp contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*" skipempty skipwhite nextgroup=idlOpName
157syn keyword idlOp contained void skipempty skipwhite nextgroup=idlOpName
158syn keyword idlOneWayOp contained oneway skipempty skipwhite nextgroup=idOp
Bram Moolenaar071d4272004-06-13 20:20:40 +0000159
160" Enum
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000161syn region idlEnumContents contained start="{" end="}" skipempty skipwhite nextgroup=idlError,idlSemiColon,idlSimpDecl contains=idlId,idlAttributes,@idlCommentable
162syn match idlEnumName contained "[a-zA-Z0-9_]\+" skipempty skipwhite nextgroup=idlEnumContents
163syn keyword idlEnum enum skipempty skipwhite nextgroup=idlEnumName,idlEnumContents
Bram Moolenaar071d4272004-06-13 20:20:40 +0000164
165" Typedef
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000166syn keyword idlTypedef typedef skipempty skipwhite nextgroup=idlTypedefOtherTypeQualifier,idlDefBaseType,idlDefBaseTypeInt,idlDefSeqType,idlDefv1Enum,idlDefEnum,idlDefOtherType,idlDefAttributes,idlError
167
168if !exists('idl_no_extensions')
169 syn keyword idlTypedefOtherTypeQualifier contained struct enum interface nextgroup=idlDefBaseType,idlDefBaseTypeInt,idlDefSeqType,idlDefv1Enum,idlDefEnum,idlDefOtherType,idlDefAttributes,idlError skipwhite
170
171 syn region idlDefAttributes contained start="\[" end="\]" contains=idlAttribute,idlAttributeParam,idlErrorBracket,idlErrorBrace skipempty skipwhite nextgroup=idlDefBaseType,idlDefBaseTypeInt,idlDefSeqType,idlDefv1Enum,idlDefEnum,idlDefOtherType,idlError
172
173 syn keyword idlDefBaseType contained float double char boolean octet any skipempty skipwhite nextgroup=idlTypedefDecl,idlError
174 syn keyword idlDefBaseTypeInt contained short long skipempty skipwhite nextgroup=idlTypedefDecl,idlError
175 syn match idlDefOtherType contained +\<\k\+\>+ skipempty nextgroup=idlTypedefDecl,idlError
176 " syn keyword idlDefSeqType contained sequence skipempty skipwhite nextgroup=idlD4
177
178 " Enum typedef
179 syn keyword idlDefEnum contained enum skipempty skipwhite nextgroup=idlDefEnumName,idlDefEnumContents
180 syn match idlDefEnumName contained "[a-zA-Z0-9_]\+" skipempty skipwhite nextgroup=idlDefEnumContents,idlTypedefDecl
181 syn region idlDefEnumContents contained start="{" end="}" skipempty skipwhite nextgroup=idlError,idlTypedefDecl contains=idlId,idlAttributes
182
183 syn match idlTypedefDecl contained "[a-zA-Z0-9_]\+" skipempty skipwhite nextgroup=idlError,idlSemiColon
184endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000185
186" Struct
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000187syn region idlStructContent contained start="{" end="}" skipempty skipwhite nextgroup=idlError,idlSemiColon,idlSimpDecl contains=idlBaseType,idlBaseTypeInt,idlSeqType,@idlCommentable,idlEnum,idlUnion
188syn match idlStructName contained "[a-zA-Z0-9_]\+" skipempty skipwhite nextgroup=idlStructContent
189syn keyword idlStruct struct skipempty skipwhite nextgroup=idlStructName
Bram Moolenaar071d4272004-06-13 20:20:40 +0000190
191" Exception
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000192syn keyword idlException exception skipempty skipwhite nextgroup=idlStructName
Bram Moolenaar071d4272004-06-13 20:20:40 +0000193
194" Union
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000195syn match idlColon contained ":" skipempty skipwhite nextgroup=idlCase,idlSeqType,idlBaseType,idlBaseTypeInt
196syn region idlCaseLabel contained start="" skip="::" end=":"me=e-1 skipempty skipwhite nextgroup=idlColon contains=idlLiteral,idlString
197syn keyword idlCase contained case skipempty skipwhite nextgroup=idlCaseLabel
198syn keyword idlCase contained default skipempty skipwhite nextgroup=idlColon
199syn region idlUnionContent contained start="{" end="}" skipempty skipwhite nextgroup=idlError,idlSemiColon,idlSimpDecl contains=idlCase
200syn region idlSwitchType contained start="(" end=")" skipempty skipwhite nextgroup=idlUnionContent
201syn keyword idlUnionSwitch contained switch skipempty skipwhite nextgroup=idlSwitchType
202syn match idlUnionName contained "[a-zA-Z0-9_]\+" skipempty skipwhite nextgroup=idlUnionSwitch
203syn keyword idlUnion union skipempty skipwhite nextgroup=idlUnionName
Bram Moolenaar071d4272004-06-13 20:20:40 +0000204
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000205if !exists('idl_no_extensions')
206 syn sync match idlInterfaceSync grouphere idlInterfaceContent "\<\(disp\)\=interface\>\s\+\k\+\s*:\s*\k\+\_s*{" skipempty skipwhite nextgroup=idlError,idlSemiColon contains=@idlContentCluster,@idlCommentable
207 syn sync maxlines=1000 minlines=100
208else
209 syn sync lines=200
210endif
211" syn sync fromstart
Bram Moolenaar071d4272004-06-13 20:20:40 +0000212
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000213if !exists("did_idl_syntax_inits")
214 let did_idl_syntax_inits = 1
215 " The default methods for highlighting. Can be overridden later
216 command -nargs=+ HiLink hi def link <args>
217
218 HiLink idlInclude Include
219 HiLink idlPreProc PreProc
220 HiLink idlPreCondit PreCondit
221 HiLink idlDefine Macro
222 HiLink idlIncluded String
223 HiLink idlString String
224 HiLink idlComment Comment
225 HiLink idlTodo Todo
226 HiLink idlLiteral Number
227 HiLink idlUuid Number
228 HiLink idlType Type
229 HiLink idlVariantType idlType
230
231 HiLink idlModule Keyword
232 HiLink idlInterface Keyword
233 HiLink idlEnum Keyword
234 HiLink idlStruct Keyword
235 HiLink idlUnion Keyword
236 HiLink idlTypedef Keyword
237 HiLink idlException Keyword
238 HiLink idlTypedefOtherTypeQualifier keyword
239
240 HiLink idlModuleName Typedef
241 HiLink idlInterfaceName Typedef
242 HiLink idlEnumName Typedef
243 HiLink idlStructName Typedef
244 HiLink idlUnionName Typedef
245
246 HiLink idlBaseTypeInt idlType
247 HiLink idlBaseType idlType
248 HiLink idlSeqType idlType
249 HiLink idlD1 Paren
250 HiLink idlD2 Paren
251 HiLink idlD3 Paren
252 HiLink idlD4 Paren
253 "HiLink idlArraySize Paren
254 "HiLink idlArraySize1 Paren
255 HiLink idlModuleContent Paren
256 HiLink idlUnionContent Paren
257 HiLink idlStructContent Paren
258 HiLink idlEnumContents Paren
259 HiLink idlInterfaceContent Paren
260
261 HiLink idlSimpDecl Identifier
262 HiLink idlROAttr StorageClass
263 HiLink idlAttr Keyword
264 HiLink idlConst StorageClass
265
266 HiLink idlOneWayOp StorageClass
267 HiLink idlOp idlType
268 HiLink idlParmType idlType
269 HiLink idlOpName Function
270 HiLink idlOpParms SpecialComment
271 HiLink idlParmName Identifier
272 HiLink idlInheritFrom Identifier
273 HiLink idlAttribute SpecialComment
274
275 HiLink idlId Constant
276 "HiLink idlCase Keyword
277 HiLink idlCaseLabel Constant
278
279 HiLink idlErrorBracket Error
280 HiLink idlErrorBrace Error
281 HiLink idlErrorSquareBracket Error
282
283 HiLink idlImport Keyword
284 HiLink idlImportString idlString
285 HiLink idlCoclassAttribute StorageClass
286 HiLink idlLibrary Keyword
287 HiLink idlImportlib Keyword
288 HiLink idlCoclass Keyword
289 HiLink idlLibraryName Typedef
290 HiLink idlCoclassName Typedef
291 " hi idlLibraryContent guifg=red
292 HiLink idlTypedefDecl Typedef
293 HiLink idlDefEnum Keyword
294 HiLink idlDefv1Enum Keyword
295 HiLink idlDefEnumName Typedef
296 HiLink idlDefEnumContents Paren
297 HiLink idlDefBaseTypeInt idlType
298 HiLink idlDefBaseType idlType
299 HiLink idlDefSeqType idlType
300 HiLink idlInterfaceSections Label
301
302 if exists("idlsyntax_showerror")
303 if exists("idlsyntax_showerror_soft")
304 hi default idlError guibg=#d0ffd0
305 else
306 HiLink idlError Error
307 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000308 endif
Bram Moolenaar071d4272004-06-13 20:20:40 +0000309 delcommand HiLink
310endif
311
312let b:current_syntax = "idl"
313
Bram Moolenaar5eb86f92004-07-26 12:53:41 +0000314" vim: sw=2 et