Update runtime files.
diff --git a/runtime/syntax/idl.vim b/runtime/syntax/idl.vim
index 39041fc..c51850b 100644
--- a/runtime/syntax/idl.vim
+++ b/runtime/syntax/idl.vim
@@ -2,7 +2,7 @@
 " Language:    IDL (Interface Description Language)
 " Created By:  Jody Goldberg
 " Maintainer:  Michael Geddes <vim@frog.wheelycreek.net>
-" Last Change:  Thu Apr 13 2006
+" Last Change:  2012 Jan 11
 
 
 " This is an experiment.  IDL's structure is simple enough to permit a full
@@ -17,303 +17,310 @@
 " History:
 " 2.0: Michael's new version
 " 2.1: Support for Vim 7 spell (Anduin Withers)
-"      
+"
 
 if exists("b:current_syntax")
   finish
 endif
 
-if exists("idlsyntax_showerror")
-  syn match idlError +\S+ skipwhite skipempty nextgroup=idlError
-endif
-
-syn region idlCppQuote start='\<cpp_quote\s*(' end=')' contains=idlString
-
-" Misc basic
-syn match   idlId          contained "[a-zA-Z][a-zA-Z0-9_]*" skipwhite skipempty nextgroup=idlEnumComma,idlEnumNumber
-syn match   idlEnumComma   contained ","
-syn match   idlEnumNumber  contained "=" skipwhite skipempty nextgroup=idlString,idlLiteral
-syn match   idlSemiColon   contained ";"
-syn match   idlCommaArg    contained ","                      skipempty skipwhite nextgroup=idlSimpDecl
-syn region  idlArraySize1  contained start=:\[: end=:\]:      skipempty skipwhite nextgroup=idlArraySize1,idlError,idlSemiColon,idlCommaArg contains=idlArraySize1,idlLiteral
-syn match   idlSimpDecl    contained "[a-zA-Z][a-zA-Z0-9_]*"  skipempty skipwhite nextgroup=idlError,idlSemiColon,idlCommaArg,idlArraySize1
-syn region  idlString      contained start=+"+  skip=+\\\(\\\\\)*"+  end=+"+ contains=@Spell
-syn match   idlLiteral     contained "[1-9]\d*\(\.\d*\)\="
-syn match   idlLiteral     contained "0"
-syn match   idlLiteral     contained "\.\d\+"
-syn match   idlLiteral     contained "0x[0-9A-Fa-f]\+"
-syn match   idlLiteral     contained "0[0-7]\+"
-syn keyword idlLiteral     contained TRUE FALSE
-
-" Comments
-syn keyword idlTodo        contained TODO FIXME XXX
-syn region idlComment      start="/\*"  end="\*/" contains=idlTodo,@Spell
-syn match  idlComment      "//.*" contains=idlTodo,@Spell
-syn match  idlCommentError "\*/"
-
-" C style Preprocessor
-syn region idlIncluded    contained start=+"+  skip=+\\\(\\\\\)*"+  end=+"+
-syn match  idlIncluded    contained "<[^>]*>"
-syn match  idlInclude     "^[ \t]*#[ \t]*include\>[ \t]*["<]" contains=idlIncluded,idlString
-syn region idlPreCondit   start="^[ \t]*#[ \t]*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)"  skip="\\$"  end="$" contains=idlComment,idlCommentError
-syn region idlDefine      start="^[ \t]*#[ \t]*\(define\>\|undef\>\)" skip="\\$" end="$" contains=idlLiteral,idlString
-
-" Constants
-syn keyword idlConst    const                             skipempty skipwhite nextgroup=idlBaseType,idlBaseTypeInt
-
-" Attribute
-syn keyword idlROAttr   readonly                          skipempty skipwhite nextgroup=idlAttr
-syn keyword idlAttr     attribute                         skipempty skipwhite nextgroup=idlBaseTypeInt,idlBaseType
-
-" Types
-syn region  idlD4          contained start="<" end=">"    skipempty skipwhite nextgroup=idlSimpDecl contains=idlSeqType,idlBaseTypeInt,idlBaseType,idlLiteral
-syn keyword idlSeqType     contained sequence             skipempty skipwhite nextgroup=idlD4
-syn keyword idlBaseType    contained float double char boolean octet any skipempty skipwhite nextgroup=idlSimpDecl
-syn keyword idlBaseTypeInt contained short long           skipempty skipwhite nextgroup=idlSimpDecl
-syn keyword idlBaseType    contained unsigned             skipempty skipwhite nextgroup=idlBaseTypeInt
-syn region  idlD1          contained start="<" end=">"    skipempty skipwhite nextgroup=idlSimpDecl contains=idlString,idlLiteral
-syn keyword idlBaseType    contained string               skipempty skipwhite nextgroup=idlD1,idlSimpDecl
-syn match   idlBaseType    contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*"  skipempty skipwhite nextgroup=idlSimpDecl
-
-" Modules
-syn region  idlModuleContent contained start="{" end="}"  skipempty skipwhite nextgroup=idlError,idlSemiColon contains=idlUnion,idlStruct,idlEnum,idlInterface,idlComment,idlTypedef,idlConst,idlException,idlModule
-syn match   idlModuleName  contained "[a-zA-Z0-9_]\+"     skipempty skipwhite nextgroup=idlModuleContent,idlError,idlSemiColon
-syn keyword idlModule      module                         skipempty skipwhite nextgroup=idlModuleName
-
-" Interfaces
-syn cluster idlCommentable contains=idlComment
-syn cluster idlContentCluster contains=idlUnion,idlStruct,idlEnum,idlROAttr,idlAttr,idlOp,idlOneWayOp,idlException,idlConst,idlTypedef,idlAttributes,idlErrorSquareBracket,idlErrorBracket,idlInterfaceSections
-
-syn region  idlInterfaceContent contained start="{" end="}"   skipempty skipwhite nextgroup=idlError,idlSemiColon contains=@idlContentCluster,@idlCommentable
-syn match   idlInheritFrom2 contained ","                     skipempty skipwhite nextgroup=idlInheritFrom
-syn match   idlInheritFrom contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*" skipempty skipwhite nextgroup=idlInheritFrom2,idlInterfaceContent
-syn match   idlInherit contained ":"                            skipempty skipwhite nextgroup=idlInheritFrom
-syn match   idlInterfaceName contained "[a-zA-Z0-9_]\+"       skipempty skipwhite nextgroup=idlInterfaceContent,idlInherit,idlError,idlSemiColon
-syn keyword idlInterface     interface dispinterface          skipempty skipwhite nextgroup=idlInterfaceName
-syn keyword idlInterfaceSections contained properties methods skipempty skipwhite nextgroup=idlSectionColon,idlError
-syn match   idlSectionColon contained ":"
-
-
-syn match   idlLibraryName  contained  "[a-zA-Z0-9_]\+"       skipempty skipwhite nextgroup=idlLibraryContent,idlError,idlSemiColon
-syn keyword idlLibrary      library                           skipempty skipwhite nextgroup=idlLibraryName
-syn region  idlLibraryContent contained start="{" end="}"     skipempty skipwhite nextgroup=idlError,idlSemiColon contains=@idlCommentable,idlAttributes,idlErrorSquareBracket,idlErrorBracket,idlImportlib,idlCoclass,idlTypedef,idlInterface
-
-syn keyword idlImportlib contained importlib                  skipempty skipwhite nextgroup=idlStringArg
-syn region idlStringArg contained start="(" end=")"           contains=idlString nextgroup=idlError,idlSemiColon,idlErrorBrace,idlErrorSquareBracket
-
-syn keyword idlCoclass coclass contained                      skipempty skipwhite nextgroup=idlCoclassName
-syn match   idlCoclassName "[a-zA-Z0-9_]\+" contained         skipempty skipwhite nextgroup=idlCoclassDefinition,idlError,idlSemiColon
-
-syn region idlCoclassDefinition contained start="{" end="}"   contains=idlCoclassAttributes,idlInterface,idlErrorBracket,idlErrorSquareBracket skipempty skipwhite nextgroup=idlError,idlSemiColon
-syn region idlCoclassAttributes contained start=+\[+ end=+]+  skipempty skipwhite nextgroup=idlInterface contains=idlErrorBracket,idlErrorBrace,idlCoclassAttribute
-syn keyword idlCoclassAttribute contained default source
-"syn keyword idlInterface       interface                      skipempty skipwhite nextgroup=idlInterfaceStubName
-
-syn match idlImportString       +"\f\+"+                      skipempty skipwhite nextgroup=idlError,idlSemiColon
-syn keyword idlImport           import                        skipempty skipwhite nextgroup=idlImportString
-
-syn region  idlAttributes start="\[" end="\]"                 contains=idlAttribute,idlAttributeParam,idlErrorBracket,idlErrorBrace,idlComment
-syn keyword idlAttribute contained propput propget propputref id helpstring object uuid pointer_default
-if !exists('idl_no_ms_extensions')
-syn keyword idlAttribute contained nonextensible dual version aggregatable restricted hidden noncreatable oleautomation
-endif
-syn region idlAttributeParam contained start="(" end=")"      contains=idlString,idlUuid,idlLiteral,idlErrorBrace,idlErrorSquareBracket
-" skipwhite nextgroup=idlArraySize,idlParmList contains=idlArraySize,idlLiteral
-syn match idlErrorBrace contained "}"
-syn match idlErrorBracket contained ")"
-syn match idlErrorSquareBracket contained "\]"
-
-syn match idlUuid         contained +[0-9a-zA-Z]\{8}-\([0-9a-zA-Z]\{4}-\)\{3}[0-9a-zA-Z]\{12}+
-
-" Raises
-syn keyword idlRaises     contained raises               skipempty skipwhite nextgroup=idlRaises,idlContext,idlError,idlSemiColon
-
-" Context
-syn keyword idlContext    contained context              skipempty skipwhite nextgroup=idlRaises,idlContext,idlError,idlSemiColon
-
-" Operation
-syn match   idlParmList   contained ","                  skipempty skipwhite nextgroup=idlOpParms
-syn region  idlArraySize  contained start="\[" end="\]"  skipempty skipwhite nextgroup=idlArraySize,idlParmList contains=idlArraySize,idlLiteral
-syn match   idlParmName   contained "[a-zA-Z0-9_]\+"     skipempty skipwhite nextgroup=idlParmList,idlArraySize
-syn keyword idlParmInt    contained short long           skipempty skipwhite nextgroup=idlParmName
-syn keyword idlParmType   contained unsigned             skipempty skipwhite nextgroup=idlParmInt
-syn region  idlD3         contained start="<" end=">"    skipempty skipwhite nextgroup=idlParmName contains=idlString,idlLiteral
-syn keyword idlParmType   contained string               skipempty skipwhite nextgroup=idlD3,idlParmName
-syn keyword idlParmType   contained void float double char boolean octet any    skipempty skipwhite nextgroup=idlParmName
-syn match   idlParmType   contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*" skipempty skipwhite nextgroup=idlParmName
-syn keyword idlOpParms    contained in out inout         skipempty skipwhite nextgroup=idlParmType
-
-if !exists('idl_no_ms_extensions')
-syn keyword idlOpParms    contained retval optional      skipempty skipwhite nextgroup=idlParmType
-  syn match idlOpParms contained +\<\(iid_is\|defaultvalue\)\s*([^)]*)+ skipempty skipwhite nextgroup=idlParamType
-
-  syn keyword idlVariantType  contained BSTR VARIANT VARIANT_BOOL long short unsigned double CURRENCY DATE
-  syn region idlSafeArray contained matchgroup=idlVariantType start=+SAFEARRAY(\s*+ end=+)+ contains=idlVariantType
-endif
-
-syn region  idlOpContents contained start="(" end=")"    skipempty skipwhite nextgroup=idlRaises,idlContext,idlError,idlSemiColon contains=idlOpParms,idlSafeArray,idlVariantType,@idlCommentable
-syn match   idlOpName   contained "[a-zA-Z0-9_]\+"       skipempty skipwhite nextgroup=idlOpContents
-syn keyword idlOpInt    contained short long             skipempty skipwhite nextgroup=idlOpName
-syn region  idlD2       contained start="<" end=">"      skipempty skipwhite nextgroup=idlOpName contains=idlString,idlLiteral
-syn keyword idlOp       contained unsigned               skipempty skipwhite nextgroup=idlOpInt
-syn keyword idlOp       contained string                 skipempty skipwhite nextgroup=idlD2,idlOpName
-syn keyword idlOp       contained void float double char boolean octet any  skipempty skipwhite nextgroup=idlOpName
-syn match   idlOp       contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*" skipempty skipwhite nextgroup=idlOpName
-syn keyword idlOp       contained void                   skipempty skipwhite nextgroup=idlOpName
-syn keyword idlOneWayOp contained oneway                 skipempty skipwhite nextgroup=idOp
-
-" Enum
-syn region  idlEnumContents contained start="{" end="}"  skipempty skipwhite nextgroup=idlError,idlSemiColon,idlSimpDecl contains=idlId,idlAttributes,@idlCommentable
-syn match   idlEnumName contained "[a-zA-Z0-9_]\+"       skipempty skipwhite nextgroup=idlEnumContents
-syn keyword idlEnum     enum                             skipempty skipwhite nextgroup=idlEnumName,idlEnumContents
-
-" Typedef
-syn keyword idlTypedef typedef                          skipempty skipwhite nextgroup=idlTypedefOtherTypeQualifier,idlDefBaseType,idlDefBaseTypeInt,idlDefSeqType,idlDefv1Enum,idlDefEnum,idlDefOtherType,idlDefAttributes,idlError
-
-if !exists('idl_no_extensions')
-  syn keyword idlTypedefOtherTypeQualifier contained struct enum interface nextgroup=idlDefBaseType,idlDefBaseTypeInt,idlDefSeqType,idlDefv1Enum,idlDefEnum,idlDefOtherType,idlDefAttributes,idlError skipwhite
-
-  syn region  idlDefAttributes        contained start="\[" end="\]" contains=idlAttribute,idlAttributeParam,idlErrorBracket,idlErrorBrace skipempty skipwhite nextgroup=idlDefBaseType,idlDefBaseTypeInt,idlDefSeqType,idlDefv1Enum,idlDefEnum,idlDefOtherType,idlError
-
-  syn keyword idlDefBaseType      contained float double char boolean octet any  skipempty skipwhite nextgroup=idlTypedefDecl,idlError
-  syn keyword idlDefBaseTypeInt   contained short long                           skipempty skipwhite nextgroup=idlTypedefDecl,idlError
-  syn match idlDefOtherType       contained +\<\k\+\>+ skipempty                 nextgroup=idlTypedefDecl,idlError
-  " syn keyword idlDefSeqType     contained sequence                             skipempty skipwhite nextgroup=idlD4
-
-  " Enum typedef
-  syn keyword idlDefEnum          contained enum skipempty                       skipwhite nextgroup=idlDefEnumName,idlDefEnumContents
-  syn match   idlDefEnumName      contained "[a-zA-Z0-9_]\+"                     skipempty skipwhite nextgroup=idlDefEnumContents,idlTypedefDecl
-  syn region  idlDefEnumContents  contained start="{" end="}"                    skipempty skipwhite nextgroup=idlError,idlTypedefDecl contains=idlId,idlAttributes
-
-  syn match   idlTypedefDecl      contained "[a-zA-Z0-9_]\+"                     skipempty skipwhite nextgroup=idlError,idlSemiColon
-endif
-
-" Struct
-syn region  idlStructContent   contained start="{" end="}"   skipempty skipwhite nextgroup=idlError,idlSemiColon,idlSimpDecl contains=idlBaseType,idlBaseTypeInt,idlSeqType,@idlCommentable,idlEnum,idlUnion
-syn match   idlStructName      contained "[a-zA-Z0-9_]\+"    skipempty skipwhite nextgroup=idlStructContent
-syn keyword idlStruct          struct                        skipempty skipwhite nextgroup=idlStructName
-
-" Exception
-syn keyword idlException       exception                     skipempty skipwhite nextgroup=idlStructName
-
-" Union
-syn match   idlColon            contained ":"                skipempty skipwhite nextgroup=idlCase,idlSeqType,idlBaseType,idlBaseTypeInt
-syn region  idlCaseLabel        contained start="" skip="::" end=":"me=e-1 skipempty skipwhite nextgroup=idlColon contains=idlLiteral,idlString
-syn keyword idlCase             contained case               skipempty skipwhite nextgroup=idlCaseLabel
-syn keyword idlCase             contained default            skipempty skipwhite nextgroup=idlColon
-syn region  idlUnionContent     contained start="{" end="}"  skipempty skipwhite nextgroup=idlError,idlSemiColon,idlSimpDecl contains=idlCase
-syn region  idlSwitchType       contained start="(" end=")"  skipempty skipwhite nextgroup=idlUnionContent
-syn keyword idlUnionSwitch      contained switch             skipempty skipwhite nextgroup=idlSwitchType
-syn match   idlUnionName        contained "[a-zA-Z0-9_]\+"   skipempty skipwhite nextgroup=idlUnionSwitch
-syn keyword idlUnion            union                        skipempty skipwhite nextgroup=idlUnionName
-
-if !exists('idl_no_extensions')
-  syn sync match  idlInterfaceSync grouphere idlInterfaceContent "\<\(disp\)\=interface\>\s\+\k\+\s*:\s*\k\+\_s*{" skipempty skipwhite nextgroup=idlError,idlSemiColon contains=@idlContentCluster,@idlCommentable
-  syn sync maxlines=1000 minlines=100
-else
-  syn sync lines=200
-endif
-" syn sync fromstart
-
-if !exists("did_idl_syntax_inits")
-  let did_idl_syntax_inits = 1
-  " The default methods for highlighting.  Can be overridden later
-  command -nargs=+ HiLink hi def link <args>
-
-  HiLink idlInclude             Include
-  HiLink idlPreProc             PreProc
-  HiLink idlPreCondit           PreCondit
-  HiLink idlDefine              Macro
-  HiLink idlIncluded            String
-  HiLink idlString              String
-  HiLink idlComment             Comment
-  HiLink idlTodo                Todo
-  HiLink idlLiteral             Number
-  HiLink idlUuid                Number
-  HiLink idlType                Type
-  HiLink idlVariantType         idlType
-
-  HiLink idlModule              Keyword
-  HiLink idlInterface           Keyword
-  HiLink idlEnum                Keyword
-  HiLink idlStruct              Keyword
-  HiLink idlUnion               Keyword
-  HiLink idlTypedef             Keyword
-  HiLink idlException           Keyword
-  HiLink idlTypedefOtherTypeQualifier keyword
-
-  HiLink idlModuleName          Typedef
-  HiLink idlInterfaceName       Typedef
-  HiLink idlEnumName            Typedef
-  HiLink idlStructName          Typedef
-  HiLink idlUnionName           Typedef
-
-  HiLink idlBaseTypeInt         idlType
-  HiLink idlBaseType            idlType
-  HiLink idlSeqType             idlType
-  HiLink idlD1                  Paren
-  HiLink idlD2                  Paren
-  HiLink idlD3                  Paren
-  HiLink idlD4                  Paren
-  "HiLink idlArraySize          Paren
-  "HiLink idlArraySize1         Paren
-  HiLink idlModuleContent       Paren
-  HiLink idlUnionContent        Paren
-  HiLink idlStructContent       Paren
-  HiLink idlEnumContents        Paren
-  HiLink idlInterfaceContent    Paren
-
-  HiLink idlSimpDecl            Identifier
-  HiLink idlROAttr              StorageClass
-  HiLink idlAttr                Keyword
-  HiLink idlConst               StorageClass
-
-  HiLink idlOneWayOp            StorageClass
-  HiLink idlOp                  idlType
-  HiLink idlParmType            idlType
-  HiLink idlOpName              Function
-  HiLink idlOpParms             SpecialComment
-  HiLink idlParmName            Identifier
-  HiLink idlInheritFrom         Identifier
-  HiLink idlAttribute           SpecialComment
-
-  HiLink idlId                  Constant
-  "HiLink idlCase               Keyword
-  HiLink idlCaseLabel           Constant
-
-  HiLink idlErrorBracket        Error
-  HiLink idlErrorBrace          Error
-  HiLink idlErrorSquareBracket  Error
-
-  HiLink idlImport              Keyword
-  HiLink idlImportString        idlString
-  HiLink idlCoclassAttribute    StorageClass
-  HiLink idlLibrary             Keyword
-  HiLink idlImportlib           Keyword
-  HiLink idlCoclass             Keyword
-  HiLink idlLibraryName         Typedef
-  HiLink idlCoclassName         Typedef
-  " hi idlLibraryContent guifg=red
-  HiLink idlTypedefDecl         Typedef
-  HiLink idlDefEnum             Keyword
-  HiLink idlDefv1Enum           Keyword
-  HiLink idlDefEnumName         Typedef
-  HiLink idlDefEnumContents     Paren
-  HiLink idlDefBaseTypeInt      idlType
-  HiLink idlDefBaseType         idlType
-  HiLink idlDefSeqType          idlType
-  HiLink idlInterfaceSections   Label
+let s:cpo_save = &cpo
+try
+  set cpo&vim
 
   if exists("idlsyntax_showerror")
-    if exists("idlsyntax_showerror_soft")
-      hi default idlError guibg=#d0ffd0
-    else
-      HiLink idlError Error
-    endif
+    syn match idlError +\S+ skipwhite skipempty nextgroup=idlError
   endif
-  delcommand HiLink
-endif
 
-let b:current_syntax = "idl"
+  syn region idlCppQuote start='\<cpp_quote\s*(' end=')' contains=idlString
 
+  " Misc basic
+  syn match   idlId          contained "[a-zA-Z][a-zA-Z0-9_]*" skipwhite skipempty nextgroup=idlEnumComma,idlEnumNumber
+  syn match   idlEnumComma   contained ","
+  syn match   idlEnumNumber  contained "=" skipwhite skipempty nextgroup=idlString,idlLiteral
+  syn match   idlSemiColon   contained ";"
+  syn match   idlCommaArg    contained ","                      skipempty skipwhite nextgroup=idlSimpDecl
+  syn region  idlArraySize1  contained start=:\[: end=:\]:      skipempty skipwhite nextgroup=idlArraySize1,idlError,idlSemiColon,idlCommaArg contains=idlArraySize1,idlLiteral
+  syn match   idlSimpDecl    contained "[a-zA-Z][a-zA-Z0-9_]*"  skipempty skipwhite nextgroup=idlError,idlSemiColon,idlCommaArg,idlArraySize1
+  syn region  idlString      contained start=+"+  skip=+\\\(\\\\\)*"+  end=+"+ contains=@Spell
+  syn match   idlLiteral     contained "[1-9]\d*\(\.\d*\)\="
+  syn match   idlLiteral     contained "0"
+  syn match   idlLiteral     contained "\.\d\+"
+  syn match   idlLiteral     contained "0x[0-9A-Fa-f]\+"
+  syn match   idlLiteral     contained "0[0-7]\+"
+  syn keyword idlLiteral     contained TRUE FALSE
+
+  " Comments
+  syn keyword idlTodo        contained TODO FIXME XXX
+  syn region idlComment      start="/\*"  end="\*/" contains=idlTodo,@Spell
+  syn match  idlComment      "//.*" contains=idlTodo,@Spell
+  syn match  idlCommentError "\*/"
+
+  " C style Preprocessor
+  syn region idlIncluded    contained start=+"+  skip=+\\\(\\\\\)*"+  end=+"+
+  syn match  idlIncluded    contained "<[^>]*>"
+  syn match  idlInclude     "^[ \t]*#[ \t]*include\>[ \t]*["<]" contains=idlIncluded,idlString
+  syn region idlPreCondit   start="^[ \t]*#[ \t]*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)"  skip="\\$"  end="$" contains=idlComment,idlCommentError
+  syn region idlDefine      start="^[ \t]*#[ \t]*\(define\>\|undef\>\)" skip="\\$" end="$" contains=idlLiteral,idlString
+
+  " Constants
+  syn keyword idlConst    const                             skipempty skipwhite nextgroup=idlBaseType,idlBaseTypeInt
+
+  " Attribute
+  syn keyword idlROAttr   readonly                          skipempty skipwhite nextgroup=idlAttr
+  syn keyword idlAttr     attribute                         skipempty skipwhite nextgroup=idlBaseTypeInt,idlBaseType
+
+  " Types
+  syn region  idlD4          contained start="<" end=">"    skipempty skipwhite nextgroup=idlSimpDecl contains=idlSeqType,idlBaseTypeInt,idlBaseType,idlLiteral
+  syn keyword idlSeqType     contained sequence             skipempty skipwhite nextgroup=idlD4
+  syn keyword idlBaseType    contained float double char boolean octet any skipempty skipwhite nextgroup=idlSimpDecl
+  syn keyword idlBaseTypeInt contained short long           skipempty skipwhite nextgroup=idlSimpDecl
+  syn keyword idlBaseType    contained unsigned             skipempty skipwhite nextgroup=idlBaseTypeInt
+  syn region  idlD1          contained start="<" end=">"    skipempty skipwhite nextgroup=idlSimpDecl contains=idlString,idlLiteral
+  syn keyword idlBaseType    contained string               skipempty skipwhite nextgroup=idlD1,idlSimpDecl
+  syn match   idlBaseType    contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*"  skipempty skipwhite nextgroup=idlSimpDecl
+
+  " Modules
+  syn region  idlModuleContent contained start="{" end="}"  skipempty skipwhite nextgroup=idlError,idlSemiColon contains=idlUnion,idlStruct,idlEnum,idlInterface,idlComment,idlTypedef,idlConst,idlException,idlModule
+  syn match   idlModuleName  contained "[a-zA-Z0-9_]\+"     skipempty skipwhite nextgroup=idlModuleContent,idlError,idlSemiColon
+  syn keyword idlModule      module                         skipempty skipwhite nextgroup=idlModuleName
+
+  " Interfaces
+  syn cluster idlCommentable contains=idlComment
+  syn cluster idlContentCluster contains=idlUnion,idlStruct,idlEnum,idlROAttr,idlAttr,idlOp,idlOneWayOp,idlException,idlConst,idlTypedef,idlAttributes,idlErrorSquareBracket,idlErrorBracket,idlInterfaceSections
+
+  syn region  idlInterfaceContent contained start="{" end="}"   skipempty skipwhite nextgroup=idlError,idlSemiColon contains=@idlContentCluster,@idlCommentable
+  syn match   idlInheritFrom2 contained ","                     skipempty skipwhite nextgroup=idlInheritFrom
+  syn match   idlInheritFrom contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*" skipempty skipwhite nextgroup=idlInheritFrom2,idlInterfaceContent
+  syn match   idlInherit contained ":"                            skipempty skipwhite nextgroup=idlInheritFrom
+  syn match   idlInterfaceName contained "[a-zA-Z0-9_]\+"       skipempty skipwhite nextgroup=idlInterfaceContent,idlInherit,idlError,idlSemiColon
+  syn keyword idlInterface     interface dispinterface          skipempty skipwhite nextgroup=idlInterfaceName
+  syn keyword idlInterfaceSections contained properties methods skipempty skipwhite nextgroup=idlSectionColon,idlError
+  syn match   idlSectionColon contained ":"
+
+
+  syn match   idlLibraryName  contained  "[a-zA-Z0-9_]\+"       skipempty skipwhite nextgroup=idlLibraryContent,idlError,idlSemiColon
+  syn keyword idlLibrary      library                           skipempty skipwhite nextgroup=idlLibraryName
+  syn region  idlLibraryContent contained start="{" end="}"     skipempty skipwhite nextgroup=idlError,idlSemiColon contains=@idlCommentable,idlAttributes,idlErrorSquareBracket,idlErrorBracket,idlImportlib,idlCoclass,idlTypedef,idlInterface
+
+  syn keyword idlImportlib contained importlib                  skipempty skipwhite nextgroup=idlStringArg
+  syn region idlStringArg contained start="(" end=")"           contains=idlString nextgroup=idlError,idlSemiColon,idlErrorBrace,idlErrorSquareBracket
+
+  syn keyword idlCoclass coclass contained                      skipempty skipwhite nextgroup=idlCoclassName
+  syn match   idlCoclassName "[a-zA-Z0-9_]\+" contained         skipempty skipwhite nextgroup=idlCoclassDefinition,idlError,idlSemiColon
+
+  syn region idlCoclassDefinition contained start="{" end="}"   contains=idlCoclassAttributes,idlInterface,idlErrorBracket,idlErrorSquareBracket skipempty skipwhite nextgroup=idlError,idlSemiColon
+  syn region idlCoclassAttributes contained start=+\[+ end=+]+  skipempty skipwhite nextgroup=idlInterface contains=idlErrorBracket,idlErrorBrace,idlCoclassAttribute
+  syn keyword idlCoclassAttribute contained default source
+  "syn keyword idlInterface       interface                      skipempty skipwhite nextgroup=idlInterfaceStubName
+
+  syn match idlImportString       +"\f\+"+                      skipempty skipwhite nextgroup=idlError,idlSemiColon
+  syn keyword idlImport           import                        skipempty skipwhite nextgroup=idlImportString
+
+  syn region  idlAttributes start="\[" end="\]"                 contains=idlAttribute,idlAttributeParam,idlErrorBracket,idlErrorBrace,idlComment
+  syn keyword idlAttribute contained propput propget propputref id helpstring object uuid pointer_default
+  if !exists('idl_no_ms_extensions')
+  syn keyword idlAttribute contained nonextensible dual version aggregatable restricted hidden noncreatable oleautomation
+  endif
+  syn region idlAttributeParam contained start="(" end=")"      contains=idlString,idlUuid,idlLiteral,idlErrorBrace,idlErrorSquareBracket
+  " skipwhite nextgroup=idlArraySize,idlParmList contains=idlArraySize,idlLiteral
+  syn match idlErrorBrace contained "}"
+  syn match idlErrorBracket contained ")"
+  syn match idlErrorSquareBracket contained "\]"
+
+  syn match idlUuid         contained +[0-9a-zA-Z]\{8}-\([0-9a-zA-Z]\{4}-\)\{3}[0-9a-zA-Z]\{12}+
+
+  " Raises
+  syn keyword idlRaises     contained raises               skipempty skipwhite nextgroup=idlRaises,idlContext,idlError,idlSemiColon
+
+  " Context
+  syn keyword idlContext    contained context              skipempty skipwhite nextgroup=idlRaises,idlContext,idlError,idlSemiColon
+
+  " Operation
+  syn match   idlParmList   contained ","                  skipempty skipwhite nextgroup=idlOpParms
+  syn region  idlArraySize  contained start="\[" end="\]"  skipempty skipwhite nextgroup=idlArraySize,idlParmList contains=idlArraySize,idlLiteral
+  syn match   idlParmName   contained "[a-zA-Z0-9_]\+"     skipempty skipwhite nextgroup=idlParmList,idlArraySize
+  syn keyword idlParmInt    contained short long           skipempty skipwhite nextgroup=idlParmName
+  syn keyword idlParmType   contained unsigned             skipempty skipwhite nextgroup=idlParmInt
+  syn region  idlD3         contained start="<" end=">"    skipempty skipwhite nextgroup=idlParmName contains=idlString,idlLiteral
+  syn keyword idlParmType   contained string               skipempty skipwhite nextgroup=idlD3,idlParmName
+  syn keyword idlParmType   contained void float double char boolean octet any    skipempty skipwhite nextgroup=idlParmName
+  syn match   idlParmType   contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*" skipempty skipwhite nextgroup=idlParmName
+  syn keyword idlOpParms    contained in out inout         skipempty skipwhite nextgroup=idlParmType
+
+  if !exists('idl_no_ms_extensions')
+  syn keyword idlOpParms    contained retval optional      skipempty skipwhite nextgroup=idlParmType
+    syn match idlOpParms contained +\<\(iid_is\|defaultvalue\)\s*([^)]*)+ skipempty skipwhite nextgroup=idlParamType
+
+    syn keyword idlVariantType  contained BSTR VARIANT VARIANT_BOOL long short unsigned double CURRENCY DATE
+    syn region idlSafeArray contained matchgroup=idlVariantType start=+SAFEARRAY(\s*+ end=+)+ contains=idlVariantType
+  endif
+
+  syn region  idlOpContents contained start="(" end=")"    skipempty skipwhite nextgroup=idlRaises,idlContext,idlError,idlSemiColon contains=idlOpParms,idlSafeArray,idlVariantType,@idlCommentable
+  syn match   idlOpName   contained "[a-zA-Z0-9_]\+"       skipempty skipwhite nextgroup=idlOpContents
+  syn keyword idlOpInt    contained short long             skipempty skipwhite nextgroup=idlOpName
+  syn region  idlD2       contained start="<" end=">"      skipempty skipwhite nextgroup=idlOpName contains=idlString,idlLiteral
+  syn keyword idlOp       contained unsigned               skipempty skipwhite nextgroup=idlOpInt
+  syn keyword idlOp       contained string                 skipempty skipwhite nextgroup=idlD2,idlOpName
+  syn keyword idlOp       contained void float double char boolean octet any  skipempty skipwhite nextgroup=idlOpName
+  syn match   idlOp       contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*" skipempty skipwhite nextgroup=idlOpName
+  syn keyword idlOp       contained void                   skipempty skipwhite nextgroup=idlOpName
+  syn keyword idlOneWayOp contained oneway                 skipempty skipwhite nextgroup=idOp
+
+  " Enum
+  syn region  idlEnumContents contained start="{" end="}"  skipempty skipwhite nextgroup=idlError,idlSemiColon,idlSimpDecl contains=idlId,idlAttributes,@idlCommentable
+  syn match   idlEnumName contained "[a-zA-Z0-9_]\+"       skipempty skipwhite nextgroup=idlEnumContents
+  syn keyword idlEnum     enum                             skipempty skipwhite nextgroup=idlEnumName,idlEnumContents
+
+  " Typedef
+  syn keyword idlTypedef typedef                          skipempty skipwhite nextgroup=idlTypedefOtherTypeQualifier,idlDefBaseType,idlDefBaseTypeInt,idlDefSeqType,idlDefv1Enum,idlDefEnum,idlDefOtherType,idlDefAttributes,idlError
+
+  if !exists('idl_no_extensions')
+    syn keyword idlTypedefOtherTypeQualifier contained struct enum interface nextgroup=idlDefBaseType,idlDefBaseTypeInt,idlDefSeqType,idlDefv1Enum,idlDefEnum,idlDefOtherType,idlDefAttributes,idlError skipwhite
+
+    syn region  idlDefAttributes        contained start="\[" end="\]" contains=idlAttribute,idlAttributeParam,idlErrorBracket,idlErrorBrace skipempty skipwhite nextgroup=idlDefBaseType,idlDefBaseTypeInt,idlDefSeqType,idlDefv1Enum,idlDefEnum,idlDefOtherType,idlError
+
+    syn keyword idlDefBaseType      contained float double char boolean octet any  skipempty skipwhite nextgroup=idlTypedefDecl,idlError
+    syn keyword idlDefBaseTypeInt   contained short long                           skipempty skipwhite nextgroup=idlTypedefDecl,idlError
+    syn match idlDefOtherType       contained +\<\k\+\>+ skipempty                 nextgroup=idlTypedefDecl,idlError
+    " syn keyword idlDefSeqType     contained sequence                             skipempty skipwhite nextgroup=idlD4
+
+    " Enum typedef
+    syn keyword idlDefEnum          contained enum skipempty                       skipwhite nextgroup=idlDefEnumName,idlDefEnumContents
+    syn match   idlDefEnumName      contained "[a-zA-Z0-9_]\+"                     skipempty skipwhite nextgroup=idlDefEnumContents,idlTypedefDecl
+    syn region  idlDefEnumContents  contained start="{" end="}"                    skipempty skipwhite nextgroup=idlError,idlTypedefDecl contains=idlId,idlAttributes
+
+    syn match   idlTypedefDecl      contained "[a-zA-Z0-9_]\+"                     skipempty skipwhite nextgroup=idlError,idlSemiColon
+  endif
+
+  " Struct
+  syn region  idlStructContent   contained start="{" end="}"   skipempty skipwhite nextgroup=idlError,idlSemiColon,idlSimpDecl contains=idlBaseType,idlBaseTypeInt,idlSeqType,@idlCommentable,idlEnum,idlUnion
+  syn match   idlStructName      contained "[a-zA-Z0-9_]\+"    skipempty skipwhite nextgroup=idlStructContent
+  syn keyword idlStruct          struct                        skipempty skipwhite nextgroup=idlStructName
+
+  " Exception
+  syn keyword idlException       exception                     skipempty skipwhite nextgroup=idlStructName
+
+  " Union
+  syn match   idlColon            contained ":"                skipempty skipwhite nextgroup=idlCase,idlSeqType,idlBaseType,idlBaseTypeInt
+  syn region  idlCaseLabel        contained start="" skip="::" end=":"me=e-1 skipempty skipwhite nextgroup=idlColon contains=idlLiteral,idlString
+  syn keyword idlCase             contained case               skipempty skipwhite nextgroup=idlCaseLabel
+  syn keyword idlCase             contained default            skipempty skipwhite nextgroup=idlColon
+  syn region  idlUnionContent     contained start="{" end="}"  skipempty skipwhite nextgroup=idlError,idlSemiColon,idlSimpDecl contains=idlCase
+  syn region  idlSwitchType       contained start="(" end=")"  skipempty skipwhite nextgroup=idlUnionContent
+  syn keyword idlUnionSwitch      contained switch             skipempty skipwhite nextgroup=idlSwitchType
+  syn match   idlUnionName        contained "[a-zA-Z0-9_]\+"   skipempty skipwhite nextgroup=idlUnionSwitch
+  syn keyword idlUnion            union                        skipempty skipwhite nextgroup=idlUnionName
+
+  if !exists('idl_no_extensions')
+    syn sync match  idlInterfaceSync grouphere idlInterfaceContent "\<\(disp\)\=interface\>\s\+\k\+\s*:\s*\k\+\_s*{" skipempty skipwhite nextgroup=idlError,idlSemiColon contains=@idlContentCluster,@idlCommentable
+    syn sync maxlines=1000 minlines=100
+  else
+    syn sync lines=200
+  endif
+  " syn sync fromstart
+
+  if !exists("did_idl_syntax_inits")
+    let did_idl_syntax_inits = 1
+    " The default methods for highlighting.  Can be overridden later
+    command -nargs=+ HiLink hi def link <args>
+
+    HiLink idlInclude             Include
+    HiLink idlPreProc             PreProc
+    HiLink idlPreCondit           PreCondit
+    HiLink idlDefine              Macro
+    HiLink idlIncluded            String
+    HiLink idlString              String
+    HiLink idlComment             Comment
+    HiLink idlTodo                Todo
+    HiLink idlLiteral             Number
+    HiLink idlUuid                Number
+    HiLink idlType                Type
+    HiLink idlVariantType         idlType
+
+    HiLink idlModule              Keyword
+    HiLink idlInterface           Keyword
+    HiLink idlEnum                Keyword
+    HiLink idlStruct              Keyword
+    HiLink idlUnion               Keyword
+    HiLink idlTypedef             Keyword
+    HiLink idlException           Keyword
+    HiLink idlTypedefOtherTypeQualifier keyword
+
+    HiLink idlModuleName          Typedef
+    HiLink idlInterfaceName       Typedef
+    HiLink idlEnumName            Typedef
+    HiLink idlStructName          Typedef
+    HiLink idlUnionName           Typedef
+
+    HiLink idlBaseTypeInt         idlType
+    HiLink idlBaseType            idlType
+    HiLink idlSeqType             idlType
+    HiLink idlD1                  Paren
+    HiLink idlD2                  Paren
+    HiLink idlD3                  Paren
+    HiLink idlD4                  Paren
+    "HiLink idlArraySize          Paren
+    "HiLink idlArraySize1         Paren
+    HiLink idlModuleContent       Paren
+    HiLink idlUnionContent        Paren
+    HiLink idlStructContent       Paren
+    HiLink idlEnumContents        Paren
+    HiLink idlInterfaceContent    Paren
+
+    HiLink idlSimpDecl            Identifier
+    HiLink idlROAttr              StorageClass
+    HiLink idlAttr                Keyword
+    HiLink idlConst               StorageClass
+
+    HiLink idlOneWayOp            StorageClass
+    HiLink idlOp                  idlType
+    HiLink idlParmType            idlType
+    HiLink idlOpName              Function
+    HiLink idlOpParms             SpecialComment
+    HiLink idlParmName            Identifier
+    HiLink idlInheritFrom         Identifier
+    HiLink idlAttribute           SpecialComment
+
+    HiLink idlId                  Constant
+    "HiLink idlCase               Keyword
+    HiLink idlCaseLabel           Constant
+
+    HiLink idlErrorBracket        Error
+    HiLink idlErrorBrace          Error
+    HiLink idlErrorSquareBracket  Error
+
+    HiLink idlImport              Keyword
+    HiLink idlImportString        idlString
+    HiLink idlCoclassAttribute    StorageClass
+    HiLink idlLibrary             Keyword
+    HiLink idlImportlib           Keyword
+    HiLink idlCoclass             Keyword
+    HiLink idlLibraryName         Typedef
+    HiLink idlCoclassName         Typedef
+    " hi idlLibraryContent guifg=red
+    HiLink idlTypedefDecl         Typedef
+    HiLink idlDefEnum             Keyword
+    HiLink idlDefv1Enum           Keyword
+    HiLink idlDefEnumName         Typedef
+    HiLink idlDefEnumContents     Paren
+    HiLink idlDefBaseTypeInt      idlType
+    HiLink idlDefBaseType         idlType
+    HiLink idlDefSeqType          idlType
+    HiLink idlInterfaceSections   Label
+
+    if exists("idlsyntax_showerror")
+      if exists("idlsyntax_showerror_soft")
+        hi default idlError guibg=#d0ffd0
+      else
+        HiLink idlError Error
+      endif
+    endif
+    delcommand HiLink
+  endif
+
+  let b:current_syntax = "idl"
+finally
+  let &cpo = s:cpo_save
+  unlet s:cpo_save
+endtry
 " vim: sw=2 et