Переглянути джерело

add Vim syntax highlighting

Ralf S. Engelschall 17 роки тому
батько
коміт
310b65aa41
2 змінених файлів з 270 додано та 1 видалено
  1. 5 1
      haxe/haxe.spec
  2. 265 0
      haxe/haxe.vim

+ 5 - 1
haxe/haxe.spec

@@ -41,6 +41,7 @@ Release:      20080530
 #   list of sources
 Source0:      ftp://ftp.openpkg.org/sources/CPY/haxe/haxe-%{V_snapshot}.tar.bz2
 Source1:      haxe.sh
+Source2:      haxe.vim
 Patch0:       haxe.patch
 
 #   build information
@@ -77,13 +78,16 @@ AutoReqProv:  no
     %{l_shtool} mkdir -f -p -m 755 \
         $RPM_BUILD_ROOT%{l_prefix}/bin \
         $RPM_BUILD_ROOT%{l_prefix}/libexec/haxe \
-        $RPM_BUILD_ROOT%{l_prefix}/lib/haxe
+        $RPM_BUILD_ROOT%{l_prefix}/lib/haxe \
+        $RPM_BUILD_ROOT%{l_prefix}/share/vim/syntax
     %{l_shtool} install -c -m 755 %{l_value -s -a} \
         %{SOURCE haxe.sh} $RPM_BUILD_ROOT%{l_prefix}/bin/haxe
     %{l_shtool} install -c -s -m 755 \
         bin/haxe $RPM_BUILD_ROOT%{l_prefix}/libexec/haxe/
     find haxe/std -name CVS -type d -print | xargs rm -rf
     cp -rp haxe/std/* $RPM_BUILD_ROOT%{l_prefix}/lib/haxe/
+    %{l_shtool} install -c -m 644 \
+        %{SOURCE haxe.vim} $RPM_BUILD_ROOT%{l_prefix}/share/vim/syntax/
     %{l_rpmtool} files -v -ofiles -r$RPM_BUILD_ROOT %{l_files_std}
 
 %files -f files

+ 265 - 0
haxe/haxe.vim

@@ -0,0 +1,265 @@
+" Vim syntax file
+" Language:     haxe
+
+" Please check :help haxe.vim for comments on some of the options available.
+
+"set errorformat=%f\:%l\:\ characters\ %c-%*[^\ ]\ %m,%f\:%l\:\ %m
+set errorformat=%f\:%l\:\ characters\ %c-%*[^\ ]\ %m,%f\:%l\:\ %m
+
+" Quit when a syntax file was already loaded
+if !exists("main_syntax")
+  if version < 600
+    syntax clear
+  elseif exists("b:current_syntax")
+    finish
+  endif
+  " we define it here so that included files can test for it
+  let main_syntax='haxe'
+endif
+
+" don't use standard HiLink, it will not work with included syntax files
+if version < 508
+  command! -nargs=+ HaxeHiLink hi link <args>
+else
+  command! -nargs=+ HaxeHiLink hi def link <args>
+endif
+
+" some characters that cannot be in a haxe program (outside a string)
+syn match haxeError "[\\@`]"
+syn match haxeError "<<<\|=>\|<>\|||=\|&&=\|\*\/"
+
+" use separate name so that it can be deleted in haxecc.vim
+syn match   haxeError2 "#\|=<"
+HaxeHiLink haxeError2 haxeError
+
+
+" keyword definitions
+syn keyword haxeExternal	import extern package
+syn keyword haxeConditional	if else switch
+syn keyword haxeRepeat		while for do in
+syn keyword haxeBoolean		true false
+syn keyword haxeConstant	null
+syn keyword haxeTypedef		this super
+syn keyword haxeOperator	new cast 
+syn keyword haxeType		Void Bool Int Float Dynamic
+syn keyword haxeStatement	return
+syn keyword haxeStorageClass    function var final typedef enum
+" syn keyword haxeStatic		
+syn keyword haxeExceptions      throw try catch finally untyped
+syn keyword haxeAssert		assert
+syn keyword haxeMethodDecl      synchronized throws
+syn keyword haxeClassDecl       extends implements interface
+syn match   haxeOperator "\.\.\."
+" to differentiate the keyword class from MyClass.class we use a match here
+syn match   haxeTypedef		"\.\s*\<class\>"ms=s+1
+syn match   haxeClassDecl       "^class\>"
+syn match   haxeClassDecl       "[^.]\s*\<class\>"ms=s+1
+syn keyword haxeBranch		break continue nextgroup=haxeUserLabelRef skipwhite
+syn match   haxeUserLabelRef    "\k\+" contained
+syn keyword haxeScopeDecl       static public protected private abstract override 
+
+" haxe.lang.*
+syn match haxeLangClass "\<System\>"
+syn keyword haxeLangClass  Array BasicType Class Date DateTools EReg Hash IntHash IntIter Iterator Lambda List Math Md5 Reflect Std String StringBuf StringTools Xml XmlType
+HaxeHiLink haxeLangClass		     haxeConstant
+HaxeHiLink haxeLangObject		     haxeConstant
+syn cluster haxeTop add=haxeLangObject,haxeLangClass
+syn cluster haxeClasses add=haxeLangClass
+
+if filereadable(expand("<sfile>:p:h")."/haxeid.vim")
+  source <sfile>:p:h/haxeid.vim
+endif
+
+if exists("haxe_space_errors")
+  if !exists("haxe_no_trail_space_error")
+    syn match   haxeSpaceError  "\s\+$"
+  endif
+  if !exists("haxe_no_tab_space_error")
+    syn match   haxeSpaceError  " \+\t"me=e-1
+  endif
+endif
+
+syn region  haxeLabelRegion     transparent matchgroup=haxeLabel start="\<case\>" matchgroup=NONE end=":" contains=haxeNumber,haxeCharacter
+syn match   haxeUserLabel       "^\s*[_$a-zA-Z][_$a-zA-Z0-9_]*\s*:"he=e-1 contains=haxeLabel
+syn keyword haxeLabel		default
+
+" The following cluster contains all haxe groups except the contained ones
+syn cluster haxeTop add=haxeExternal,haxeError,haxeError,haxeBranch,haxeLabelRegion,haxeLabel,haxeConditional,haxeRepeat,haxeBoolean,haxeConstant,haxeTypedef,haxeOperator,haxeType,haxeType,haxeStatement,haxeStorageClass,haxeAssert,haxeExceptions,haxeMethodDecl,haxeClassDecl,haxeClassDecl,haxeClassDecl,haxeScopeDecl,haxeError,haxeError2,haxeUserLabel,haxeLangObject
+
+
+" Comments
+syn keyword haxeTodo		 contained TODO FIXME XXX
+if exists("haxe_comment_strings")
+  syn region  haxeCommentString    contained start=+"+ end=+"+ end=+$+ end=+\*/+me=s-1,he=s-1 contains=haxeSpecial,haxeCommentStar,haxeSpecialChar,@Spell
+  syn region  haxeComment2String   contained start=+"+  end=+$\|"+  contains=haxeSpecial,haxeSpecialChar,@Spell
+  syn match   haxeCommentCharacter contained "'\\[^']\{1,6\}'" contains=haxeSpecialChar
+  syn match   haxeCommentCharacter contained "'\\''" contains=haxeSpecialChar
+  syn match   haxeCommentCharacter contained "'[^\\]'"
+  syn cluster haxeCommentSpecial add=haxeCommentString,haxeCommentCharacter,haxeNumber
+  syn cluster haxeCommentSpecial2 add=haxeComment2String,haxeCommentCharacter,haxeNumber
+endif
+syn region  haxeComment		 start="/\*"  end="\*/" contains=@haxeCommentSpecial,haxeTodo,@Spell
+syn match   haxeCommentStar      contained "^\s*\*[^/]"me=e-1
+syn match   haxeCommentStar      contained "^\s*\*$"
+syn match   haxeLineComment      "//.*" contains=@haxeCommentSpecial2,haxeTodo,@Spell
+HaxeHiLink haxeCommentString haxeString
+HaxeHiLink haxeComment2String haxeString
+HaxeHiLink haxeCommentCharacter haxeCharacter
+
+syn cluster haxeTop add=haxeComment,haxeLineComment
+
+if exists("haxe_haxedoc") || main_syntax == 'jsp'
+  syntax case ignore
+  " syntax coloring for haxedoc comments (HTML)
+  " syntax include @haxeHtml <sfile>:p:h/html.vim
+  " unlet b:current_syntax
+  syn region  haxeDocComment    start="/\*\*"  end="\*/" keepend contains=haxeCommentTitle,@haxeHtml,haxeDocTags,haxeTodo,@Spell
+  syn region  haxeCommentTitle  contained matchgroup=haxeDocComment start="/\*\*"   matchgroup=haxeCommentTitle keepend end="\.$" end="\.[ \t\r<&]"me=e-1 end="[^{]@"me=s-2,he=s-1 end="\*/"me=s-1,he=s-1 contains=@haxeHtml,haxeCommentStar,haxeTodo,@Spell,haxeDocTags
+
+  syn region haxeDocTags  contained start="{@\(link\|linkplain\|inherit[Dd]oc\|doc[rR]oot\|value\)" end="}"
+  syn match  haxeDocTags  contained "@\(see\|param\|exception\|throws\|since\)\s\+\S\+" contains=haxeDocParam
+  syn match  haxeDocParam contained "\s\S\+"
+  syn match  haxeDocTags  contained "@\(version\|author\|return\|deprecated\|serial\|serialField\|serialData\)\>"
+  syntax case match
+endif
+
+" match the special comment /**/
+syn match   haxeComment		 "/\*\*/"
+
+" Strings and constants
+syn match   haxeSpecialError     contained "\\."
+syn match   haxeSpecialCharError contained "[^']"
+syn match   haxeSpecialChar      contained "\\\([4-9]\d\|[0-3]\d\d\|[\"\\'ntbrf]\|u\x\{4\}\)"
+syn match haxeEregEscape	contained "\(\\\\\|\\/\)"
+syn region  haxeEreg		start=+\~\/+ end=+\/[gims]*+ contains=haxeEregEscape
+
+syn region  haxeString		start=+"+ end=+"+ contains=haxeSpecialChar,haxeSpecialError,@Spell
+syn region  haxeSingleString  start=+'+ end=+'+ 
+" next line disabled, it can cause a crash for a long line
+"syn match   haxeStringError	  +"\([^"\\]\|\\.\)*$+
+syn match   haxeCharacter	 "'[^']*'" contains=haxeSpecialChar,haxeSpecialCharError
+syn match   haxeCharacter	 "'\\''" contains=haxeSpecialChar
+syn match   haxeCharacter	 "'[^\\]'"
+syn match   haxeNumber		 "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>"
+"syn match   haxeNumber		 "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\="
+syn match   haxeNumber		 "\(\<\d\+\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\="
+syn match   haxeNumber		 "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>"
+syn match   haxeNumber		 "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>"
+
+
+syn region haxeCondIf start="#if \+!\?" end="\W" skip="([A-Za-z0-9_ |&!]\+)"
+syn region haxeCondElse start="#else \+!\?" end="\W" skip="([A-Za-z0-9_ |&!]\+)"
+syn match haxeCondEnd "#end"
+syn match haxeCondError "#else *$"
+
+" unicode characters
+syn match   haxeSpecial "\\u\d\{4\}"
+
+syn cluster haxeTop add=haxeString,haxeCharacter,haxeNumber,haxeSpecial,haxeStringError
+
+if exists("haxe_highlight_functions")
+  if haxe_highlight_functions == "indent"
+    syn match  haxeFuncDef "^\(\t\| \{8\}\)[_$a-zA-Z][_$a-zA-Z0-9_. \[\]]*([^-+*/()]*)" contains=haxeScopeDecl,haxeType,haxeStorageClass,@haxeClasses
+    syn region haxeFuncDef start=+^\(\t\| \{8\}\)[$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*,\s*+ end=+)+ contains=haxeScopeDecl,haxeType,haxeStorageClass,@haxeClasses
+    syn match  haxeFuncDef "^  [$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*)" contains=haxeScopeDecl,haxeType,haxeStorageClass,@haxeClasses
+    syn region haxeFuncDef start=+^  [$_a-zA-Z][$_a-zA-Z0-9_. \[\]]*([^-+*/()]*,\s*+ end=+)+ contains=haxeScopeDecl,haxeType,haxeStorageClass,@haxeClasses
+  else
+    " This line catches method declarations at any indentation>0, but it assumes
+    " two things:
+    "   1. class names are always capitalized (ie: Button)
+    "   2. method names are never capitalized (except constructors, of course)
+    syn region haxeFuncDef start=+^\s\+\(\(public\|protected\|private\|static\|abstract\|override\|final\|native\|synchronized\)\s\+\)*\(\(void\|boolean\|char\|byte\|short\|int\|long\|float\|double\|\([A-Za-z_][A-Za-z0-9_$]*\.\)*[A-Z][A-Za-z0-9_$]*\)\(\[\]\)*\s\+[a-z][A-Za-z0-9_$]*\|[A-Z][A-Za-z0-9_$]*\)\s*(+ end=+)+ contains=haxeScopeDecl,haxeType,haxeStorageClass,haxeComment,haxeLineComment,@haxeClasses
+  endif
+  syn match  haxeBraces  "[{}]"
+  syn cluster haxeTop add=haxeFuncDef,haxeBraces
+endif
+
+if exists("haxe_mark_braces_in_parens_as_errors")
+  syn match haxeInParen		 contained "[{}]"
+  HaxeHiLink haxeInParen	haxeError
+  syn cluster haxeTop add=haxeInParen
+endif
+
+" catch errors caused by wrong parenthesis
+syn region  haxeParenT  transparent matchgroup=haxeParen  start="("  end=")" contains=@haxeTop,haxeParenT1
+syn region  haxeParenT1 transparent matchgroup=haxeParen1 start="(" end=")" contains=@haxeTop,haxeParenT2 contained
+syn region  haxeParenT2 transparent matchgroup=haxeParen2 start="(" end=")" contains=@haxeTop,haxeParenT  contained
+syn match   haxeParenError       ")"
+HaxeHiLink haxeParenError       haxeError
+
+if !exists("haxe_minlines")
+  let haxe_minlines = 10
+endif
+exec "syn sync ccomment haxeComment minlines=" . haxe_minlines
+
+" The default highlighting.
+if version >= 508 || !exists("did_haxe_syn_inits")
+  if version < 508
+    let did_haxe_syn_inits = 1
+  endif
+  HaxeHiLink haxeFuncDef		Function
+  HaxeHiLink haxeBraces		Function
+  HaxeHiLink haxeBranch		Conditional
+  HaxeHiLink haxeUserLabelRef	haxeUserLabel
+  HaxeHiLink haxeLabel		Label
+  HaxeHiLink haxeUserLabel		Label
+  HaxeHiLink haxeConditional	Conditional
+  HaxeHiLink haxeRepeat		Repeat
+  HaxeHiLink haxeExceptions		Exception
+  HaxeHiLink haxeAssert		Statement
+  HaxeHiLink haxeStatic MoreMsg
+  HaxeHiLink haxeStorageClass	StorageClass
+  HaxeHiLink haxeMethodDecl		haxeStorageClass
+  HaxeHiLink haxeClassDecl		haxeStorageClass
+  HaxeHiLink haxeScopeDecl		haxeStorageClass
+  HaxeHiLink haxeBoolean		Boolean
+  HaxeHiLink haxeSpecial		Special
+  HaxeHiLink haxeSpecialError	Error
+  HaxeHiLink haxeSpecialCharError	Error
+  HaxeHiLink haxeString		String
+  HaxeHiLink haxeSingleString	String
+  HaxeHiLink haxeEreg Special
+  HaxeHiLink haxeEregEscape Special
+  HaxeHiLink haxeCharacter		Character
+  HaxeHiLink haxeSpecialChar	SpecialChar
+  HaxeHiLink haxeNumber		Number
+  HaxeHiLink haxeError		Error
+  HaxeHiLink haxeStringError	Error
+  HaxeHiLink haxeStatement		Statement
+  HaxeHiLink haxeOperator		Operator
+  HaxeHiLink haxeComment		Comment
+  HaxeHiLink haxeDocComment		Comment
+  HaxeHiLink haxeLineComment	Comment
+  HaxeHiLink haxeConstant		Constant
+  HaxeHiLink haxeTypedef		Typedef
+  HaxeHiLink haxeTodo		Todo
+
+  HaxeHiLink haxeCommentTitle	SpecialComment
+  HaxeHiLink haxeDocTags		Special
+  HaxeHiLink haxeDocParam		Function
+  HaxeHiLink haxeCommentStar	haxeComment
+
+  HaxeHiLink haxeType		Type
+  HaxeHiLink haxeExternal		Include
+
+  HaxeHiLink htmlComment		Special
+  HaxeHiLink htmlCommentPart	Special
+  HaxeHiLink haxeSpaceError		Error
+
+  HaxeHiLink haxeCondIf Macro
+  HaxeHiLink haxeCondElse Macro
+  HaxeHiLink haxeCondEnd Macro
+  HaxeHiLink haxeCondError Error
+endif
+
+delcommand HaxeHiLink
+
+let b:current_syntax = "haxe"
+
+if main_syntax == 'haxe'
+  unlet main_syntax
+endif
+
+let b:spell_options="contained"
+
+" vim: ts=8