2 USING: accessors io kernel multiline prettyprint sequences sorting vocabs ;
5 : print-keywords ( vocab -- )
6 vocab-words [ name>> ] sort-with [
7 "syn keyword factorKeyword " write
8 [ bl ] [ pprint ] interleave nl
14 " Maintainer: Alex Chapman <chapman.alex@gmail.com>
15 " Last Change: 2012 Jul 11
16 " To run: USING: html.templates html.templates.fhtml ; "resource:misc/factor.vim.fgen" <fhtml> call-template
18 " For version 5.x: Clear all syntax items
19 " For version 6.x: Quit when a syntax file was already loaded
22 elseif exists("b:current_syntax")
26 " Factor is case sensitive.
29 " Make all of these characters part of a word (useful for skipping over words with w, e, and b)
31 setlocal iskeyword=!,@,33-35,%,$,38-64,A-Z,91-96,a-z,123-126,128-255
33 set iskeyword=!,@,33-35,%,$,38-64,A-Z,91-96,a-z,123-126,128-255
36 syn cluster factorCluster contains=factorComment,factorFrySpecifier,factorKeyword,factorRepeat,factorConditional,factorBoolean,factorBreakpoint,factorDeclaration,factorCallQuotation,factorExecute,factorCallNextMethod,factorString,factorTriString,factorSbuf,@factorNumber,@factorNumErr,factorDelimiter,factorChar,factorBackslash,factorMBackslash,factorLiteral,factorLiteralBlock,@factorWordOps,factorAlien,factorSlot,factorTuple,factorError,factorStruct
38 syn match factorTodo /\(TODO\|FIXME\|XXX\):\=/ contained
39 syn match factorComment /\<#\?!\>.*/ contains=factorTodo,@Spell
40 syn match factorShebang /\%\^#!.*/ display
41 syn match factorShebangErr /\%\^#!\S\+/
43 syn cluster factorDefnContents contains=@factorCluster,factorStackEffect,factorLiteralStackEffect,factorArray0,factorQuotation0
45 syn region factorDefn matchgroup=factorDefnDelims start=/\<\(SYNTAX\|\(MACRO\|MEMO\|TYPED\)\?:\?\):\s\+\S\+\>/ end=/\<;\>/ contains=@factorDefnContents
46 syn region factorMethod matchgroup=factorMethodDelims start=/\<M::\?\s\+\S\+\s\+\S\+\>/ end=/\<;\>/ contains=@factorDefnContents
47 syn region factorGeneric matchgroup=factorGenericDelims start=/\<\(GENERIC\|MATH\|PRIMITIVE\):\s\+\S\+\>/ end=/$/ contains=factorStackEffect
48 syn region factorGenericN matchgroup=factorGenericNDelims start=/\<GENERIC#:\s\+\S\+\s\+\d\+\>/ end=/$/ contains=factorStackEffect
50 syn region factorPrivateDefn matchgroup=factorPrivateDefnDelims start=/\<\(SYNTAX\|\(MACRO\|MEMO\|TYPED\)\?:\?\):\s\+\S\+\>/ end=/\<;\>/ contains=@factorDefnContents contained
51 syn region factorPrivateMethod matchgroup=factorPrivateMethodDelims start=/\<M::\?\s\+\S\+\s\+\S\+\>/ end=/\<;\>/ contains=@factorDefnContents contained
52 syn region factorPGeneric matchgroup=factorPGenericDelims start=/\<\(GENERIC\|MATH\|PRIMITIVE\):\s\+\S\+\>/ end=/$/ contains=factorStackEffect contained
53 syn region factorPGenericN matchgroup=factorPGenericNDelims start=/\<GENERIC#:\s\+\S\+\s\+\d\+\>/ end=/$/ contains=factorStackEffect contained
55 syn region None matchgroup=factorPrivate start=/\<<PRIVATE\>/ end=/\<PRIVATE>\>/ contains=@factorDefnContents,factorPrivateDefn,factorPrivateMethod,factorPGeneric,factorPGenericN
58 syn keyword factorBoolean f t
59 syn keyword factorBreakpoint B
60 syn keyword factorFrySpecifier @ _ contained
61 syn keyword factorDeclaration delimiter deprecated final flushable foldable inline recursive
62 syn match factorCallQuotation /\<call(\s\+\(\S*\s\+\)*--\(\s\+\S*\)*\s\+)\>/ contained contains=factorStackEffect
63 syn match factorExecute /\<execute(\s\+\(\S*\s\+\)*--\(\s\+\S*\)*\s\+)\>/ contained contains=factorStackEffect
64 syn keyword factorCallNextMethod call-next-method
68 ! uncomment this if you want all words from all vocabularies highlighted. Note
69 ! that this changes factor.vim from around 8k to around 100k (and is a bit
72 ! vocabs [ print-keywords ] each
75 "kernel" "assocs" "combinators" "math" "sequences"
76 "namespaces" "arrays" "io" "strings" "vectors"
78 } [ print-keywords ] each
81 syn cluster factorReal contains=factorInt,factorFloat,factorPosRatio,factorNegRatio,factorBinary,factorHex,factorOctal
82 syn cluster factorNumber contains=@factorReal,factorComplex
83 syn cluster factorNumErr contains=factorBinErr,factorHexErr,factorOctErr
84 syn match factorInt /\<[+-]\=[0-9]\([0-9,]*[0-9]\)\?\([eE]\([+-]\)\?[0-9]\+\)\?\>/
85 syn match factorFloat /\<[+-]\=\([0-9,]*[0-9]\)\?\(\.\(\([0-9,]*[0-9]\+\)\?\([eE]\([+-]\)\?[0-9]\+\)\?\)\?\)\?\>/
86 syn match factorPosRatio /\<+\=[0-9]\([0-9,]*[0-9]\)\?\(+[0-9]\([0-9,]*[0-9]\+\)\?\)\?\/-\=[0-9]\([0-9,]*[0-9]\+\)\?\.\?\>/
87 syn match factorNegRatio /\<\-[0-9]\([0-9,]*[0-9]\)\?\(\-[0-9]\([0-9,]*[0-9]\+\)\?\)\?\/-\=[0-9]\([0-9,]*[0-9]\+\)\?\.\?\>/
88 syn region factorComplex start=/\<C{\>/ end=/\<}\>/ contains=@factorReal
89 syn match factorBinErr /\<[+-]\=0b[01,]*[^01 ]\S*\>/
90 syn match factorBinary /\<[+-]\=0b[01,]\+\>/
91 syn match factorHexErr /\<[+-]\=0x\(,\S*\|\S*,\|[-0-9a-fA-Fp,]*[^-0-9a-fA-Fp, ]\S*\)\>/
92 syn match factorHex /\<[+-]\=0x[0-9a-fA-F]\([0-9a-fA-F,]*[0-9a-fA-F]\)\?\(\.[0-9a-fA-F]\([0-9a-fA-F,]*[0-9a-fA-F]\)\?\)\?\(p-\=[0-9]\([0-9,]*[0-9]\)\?\)\?\>/
93 syn match factorOctErr /\<[+-]\=0o\(,\S*\|\S*,\|[0-7,]*[^0-7, ]\S*\)\>/
94 syn match factorOctal /\<[+-]\=0o[0-7,]\+\>/
95 syn match factorNan /\<NAN:\s\+[0-9a-fA-F]\([0-9a-fA-F,]*[0-9a-fA-F]\)\?\>/
97 syn match factorIn /\<IN:\s\+\S\+\>/
98 syn match factorUse /\<USE:\s\+\S\+\>/
99 syn match factorUnuse /\<UNUSE:\s\+\S\+\>/
101 syn match factorChar /\<CHAR:\s\+\S\+\>/
103 syn match factorBackslash /\<\\\>\s\+\S\+\>/
104 syn match factorMBackslash /\<M\\\>\s\+\S\+\s\+\S\+\>/
105 syn match factorLiteral /\<\$\>\s\+\S\+\>/
106 syn region factorLiteralBlock start=/\<\$\[\>/ end=/\<\]\>/
108 syn region factorUsing start=/\<USING:\>/ end=/;/
109 syn match factorQualified /\<QUALIFIED:\s\+\S\+\>/
110 syn match factorQualifiedWith /\<QUALIFIED-WITH:\s\+\S\+\s\+\S\+\>/
111 syn region factorExclude start=/\<EXCLUDE:\>/ end=/;/
112 syn region factorFrom start=/\<FROM:\>/ end=/;/
113 syn match factorRename /\<RENAME:\s\+\S\+\s\+\S\+\s=>\s\+\S\+\>/
114 syn region factorSingletons start=/\<SINGLETONS:\>/ end=/;/
115 syn match factorSymbol /\<SYMBOL:\s\+\S\+\>/
116 syn region factorSymbols start=/\<SYMBOLS:\>/ end=/;/
117 syn region factorConstructor2 start=/\<CONSTRUCTOR:\?/ end=/;/
118 syn region factorIntersection start=/\<INTERSECTION:\>/ end=/\<;\>/
119 syn region factorTuple start=/\<\(TUPLE\|BUILTIN\):\>/ end=/\<;\>/
120 syn region factorError start=/\<ERROR:\>/ end=/\<;\>/
121 syn region factorUnion start=/\<UNION:\>/ end=/\<;\>/
122 syn region factorStruct start=/\<\(UNION-STRUCT:\|STRUCT:\)\>/ end=/\<;\>/
124 syn match factorConstant /\<CONSTANT:\s\+\S\+\>/
125 syn match factorAlias /\<ALIAS:\s\+\S\+\s\+\S\+\>/
126 syn match factorSingleton /\<SINGLETON:\s\+\S\+\>/
127 syn match factorPostpone /\<POSTPONE:\s\+\S\+\>/
128 syn match factorDefer /\<DEFER:\s\+\S\+\>/
129 syn match factorForget /\<FORGET:\s\+\S\+\>/
130 syn match factorMixin /\<MIXIN:\s\+\S\+\>/
131 syn match factorInstance /\<INSTANCE:\s\+\S\+\s\+\S\+\>/
132 syn match factorHook /\<HOOK:\s\+\S\+\s\+\S\+\>/ nextgroup=factorStackEffect skipwhite skipempty
133 syn match factorMain /\<MAIN:\s\+\S\+\>/
134 syn match factorConstructor /\<C:\s\+\S\+\s\+\S\+\>/
135 syn match factorAlien /\<ALIEN:\s\+[0-9a-fA-F]\([0-9a-fA-F,]*[0-9a-fA-F]\)\?\>/
136 syn match factorSlot /\<SLOT:\s\+\S\+\>/
138 syn cluster factorWordOps contains=factorConstant,factorAlias,factorSingleton,factorSingletons,factorSymbol,factorSymbols,factorPostpone,factorDefer,factorForget,factorMixin,factorInstance,factorHook,factorMain,factorConstructor
154 syn match factorEscape /\\\([\\astnrbvf0e\"]\|u\x\{6}\|u{\S\+}\|x\x\{2}\)/ contained display
155 syn region factorString start=/\<"/ skip=/\\"/ end=/"/ contains=factorEscape
156 syn region factorTriString start=/\<"""/ skip=/\\"/ end=/"""/ contains=factorEscape
157 syn region factorSbuf start=/\<[-a-zA-Z0-9]\+"\>/ skip=/\\"/ end=/"/
159 syn region factorMultiString matchgroup=factorMultiStringDelims start=/\<STRING:\s\+\S\+\>/ end=/^;$/ contains=factorMultiStringContents
160 syn match factorMultiStringContents /.*/ contained
162 "syn match factorStackEffectErr /\<)\>/
163 "syn region factorStackEffectErr start=/\<(\>/ end=/\<)\>/
164 "syn region factorStackEffect start=/\<(\>/ end=/\<)\>/ contained
165 syn match factorStackEffect /(\s\+\(\S*\s\+\)*--\(\s\+\S*\)*\s\+)\>/ contained contains=factorStackDelims,factorStackItems,factorStackVariables,factorCallExecuteDelim
166 syn match factorLiteralStackEffect /((\s\+\(\S*\s\+\)*--\(\s\+\S*\)*\s\+))\>/ contained contains=factorStackDelims,factorStackItems,factorStackVariables,factorCallExecuteDelim
167 syn match factorStackVariables contained "\<\.\.\S\+\>"
168 syn match factorStackItems contained "\<\(\.\.\)\@!\S\+\>"
169 syn keyword factorStackDelims contained ( ) (( )) --
170 syn match factorCallExecuteDelim contained /(\s/
172 "adapted from lisp.vim
173 if exists("g:factor_norainbow")
174 syn region factorQuotation matchgroup=factorDelimiter start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/ matchgroup=factorDelimiter end=/\<\]\>/ contains=ALL
176 syn region factorQuotation0 matchgroup=hlLevel0 start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/ end=/\<\]\>/ contains=@factorCluster,factorQuotation1,factorArray1
177 syn region factorQuotation1 contained matchgroup=hlLevel1 start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/ end=/\<\]\>/ contains=@factorCluster,factorQuotation2,factorArray2
178 syn region factorQuotation2 contained matchgroup=hlLevel2 start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/ end=/\<\]\>/ contains=@factorCluster,factorQuotation3,factorArray3
179 syn region factorQuotation3 contained matchgroup=hlLevel3 start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/ end=/\<\]\>/ contains=@factorCluster,factorQuotation4,factorArray4
180 syn region factorQuotation4 contained matchgroup=hlLevel4 start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/ end=/\<\]\>/ contains=@factorCluster,factorQuotation5,factorArray5
181 syn region factorQuotation5 contained matchgroup=hlLevel5 start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/ end=/\<\]\>/ contains=@factorCluster,factorQuotation6,factorArray6
182 syn region factorQuotation6 contained matchgroup=hlLevel6 start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/ end=/\<\]\>/ contains=@factorCluster,factorQuotation7,factorArray7
183 syn region factorQuotation7 contained matchgroup=hlLevel7 start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/ end=/\<\]\>/ contains=@factorCluster,factorQuotation8,factorArray8
184 syn region factorQuotation8 contained matchgroup=hlLevel8 start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/ end=/\<\]\>/ contains=@factorCluster,factorQuotation9,factorArray9
185 syn region factorQuotation9 contained matchgroup=hlLevel9 start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/ end=/\<\]\>/ contains=@factorCluster,factorQuotation0,factorArray0
188 if exists("g:factor_norainbow")
189 syn region factorArray matchgroup=factorDelimiter start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/ matchgroup=factorDelimiter end=/\<}\>/ contains=ALL
191 syn region factorArray0 matchgroup=hlLevel0 start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray1,factorQuotation1
192 syn region factorArray1 contained matchgroup=hlLevel1 start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray2,factorQuotation2
193 syn region factorArray2 contained matchgroup=hlLevel2 start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray3,factorQuotation3
194 syn region factorArray3 contained matchgroup=hlLevel3 start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray4,factorQuotation4
195 syn region factorArray4 contained matchgroup=hlLevel4 start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray5,factorQuotation5
196 syn region factorArray5 contained matchgroup=hlLevel5 start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray6,factorQuotation6
197 syn region factorArray6 contained matchgroup=hlLevel6 start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray7,factorQuotation7
198 syn region factorArray7 contained matchgroup=hlLevel7 start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray8,factorQuotation8
199 syn region factorArray8 contained matchgroup=hlLevel8 start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray9,factorQuotation9
200 syn region factorArray9 contained matchgroup=hlLevel9 start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray0,factorQuotation0
203 syn match factorBracketErr /\<\]\>/
204 syn match factorBracketErr /\<}\>/
208 if version >= 508 || !exists("did_factor_syn_inits")
210 let did_factor_syn_inits = 1
211 command -nargs=+ HiLink hi link <args>
213 command -nargs=+ HiLink hi def link <args>
216 HiLink factorComment Comment
217 HiLink factorShebang PreProc
218 HiLink factorShebangErr Error
219 HiLink factorStackEffect Typedef
220 HiLink factorStackDelims Delimiter
221 HiLink factorCallExecuteDelim Delimiter
222 HiLink factorStackVariables Special
223 HiLink factorStackItems Identifier
224 HiLink factorLiteralStackEffect Typedef
225 HiLink factorTodo Todo
226 HiLink factorInclude Include
227 HiLink factorRepeat Repeat
228 HiLink factorConditional Conditional
229 HiLink factorKeyword Keyword
230 HiLink factorCallQuotation Keyword
231 HiLink factorExecute Keyword
232 HiLink factorCallNextMethod Keyword
233 HiLink factorOperator Operator
234 HiLink factorFrySpecifier Operator
235 HiLink factorBoolean Boolean
236 HiLink factorBreakpoint Debug
237 HiLink factorDefnDelims Typedef
238 HiLink factorMethodDelims Typedef
239 HiLink factorGenericDelims Typedef
240 HiLink factorGenericNDelims Typedef
241 HiLink factorConstructor Typedef
242 HiLink factorConstructor2 Typedef
243 HiLink factorPrivate Special
244 HiLink factorPrivateDefnDelims Special
245 HiLink factorPrivateMethodDelims Special
246 HiLink factorPGenericDelims Special
247 HiLink factorPGenericNDelims Special
248 HiLink factorEscape SpecialChar
249 HiLink factorString String
250 HiLink factorTriString String
251 HiLink factorSbuf String
252 HiLink factorMultiStringContents String
253 HiLink factorMultiStringDelims Typedef
254 HiLink factorBracketErr Error
255 HiLink factorComplex Number
256 HiLink factorPosRatio Number
257 HiLink factorNegRatio Number
258 HiLink factorBinary Number
259 HiLink factorBinErr Error
260 HiLink factorHex Number
261 HiLink factorHexErr Error
262 HiLink factorNan Number
263 HiLink factorOctal Number
264 HiLink factorOctErr Error
265 HiLink factorFloat Float
266 HiLink factorInt Number
267 HiLink factorUsing Include
268 HiLink factorQualified Include
269 HiLink factorQualifiedWith Include
270 HiLink factorExclude Include
271 HiLink factorFrom Include
272 HiLink factorRename Include
273 HiLink factorUse Include
274 HiLink factorUnuse Include
275 HiLink factorIn Define
276 HiLink factorChar Character
277 HiLink factorDelimiter Delimiter
278 HiLink factorBackslash Special
279 HiLink factorMBackslash Special
280 HiLink factorLiteral Special
281 HiLink factorLiteralBlock Special
282 HiLink factorDeclaration Typedef
283 HiLink factorSymbol Define
284 HiLink factorSymbols Define
285 HiLink factorConstant Define
286 HiLink factorAlias Define
287 HiLink factorSingleton Define
288 HiLink factorSingletons Define
289 HiLink factorMixin Typedef
290 HiLink factorInstance Typedef
291 HiLink factorHook Typedef
292 HiLink factorMain Define
293 HiLink factorPostpone Define
294 HiLink factorDefer Define
295 HiLink factorForget Define
296 HiLink factorAlien Define
297 HiLink factorSlot Define
298 HiLink factorIntersection Typedef
299 HiLink factorTuple Typedef
300 HiLink factorError Typedef
301 HiLink factorUnion Typedef
302 HiLink factorStruct Typedef
305 hi hlLevel0 ctermfg=red guifg=red1
306 hi hlLevel1 ctermfg=yellow guifg=orange1
307 hi hlLevel2 ctermfg=green guifg=yellow1
308 hi hlLevel3 ctermfg=cyan guifg=greenyellow
309 hi hlLevel4 ctermfg=magenta guifg=green1
310 hi hlLevel5 ctermfg=red guifg=springgreen1
311 hi hlLevel6 ctermfg=yellow guifg=cyan1
312 hi hlLevel7 ctermfg=green guifg=slateblue1
313 hi hlLevel8 ctermfg=cyan guifg=magenta1
314 hi hlLevel9 ctermfg=magenta guifg=purple1
316 hi hlLevel0 ctermfg=red guifg=red3
317 hi hlLevel1 ctermfg=darkyellow guifg=orangered3
318 hi hlLevel2 ctermfg=darkgreen guifg=orange2
319 hi hlLevel3 ctermfg=blue guifg=yellow3
320 hi hlLevel4 ctermfg=darkmagenta guifg=olivedrab4
321 hi hlLevel5 ctermfg=red guifg=green4
322 hi hlLevel6 ctermfg=darkyellow guifg=paleturquoise3
323 hi hlLevel7 ctermfg=darkgreen guifg=deepskyblue4
324 hi hlLevel8 ctermfg=blue guifg=darkslateblue
325 hi hlLevel9 ctermfg=darkmagenta guifg=darkviolet
331 let b:current_syntax = "factor"
333 " vim:set ft=vim sw=4: