]> gitweb.factorcode.org Git - factor.git/blob - misc/factor.vim.fgen
FUEL: don't jump to USING: section after updating
[factor.git] / misc / factor.vim.fgen
1 <%
2 USING: accessors io kernel multiline prettyprint sequences sorting vocabs ;
3 IN: factor.vim.fgen
4
5 : print-keywords ( vocab -- )
6     vocab-words [ name>> ] sort-with [
7         "syn keyword factorKeyword " write
8         [ bl ] [ pprint ] interleave nl
9     ] when* ;
10
11 %>
12 " Vim syntax file
13 " Language: Factor
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
17
18 " For version 5.x: Clear all syntax items
19 " For version 6.x: Quit when a syntax file was already loaded
20 if version < 600
21     syntax clear
22 elseif exists("b:current_syntax")
23     finish
24 endif
25
26 " Factor is case sensitive.
27 syn case match
28
29 " Make all of these characters part of a word (useful for skipping over words with w, e, and b)
30 if version >= 600
31     setlocal iskeyword=!,@,33-35,%,$,38-64,A-Z,91-96,a-z,123-126,128-255
32 else
33     set iskeyword=!,@,33-35,%,$,38-64,A-Z,91-96,a-z,123-126,128-255
34 endif
35
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
37
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\+/
42
43 syn cluster factorDefnContents contains=@factorCluster,factorStackEffect,factorLiteralStackEffect,factorArray0,factorQuotation0
44
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
49
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
54
55 syn region None matchgroup=factorPrivate start=/\<<PRIVATE\>/ end=/\<PRIVATE>\>/ contains=@factorDefnContents,factorPrivateDefn,factorPrivateMethod,factorPGeneric,factorPGenericN
56
57
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
65
66 <%
67
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
70 ! broken)
71
72 ! vocabs [ print-keywords ] each
73
74     {
75         "kernel" "assocs" "combinators" "math" "sequences"
76         "namespaces" "arrays" "io" "strings" "vectors"
77         "continuations"
78     } [ print-keywords ] each
79 %>
80
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]\)\?\>/
96
97 syn match   factorIn            /\<IN:\s\+\S\+\>/
98 syn match   factorUse           /\<USE:\s\+\S\+\>/
99 syn match   factorUnuse         /\<UNUSE:\s\+\S\+\>/
100
101 syn match   factorChar          /\<CHAR:\s\+\S\+\>/
102
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=/\<\]\>/
107
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=/\<;\>/
123
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\+\>/
137
138 syn cluster factorWordOps       contains=factorConstant,factorAlias,factorSingleton,factorSingletons,factorSymbol,factorSymbols,factorPostpone,factorDefer,factorForget,factorMixin,factorInstance,factorHook,factorMain,factorConstructor
139
140 "TODO:
141 "misc:
142 " HELP:
143 " ARTICLE:
144 "literals:
145 " PRIMITIVE:
146
147 "C interface:
148 " C-ENUM:
149 " FUNCTION:
150 " TYPEDEF:
151 " LIBRARY:
152 "#\ "
153
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=/"/
158
159 syn region factorMultiString matchgroup=factorMultiStringDelims start=/\<STRING:\s\+\S\+\>/ end=/^;$/ contains=factorMultiStringContents
160 syn match factorMultiStringContents /.*/ contained
161
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/
171
172 "adapted from lisp.vim
173 if exists("g:factor_norainbow")
174     syn region factorQuotation matchgroup=factorDelimiter start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/ matchgroup=factorDelimiter end=/\<\]\>/ contains=ALL
175 else
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
186 endif
187
188 if exists("g:factor_norainbow")
189     syn region factorArray    matchgroup=factorDelimiter start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/  matchgroup=factorDelimiter end=/\<}\>/ contains=ALL
190 else
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
201 endif
202
203 syn match factorBracketErr /\<\]\>/
204 syn match factorBracketErr /\<}\>/
205
206 syn sync lines=100
207
208 if version >= 508 || !exists("did_factor_syn_inits")
209     if version <= 508
210         let did_factor_syn_inits = 1
211         command -nargs=+ HiLink hi link <args>
212     else
213         command -nargs=+ HiLink hi def link <args>
214     endif
215
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
303
304     if &bg == "dark"
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
315     else
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
326     endif
327
328     delcommand HiLink
329 endif
330
331 let b:current_syntax = "factor"
332
333 " vim:set ft=vim sw=4: