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