neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

idl.vim (19901B)


      1 " Vim syntax file
      2 " Language:    IDL (Interface Description Language)
      3 " Created By:  Jody Goldberg
      4 " Maintainer:  Michael Geddes <vim@frog.wheelycreek.net>
      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 repetitive 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 
     22 if exists("b:current_syntax")
     23  finish
     24 endif
     25 
     26 let s:cpo_save = &cpo
     27 try
     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"
    320 finally
    321  let &cpo = s:cpo_save
    322  unlet s:cpo_save
    323 endtry
    324 " vim: sw=2 et