1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
|
" Vim syntax file
" Language: Rebol
" Maintainer: Mike Williams <mrw@eandem.co.uk>
" Filenames: *.r
" Last Change: 27th June 2002
" URL: http://www.eandem.co.uk/mrw/vim
"
" quit when a syntax file was already loaded
if exists("b:current_syntax")
finish
endif
" Rebol is case insensitive
syn case ignore
" As per current users documentation
setlocal isk=@,48-57,?,!,.,',+,-,*,&,\|,=,_,~
" Yer TODO highlighter
syn keyword rebolTodo contained TODO
" Comments
syn match rebolComment ";.*$" contains=rebolTodo
" Words
syn match rebolWord "\a\k*"
syn match rebolWordPath "[^[:space:]]/[^[:space]]"ms=s+1,me=e-1
" Booleans
syn keyword rebolBoolean true false on off yes no
" Values
" Integers
syn match rebolInteger "\<[+-]\=\d\+\('\d*\)*\>"
" Decimals
syn match rebolDecimal "[+-]\=\(\d\+\('\d*\)*\)\=[,.]\d*\(e[+-]\=\d\+\)\="
syn match rebolDecimal "[+-]\=\d\+\('\d*\)*\(e[+-]\=\d\+\)\="
" Time
syn match rebolTime "[+-]\=\(\d\+\('\d*\)*\:\)\{1,2}\d\+\('\d*\)*\([.,]\d\+\)\=\([AP]M\)\=\>"
syn match rebolTime "[+-]\=:\d\+\([.,]\d*\)\=\([AP]M\)\=\>"
" Dates
" DD-MMM-YY & YYYY format
syn match rebolDate "\d\{1,2}\([/-]\)\(Jan\|Feb\|Mar\|Apr\|May\|Jun\|Jul\|Aug\|Sep\|Oct\|Nov\|Dec\)\1\(\d\{2}\)\{1,2}\>"
" DD-month-YY & YYYY format
syn match rebolDate "\d\{1,2}\([/-]\)\(January\|February\|March\|April\|May\|June\|July\|August\|September\|October\|November\|December\)\1\(\d\{2}\)\{1,2}\>"
" DD-MM-YY & YY format
syn match rebolDate "\d\{1,2}\([/-]\)\d\{1,2}\1\(\d\{2}\)\{1,2}\>"
" YYYY-MM-YY format
syn match rebolDate "\d\{4}-\d\{1,2}-\d\{1,2}\>"
" DD.MM.YYYY format
syn match rebolDate "\d\{1,2}\.\d\{1,2}\.\d\{4}\>"
" Money
syn match rebolMoney "\a*\$\d\+\('\d*\)*\([,.]\d\+\)\="
" Strings
syn region rebolString oneline start=+"+ skip=+^"+ end=+"+ contains=rebolSpecialCharacter
syn region rebolString start=+[^#]{+ end=+}+ skip=+{[^}]*}+ contains=rebolSpecialCharacter
" Binary
syn region rebolBinary start=+\d*#{+ end=+}+ contains=rebolComment
" Email
syn match rebolEmail "\<\k\+@\(\k\+\.\)*\k\+\>"
" File
syn match rebolFile "%\(\k\+/\)*\k\+[/]\=" contains=rebolSpecialCharacter
syn region rebolFile oneline start=+%"+ end=+"+ contains=rebolSpecialCharacter
" URLs
syn match rebolURL "http://\k\+\(\.\k\+\)*\(:\d\+\)\=\(/\(\k\+/\)*\(\k\+\)\=\)*"
syn match rebolURL "file://\k\+\(\.\k\+\)*/\(\k\+/\)*\k\+"
syn match rebolURL "ftp://\(\k\+:\k\+@\)\=\k\+\(\.\k\+\)*\(:\d\+\)\=/\(\k\+/\)*\k\+"
syn match rebolURL "mailto:\k\+\(\.\k\+\)*@\k\+\(\.\k\+\)*"
" Issues
syn match rebolIssue "#\(\d\+-\)*\d\+"
" Tuples
syn match rebolTuple "\(\d\+\.\)\{2,}"
" Characters
syn match rebolSpecialCharacter contained "\^[^[:space:][]"
syn match rebolSpecialCharacter contained "%\d\+"
" Operators
" Math operators
syn match rebolMathOperator "\(\*\{1,2}\|+\|-\|/\{1,2}\)"
syn keyword rebolMathFunction abs absolute add arccosine arcsine arctangent cosine
syn keyword rebolMathFunction divide exp log-10 log-2 log-e max maximum min
syn keyword rebolMathFunction minimum multiply negate power random remainder sine
syn keyword rebolMathFunction square-root subtract tangent
" Binary operators
syn keyword rebolBinaryOperator complement and or xor ~
" Logic operators
syn match rebolLogicOperator "[<>=]=\="
syn match rebolLogicOperator "<>"
syn keyword rebolLogicOperator not
syn keyword rebolLogicFunction all any
syn keyword rebolLogicFunction head? tail?
syn keyword rebolLogicFunction negative? positive? zero? even? odd?
syn keyword rebolLogicFunction binary? block? char? date? decimal? email? empty?
syn keyword rebolLogicFunction file? found? function? integer? issue? logic? money?
syn keyword rebolLogicFunction native? none? object? paren? path? port? series?
syn keyword rebolLogicFunction string? time? tuple? url? word?
syn keyword rebolLogicFunction exists? input? same? value?
" Datatypes
syn keyword rebolType binary! block! char! date! decimal! email! file!
syn keyword rebolType function! integer! issue! logic! money! native!
syn keyword rebolType none! object! paren! path! port! string! time!
syn keyword rebolType tuple! url! word!
syn keyword rebolTypeFunction type?
" Control statements
syn keyword rebolStatement break catch exit halt reduce return shield
syn keyword rebolConditional if else
syn keyword rebolRepeat for forall foreach forskip loop repeat while until do
" Series statements
syn keyword rebolStatement change clear copy fifth find first format fourth free
syn keyword rebolStatement func function head insert last match next parse past
syn keyword rebolStatement pick remove second select skip sort tail third trim length?
" Context
syn keyword rebolStatement alias bind use
" Object
syn keyword rebolStatement import make make-object rebol info?
" I/O statements
syn keyword rebolStatement delete echo form format import input load mold prin
syn keyword rebolStatement print probe read save secure send write
syn keyword rebolOperator size? modified?
" Debug statement
syn keyword rebolStatement help probe trace
" Misc statements
syn keyword rebolStatement func function free
" Constants
syn keyword rebolConstant none
" Define the default highlighting.
" Only when an item doesn't have highlighting yet
hi def link rebolTodo Todo
hi def link rebolStatement Statement
hi def link rebolLabel Label
hi def link rebolConditional Conditional
hi def link rebolRepeat Repeat
hi def link rebolOperator Operator
hi def link rebolLogicOperator rebolOperator
hi def link rebolLogicFunction rebolLogicOperator
hi def link rebolMathOperator rebolOperator
hi def link rebolMathFunction rebolMathOperator
hi def link rebolBinaryOperator rebolOperator
hi def link rebolBinaryFunction rebolBinaryOperator
hi def link rebolType Type
hi def link rebolTypeFunction rebolOperator
hi def link rebolWord Identifier
hi def link rebolWordPath rebolWord
hi def link rebolFunction Function
hi def link rebolCharacter Character
hi def link rebolSpecialCharacter SpecialChar
hi def link rebolString String
hi def link rebolNumber Number
hi def link rebolInteger rebolNumber
hi def link rebolDecimal rebolNumber
hi def link rebolTime rebolNumber
hi def link rebolDate rebolNumber
hi def link rebolMoney rebolNumber
hi def link rebolBinary rebolNumber
hi def link rebolEmail rebolString
hi def link rebolFile rebolString
hi def link rebolURL rebolString
hi def link rebolIssue rebolNumber
hi def link rebolTuple rebolNumber
hi def link rebolFloat Float
hi def link rebolBoolean Boolean
hi def link rebolConstant Constant
hi def link rebolComment Comment
hi def link rebolError Error
if exists("my_rebol_file")
if file_readable(expand(my_rebol_file))
execute "source " . my_rebol_file
endif
endif
let b:current_syntax = "rebol"
" vim: ts=8
|