Thrift Syntax for Vim

Summary:
See header of file for installation instructions.  I'm not a vim master so this may not
be completely kosher, feel free to improve as necessary.

Reviewed By: Slee

Test Plan:

Revert Plan:

Notes:

EImportant:


git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@665110 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/thrift.vim b/thrift.vim
new file mode 100644
index 0000000..11da424
--- /dev/null
+++ b/thrift.vim
@@ -0,0 +1,71 @@
+" Vim syntax file
+" Language: Thrift
+" Maintainer: Martin Smith <martin@facebook.com>
+" Last Change: $Date: $
+" Copy to ~/.vim/
+" Add to ~/.vimrc
+"  au BufRead,BufNewFile *.thrift set filetype=thrift
+"  au! Syntax thrift source ~/.vim/thrift.vim
+"
+" $Id: $
+
+if version < 600
+  syntax clear
+elseif exists("b:current_syntax")
+  finish
+endif
+
+" Todo
+syn keyword thriftTodo TODO todo FIXME fixme XXX xxx contained
+
+" Comments
+syn match thriftComment "#.*" contains=thriftTodo
+syn region thriftComment start="/\*" end="\*/" contains=thriftTodo
+syn match thriftComment "//.\{-}\(?>\|$\)\@="
+
+" String
+syn region thriftStringDouble matchgroup=None start=+"+  end=+"+
+
+" Number
+syn match thriftNumber "-\=\<\d\+\>" contained
+
+" Keywords
+syn keyword thriftKeyword namespace cpp_namespace cpp_include
+syn keyword thriftKeyword cpp_type java_package include const
+syn keyword thriftBasicTypes void bool byte i16 i32 i64 double string
+
+syn keyword thriftStructure map list set struct typedef exception enum throws
+
+" Special
+syn match thriftSpecial "\d\+:"
+
+" Structure
+syn keyword thriftStructure service async extends
+"async"         { return tok_async;         }
+"exception"     { return tok_xception;      }
+"extends"       { return tok_extends;       }
+"throws"        { return tok_throws;        }
+"service"       { return tok_service;       }
+"enum"          { return tok_enum;          }
+"const"         { return tok_const;         }
+
+if version >= 508 || !exists("did_thrift_syn_inits")
+  if version < 508
+    let did_thrift_syn_inits = 1
+    command! -nargs=+ HiLink hi link <args>
+  else
+    command! -nargs=+ HiLink hi def link <args>
+  endif
+
+  HiLink thriftComment Comment
+  HiLink thriftKeyword Special
+  HiLink thriftBasicTypes Type
+  HiLink thriftStructure StorageClass
+  HiLink thriftTodo Todo
+  HiLink thriftString String
+  HiLink thriftNumber Number
+  HiLink thriftSpecial Special
+  HiLink thriftStructure Structure
+endif
+
+let b:currenct_syntax = "thrift"