idl.vim 19 KB

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