You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
265 lines
11 KiB
265 lines
11 KiB
" 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
|
|
|