1" Vim syntax file 2" Language: IDL (Interface Description Language) 3" Created By: Jody Goldberg 4" Maintainer: Michael Geddes <[email protected]> 5" Last Change: 2012 Jan 11 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 26let s:cpo_save = &cpo 27try 28 set cpo&vim 29 30 if exists("idlsyntax_showerror") 31 syn match idlError +\S+ skipwhite skipempty nextgroup=idlError 32 endif 33 34 syn region idlCppQuote start='\<cpp_quote\s*(' end=')' contains=idlString 35 36 " Misc basic 37 syn match idlId contained "[a-zA-Z][a-zA-Z0-9_]*" skipwhite skipempty nextgroup=idlEnumComma,idlEnumNumber 38 syn match idlEnumComma contained "," 39 syn match idlEnumNumber contained "=" skipwhite skipempty nextgroup=idlString,idlLiteral 40 syn match idlSemiColon contained ";" 41 syn match idlCommaArg contained "," skipempty skipwhite nextgroup=idlSimpDecl 42 syn region idlArraySize1 contained start=:\[: end=:\]: skipempty skipwhite nextgroup=idlArraySize1,idlError,idlSemiColon,idlCommaArg contains=idlArraySize1,idlLiteral 43 syn match idlSimpDecl contained "[a-zA-Z][a-zA-Z0-9_]*" skipempty skipwhite nextgroup=idlError,idlSemiColon,idlCommaArg,idlArraySize1 44 syn region idlString contained start=+"+ skip=+\\\(\\\\\)*"+ end=+"+ contains=@Spell 45 syn match idlLiteral contained "[1-9]\d*\(\.\d*\)\=" 46 syn match idlLiteral contained "0" 47 syn match idlLiteral contained "\.\d\+" 48 syn match idlLiteral contained "0x[0-9A-Fa-f]\+" 49 syn match idlLiteral contained "0[0-7]\+" 50 syn keyword idlLiteral contained TRUE FALSE 51 52 " Comments 53 syn keyword idlTodo contained TODO FIXME XXX 54 syn region idlComment start="/\*" end="\*/" contains=idlTodo,@Spell 55 syn match idlComment "//.*" contains=idlTodo,@Spell 56 syn match idlCommentError "\*/" 57 58 " C style Preprocessor 59 syn region idlIncluded contained start=+"+ skip=+\\\(\\\\\)*"+ end=+"+ 60 syn match idlIncluded contained "<[^>]*>" 61 syn match idlInclude "^[ \t]*#[ \t]*include\>[ \t]*["<]" contains=idlIncluded,idlString 62 syn region idlPreCondit start="^[ \t]*#[ \t]*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)" skip="\\$" end="$" contains=idlComment,idlCommentError 63 syn region idlDefine start="^[ \t]*#[ \t]*\(define\>\|undef\>\)" skip="\\$" end="$" contains=idlLiteral,idlString 64 65 " Constants 66 syn keyword idlConst const skipempty skipwhite nextgroup=idlBaseType,idlBaseTypeInt 67 68 " Attribute 69 syn keyword idlROAttr readonly skipempty skipwhite nextgroup=idlAttr 70 syn keyword idlAttr attribute skipempty skipwhite nextgroup=idlBaseTypeInt,idlBaseType 71 72 " Types 73 syn region idlD4 contained start="<" end=">" skipempty skipwhite nextgroup=idlSimpDecl contains=idlSeqType,idlBaseTypeInt,idlBaseType,idlLiteral 74 syn keyword idlSeqType contained sequence skipempty skipwhite nextgroup=idlD4 75 syn keyword idlBaseType contained float double char boolean octet any skipempty skipwhite nextgroup=idlSimpDecl 76 syn keyword idlBaseTypeInt contained short long skipempty skipwhite nextgroup=idlSimpDecl 77 syn keyword idlBaseType contained unsigned skipempty skipwhite nextgroup=idlBaseTypeInt 78 syn region idlD1 contained start="<" end=">" skipempty skipwhite nextgroup=idlSimpDecl contains=idlString,idlLiteral 79 syn keyword idlBaseType contained string skipempty skipwhite nextgroup=idlD1,idlSimpDecl 80 syn match idlBaseType contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*" skipempty skipwhite nextgroup=idlSimpDecl 81 82 " Modules 83 syn region idlModuleContent contained start="{" end="}" skipempty skipwhite nextgroup=idlError,idlSemiColon contains=idlUnion,idlStruct,idlEnum,idlInterface,idlComment,idlTypedef,idlConst,idlException,idlModule 84 syn match idlModuleName contained "[a-zA-Z0-9_]\+" skipempty skipwhite nextgroup=idlModuleContent,idlError,idlSemiColon 85 syn keyword idlModule module skipempty skipwhite nextgroup=idlModuleName 86 87 " Interfaces 88 syn cluster idlCommentable contains=idlComment 89 syn cluster idlContentCluster contains=idlUnion,idlStruct,idlEnum,idlROAttr,idlAttr,idlOp,idlOneWayOp,idlException,idlConst,idlTypedef,idlAttributes,idlErrorSquareBracket,idlErrorBracket,idlInterfaceSections 90 91 syn region idlInterfaceContent contained start="{" end="}" skipempty skipwhite nextgroup=idlError,idlSemiColon contains=@idlContentCluster,@idlCommentable 92 syn match idlInheritFrom2 contained "," skipempty skipwhite nextgroup=idlInheritFrom 93 syn match idlInheritFrom contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*" skipempty skipwhite nextgroup=idlInheritFrom2,idlInterfaceContent 94 syn match idlInherit contained ":" skipempty skipwhite nextgroup=idlInheritFrom 95 syn match idlInterfaceName contained "[a-zA-Z0-9_]\+" skipempty skipwhite nextgroup=idlInterfaceContent,idlInherit,idlError,idlSemiColon 96 syn keyword idlInterface interface dispinterface skipempty skipwhite nextgroup=idlInterfaceName 97 syn keyword idlInterfaceSections contained properties methods skipempty skipwhite nextgroup=idlSectionColon,idlError 98 syn match idlSectionColon contained ":" 99 100 101 syn match idlLibraryName contained "[a-zA-Z0-9_]\+" skipempty skipwhite nextgroup=idlLibraryContent,idlError,idlSemiColon 102 syn keyword idlLibrary library skipempty skipwhite nextgroup=idlLibraryName 103 syn region idlLibraryContent contained start="{" end="}" skipempty skipwhite nextgroup=idlError,idlSemiColon contains=@idlCommentable,idlAttributes,idlErrorSquareBracket,idlErrorBracket,idlImportlib,idlCoclass,idlTypedef,idlInterface 104 105 syn keyword idlImportlib contained importlib skipempty skipwhite nextgroup=idlStringArg 106 syn region idlStringArg contained start="(" end=")" contains=idlString nextgroup=idlError,idlSemiColon,idlErrorBrace,idlErrorSquareBracket 107 108 syn keyword idlCoclass coclass contained skipempty skipwhite nextgroup=idlCoclassName 109 syn match idlCoclassName "[a-zA-Z0-9_]\+" contained skipempty skipwhite nextgroup=idlCoclassDefinition,idlError,idlSemiColon 110 111 syn region idlCoclassDefinition contained start="{" end="}" contains=idlCoclassAttributes,idlInterface,idlErrorBracket,idlErrorSquareBracket skipempty skipwhite nextgroup=idlError,idlSemiColon 112 syn region idlCoclassAttributes contained start=+\[+ end=+]+ skipempty skipwhite nextgroup=idlInterface contains=idlErrorBracket,idlErrorBrace,idlCoclassAttribute 113 syn keyword idlCoclassAttribute contained default source 114 "syn keyword idlInterface interface skipempty skipwhite nextgroup=idlInterfaceStubName 115 116 syn match idlImportString +"\f\+"+ skipempty skipwhite nextgroup=idlError,idlSemiColon 117 syn keyword idlImport import skipempty skipwhite nextgroup=idlImportString 118 119 syn region idlAttributes start="\[" end="\]" contains=idlAttribute,idlAttributeParam,idlErrorBracket,idlErrorBrace,idlComment 120 syn keyword idlAttribute contained propput propget propputref id helpstring object uuid pointer_default 121 if !exists('idl_no_ms_extensions') 122 syn keyword idlAttribute contained nonextensible dual version aggregatable restricted hidden noncreatable oleautomation 123 endif 124 syn region idlAttributeParam contained start="(" end=")" contains=idlString,idlUuid,idlLiteral,idlErrorBrace,idlErrorSquareBracket 125 " skipwhite nextgroup=idlArraySize,idlParmList contains=idlArraySize,idlLiteral 126 syn match idlErrorBrace contained "}" 127 syn match idlErrorBracket contained ")" 128 syn match idlErrorSquareBracket contained "\]" 129 130 syn match idlUuid contained +[0-9a-zA-Z]\{8}-\([0-9a-zA-Z]\{4}-\)\{3}[0-9a-zA-Z]\{12}+ 131 132 " Raises 133 syn keyword idlRaises contained raises skipempty skipwhite nextgroup=idlRaises,idlContext,idlError,idlSemiColon 134 135 " Context 136 syn keyword idlContext contained context skipempty skipwhite nextgroup=idlRaises,idlContext,idlError,idlSemiColon 137 138 " Operation 139 syn match idlParmList contained "," skipempty skipwhite nextgroup=idlOpParms 140 syn region idlArraySize contained start="\[" end="\]" skipempty skipwhite nextgroup=idlArraySize,idlParmList contains=idlArraySize,idlLiteral 141 syn match idlParmName contained "[a-zA-Z0-9_]\+" skipempty skipwhite nextgroup=idlParmList,idlArraySize 142 syn keyword idlParmInt contained short long skipempty skipwhite nextgroup=idlParmName 143 syn keyword idlParmType contained unsigned skipempty skipwhite nextgroup=idlParmInt 144 syn region idlD3 contained start="<" end=">" skipempty skipwhite nextgroup=idlParmName contains=idlString,idlLiteral 145 syn keyword idlParmType contained string skipempty skipwhite nextgroup=idlD3,idlParmName 146 syn keyword idlParmType contained void float double char boolean octet any skipempty skipwhite nextgroup=idlParmName 147 syn match idlParmType contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*" skipempty skipwhite nextgroup=idlParmName 148 syn keyword idlOpParms contained in out inout skipempty skipwhite nextgroup=idlParmType 149 150 if !exists('idl_no_ms_extensions') 151 syn keyword idlOpParms contained retval optional skipempty skipwhite nextgroup=idlParmType 152 syn match idlOpParms contained +\<\(iid_is\|defaultvalue\)\s*([^)]*)+ skipempty skipwhite nextgroup=idlParamType 153 154 syn keyword idlVariantType contained BSTR VARIANT VARIANT_BOOL long short unsigned double CURRENCY DATE 155 syn region idlSafeArray contained matchgroup=idlVariantType start=+SAFEARRAY(\s*+ end=+)+ contains=idlVariantType 156 endif 157 158 syn region idlOpContents contained start="(" end=")" skipempty skipwhite nextgroup=idlRaises,idlContext,idlError,idlSemiColon contains=idlOpParms,idlSafeArray,idlVariantType,@idlCommentable 159 syn match idlOpName contained "[a-zA-Z0-9_]\+" skipempty skipwhite nextgroup=idlOpContents 160 syn keyword idlOpInt contained short long skipempty skipwhite nextgroup=idlOpName 161 syn region idlD2 contained start="<" end=">" skipempty skipwhite nextgroup=idlOpName contains=idlString,idlLiteral 162 syn keyword idlOp contained unsigned skipempty skipwhite nextgroup=idlOpInt 163 syn keyword idlOp contained string skipempty skipwhite nextgroup=idlD2,idlOpName 164 syn keyword idlOp contained void float double char boolean octet any skipempty skipwhite nextgroup=idlOpName 165 syn match idlOp contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*" skipempty skipwhite nextgroup=idlOpName 166 syn keyword idlOp contained void skipempty skipwhite nextgroup=idlOpName 167 syn keyword idlOneWayOp contained oneway skipempty skipwhite nextgroup=idOp 168 169 " Enum 170 syn region idlEnumContents contained start="{" end="}" skipempty skipwhite nextgroup=idlError,idlSemiColon,idlSimpDecl contains=idlId,idlAttributes,@idlCommentable 171 syn match idlEnumName contained "[a-zA-Z0-9_]\+" skipempty skipwhite nextgroup=idlEnumContents 172 syn keyword idlEnum enum skipempty skipwhite nextgroup=idlEnumName,idlEnumContents 173 174 " Typedef 175 syn keyword idlTypedef typedef skipempty skipwhite nextgroup=idlTypedefOtherTypeQualifier,idlDefBaseType,idlDefBaseTypeInt,idlDefSeqType,idlDefv1Enum,idlDefEnum,idlDefOtherType,idlDefAttributes,idlError 176 177 if !exists('idl_no_extensions') 178 syn keyword idlTypedefOtherTypeQualifier contained struct enum interface nextgroup=idlDefBaseType,idlDefBaseTypeInt,idlDefSeqType,idlDefv1Enum,idlDefEnum,idlDefOtherType,idlDefAttributes,idlError skipwhite 179 180 syn region idlDefAttributes contained start="\[" end="\]" contains=idlAttribute,idlAttributeParam,idlErrorBracket,idlErrorBrace skipempty skipwhite nextgroup=idlDefBaseType,idlDefBaseTypeInt,idlDefSeqType,idlDefv1Enum,idlDefEnum,idlDefOtherType,idlError 181 182 syn keyword idlDefBaseType contained float double char boolean octet any skipempty skipwhite nextgroup=idlTypedefDecl,idlError 183 syn keyword idlDefBaseTypeInt contained short long skipempty skipwhite nextgroup=idlTypedefDecl,idlError 184 syn match idlDefOtherType contained +\<\k\+\>+ skipempty nextgroup=idlTypedefDecl,idlError 185 " syn keyword idlDefSeqType contained sequence skipempty skipwhite nextgroup=idlD4 186 187 " Enum typedef 188 syn keyword idlDefEnum contained enum skipempty skipwhite nextgroup=idlDefEnumName,idlDefEnumContents 189 syn match idlDefEnumName contained "[a-zA-Z0-9_]\+" skipempty skipwhite nextgroup=idlDefEnumContents,idlTypedefDecl 190 syn region idlDefEnumContents contained start="{" end="}" skipempty skipwhite nextgroup=idlError,idlTypedefDecl contains=idlId,idlAttributes 191 192 syn match idlTypedefDecl contained "[a-zA-Z0-9_]\+" skipempty skipwhite nextgroup=idlError,idlSemiColon 193 endif 194 195 " Struct 196 syn region idlStructContent contained start="{" end="}" skipempty skipwhite nextgroup=idlError,idlSemiColon,idlSimpDecl contains=idlBaseType,idlBaseTypeInt,idlSeqType,@idlCommentable,idlEnum,idlUnion 197 syn match idlStructName contained "[a-zA-Z0-9_]\+" skipempty skipwhite nextgroup=idlStructContent 198 syn keyword idlStruct struct skipempty skipwhite nextgroup=idlStructName 199 200 " Exception 201 syn keyword idlException exception skipempty skipwhite nextgroup=idlStructName 202 203 " Union 204 syn match idlColon contained ":" skipempty skipwhite nextgroup=idlCase,idlSeqType,idlBaseType,idlBaseTypeInt 205 syn region idlCaseLabel contained start="" skip="::" end=":"me=e-1 skipempty skipwhite nextgroup=idlColon contains=idlLiteral,idlString 206 syn keyword idlCase contained case skipempty skipwhite nextgroup=idlCaseLabel 207 syn keyword idlCase contained default skipempty skipwhite nextgroup=idlColon 208 syn region idlUnionContent contained start="{" end="}" skipempty skipwhite nextgroup=idlError,idlSemiColon,idlSimpDecl contains=idlCase 209 syn region idlSwitchType contained start="(" end=")" skipempty skipwhite nextgroup=idlUnionContent 210 syn keyword idlUnionSwitch contained switch skipempty skipwhite nextgroup=idlSwitchType 211 syn match idlUnionName contained "[a-zA-Z0-9_]\+" skipempty skipwhite nextgroup=idlUnionSwitch 212 syn keyword idlUnion union skipempty skipwhite nextgroup=idlUnionName 213 214 if !exists('idl_no_extensions') 215 syn sync match idlInterfaceSync grouphere idlInterfaceContent "\<\(disp\)\=interface\>\s\+\k\+\s*:\s*\k\+\_s*{" skipempty skipwhite nextgroup=idlError,idlSemiColon contains=@idlContentCluster,@idlCommentable 216 syn sync maxlines=1000 minlines=100 217 else 218 syn sync lines=200 219 endif 220 " syn sync fromstart 221 222 if !exists("did_idl_syntax_inits") 223 let did_idl_syntax_inits = 1 224 " The default methods for highlighting. Can be overridden later 225 226 hi def link idlInclude Include 227 hi def link idlPreProc PreProc 228 hi def link idlPreCondit PreCondit 229 hi def link idlDefine Macro 230 hi def link idlIncluded String 231 hi def link idlString String 232 hi def link idlComment Comment 233 hi def link idlTodo Todo 234 hi def link idlLiteral Number 235 hi def link idlUuid Number 236 hi def link idlType Type 237 hi def link idlVariantType idlType 238 239 hi def link idlModule Keyword 240 hi def link idlInterface Keyword 241 hi def link idlEnum Keyword 242 hi def link idlStruct Keyword 243 hi def link idlUnion Keyword 244 hi def link idlTypedef Keyword 245 hi def link idlException Keyword 246 hi def link idlTypedefOtherTypeQualifier keyword 247 248 hi def link idlModuleName Typedef 249 hi def link idlInterfaceName Typedef 250 hi def link idlEnumName Typedef 251 hi def link idlStructName Typedef 252 hi def link idlUnionName Typedef 253 254 hi def link idlBaseTypeInt idlType 255 hi def link idlBaseType idlType 256 hi def link idlSeqType idlType 257 hi def link idlD1 Paren 258 hi def link idlD2 Paren 259 hi def link idlD3 Paren 260 hi def link idlD4 Paren 261 "hi def link idlArraySize Paren 262 "hi def link idlArraySize1 Paren 263 hi def link idlModuleContent Paren 264 hi def link idlUnionContent Paren 265 hi def link idlStructContent Paren 266 hi def link idlEnumContents Paren 267 hi def link idlInterfaceContent Paren 268 269 hi def link idlSimpDecl Identifier 270 hi def link idlROAttr StorageClass 271 hi def link idlAttr Keyword 272 hi def link idlConst StorageClass 273 274 hi def link idlOneWayOp StorageClass 275 hi def link idlOp idlType 276 hi def link idlParmType idlType 277 hi def link idlOpName Function 278 hi def link idlOpParms SpecialComment 279 hi def link idlParmName Identifier 280 hi def link idlInheritFrom Identifier 281 hi def link idlAttribute SpecialComment 282 283 hi def link idlId Constant 284 "hi def link idlCase Keyword 285 hi def link idlCaseLabel Constant 286 287 hi def link idlErrorBracket Error 288 hi def link idlErrorBrace Error 289 hi def link idlErrorSquareBracket Error 290 291 hi def link idlImport Keyword 292 hi def link idlImportString idlString 293 hi def link idlCoclassAttribute StorageClass 294 hi def link idlLibrary Keyword 295 hi def link idlImportlib Keyword 296 hi def link idlCoclass Keyword 297 hi def link idlLibraryName Typedef 298 hi def link idlCoclassName Typedef 299 " hi def link idlLibraryContent guifg=red 300 hi def link idlTypedefDecl Typedef 301 hi def link idlDefEnum Keyword 302 hi def link idlDefv1Enum Keyword 303 hi def link idlDefEnumName Typedef 304 hi def link idlDefEnumContents Paren 305 hi def link idlDefBaseTypeInt idlType 306 hi def link idlDefBaseType idlType 307 hi def link idlDefSeqType idlType 308 hi def link idlInterfaceSections Label 309 310 if exists("idlsyntax_showerror") 311 if exists("idlsyntax_showerror_soft") 312 hi default idlError guibg=#d0ffd0 313 else 314 hi def link idlError Error 315 endif 316 endif 317 endif 318 319 let b:current_syntax = "idl" 320finally 321 let &cpo = s:cpo_save 322 unlet s:cpo_save 323endtry 324" vim: sw=2 et 325