xref: /vim-8.2.3635/runtime/syntax/idl.vim (revision 00a927d6)
1" Vim syntax file
2" Language:    IDL (Interface Description Language)
3" Created By:  Jody Goldberg
4" Maintainer:  Michael Geddes <[email protected]>
5" Last Change:  Thu Apr 13 2006
6
7
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
12" 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"
17" History:
18" 2.0: Michael's new version
19" 2.1: Support for Vim 7 spell (Anduin Withers)
20"
21
22if exists("b:current_syntax")
23  finish
24endif
25
26if 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
32" Misc basic
33syn 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
40syn region  idlString      contained start=+"+  skip=+\\\(\\\\\)*"+  end=+"+ contains=@Spell
41syn 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
47
48" Comments
49syn keyword idlTodo        contained TODO FIXME XXX
50syn region idlComment      start="/\*"  end="\*/" contains=idlTodo,@Spell
51syn match  idlComment      "//.*" contains=idlTodo,@Spell
52syn match  idlCommentError "\*/"
53
54" C style Preprocessor
55syn 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
60
61" Constants
62syn keyword idlConst    const                             skipempty skipwhite nextgroup=idlBaseType,idlBaseTypeInt
63
64" Attribute
65syn keyword idlROAttr   readonly                          skipempty skipwhite nextgroup=idlAttr
66syn keyword idlAttr     attribute                         skipempty skipwhite nextgroup=idlBaseTypeInt,idlBaseType
67
68" Types
69syn 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
77
78" Modules
79syn 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
82
83" Interfaces
84syn cluster idlCommentable contains=idlComment
85syn cluster idlContentCluster contains=idlUnion,idlStruct,idlEnum,idlROAttr,idlAttr,idlOp,idlOneWayOp,idlException,idlConst,idlTypedef,idlAttributes,idlErrorSquareBracket,idlErrorBracket,idlInterfaceSections
86
87syn 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}+
127
128" Raises
129syn keyword idlRaises     contained raises               skipempty skipwhite nextgroup=idlRaises,idlContext,idlError,idlSemiColon
130
131" Context
132syn keyword idlContext    contained context              skipempty skipwhite nextgroup=idlRaises,idlContext,idlError,idlSemiColon
133
134" Operation
135syn 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
145
146if !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
164
165" Enum
166syn 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
169
170" Typedef
171syn 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
190
191" Struct
192syn 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
195
196" Exception
197syn keyword idlException       exception                     skipempty skipwhite nextgroup=idlStructName
198
199" Union
200syn 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
209
210if !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
217
218if !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
313  endif
314  delcommand HiLink
315endif
316
317let b:current_syntax = "idl"
318
319" vim: sw=2 et
320