blob: e022c7a54abc22e8e504145457a6720a9767dcdb [file] [log] [blame]
Bram Moolenaar4a748032010-09-30 21:47:56 +02001" 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!
Bram Moolenaar203d04d2013-06-06 21:36:40 +02006" Thanks to the lisp authors for the rainbow code!
Bram Moolenaar4a748032010-09-30 21:47:56 +02007" -------------------------------------------------------------------------------
Bram Moolenaar4a748032010-09-30 21:47:56 +02008
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
Bram Moolenaar203d04d2013-06-06 21:36:40 +020059syn match falconConstant "\%(\%([.@$]\@<!\.\)\@<!\<\|::\)\_s*\zs\u\w*\%(\>\|::\)\@=\%(\s*(\)\@!"
Bram Moolenaar4a748032010-09-30 21:47:56 +020060
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
Bram Moolenaar203d04d2013-06-06 21:36:40 +0200120" 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
Bram Moolenaar4a748032010-09-30 21:47:56 +0200161" Syntax Synchronizing
162syn sync minlines=10 maxlines=100
163
164" Define the default highlighting
165if !exists("did_falcon_syn_inits")
Bram Moolenaar4a748032010-09-30 21:47:56 +0200166
Bram Moolenaarf37506f2016-08-31 22:22:10 +0200167 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
Bram Moolenaar4a748032010-09-30 21:47:56 +0200192endif
193
194let b:current_syntax = "falcon"
195
196" vim: set sw=4 sts=4 et tw=80 :
Bram Moolenaar203d04d2013-06-06 21:36:40 +0200197