blob: 1f6fefa9ffa83536c6ab912455aa719eb67e6fca [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")
166 command -nargs=+ HiLink hi def link <args>
167
168 HiLink falconKeyword Keyword
169 HiLink falconCommentString String
170 HiLink falconTodo Todo
171 HiLink falconConditional Keyword
172 HiLink falconRepeat Repeat
173 HiLink falconcommentSkip Comment
174 HiLink falconComment Comment
175 HiLink falconCommentL Comment
176 HiLink falconConst Constant
Bram Moolenaar203d04d2013-06-06 21:36:40 +0200177 HiLink falconConstants Constant
Bram Moolenaar4a748032010-09-30 21:47:56 +0200178 HiLink falconOperator Operator
179 HiLink falconSymbol Normal
180 HiLink falconSpaceError Error
181 HiLink falconHexadecimal Number
182 HiLink falconOctal Number
183 HiLink falconIntLiteral Number
184 HiLink falconFloatLiteral Float
185 HiLink falconStringEscape Special
186 HiLink falconStringDelimiter Delimiter
187 HiLink falconString String
188 HiLink falconBool Constant
189 HiLink falconSharpBang PreProc
190 HiLink falconInclude Include
191 HiLink falconSymbol Constant
192 HiLink falconSymbolOther Delimiter
193 delcommand HiLink
194endif
195
196let b:current_syntax = "falcon"
197
198" vim: set sw=4 sts=4 et tw=80 :
Bram Moolenaar203d04d2013-06-06 21:36:40 +0200199