1 <% USING: kernel io prettyprint vocabs sequences ;
4 " Maintainer: Alex Chapman <chapman.alex@gmail.com>
5 " Last Change: 2008 Apr 28
7 " For version 5.x: Clear all syntax items
8 " For version 6.x: Quit when a syntax file was already loaded
11 elseif exists("b:current_syntax")
15 " factor is case sensitive.
18 " make all of these characters part of a word (useful for skipping over words with w, e, and b)
20 setlocal iskeyword=!,@,33-35,%,$,38-64,A-Z,91-96,a-z,123-126,128-255
22 set iskeyword=!,@,33-35,%,$,38-64,A-Z,91-96,a-z,123-126,128-255
25 syn cluster factorCluster contains=factorComment,factorKeyword,factorRepeat,factorConditional,factorBoolean,factorCompileDirective,factorString,factorSbuf,@factorNumber,@factorNumErr,factorDelimiter,factorChar,factorCharErr,factorBackslash,@factorWordOps,factorAlien,factorTuple
27 syn match factorTodo /\(TODO\|FIXME\|XXX\):\=/ contained
28 syn match factorComment /\<#! .*/ contains=factorTodo
29 syn match factorComment /\<! .*/ contains=factorTodo
31 syn cluster factorDefnContents contains=@factorCluster,factorStackEffect,factorArray0,factorQuotation0
33 syn region factorDefn matchgroup=factorDefnDelims start=/\<\(MACRO\|MEMO\|:\)\?:\s\+\S\+\>/ end=/\<;\>/ contains=@factorDefnContents
34 syn region factorMethod matchgroup=factorMethodDelims start=/\<M:\s\+\S\+\s\+\S\+\>/ end=/\<;\>/ contains=@factorDefnContents
35 syn region factorGeneric matchgroup=factorGenericDelims start=/\<GENERIC:\s\+\S\+\>/ end=/$/ contains=factorStackEffect
36 syn region factorGenericN matchgroup=factorGenericNDelims start=/\<GENERIC#\s\+\S\+\s\+\d\+\>/ end=/$/ contains=factorStackEffect
38 syn region factorPrivateDefn matchgroup=factorPrivateDefnDelims start=/\<\(MACRO\|MEMO\|:\)\?:\s\+\S\+\>/ end=/\<;\>/ contains=@factorDefnContents contained
39 syn region factorPrivateMethod matchgroup=factorPrivateMethodDelims start=/\<M:\s\+\S\+\s\+\S\+\>/ end=/\<;\>/ contains=@factorDefnContents contained
40 syn region factorPGeneric matchgroup=factorPGenericDelims start=/\<GENERIC:\s\+\S\+\>/ end=/$/ contains=factorStackEffect contained
41 syn region factorPGenericN matchgroup=factorPGenericNDelims start=/\<GENERIC#\s\+\S\+\s\+\d\+\>/ end=/$/ contains=factorStackEffect
43 syn region None matchgroup=factorPrivate start=/\<<PRIVATE\>/ end=/\<PRIVATE>\>/ contains=@factorDefnContents,factorPrivateDefn,factorPrivateMethod,factorPGeneric,factorPGenericN
46 syn keyword factorBoolean boolean f general-t t
47 syn keyword factorCompileDirective inline foldable parsing
50 ! uncomment this if you want all words from all vocabularies highlighted. Note
51 ! that this changes factor.vim from around 8k to around 100k (and is a bit
54 ! vocabs [ words [ "syn keyword factorKeyword " write [ pprint " " write ] each "\n" write ] when* ] each
57 " kernel vocab keywords
58 <% { "kernel" "assocs" "combinators" "math" "sequences" "namespaces" "arrays" "io" "strings" "vectors" "continuations" } [
59 words "syn keyword factorKeyword " write [ pprint " " write ] each "\n" write
62 syn cluster factorReal contains=factorInt,factorFloat,factorRatio,factorBinary,factorHex,factorOctal
63 syn cluster factorNumber contains=@factorReal,factorComplex
64 syn cluster factorNumErr contains=factorBinErr,factorHexErr,factorOctErr
65 syn match factorInt /\<-\=\d\+\>/
66 syn match factorFloat /\<-\=\d*\.\d\+\>/
67 syn match factorRatio /\<-\=\d*\.*\d\+\/-\=\d*\.*\d\+\>/
68 syn region factorComplex start=/\<C{\>/ end=/\<}\>/ contains=@factorReal
69 syn match factorBinErr /\<BIN:\s\+[01]*[^\s01]\S*\>/
70 syn match factorBinary /\<BIN:\s\+[01]\+\>/
71 syn match factorHexErr /\<HEX:\s\+\x*[^\x\s]\S*\>/
72 syn match factorHex /\<HEX:\s\+\x\+\>/
73 syn match factorOctErr /\<OCT:\s\+\o*[^\o\s]\S*\>/
74 syn match factorOctal /\<OCT:\s\+\o\+\>/
76 syn match factorIn /\<IN:\s\+\S\+\>/
77 syn match factorUse /\<USE:\s\+\S\+\>/
79 syn match factorCharErr /\<CHAR:\s\+\S\+/
80 syn match factorChar /\<CHAR:\s\+\\\=\S\>/
82 syn match factorBackslash /\<\\\>\s\+\S\+\>/
84 syn region factorUsing start=/\<USING:\>/ end=/;/
85 syn region factorRequires start=/\<REQUIRES:\>/ end=/;/
87 syn cluster factorWordOps contains=factorSymbol,factorPostpone,factorDefer,factorForget,factorMixin,factorInstance,factorHook,factorMain,factorConstructor
88 syn match factorSymbol /\<SYMBOL:\s\+\S\+\>/
89 syn match factorPostpone /\<POSTPONE:\s\+\S\+\>/
90 syn match factorDefer /\<DEFER:\s\+\S\+\>/
91 syn match factorForget /\<FORGET:\s\+\S\+\>/
92 syn match factorMixin /\<MIXIN:\s\+\S\+\>/
93 syn match factorInstance /\<INSTANCE:\s\+\S\+\s\+\S\+\>/
94 syn match factorHook /\<HOOK:\s\+\S\+\s\+\S\+\>/
95 syn match factorMain /\<MAIN:\s\+\S\+\>/
96 syn match factorConstructor /\<C:\s\+\S\+\s\+\S\+\>/
98 syn match factorAlien /\<ALIEN:\s\+\d\+\>/
100 syn region factorTuple start=/\<TUPLE:\>/ end=/\<;\>/
120 syn region factorString start=/"/ skip=/\\"/ end=/"/ oneline
121 syn region factorSbuf start=/SBUF" / skip=/\\"/ end=/"/ oneline
123 syn region factorMultiString matchgroup=factorMultiStringDelims start=/\<STRING:\s\+\S\+\>/ end=/^;$/ contains=factorMultiStringContents
124 syn match factorMultiStringContents /.*/ contained
126 "syn match factorStackEffectErr /\<)\>/
127 "syn region factorStackEffectErr start=/\<(\>/ end=/\<)\>/
128 syn region factorStackEffect start=/\<(\>/ end=/\<)\>/ contained
130 "adapted from lisp.vim
131 if exists("g:factor_norainbow")
132 syn region factorQuotation matchgroup=factorDelimiter start=/\<\[\>/ matchgroup=factorDelimiter end=/\<\]\>/ contains=ALL
134 syn region factorQuotation0 matchgroup=hlLevel0 start=/\<\[\>/ end=/\<\]\>/ contains=@factorCluster,factorQuotation1,factorArray1
135 syn region factorQuotation1 contained matchgroup=hlLevel1 start=/\<\[\>/ end=/\<\]\>/ contains=@factorCluster,factorQuotation2,factorArray2
136 syn region factorQuotation2 contained matchgroup=hlLevel2 start=/\<\[\>/ end=/\<\]\>/ contains=@factorCluster,factorQuotation3,factorArray3
137 syn region factorQuotation3 contained matchgroup=hlLevel3 start=/\<\[\>/ end=/\<\]\>/ contains=@factorCluster,factorQuotation4,factorArray4
138 syn region factorQuotation4 contained matchgroup=hlLevel4 start=/\<\[\>/ end=/\<\]\>/ contains=@factorCluster,factorQuotation5,factorArray5
139 syn region factorQuotation5 contained matchgroup=hlLevel5 start=/\<\[\>/ end=/\<\]\>/ contains=@factorCluster,factorQuotation6,factorArray6
140 syn region factorQuotation6 contained matchgroup=hlLevel6 start=/\<\[\>/ end=/\<\]\>/ contains=@factorCluster,factorQuotation7,factorArray7
141 syn region factorQuotation7 contained matchgroup=hlLevel7 start=/\<\[\>/ end=/\<\]\>/ contains=@factorCluster,factorQuotation8,factorArray8
142 syn region factorQuotation8 contained matchgroup=hlLevel8 start=/\<\[\>/ end=/\<\]\>/ contains=@factorCluster,factorQuotation9,factorArray9
143 syn region factorQuotation9 contained matchgroup=hlLevel9 start=/\<\[\>/ end=/\<\]\>/ contains=@factorCluster,factorQuotation0,factorArray0
146 if exists("g:factor_norainbow")
147 syn region factorArray matchgroup=factorDelimiter start=/\<\(V\|H\|T\|W\|F\|B\)\?{\>/ matchgroup=factorDelimiter end=/\<}\>/ contains=ALL
149 syn region factorArray0 matchgroup=hlLevel0 start=/\<\(V\|H\|T\|W\|F\|B\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray1,factorQuotation1
150 syn region factorArray1 contained matchgroup=hlLevel1 start=/\<\(V\|H\|T\|W\|F\|B\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray2,factorQuotation2
151 syn region factorArray2 contained matchgroup=hlLevel2 start=/\<\(V\|H\|T\|W\|F\|B\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray3,factorQuotation3
152 syn region factorArray3 contained matchgroup=hlLevel3 start=/\<\(V\|H\|T\|W\|F\|B\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray4,factorQuotation4
153 syn region factorArray4 contained matchgroup=hlLevel4 start=/\<\(V\|H\|T\|W\|F\|B\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray5,factorQuotation5
154 syn region factorArray5 contained matchgroup=hlLevel5 start=/\<\(V\|H\|T\|W\|F\|B\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray6,factorQuotation6
155 syn region factorArray6 contained matchgroup=hlLevel6 start=/\<\(V\|H\|T\|W\|F\|B\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray7,factorQuotation7
156 syn region factorArray7 contained matchgroup=hlLevel7 start=/\<\(V\|H\|T\|W\|F\|B\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray8,factorQuotation8
157 syn region factorArray8 contained matchgroup=hlLevel8 start=/\<\(V\|H\|T\|W\|F\|B\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray9,factorQuotation9
158 syn region factorArray9 contained matchgroup=hlLevel9 start=/\<\(V\|H\|T\|W\|F\|B\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray0,factorQuotation0
161 syn match factorBracketErr /\<\]\>/
162 syn match factorBracketErr /\<}\>/
166 if version >= 508 || !exists("did_factor_syn_inits")
168 let did_factor_syn_inits = 1
169 command -nargs=+ HiLink hi link <args>
171 command -nargs=+ HiLink hi def link <args>
174 HiLink factorComment Comment
175 HiLink factorStackEffect Typedef
176 HiLink factorTodo Todo
177 HiLink factorInclude Include
178 HiLink factorRepeat Repeat
179 HiLink factorConditional Conditional
180 HiLink factorKeyword Keyword
181 HiLink factorOperator Operator
182 HiLink factorBoolean Boolean
183 HiLink factorDefnDelims Typedef
184 HiLink factorMethodDelims Typedef
185 HiLink factorGenericDelims Typedef
186 HiLink factorGenericNDelims Typedef
187 HiLink factorConstructor Typedef
188 HiLink factorPrivate Special
189 HiLink factorPrivateDefnDelims Special
190 HiLink factorPrivateMethodDelims Special
191 HiLink factorPGenericDelims Special
192 HiLink factorPGenericNDelims Special
193 HiLink factorString String
194 HiLink factorSbuf String
195 HiLink factorMultiStringContents String
196 HiLink factorMultiStringDelims Typedef
197 HiLink factorBracketErr Error
198 HiLink factorComplex Number
199 HiLink factorRatio Number
200 HiLink factorBinary Number
201 HiLink factorBinErr Error
202 HiLink factorHex Number
203 HiLink factorHexErr Error
204 HiLink factorOctal Number
205 HiLink factorOctErr Error
206 HiLink factorFloat Float
207 HiLink factorInt Number
208 HiLink factorUsing Include
209 HiLink factorUse Include
210 HiLink factorRequires Include
211 HiLink factorIn Define
212 HiLink factorChar Character
213 HiLink factorCharErr Error
214 HiLink factorDelimiter Delimiter
215 HiLink factorBackslash Special
216 HiLink factorCompileDirective Typedef
217 HiLink factorSymbol Define
218 HiLink factorMixin Typedef
219 HiLink factorInstance Typedef
220 HiLink factorHook Typedef
221 HiLink factorMain Define
222 HiLink factorPostpone Define
223 HiLink factorDefer Define
224 HiLink factorForget Define
225 HiLink factorAlien Define
226 HiLink factorTuple Typedef
229 hi hlLevel0 ctermfg=red guifg=red1
230 hi hlLevel1 ctermfg=yellow guifg=orange1
231 hi hlLevel2 ctermfg=green guifg=yellow1
232 hi hlLevel3 ctermfg=cyan guifg=greenyellow
233 hi hlLevel4 ctermfg=magenta guifg=green1
234 hi hlLevel5 ctermfg=red guifg=springgreen1
235 hi hlLevel6 ctermfg=yellow guifg=cyan1
236 hi hlLevel7 ctermfg=green guifg=slateblue1
237 hi hlLevel8 ctermfg=cyan guifg=magenta1
238 hi hlLevel9 ctermfg=magenta guifg=purple1
240 hi hlLevel0 ctermfg=red guifg=red3
241 hi hlLevel1 ctermfg=darkyellow guifg=orangered3
242 hi hlLevel2 ctermfg=darkgreen guifg=orange2
243 hi hlLevel3 ctermfg=blue guifg=yellow3
244 hi hlLevel4 ctermfg=darkmagenta guifg=olivedrab4
245 hi hlLevel5 ctermfg=red guifg=green4
246 hi hlLevel6 ctermfg=darkyellow guifg=paleturquoise3
247 hi hlLevel7 ctermfg=darkgreen guifg=deepskyblue4
248 hi hlLevel8 ctermfg=blue guifg=darkslateblue
249 hi hlLevel9 ctermfg=darkmagenta guifg=darkviolet
255 let b:current_syntax = "factor"
260 set autoindent " annoying?