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