| " Vim syntax file |
| " Language: IDL (Interface Description Language) |
| " Created By: Jody Goldberg |
| " Maintainer: Michael Geddes <vim@frog.wheelycreek.net> |
| " Last Change: 2012 Jan 11 |
| |
| |
| " This is an experiment. IDL's structure is simple enough to permit a full |
| " grammar based approach to rather than using a few heuristics. The result |
| " is large and somewhat repetative but seems to work. |
| |
| " There are some Microsoft extensions to idl files that are here. Some of |
| " them are disabled by defining idl_no_ms_extensions. |
| " |
| " The more complex of the extensions are disabled by defining idl_no_extensions. |
| " |
| " History: |
| " 2.0: Michael's new version |
| " 2.1: Support for Vim 7 spell (Anduin Withers) |
| " |
| |
| if exists("b:current_syntax") |
| finish |
| endif |
| |
| let s:cpo_save = &cpo |
| try |
| set cpo&vim |
| |
| 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 |
| |
| 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 |