" Based on Java syntax file by Claudio Fleiner <claudio@fleiner.com>
" Quit when a syntax file was already loaded
if exists("b:current_syntax")
finish
endif
" keyword definitions
syn keyword fanExternal using native
syn keyword fanError goto void serializable volatile
syn keyword fanConditional if else switch
syn keyword fanRepeat do while for foreach each
syn keyword fanBoolean true false
syn keyword fanConstant null
syn keyword fanTypedef this super
syn keyword fanOperator new is isnot as
syn keyword fanLongOperator plus minus mult div mod get set slice lshift rshift and or xor inverse negate increment decrement equals compare
syn keyword fanType Void Bool Int Float Decimal Str Duration Uri Type Range List Map Obj
syn keyword fanStatement return
syn keyword fanStorageClass static const final
syn keyword fanSlot virtual override once
syn keyword fanField readonly
syn keyword fanExceptions throw try catch finally
syn keyword fanAssert assert
syn keyword fanTypedef class enum mixin
syn match fanFacet "@[_a-zA-Z][_a-zA-Z0-9_]*\>"
syn keyword fanBranch break continue
syn keyword fanScopeDecl public internal protected private abstract
if exists("fan_space_errors")
if !exists("fan_no_trail_space_error")
syn match fanSpaceError "\s\+$"
endif
if !exists("fan_no_tab_space_error")
syn match fanSpaceError " \+\t"me=e-1
endif
endif
syn region fanLabelRegion transparent matchgroup=fanLabel start="\<case\>" matchgroup=NONE end=":" contains=fanNumber,fanCharacter
syn keyword fanLabel default
syn keyword fanLabel case
" The following cluster contains all fan groups except the contained ones
syn cluster fanTop add=fanExternal,fanError,fanConditional,fanRepeat,fanBoolean,fanConstant,fanTypedef,fanOperator,fanLongOperator,fanType,fanType,fanStatement,fanStorageClass,fanSlot,fanField,fanExceptions,fanAssert,fanClassDecl,fanTypedef,fanFacet,fanBranch,fanScopeDecl,fanLabelRegion,fanLabel
" Comments
syn keyword fanTodo contained TODO FIXME XXX
syn region fanComment start="/\*" end="\*/" contains=@fanCommentSpecial,fanTodo,fanComment,@Spell
syn match fanCommentStar contained "^\s*\*[^/]"me=e-1
syn match fanCommentStar contained "^\s*\*$"
syn match fanLineComment "//.*" contains=@fanCommentSpecial2,fanTodo,@Spell
syn match fanDocComment "\*\*.*" contains=@fanCommentSpecial2,fanTodo,@Spell
hi def link fanCommentString fanString
hi def link fanComment2String fanString
hi def link fanCommentCharacter fanCharacter
syn cluster fanTop add=fanComment,fanLineComment,fanDocComment
" match the special comment /**/
syn match fanComment "/\*\*/"
" Strings and constants
syn match fanSpecialError contained "\\."
syn match fanSpecialCharError contained "[^']"
syn match fanSpecialChar contained "\\\([4-9]\d\|[0-3]\d\d\|[\"\\'ntbrf]\|u\x\{4\}\|\$\)"
syn match fanStringSubst contained "\$[A-Za-z][A-Za-z_.]*"
syn match fanStringSubst contained "\${[^}]*}"
syn region fanString start=+"+ end=+"+ contains=fanSpecialChar,fanSpecialError,fanStringSubst,@Spell
syn region fanTripleString start=+"""+ end=+"""+ contains=fanSpecialChar,fanSpecialError,fanStringSubst,@Spell
syn region fanDSL start=+<|+ end=+|>+
syn match fanUri "`[^`]*`"
syn match fanCharacter "'[^']*'" contains=fanSpecialChar,fanSpecialCharError
syn match fanCharacter "'\\''" contains=fanSpecialChar
syn match fanCharacter "'[^\\]'"
syn match fanNumber "\<\(0[0-7]*\|0[xX]\x\+\|\d\+\)[lL]\=\>"
syn match fanNumber "\(\<\d\+\.\d*\|\.\d\+\)\([eE][-+]\=\d\+\)\=[fFdD]\="
syn match fanNumber "\<\d\+[eE][-+]\=\d\+[fFdD]\=\>"
syn match fanNumber "\<\d\+\([eE][-+]\=\d\+\)\=[fFdD]\>"
syn cluster fanTop add=fanString,fanCharacter,fanNumber,fanSpecial,fanStringError