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: 2020 May 29
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
44 syn cluster factorGenericContents contains=factorComment,factorStackEffect
46 syn region factorDefn matchgroup=factorDefnDelims start=/\<\(SYNTAX\|\(MACRO\|MEMO\|TYPED\)\?:\?\):\s\+\S\+\>/ end=/\<;\>/ contains=@factorDefnContents
47 syn region factorMethod matchgroup=factorMethodDelims start=/\<M::\?\s\+\S\+\s\+\S\+\>/ end=/\<;\>/ contains=@factorDefnContents
48 syn region factorGeneric matchgroup=factorGenericDelims start=/\<\(GENERIC\|MATH\|PRIMITIVE\):\s\+\S\+\>/ end=/$/ contains=@factorGenericContents
49 syn region factorGenericN matchgroup=factorGenericNDelims start=/\<GENERIC#:\s\+\S\+\s\+\d\+\>/ end=/$/ contains=@factorGenericContents
51 syn region factorPrivateDefn matchgroup=factorPrivateDefnDelims start=/\<\(SYNTAX\|\(MACRO\|MEMO\|TYPED\)\?:\?\):\s\+\S\+\>/ end=/\<;\>/ contains=@factorDefnContents contained
52 syn region factorPrivateMethod matchgroup=factorPrivateMethodDelims start=/\<M::\?\s\+\S\+\s\+\S\+\>/ end=/\<;\>/ contains=@factorDefnContents contained
53 syn region factorPGeneric matchgroup=factorPGenericDelims start=/\<\(GENERIC\|MATH\|PRIMITIVE\):\s\+\S\+\>/ end=/$/ contains=@factorGenericContents contained
54 syn region factorPGenericN matchgroup=factorPGenericNDelims start=/\<GENERIC#:\s\+\S\+\s\+\d\+\>/ end=/$/ contains=@factorGenericContents contained
56 syn region None matchgroup=factorPrivate start=/\<<PRIVATE\>/ end=/\<PRIVATE>\>/ contains=@factorDefnContents,factorPrivateDefn,factorPrivateMethod,factorPGeneric,factorPGenericN
59 syn keyword factorBoolean f t
60 syn keyword factorBreakpoint B
61 syn keyword factorFrySpecifier @ _ contained
62 syn keyword factorDeclaration delimiter deprecated final flushable foldable inline recursive
63 syn match factorCallQuotation /\<call(\s\+\(\S*\s\+\)*--\(\s\+\S*\)*\s\+)\>/ contained contains=factorStackEffect
64 syn match factorExecute /\<execute(\s\+\(\S*\s\+\)*--\(\s\+\S*\)*\s\+)\>/ contained contains=factorStackEffect
65 syn keyword factorCallNextMethod call-next-method
69 ! uncomment this if you want all words from all vocabularies highlighted. Note
70 ! that this changes factor.vim from around 8k to around 100k (and is a bit
73 ! vocabs [ print-keywords ] each
76 "kernel" "assocs" "combinators" "math" "sequences"
77 "namespaces" "arrays" "io" "strings" "vectors"
79 } [ print-keywords ] each
82 syn cluster factorReal contains=factorInt,factorFloat,factorPosRatio,factorNegRatio,factorBinary,factorHex,factorOctal
83 syn cluster factorNumber contains=@factorReal,factorComplex
84 syn cluster factorNumErr contains=factorBinErr,factorHexErr,factorOctErr
85 syn match factorInt /\<[+-]\=[0-9]\([0-9,]*[0-9]\)\?\([eE]\([+-]\)\?[0-9]\+\)\?\>/
86 syn match factorFloat /\<[+-]\=\([0-9,]*[0-9]\)\?\(\.\(\([0-9,]*[0-9]\+\)\?\([eE]\([+-]\)\?[0-9]\+\)\?\)\?\)\?\>/
87 syn match factorPosRatio /\<+\=[0-9]\([0-9,]*[0-9]\)\?\(+[0-9]\([0-9,]*[0-9]\+\)\?\)\?\/-\=[0-9]\([0-9,]*[0-9]\+\)\?\.\?\>/
88 syn match factorNegRatio /\<\-[0-9]\([0-9,]*[0-9]\)\?\(\-[0-9]\([0-9,]*[0-9]\+\)\?\)\?\/-\=[0-9]\([0-9,]*[0-9]\+\)\?\.\?\>/
89 syn region factorComplex start=/\<C{\>/ end=/\<}\>/ contains=@factorReal
90 syn match factorBinErr /\<[+-]\=0b[01,]*[^01 ]\S*\>/
91 syn match factorBinary /\<[+-]\=0b[01,]\+\>/
92 syn match factorHexErr /\<[+-]\=0x\(,\S*\|\S*,\|[-0-9a-fA-Fp,]*[^-0-9a-fA-Fp, ]\S*\)\>/
93 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]\)\?\)\?\>/
94 syn match factorOctErr /\<[+-]\=0o\(,\S*\|\S*,\|[0-7,]*[^0-7, ]\S*\)\>/
95 syn match factorOctal /\<[+-]\=0o[0-7,]\+\>/
96 syn match factorNan /\<NAN:\s\+[0-9a-fA-F]\([0-9a-fA-F,]*[0-9a-fA-F]\)\?\>/ contains=factorComment
98 syn match factorIn /\<IN:\s\+\S\+\>/ contains=factorComment
99 syn match factorUse /\<USE:\s\+\S\+\>/ contains=factorComment
100 syn match factorUnuse /\<UNUSE:\s\+\S\+\>/ contains=factorComment
102 syn match factorChar /\<CHAR:\s\+\S\+\>/
104 syn match factorBackslash /\<\\\>\s\+\S\+\>/ contains=factorComment
105 syn match factorMBackslash /\<M\\\>\s\+\S\+\s\+\S\+\>/ contains=factorComment
106 syn match factorLiteral /\<\$\>\s\+\S\+\>/ contains=factorComment
107 syn region factorLiteralBlock start=/\<\$\[\>/ end=/\<\]\>/ contains=factorComment
109 syn region factorUsing start=/\<USING:\>/ end=/;/ contains=factorComment
110 syn match factorQualified /\<QUALIFIED:\s\+\S\+\>/ contains=factorComment
111 syn match factorQualifiedWith /\<QUALIFIED-WITH:\s\+\S\+\s\+\S\+\>/ contains=factorComment
112 syn region factorExclude start=/\<EXCLUDE:\>/ end=/;/ contains=factorComment
113 syn region factorFrom start=/\<FROM:\>/ end=/;/ contains=factorComment
114 syn match factorRename /\<RENAME:\s\+\S\+\s\+\S\+\s=>\s\+\S\+\>/ contains=factorComment
115 syn region factorSingletons start=/\<SINGLETONS:\>/ end=/;/ contains=factorComment
116 syn match factorSymbol /\<SYMBOL:\s\+\S\+\>/ contains=factorComment
117 syn region factorSymbols start=/\<SYMBOLS:\>/ end=/;/ contains=factorComment
118 syn region factorConstructor2 start=/\<CONSTRUCTOR:\?/ end=/;/ contains=factorComment
119 syn region factorIntersection start=/\<INTERSECTION:\>/ end=/\<;\>/ contains=factorComment
120 syn region factorTuple start=/\<\(TUPLE\|BUILTIN\):\>/ end=/\<;\>/ contains=factorComment
121 syn region factorError start=/\<ERROR:\>/ end=/\<;\>/ contains=factorComment
122 syn region factorUnion start=/\<UNION:\>/ end=/\<;\>/ contains=factorComment
123 syn region factorStruct start=/\<\(UNION-STRUCT:\|STRUCT:\)\>/ end=/\<;\>/ contains=factorComment
125 syn match factorConstant /\<CONSTANT:\s\+\S\+\>/ contains=factorComment
126 syn match factorAlias /\<ALIAS:\s\+\S\+\s\+\S\+\>/ contains=factorComment
127 syn match factorSingleton /\<SINGLETON:\s\+\S\+\>/ contains=factorComment
128 syn match factorPostpone /\<POSTPONE:\s\+\S\+\>/ contains=factorComment
129 syn match factorDefer /\<DEFER:\s\+\S\+\>/ contains=factorComment
130 syn match factorForget /\<FORGET:\s\+\S\+\>/ contains=factorComment
131 syn match factorMixin /\<MIXIN:\s\+\S\+\>/ contains=factorComment
132 syn match factorInstance /\<INSTANCE:\s\+\S\+\s\+\S\+\>/ contains=factorComment
133 syn match factorHook /\<HOOK:\s\+\S\+\s\+\S\+\>/ contains=factorComment nextgroup=factorStackEffect skipwhite skipempty
134 syn match factorMain /\<MAIN:\s\+\S\+\>/ contains=factorComment
135 syn match factorConstructor /\<C:\s\+\S\+\s\+\S\+\>/ contains=factorComment
136 syn match factorAlien /\<ALIEN:\s\+[0-9a-fA-F]\([0-9a-fA-F,]*[0-9a-fA-F]\)\?\>/ contains=factorComment
137 syn match factorSlot /\<SLOT:\s\+\S\+\>/ contains=factorComment
139 syn cluster factorWordOps contains=factorConstant,factorAlias,factorSingleton,factorSingletons,factorSymbol,factorSymbols,factorPostpone,factorDefer,factorForget,factorMixin,factorInstance,factorHook,factorMain,factorConstructor
155 syn match factorEscape /\\\([\\astnrbvf0e\"]\|u\x\{6}\|u{\S\+}\|x\x\{2}\)/ contained display
156 syn region factorString start=/\<"/ skip=/\\"/ end=/"/ contains=factorEscape
157 syn region factorTriString start=/\<"""/ skip=/\\"/ end=/"""/ contains=factorEscape
158 syn region factorSbuf start=/\<[-a-zA-Z0-9]\+"\>/ skip=/\\"/ end=/"/
160 syn region factorMultiString matchgroup=factorMultiStringDelims start=/\<STRING:\s\+\S\+\>/ end=/^;$/ contains=factorMultiStringContents
161 syn match factorMultiStringContents /.*/ contained
163 "syn match factorStackEffectErr /\<)\>/
164 "syn region factorStackEffectErr start=/\<(\>/ end=/\<)\>/
165 "syn region factorStackEffect start=/\<(\>/ end=/\<)\>/ contained
166 syn match factorStackEffect /(\s\+\(\S*\s\+\)*--\(\s\+\S*\)*\s\+)\>/ contained contains=factorComment,factorStackDelims,factorStackItems,factorStackVariables,factorCallExecuteDelim
167 syn match factorLiteralStackEffect /((\s\+\(\S*\s\+\)*--\(\s\+\S*\)*\s\+))\>/ contained contains=factorComment,factorStackDelims,factorStackItems,factorStackVariables,factorCallExecuteDelim
168 syn match factorStackVariables contained "\<\.\.\S\+\>"
169 syn match factorStackItems contained "\<\(\.\.\)\@!\S\+\>"
170 syn keyword factorStackDelims contained ( ) (( )) --
171 syn match factorCallExecuteDelim contained /(\s/
173 "adapted from lisp.vim
174 if exists("g:factor_norainbow")
175 syn region factorQuotation matchgroup=factorDelimiter start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/ matchgroup=factorDelimiter end=/\<\]\>/ contains=ALL
177 syn region factorQuotation0 matchgroup=hlLevel0 start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/ end=/\<\]\>/ contains=@factorCluster,factorQuotation1,factorArray1
178 syn region factorQuotation1 contained matchgroup=hlLevel1 start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/ end=/\<\]\>/ contains=@factorCluster,factorQuotation2,factorArray2
179 syn region factorQuotation2 contained matchgroup=hlLevel2 start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/ end=/\<\]\>/ contains=@factorCluster,factorQuotation3,factorArray3
180 syn region factorQuotation3 contained matchgroup=hlLevel3 start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/ end=/\<\]\>/ contains=@factorCluster,factorQuotation4,factorArray4
181 syn region factorQuotation4 contained matchgroup=hlLevel4 start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/ end=/\<\]\>/ contains=@factorCluster,factorQuotation5,factorArray5
182 syn region factorQuotation5 contained matchgroup=hlLevel5 start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/ end=/\<\]\>/ contains=@factorCluster,factorQuotation6,factorArray6
183 syn region factorQuotation6 contained matchgroup=hlLevel6 start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/ end=/\<\]\>/ contains=@factorCluster,factorQuotation7,factorArray7
184 syn region factorQuotation7 contained matchgroup=hlLevel7 start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/ end=/\<\]\>/ contains=@factorCluster,factorQuotation8,factorArray8
185 syn region factorQuotation8 contained matchgroup=hlLevel8 start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/ end=/\<\]\>/ contains=@factorCluster,factorQuotation9,factorArray9
186 syn region factorQuotation9 contained matchgroup=hlLevel9 start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/ end=/\<\]\>/ contains=@factorCluster,factorQuotation0,factorArray0
189 if exists("g:factor_norainbow")
190 syn region factorArray matchgroup=factorDelimiter start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/ matchgroup=factorDelimiter end=/\<}\>/ contains=ALL
192 syn region factorArray0 matchgroup=hlLevel0 start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray1,factorQuotation1
193 syn region factorArray1 contained matchgroup=hlLevel1 start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray2,factorQuotation2
194 syn region factorArray2 contained matchgroup=hlLevel2 start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray3,factorQuotation3
195 syn region factorArray3 contained matchgroup=hlLevel3 start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray4,factorQuotation4
196 syn region factorArray4 contained matchgroup=hlLevel4 start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray5,factorQuotation5
197 syn region factorArray5 contained matchgroup=hlLevel5 start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray6,factorQuotation6
198 syn region factorArray6 contained matchgroup=hlLevel6 start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray7,factorQuotation7
199 syn region factorArray7 contained matchgroup=hlLevel7 start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray8,factorQuotation8
200 syn region factorArray8 contained matchgroup=hlLevel8 start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray9,factorQuotation9
201 syn region factorArray9 contained matchgroup=hlLevel9 start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray0,factorQuotation0
204 syn match factorBracketErr /\<\]\>/
205 syn match factorBracketErr /\<}\>/
209 if version >= 508 || !exists("did_factor_syn_inits")
211 let did_factor_syn_inits = 1
212 command -nargs=+ HiLink hi link <args>
214 command -nargs=+ HiLink hi def link <args>
217 HiLink factorComment Comment
218 HiLink factorShebang PreProc
219 HiLink factorShebangErr Error
220 HiLink factorStackEffect Typedef
221 HiLink factorStackDelims Delimiter
222 HiLink factorCallExecuteDelim Delimiter
223 HiLink factorStackVariables Special
224 HiLink factorStackItems Identifier
225 HiLink factorLiteralStackEffect Typedef
226 HiLink factorTodo Todo
227 HiLink factorInclude Include
228 HiLink factorRepeat Repeat
229 HiLink factorConditional Conditional
230 HiLink factorKeyword Keyword
231 HiLink factorCallQuotation Keyword
232 HiLink factorExecute Keyword
233 HiLink factorCallNextMethod Keyword
234 HiLink factorOperator Operator
235 HiLink factorFrySpecifier Operator
236 HiLink factorBoolean Boolean
237 HiLink factorBreakpoint Debug
238 HiLink factorDefnDelims Typedef
239 HiLink factorMethodDelims Typedef
240 HiLink factorGenericDelims Typedef
241 HiLink factorGenericNDelims Typedef
242 HiLink factorConstructor Typedef
243 HiLink factorConstructor2 Typedef
244 HiLink factorPrivate Special
245 HiLink factorPrivateDefnDelims Special
246 HiLink factorPrivateMethodDelims Special
247 HiLink factorPGenericDelims Special
248 HiLink factorPGenericNDelims Special
249 HiLink factorEscape SpecialChar
250 HiLink factorString String
251 HiLink factorTriString String
252 HiLink factorSbuf String
253 HiLink factorMultiStringContents String
254 HiLink factorMultiStringDelims Typedef
255 HiLink factorBracketErr Error
256 HiLink factorComplex Number
257 HiLink factorPosRatio Number
258 HiLink factorNegRatio Number
259 HiLink factorBinary Number
260 HiLink factorBinErr Error
261 HiLink factorHex Number
262 HiLink factorHexErr Error
263 HiLink factorNan Number
264 HiLink factorOctal Number
265 HiLink factorOctErr Error
266 HiLink factorFloat Float
267 HiLink factorInt Number
268 HiLink factorUsing Include
269 HiLink factorQualified Include
270 HiLink factorQualifiedWith Include
271 HiLink factorExclude Include
272 HiLink factorFrom Include
273 HiLink factorRename Include
274 HiLink factorUse Include
275 HiLink factorUnuse Include
276 HiLink factorIn Define
277 HiLink factorChar Character
278 HiLink factorDelimiter Delimiter
279 HiLink factorBackslash Special
280 HiLink factorMBackslash Special
281 HiLink factorLiteral Special
282 HiLink factorLiteralBlock Special
283 HiLink factorDeclaration Typedef
284 HiLink factorSymbol Define
285 HiLink factorSymbols Define
286 HiLink factorConstant Define
287 HiLink factorAlias Define
288 HiLink factorSingleton Define
289 HiLink factorSingletons Define
290 HiLink factorMixin Typedef
291 HiLink factorInstance Typedef
292 HiLink factorHook Typedef
293 HiLink factorMain Define
294 HiLink factorPostpone Define
295 HiLink factorDefer Define
296 HiLink factorForget Define
297 HiLink factorAlien Define
298 HiLink factorSlot Define
299 HiLink factorIntersection Typedef
300 HiLink factorTuple Typedef
301 HiLink factorError Typedef
302 HiLink factorUnion Typedef
303 HiLink factorStruct Typedef
306 hi hlLevel0 ctermfg=red guifg=red1
307 hi hlLevel1 ctermfg=yellow guifg=orange1
308 hi hlLevel2 ctermfg=green guifg=yellow1
309 hi hlLevel3 ctermfg=cyan guifg=greenyellow
310 hi hlLevel4 ctermfg=magenta guifg=green1
311 hi hlLevel5 ctermfg=red guifg=springgreen1
312 hi hlLevel6 ctermfg=yellow guifg=cyan1
313 hi hlLevel7 ctermfg=green guifg=slateblue1
314 hi hlLevel8 ctermfg=cyan guifg=magenta1
315 hi hlLevel9 ctermfg=magenta guifg=purple1
317 hi hlLevel0 ctermfg=red guifg=red3
318 hi hlLevel1 ctermfg=darkyellow guifg=orangered3
319 hi hlLevel2 ctermfg=darkgreen guifg=orange2
320 hi hlLevel3 ctermfg=blue guifg=yellow3
321 hi hlLevel4 ctermfg=darkmagenta guifg=olivedrab4
322 hi hlLevel5 ctermfg=red guifg=green4
323 hi hlLevel6 ctermfg=darkyellow guifg=paleturquoise3
324 hi hlLevel7 ctermfg=darkgreen guifg=deepskyblue4
325 hi hlLevel8 ctermfg=blue guifg=darkslateblue
326 hi hlLevel9 ctermfg=darkmagenta guifg=darkviolet
332 let b:current_syntax = "factor"
334 " vim:set ft=vim sw=4: