]> gitweb.factorcode.org Git - factor.git/blob - misc/factor.vim.fgen
Merge remote-tracking branch '8byte-jose/win32-unc-fix'
[factor.git] / misc / factor.vim.fgen
1 <%
2 USING: kernel io prettyprint vocabs sequences multiline ;
3 IN: factor.vim.fgen
4
5 : print-keywords ( vocab -- )
6     words [
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: 2011 Apr 06
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\)\?:\?\):\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:\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\)\?:\?\):\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:\s\+\S\+\>/ end=/$/ contains=factorStackEffect contained
53 syn region factorPGenericN matchgroup=factorPGenericNDelims start=/\<GENERIC#\s\+\S\+\s\+\d\+\>/ end=/$/ contains=factorStackEffect
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)\>/
63 syn match factorExecute /\<execute(\s\(\S*\s\)\?--\(\s\S*\)\?\s)\>/
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,factorRatio,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]\)\?\>/
85 syn match   factorFloat         /\<-\=[0-9]\([0-9,]*[0-9]\)\?\.[0-9,]*[0-9]\+\>/
86 syn match   factorRatio         /\<-\=[0-9]\([0-9,]*[0-9]\)\?\(+[0-9]\([0-9,]*[0-9]\+\)\?\)\?\/-\=[0-9]\([0-9,]*[0-9]\+\)\?\.\?\>/
87 syn region  factorComplex       start=/\<C{\>/ end=/\<}\>/ contains=@factorReal
88 syn match   factorBinErr        /\<BIN:\s\+-\=[01,]*[^01 ]\S*\>/
89 syn match   factorBinary        /\<BIN:\s\+-\=[01,]\+\>/
90 syn match   factorHexErr        /\<HEX:\s\+-\=\(,\S*\|\S*,\|[-0-9a-fA-Fp,]*[^-0-9a-fA-Fp, ]\S*\)\>/
91 syn match   factorHex           /\<HEX:\s\+-\=[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]\)\?\)\?\>/
92 syn match   factorOctErr        /\<OCT:\s\+-\=\(,\S*\|\S*,\|[0-7,]*[^0-7, ]\S*\)\>/
93 syn match   factorOctal         /\<OCT:\s\+-\=[0-7,]\+\>/
94 syn match   factorNan           /\<NAN:\s\+[0-9a-fA-F]\([0-9a-fA-F,]*[0-9a-fA-F]\)\?\>/
95
96 syn match   factorIn            /\<IN:\s\+\S\+\>/
97 syn match   factorUse           /\<USE:\s\+\S\+\>/
98 syn match   factorUnuse         /\<UNUSE:\s\+\S\+\>/
99
100 syn match   factorChar          /\<CHAR:\s\+\S\+\>/
101
102 syn match   factorBackslash     /\<\\\>\s\+\S\+\>/
103 syn match   factorMBackslash    /\<M\\\>\s\+\S\+\s\+\S\+\>/
104 syn match   factorLiteral       /\<\$\>\s\+\S\+\>/
105 syn region  factorLiteralBlock  start=/\<\$\[\>/ end=/\<\]\>/
106
107 syn region  factorUsing         start=/\<USING:\>/       end=/;/
108 syn match   factorQualified     /\<QUALIFIED:\s\+\S\+\>/
109 syn match   factorQualifiedWith /\<QUALIFIED-WITH:\s\+\S\+\s\+\S\+\>/
110 syn region  factorExclude       start=/\<EXCLUDE:\>/     end=/;/
111 syn region  factorFrom          start=/\<FROM:\>/        end=/;/
112 syn match   factorRename        /\<RENAME:\s\+\S\+\s\+\S\+\s=>\s\+\S\+\>/
113 syn region  factorSingletons    start=/\<SINGLETONS:\>/  end=/;/
114 syn match   factorSymbol        /\<SYMBOL:\s\+\S\+\>/
115 syn region  factorSymbols       start=/\<SYMBOLS:\>/     end=/;/
116 syn region  factorConstructor2  start=/\<CONSTRUCTOR:\?/ end=/;/
117 syn region  factorIntersection  start=/\<INTERSECTION:\>/ end=/\<;\>/
118 syn region  factorTuple         start=/\<TUPLE:\>/ end=/\<;\>/
119 syn region  factorError         start=/\<ERROR:\>/ end=/\<;\>/
120 syn region  factorUnion         start=/\<UNION:\>/ end=/\<;\>/
121 syn region  factorStruct        start=/\<\(UNION-STRUCT:\|STRUCT:\)\>/ end=/\<;\>/
122
123 syn match   factorConstant      /\<CONSTANT:\s\+\S\+\>/
124 syn match   factorAlias         /\<ALIAS:\s\+\S\+\s\+\S\+\>/
125 syn match   factorSingleton     /\<SINGLETON:\s\+\S\+\>/
126 syn match   factorPostpone      /\<POSTPONE:\s\+\S\+\>/
127 syn match   factorDefer         /\<DEFER:\s\+\S\+\>/
128 syn match   factorForget        /\<FORGET:\s\+\S\+\>/
129 syn match   factorMixin         /\<MIXIN:\s\+\S\+\>/
130 syn match   factorInstance      /\<INSTANCE:\s\+\S\+\s\+\S\+\>/
131 syn match   factorHook          /\<HOOK:\s\+\S\+\s\+\S\+\>/ nextgroup=factorStackEffect skipwhite skipempty
132 syn match   factorMain          /\<MAIN:\s\+\S\+\>/
133 syn match   factorConstructor   /\<C:\s\+\S\+\s\+\S\+\>/
134 syn match   factorAlien         /\<ALIEN:\s\+[0-9a-fA-F]\([0-9a-fA-F,]*[0-9a-fA-F]\)\?\>/
135 syn match   factorSlot          /\<SLOT:\s\+\S\+\>/
136
137 syn cluster factorWordOps       contains=factorConstant,factorAlias,factorSingleton,factorSingletons,factorSymbol,factorSymbols,factorPostpone,factorDefer,factorForget,factorMixin,factorInstance,factorHook,factorMain,factorConstructor
138
139 "TODO:
140 "misc:
141 " HELP:
142 " ARTICLE:
143 "literals:
144 " PRIMITIVE:
145
146 "C interface:
147 " C-ENUM:
148 " FUNCTION:
149 " TYPEDEF:
150 " LIBRARY:
151 "#\ "
152
153 syn match factorEscape /\\\([\\stnr0e\"]\|u\x\{6}\|u{\S\+}\)/ contained display
154 syn region factorString start=/\<"/ skip=/\\"/ end=/"/ contains=factorEscape
155 syn region factorTriString start=/\<"""/ skip=/\\"/ end=/"""/ contains=factorEscape
156 syn region factorSbuf start=/\<[-a-zA-Z0-9]\+"\>/ skip=/\\"/ end=/"/
157
158 syn region factorMultiString matchgroup=factorMultiStringDelims start=/\<STRING:\s\+\S\+\>/ end=/^;$/ contains=factorMultiStringContents
159 syn match factorMultiStringContents /.*/ contained
160
161 "syn match factorStackEffectErr /\<)\>/
162 "syn region factorStackEffectErr start=/\<(\>/ end=/\<)\>/
163 "syn region factorStackEffect start=/\<(\>/ end=/\<)\>/ contained
164 syn match factorStackEffect /\<(\s\(\S*\s\)\?--\(\s\S*\)\?\s)\>/ contained
165 syn match factorLiteralStackEffect /\<((\s\(\S*\s\)\?--\(\s\S*\)\?\s))\>/
166
167 "adapted from lisp.vim
168 if exists("g:factor_norainbow")
169     syn region factorQuotation matchgroup=factorDelimiter start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/ matchgroup=factorDelimiter end=/\<\]\>/ contains=ALL
170 else
171     syn region factorQuotation0           matchgroup=hlLevel0 start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/  end=/\<\]\>/ contains=@factorCluster,factorQuotation1,factorArray1
172     syn region factorQuotation1 contained matchgroup=hlLevel1 start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/  end=/\<\]\>/ contains=@factorCluster,factorQuotation2,factorArray2
173     syn region factorQuotation2 contained matchgroup=hlLevel2 start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/  end=/\<\]\>/ contains=@factorCluster,factorQuotation3,factorArray3
174     syn region factorQuotation3 contained matchgroup=hlLevel3 start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/  end=/\<\]\>/ contains=@factorCluster,factorQuotation4,factorArray4
175     syn region factorQuotation4 contained matchgroup=hlLevel4 start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/  end=/\<\]\>/ contains=@factorCluster,factorQuotation5,factorArray5
176     syn region factorQuotation5 contained matchgroup=hlLevel5 start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/  end=/\<\]\>/ contains=@factorCluster,factorQuotation6,factorArray6
177     syn region factorQuotation6 contained matchgroup=hlLevel6 start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/  end=/\<\]\>/ contains=@factorCluster,factorQuotation7,factorArray7
178     syn region factorQuotation7 contained matchgroup=hlLevel7 start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/  end=/\<\]\>/ contains=@factorCluster,factorQuotation8,factorArray8
179     syn region factorQuotation8 contained matchgroup=hlLevel8 start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/  end=/\<\]\>/ contains=@factorCluster,factorQuotation9,factorArray9
180     syn region factorQuotation9 contained matchgroup=hlLevel9 start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/  end=/\<\]\>/ contains=@factorCluster,factorQuotation0,factorArray0
181 endif
182
183 if exists("g:factor_norainbow")
184     syn region factorArray    matchgroup=factorDelimiter start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/  matchgroup=factorDelimiter end=/\<}\>/ contains=ALL
185 else
186     syn region factorArray0           matchgroup=hlLevel0 start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray1,factorQuotation1
187     syn region factorArray1 contained matchgroup=hlLevel1 start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray2,factorQuotation2
188     syn region factorArray2 contained matchgroup=hlLevel2 start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray3,factorQuotation3
189     syn region factorArray3 contained matchgroup=hlLevel3 start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray4,factorQuotation4
190     syn region factorArray4 contained matchgroup=hlLevel4 start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray5,factorQuotation5
191     syn region factorArray5 contained matchgroup=hlLevel5 start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray6,factorQuotation6
192     syn region factorArray6 contained matchgroup=hlLevel6 start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray7,factorQuotation7
193     syn region factorArray7 contained matchgroup=hlLevel7 start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray8,factorQuotation8
194     syn region factorArray8 contained matchgroup=hlLevel8 start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray9,factorQuotation9
195     syn region factorArray9 contained matchgroup=hlLevel9 start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray0,factorQuotation0
196 endif
197
198 syn match factorBracketErr /\<\]\>/
199 syn match factorBracketErr /\<}\>/
200
201 syn sync lines=100
202
203 if version >= 508 || !exists("did_factor_syn_inits")
204     if version <= 508
205         let did_factor_syn_inits = 1
206         command -nargs=+ HiLink hi link <args>
207     else
208         command -nargs=+ HiLink hi def link <args>
209     endif
210
211     HiLink factorComment                Comment
212     HiLink factorShebang                PreProc
213     HiLink factorShebangErr             Error
214     HiLink factorStackEffect            Typedef
215     HiLink factorLiteralStackEffect     Typedef
216     HiLink factorTodo                   Todo
217     HiLink factorInclude                Include
218     HiLink factorRepeat                 Repeat
219     HiLink factorConditional            Conditional
220     HiLink factorKeyword                Keyword
221     HiLink factorCallQuotation          Keyword
222     HiLink factorExecute                Keyword
223     HiLink factorCallNextMethod         Keyword
224     HiLink factorOperator               Operator
225     HiLink factorFrySpecifier           Operator
226     HiLink factorBoolean                Boolean
227     HiLink factorBreakpoint             Debug
228     HiLink factorDefnDelims             Typedef
229     HiLink factorMethodDelims           Typedef
230     HiLink factorGenericDelims          Typedef
231     HiLink factorGenericNDelims         Typedef
232     HiLink factorConstructor            Typedef
233     HiLink factorConstructor2           Typedef
234     HiLink factorPrivate                Special
235     HiLink factorPrivateDefnDelims      Special
236     HiLink factorPrivateMethodDelims    Special
237     HiLink factorPGenericDelims         Special
238     HiLink factorPGenericNDelims        Special
239     HiLink factorEscape                 SpecialChar
240     HiLink factorString                 String
241     HiLink factorTriString              String
242     HiLink factorSbuf                   String
243     HiLink factorMultiStringContents    String
244     HiLink factorMultiStringDelims      Typedef
245     HiLink factorBracketErr             Error
246     HiLink factorComplex                Number
247     HiLink factorRatio                  Number
248     HiLink factorBinary                 Number
249     HiLink factorBinErr                 Error
250     HiLink factorHex                    Number
251     HiLink factorHexErr                 Error
252     HiLink factorNan                    Number
253     HiLink factorOctal                  Number
254     HiLink factorOctErr                 Error
255     HiLink factorFloat                  Float
256     HiLink factorInt                    Number
257     HiLink factorUsing                  Include
258     HiLink factorQualified              Include
259     HiLink factorQualifiedWith          Include
260     HiLink factorExclude                Include
261     HiLink factorFrom                   Include
262     HiLink factorRename                 Include
263     HiLink factorUse                    Include
264     HiLink factorUnuse                  Include
265     HiLink factorIn                     Define
266     HiLink factorChar                   Character
267     HiLink factorDelimiter              Delimiter
268     HiLink factorBackslash              Special
269     HiLink factorMBackslash             Special
270     HiLink factorLiteral                Special
271     HiLink factorLiteralBlock           Special
272     HiLink factorDeclaration            Typedef
273     HiLink factorSymbol                 Define
274     HiLink factorSymbols                Define
275     HiLink factorConstant               Define
276     HiLink factorAlias                  Define
277     HiLink factorSingleton              Define
278     HiLink factorSingletons             Define
279     HiLink factorMixin                  Typedef
280     HiLink factorInstance               Typedef
281     HiLink factorHook                   Typedef
282     HiLink factorMain                   Define
283     HiLink factorPostpone               Define
284     HiLink factorDefer                  Define
285     HiLink factorForget                 Define
286     HiLink factorAlien                  Define
287     HiLink factorSlot                   Define
288     HiLink factorIntersection           Typedef
289     HiLink factorTuple                  Typedef
290     HiLink factorError                  Typedef
291     HiLink factorUnion                  Typedef
292     HiLink factorStruct                 Typedef
293
294     if &bg == "dark"
295         hi   hlLevel0 ctermfg=red         guifg=red1
296         hi   hlLevel1 ctermfg=yellow      guifg=orange1
297         hi   hlLevel2 ctermfg=green       guifg=yellow1
298         hi   hlLevel3 ctermfg=cyan        guifg=greenyellow
299         hi   hlLevel4 ctermfg=magenta     guifg=green1
300         hi   hlLevel5 ctermfg=red         guifg=springgreen1
301         hi   hlLevel6 ctermfg=yellow      guifg=cyan1
302         hi   hlLevel7 ctermfg=green       guifg=slateblue1
303         hi   hlLevel8 ctermfg=cyan        guifg=magenta1
304         hi   hlLevel9 ctermfg=magenta     guifg=purple1
305     else
306         hi   hlLevel0 ctermfg=red         guifg=red3
307         hi   hlLevel1 ctermfg=darkyellow  guifg=orangered3
308         hi   hlLevel2 ctermfg=darkgreen   guifg=orange2
309         hi   hlLevel3 ctermfg=blue        guifg=yellow3
310         hi   hlLevel4 ctermfg=darkmagenta guifg=olivedrab4
311         hi   hlLevel5 ctermfg=red         guifg=green4
312         hi   hlLevel6 ctermfg=darkyellow  guifg=paleturquoise3
313         hi   hlLevel7 ctermfg=darkgreen   guifg=deepskyblue4
314         hi   hlLevel8 ctermfg=blue        guifg=darkslateblue
315         hi   hlLevel9 ctermfg=darkmagenta guifg=darkviolet
316     endif
317
318     delcommand HiLink
319 endif
320
321 let b:current_syntax = "factor"
322
323 " vim:set ft=vim sw=4: