1" Vim syntax file
2" Language:     Falcon
3" Maintainer:   Steven Oliver <oliver.steven@gmail.com>
4" Website:      http://github.com/steveno/vim-files/blob/master/syntax/falcon.vim
5" Credits:      Thanks the ruby.vim authors, I borrowed a lot!
6"               Thanks to the lisp authors for the rainbow code!
7" -------------------------------------------------------------------------------
8
9" When wanted, highlight the trailing whitespace.
10if exists("c_space_errors")
11    if !exists("c_no_trail_space_error")
12        syn match falconSpaceError "\s\+$"
13    endif
14
15    if !exists("c_no_tab_space_error")
16        syn match falconSpaceError " \+\t"me=e-1
17    endif
18endif
19
20" Symbols
21syn match falconSymbol "\(;\|,\|\.\)"
22syn match falconSymbolOther "\(#\|@\)" display
23
24" Operators
25syn match falconOperator "\(+\|-\|\*\|/\|=\|<\|>\|\*\*\|!=\|\~=\)"
26syn match falconOperator "\(<=\|>=\|=>\|\.\.\|<<\|>>\|\"\)"
27
28" Clusters
29syn region falconSymbol start="[]})\"':]\@<!:\"" end="\"" skip="\\\\\|\\\"" contains=@falconStringSpecial fold
30syn case match
31
32" Keywords
33syn keyword falconKeyword all allp any anyp as attributes brigade cascade catch choice class const
34syn keyword falconKeyword continue def directive do list dropping enum eq eval exit export from function
35syn keyword falconKeyword give global has hasnt in init innerfunc lambda launch launch len List list
36syn keyword falconKeyword load notin object pass print printl provides raise return self sender static to
37syn keyword falconKeyword try xamp
38
39" Error Type Keywords
40syn keyword falconKeyword CloneError CodeError Error InterruprtedError IoError MathError
41syn keyword falconKeyword ParamError RangeError SyntaxError TraceStep TypeError
42
43" Todo
44syn keyword falconTodo DEBUG FIXME NOTE TODO XXX
45
46" Conditionals
47syn keyword falconConditional and case default else end if iff
48syn keyword falconConditional elif or not switch select
49syn match   falconConditional "end\s\if"
50
51" Loops
52syn keyword falconRepeat break for loop forfirst forlast formiddle while
53
54" Booleans
55syn keyword falconBool true false
56
57" Constants
58syn keyword falconConst PI E nil
59syn match   falconConstant  "\%(\%([.@$]\@<!\.\)\@<!\<\|::\)\_s*\zs\u\w*\%(\>\|::\)\@=\%(\s*(\)\@!"
60
61" Comments
62syn match falconCommentSkip contained "^\s*\*\($\|\s\+\)"
63syn region falconComment start="/\*" end="\*/" contains=@falconCommentGroup,falconSpaceError,falconTodo
64syn region falconCommentL start="//" end="$" keepend contains=@falconCommentGroup,falconSpaceError,falconTodo
65syn match falconSharpBang "\%^#!.*" display
66syn sync ccomment falconComment
67
68" Numbers
69syn match falconNumbers transparent "\<[+-]\=\d\|[+-]\=\.\d" contains=falconIntLiteral,falconFloatLiteral,falconHexadecimal,falconOctal
70syn match falconNumbersCom contained transparent "\<[+-]\=\d\|[+-]\=\.\d" contains=falconIntLiteral,falconFloatLiteral,falconHexadecimal,falconOctal
71syn match falconHexadecimal contained "\<0x\x\+\>"
72syn match falconOctal contained "\<0\o\+\>"
73syn match falconIntLiteral contained "[+-]\<d\+\(\d\+\)\?\>"
74syn match falconFloatLiteral contained "[+-]\=\d\+\.\d*"
75syn match falconFloatLiteral contained "[+-]\=\d*\.\d*"
76
77" Includes
78syn keyword falconInclude load import
79
80" Expression Substitution and Backslash Notation
81syn match falconStringEscape "\\\\\|\\[abefnrstv]\|\\\o\{1,3}\|\\x\x\{1,2}" contained display
82syn match falconStringEscape "\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)" contained display
83syn region falconSymbol start="[]})\"':]\@<!:\"" end="\"" skip="\\\\\|\\\"" contains=falconStringEscape fold
84
85" Normal String and Shell Command Output
86syn region falconString matchgroup=falconStringDelimiter start="\"" end="\"" skip="\\\\\|\\\"" contains=falconStringEscape fold
87syn region falconString matchgroup=falconStringDelimiter start="'" end="'" skip="\\\\\|\\'" fold
88syn region falconString matchgroup=falconStringDelimiter start="`" end="`" skip="\\\\\|\\`" contains=falconStringEscape fold
89
90" Generalized Single Quoted String, Symbol and Array of Strings
91syn region falconString matchgroup=falconStringDelimiter start="%[qw]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)"  end="\z1" skip="\\\\\|\\\z1" fold
92syn region falconString matchgroup=falconStringDelimiter start="%[qw]{" end="}" skip="\\\\\|\\}" fold contains=falconDelimEscape
93syn region falconString matchgroup=falconStringDelimiter start="%[qw]<" end=">" skip="\\\\\|\\>" fold contains=falconDelimEscape
94syn region falconString matchgroup=falconStringDelimiter start="%[qw]\[" end="\]" skip="\\\\\|\\\]" fold contains=falconDelimEscape
95syn region falconString matchgroup=falconStringDelimiter start="%[qw](" end=")" skip="\\\\\|\\)" fold contains=falconDelimEscape
96syn region falconSymbol matchgroup=falconSymbolDelimiter start="%[s]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold
97syn region falconSymbol matchgroup=falconSymbolDelimiter start="%[s]{" end="}" skip="\\\\\|\\}" fold contains=falconDelimEscape
98syn region falconSymbol matchgroup=falconSymbolDelimiter start="%[s]<" end=">" skip="\\\\\|\\>" fold contains=falconDelimEscape
99syn region falconSymbol matchgroup=falconSymbolDelimiter start="%[s]\[" end="\]" skip="\\\\\|\\\]" fold contains=falconDelimEscape
100syn region falconSymbol matchgroup=falconSymbolDelimiter start="%[s](" end=")" skip="\\\\\|\\)" fold contains=falconDelimEscape
101
102" Generalized Double Quoted String and Array of Strings and Shell Command Output
103syn region falconString matchgroup=falconStringDelimiter start="%\z([~`!@#$%^&*_\-+|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=falconStringEscape fold
104syn region falconString matchgroup=falconStringDelimiter start="%[QWx]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=falconStringEscape fold
105syn region falconString matchgroup=falconStringDelimiter start="%[QWx]\={" end="}" skip="\\\\\|\\}" contains=falconStringEscape,falconDelimEscape fold
106syn region falconString matchgroup=falconStringDelimiter start="%[QWx]\=<" end=">" skip="\\\\\|\\>" contains=falconStringEscape,falconDelimEscape fold
107syn region falconString matchgroup=falconStringDelimiter start="%[QWx]\=\[" end="\]" skip="\\\\\|\\\]" contains=falconStringEscape,falconDelimEscape fold
108syn region falconString matchgroup=falconStringDelimiter start="%[QWx]\=(" end=")" skip="\\\\\|\\)" contains=falconStringEscape,falconDelimEscape fold
109
110syn region falconString start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<\z(\h\w*\)\ze+hs=s+2 matchgroup=falconStringDelimiter end=+^\z1$+ contains=falconStringEscape fold keepend
111syn region falconString start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<"\z([^"]*\)"\ze+hs=s+2  matchgroup=falconStringDelimiter end=+^\z1$+ contains=falconStringEscape fold keepend
112syn region falconString start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<'\z([^']*\)'\ze+hs=s+2  matchgroup=falconStringDelimiter end=+^\z1$+ fold keepend
113syn region falconString start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<`\z([^`]*\)`\ze+hs=s+2  matchgroup=falconStringDelimiter end=+^\z1$+ contains=falconStringEscape fold keepend
114
115syn region falconString start=+\%(\%(class\s*\|\%([]}).]\|::\)\)\_s*\|\w\)\@<!<<-\z(\h\w*\)\ze+hs=s+3 matchgroup=falconStringDelimiter end=+^\s*\zs\z1$+ contains=falconStringEscape fold keepend
116syn region falconString start=+\%(\%(class\s*\|\%([]}).]\|::\)\)\_s*\|\w\)\@<!<<-"\z([^"]*\)"\ze+hs=s+3  matchgroup=falconStringDelimiter end=+^\s*\zs\z1$+ contains=falconStringEscape fold keepend
117syn region falconString start=+\%(\%(class\s*\|\%([]}).]\|::\)\)\_s*\|\w\)\@<!<<-'\z([^']*\)'\ze+hs=s+3  matchgroup=falconStringDelimiter end=+^\s*\zs\z1$+ fold keepend
118syn region falconString start=+\%(\%(class\s*\|\%([]}).]\|::\)\)\_s*\|\w\)\@<!<<-`\z([^`]*\)`\ze+hs=s+3  matchgroup=falconStringDelimiter end=+^\s*\zs\z1$+ contains=falconStringEscape fold keepend
119
120" Falcon rainbox to highlight parens in varying colors
121if exists("g:falcon_rainbow") && g:falcon_rainbow != 0
122    syn region falconParen0           matchgroup=hlLevel0 start="`\=(" end=")" skip="|.\{-}|" contains=@falconListCluster,falconParen1
123    syn region falconParen1 contained matchgroup=hlLevel1 start="`\=(" end=")" skip="|.\{-}|" contains=@falconListCluster,falconParen2
124    syn region falconParen2 contained matchgroup=hlLevel2 start="`\=(" end=")" skip="|.\{-}|" contains=@falconListCluster,falconParen3
125    syn region falconParen3 contained matchgroup=hlLevel3 start="`\=(" end=")" skip="|.\{-}|" contains=@falconListCluster,falconParen4
126    syn region falconParen4 contained matchgroup=hlLevel4 start="`\=(" end=")" skip="|.\{-}|" contains=@falconListCluster,falconParen5
127    syn region falconParen5 contained matchgroup=hlLevel5 start="`\=(" end=")" skip="|.\{-}|" contains=@falconListCluster,falconParen6
128    syn region falconParen6 contained matchgroup=hlLevel6 start="`\=(" end=")" skip="|.\{-}|" contains=@falconListCluster,falconParen7
129    syn region falconParen7 contained matchgroup=hlLevel7 start="`\=(" end=")" skip="|.\{-}|" contains=@falconListCluster,falconParen8
130    syn region falconParen8 contained matchgroup=hlLevel8 start="`\=(" end=")" skip="|.\{-}|" contains=@falconListCluster,falconParen9
131    syn region falconParen9 contained matchgroup=hlLevel9 start="`\=(" end=")" skip="|.\{-}|" contains=@falconListCluster,falconParen0
132endif
133
134" Setup the colors for the rainbox
135if exists("g:falcon_rainbow") && g:falcon_rainbow != 0
136    if &bg == "dark"
137        hi def hlLevel0 ctermfg=red         guifg=red1
138        hi def hlLevel1 ctermfg=yellow      guifg=orange1
139        hi def hlLevel2 ctermfg=green       guifg=yellow1
140        hi def hlLevel3 ctermfg=cyan        guifg=greenyellow
141        hi def hlLevel4 ctermfg=magenta     guifg=green1
142        hi def hlLevel5 ctermfg=red         guifg=springgreen1
143        hi def hlLevel6 ctermfg=yellow      guifg=cyan1
144        hi def hlLevel7 ctermfg=green       guifg=slateblue1
145        hi def hlLevel8 ctermfg=cyan        guifg=magenta1
146        hi def hlLevel9 ctermfg=magenta     guifg=purple1
147    else
148        hi def hlLevel0 ctermfg=red         guifg=red3
149        hi def hlLevel1 ctermfg=darkyellow  guifg=orangered3
150        hi def hlLevel2 ctermfg=darkgreen   guifg=orange2
151        hi def hlLevel3 ctermfg=blue        guifg=yellow3
152        hi def hlLevel4 ctermfg=darkmagenta guifg=olivedrab4
153        hi def hlLevel5 ctermfg=red         guifg=green4
154        hi def hlLevel6 ctermfg=darkyellow  guifg=paleturquoise3
155        hi def hlLevel7 ctermfg=darkgreen   guifg=deepskyblue4
156        hi def hlLevel8 ctermfg=blue        guifg=darkslateblue
157        hi def hlLevel9 ctermfg=darkmagenta guifg=darkviolet
158    endif
159endif
160
161" Syntax Synchronizing
162syn sync minlines=10 maxlines=100
163
164" Define the default highlighting
165if !exists("did_falcon_syn_inits")
166
167    hi def link falconKeyword          Keyword
168    hi def link falconCommentString    String
169    hi def link falconTodo             Todo
170    hi def link falconConditional      Keyword
171    hi def link falconRepeat           Repeat
172    hi def link falconcommentSkip      Comment
173    hi def link falconComment          Comment
174    hi def link falconCommentL         Comment
175    hi def link falconConst            Constant
176    hi def link falconConstants        Constant
177    hi def link falconOperator         Operator
178    hi def link falconSymbol           Normal
179    hi def link falconSpaceError       Error
180    hi def link falconHexadecimal      Number
181    hi def link falconOctal            Number
182    hi def link falconIntLiteral       Number
183    hi def link falconFloatLiteral     Float
184    hi def link falconStringEscape     Special
185    hi def link falconStringDelimiter  Delimiter
186    hi def link falconString           String
187    hi def link falconBool             Constant
188    hi def link falconSharpBang        PreProc
189    hi def link falconInclude          Include
190    hi def link falconSymbol           Constant
191    hi def link falconSymbolOther      Delimiter
192endif
193
194let b:current_syntax = "falcon"
195
196" vim: set sw=4 sts=4 et tw=80 :
197
198