]> gitweb.factorcode.org Git - factor.git/blob - misc/factor.vim.fgen
Merge branch 'master' of git://github.com/slavapestov/factor
[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 Mar 15
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,factorLiteral,factorLiteralBlock,@factorWordOps,factorAlien,factorSlot,factorTuple,factorStruct
37
38 syn match factorTodo /\(TODO\|FIXME\|XXX\):\=/ contained
39 syn match factorComment /\<#!\>\s.*/ contains=factorTodo
40 syn match factorComment /\<!\>\s.*/ contains=factorTodo
41
42 syn cluster factorDefnContents contains=@factorCluster,factorStackEffect,factorLiteralStackEffect,factorArray0,factorQuotation0
43
44 syn region factorDefn matchgroup=factorDefnDelims start=/\<\(SYNTAX\|\(MACRO\|MEMO\)\?:\?\):\s\+\S\+\>/ end=/\<;\>/ contains=@factorDefnContents
45 syn region factorMethod matchgroup=factorMethodDelims start=/\<M::\?\s\+\S\+\s\+\S\+\>/ end=/\<;\>/ contains=@factorDefnContents
46 syn region factorGeneric matchgroup=factorGenericDelims start=/\<GENERIC:\s\+\S\+\>/ end=/$/ contains=factorStackEffect
47 syn region factorGenericN matchgroup=factorGenericNDelims start=/\<GENERIC#\s\+\S\+\s\+\d\+\>/ end=/$/ contains=factorStackEffect
48
49 syn region factorPrivateDefn matchgroup=factorPrivateDefnDelims start=/\<\(SYNTAX\|\(MACRO\|MEMO\)\?:\?\):\s\+\S\+\>/ end=/\<;\>/ contains=@factorDefnContents contained
50 syn region factorPrivateMethod matchgroup=factorPrivateMethodDelims start=/\<M::\?\s\+\S\+\s\+\S\+\>/ end=/\<;\>/ contains=@factorDefnContents contained
51 syn region factorPGeneric matchgroup=factorPGenericDelims start=/\<GENERIC:\s\+\S\+\>/ end=/$/ contains=factorStackEffect contained
52 syn region factorPGenericN matchgroup=factorPGenericNDelims start=/\<GENERIC#\s\+\S\+\s\+\d\+\>/ end=/$/ contains=factorStackEffect
53
54 syn region None matchgroup=factorPrivate start=/\<<PRIVATE\>/ end=/\<PRIVATE>\>/ contains=@factorDefnContents,factorPrivateDefn,factorPrivateMethod,factorPGeneric,factorPGenericN
55
56
57 syn keyword factorBoolean f t
58 syn keyword factorBreakpoint B
59 syn keyword factorFrySpecifier @ _ contained
60 syn keyword factorDeclaration delimiter deprecated final flushable foldable inline recursive
61 syn match factorCallQuotation /\<call(\s.*\s--\s.*\s)\>/
62 syn match factorExecute /\<execute(\s.*\s--\s.*\s)\>/
63 syn keyword factorCallNextMethod call-next-method
64
65 <%
66
67 ! uncomment this if you want all words from all vocabularies highlighted. Note
68 ! that this changes factor.vim from around 8k to around 100k (and is a bit
69 ! broken)
70
71 ! vocabs [ print-keywords ] each
72
73     {
74         "kernel" "assocs" "combinators" "math" "sequences"
75         "namespaces" "arrays" "io" "strings" "vectors"
76         "continuations"
77     } [ print-keywords ] each
78 %>
79
80 syn cluster factorReal          contains=factorInt,factorFloat,factorRatio,factorBinary,factorHex,factorOctal
81 syn cluster factorNumber        contains=@factorReal,factorComplex
82 syn cluster factorNumErr        contains=factorBinErr,factorHexErr,factorOctErr
83 syn match   factorInt           /\<-\=[0-9]\([0-9,]*[0-9]\)\?\>/
84 syn match   factorFloat         /\<-\=[0-9]\([0-9,]*[0-9]\)\?\.[0-9,]*[0-9]\+\>/
85 syn match   factorRatio         /\<-\=[0-9]\([0-9,]*[0-9]\)\?\(+[0-9]\([0-9,]*[0-9]\+\)\?\)\?\/-\=[0-9]\([0-9,]*[0-9]\+\)\?\.\?\>/
86 syn region  factorComplex       start=/\<C{\>/ end=/\<}\>/ contains=@factorReal
87 syn match   factorBinErr        /\<BIN:\s\+-\=[01,]*[^01 ]\S*\>/
88 syn match   factorBinary        /\<BIN:\s\+-\=[01,]\+\>/
89 syn match   factorHexErr        /\<HEX:\s\+-\=\(,\S*\|\S*,\|[-0-9a-fA-Fp,]*[^-0-9a-fA-Fp, ]\S*\)\>/
90 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]\)\?\)\?\>/
91 syn match   factorOctErr        /\<OCT:\s\+-\=\(,\S*\|\S*,\|[0-7,]*[^0-7, ]\S*\)\>/
92 syn match   factorOctal         /\<OCT:\s\+-\=[0-7,]\+\>/
93 syn match   factorNan           /\<NAN:\s\+[0-9a-fA-F]\([0-9a-fA-F,]*[0-9a-fA-F]\)\?\>/
94
95 syn match   factorIn            /\<IN:\s\+\S\+\>/
96 syn match   factorUse           /\<USE:\s\+\S\+\>/
97 syn match   factorUnuse         /\<UNUSE:\s\+\S\+\>/
98
99 syn match   factorChar          /\<CHAR:\s\+\S\+\>/
100
101 syn match   factorBackslash     /\<\\\>\s\+\S\+\>/
102 syn match   factorLiteral       /\<\$\>\s\+\S\+\>/
103 syn region  factorLiteralBlock  start=/\<\$\[\>/ end=/\<\]\>/
104
105 syn region  factorUsing         start=/\<USING:\>/       end=/;/
106 syn match   factorQualified     /\<QUALIFIED:\s\+\S\+\>/
107 syn match   factorQualifiedWith /\<QUALIFIED-WITH:\s\+\S\+\s\+\S\+\>/
108 syn region  factorExclude       start=/\<EXCLUDE:\>/     end=/;/
109 syn region  factorFrom          start=/\<FROM:\>/        end=/;/
110 syn region  factorRename        start=/\<RENAME:\>/      end=/;/
111 syn region  factorSingletons    start=/\<SINGLETONS:\>/  end=/;/
112 syn match   factorSymbol        /\<SYMBOL:\s\+\S\+\>/
113 syn region  factorSymbols       start=/\<SYMBOLS:\>/     end=/;/
114 syn region  factorConstructor2  start=/\<CONSTRUCTOR:\?/ end=/;/
115 syn region  factorIntersection  start=/\<INTERSECTION:\>/ end=/\<;\>/
116 syn region  factorTuple         start=/\<TUPLE:\>/ end=/\<;\>/
117 syn region  factorUnion         start=/\<UNION:\>/ end=/\<;\>/
118 syn region  factorStruct        start=/\<\(UNION-STRUCT:\|STRUCT:\)\>/ end=/\<;\>/
119
120 syn match   factorConstant      /\<CONSTANT:\s\+\S\+\>/
121 syn match   factorAlias         /\<ALIAS:\s\+\S\+\s\+\S\+\>/
122 syn match   factorSingleton     /\<SINGLETON:\s\+\S\+\>/
123 syn match   factorPostpone      /\<POSTPONE:\s\+\S\+\>/
124 syn match   factorDefer         /\<DEFER:\s\+\S\+\>/
125 syn match   factorForget        /\<FORGET:\s\+\S\+\>/
126 syn match   factorMixin         /\<MIXIN:\s\+\S\+\>/
127 syn match   factorInstance      /\<INSTANCE:\s\+\S\+\s\+\S\+\>/
128 syn match   factorHook          /\<HOOK:\s\+\S\+\s\+\S\+\>/
129 syn match   factorMain          /\<MAIN:\s\+\S\+\>/
130 syn match   factorConstructor   /\<C:\s\+\S\+\s\+\S\+\>/
131 syn match   factorAlien         /\<ALIEN:\s\+[0-9a-fA-F]\([0-9a-fA-F,]*[0-9a-fA-F]\)\?\>/
132 syn match   factorSlot          /\<SLOT:\s\+\S\+\>/
133
134 syn cluster factorWordOps       contains=factorConstant,factorAlias,factorSingleton,factorSingletons,factorSymbol,factorSymbols,factorPostpone,factorDefer,factorForget,factorMixin,factorInstance,factorHook,factorMain,factorConstructor
135
136 "TODO:
137 "misc:
138 " HELP:
139 " ARTICLE:
140 "literals:
141 " PRIMITIVE:
142
143 "C interface:
144 " C-ENUM:
145 " FUNCTION:
146 " TYPEDEF:
147 " LIBRARY:
148 "#\ "
149
150 syn region factorString start=/\<"/ skip=/\\"/ end=/"/
151 syn region factorTriString start=/\<"""/ skip=/\\"/ end=/"""/
152 syn region factorSbuf start=/\<[-a-zA-Z0-9]\+"\>/ skip=/\\"/ end=/"/
153
154 syn region factorMultiString matchgroup=factorMultiStringDelims start=/\<STRING:\s\+\S\+\>/ end=/^;$/ contains=factorMultiStringContents
155 syn match factorMultiStringContents /.*/ contained
156
157 "syn match factorStackEffectErr /\<)\>/
158 "syn region factorStackEffectErr start=/\<(\>/ end=/\<)\>/
159 "syn region factorStackEffect start=/\<(\>/ end=/\<)\>/ contained
160 syn match factorStackEffect /\<(\s.*\s--\s.*\s)\>/ contained
161 syn match factorLiteralStackEffect /\<((\s.*\s--\s.*\s))\>/
162
163 "adapted from lisp.vim
164 if exists("g:factor_norainbow")
165     syn region factorQuotation matchgroup=factorDelimiter start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/ matchgroup=factorDelimiter end=/\<\]\>/ contains=ALL
166 else
167     syn region factorQuotation0           matchgroup=hlLevel0 start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/ end=/\<\]\>/ contains=@factorCluster,factorQuotation1,factorArray1
168     syn region factorQuotation1 contained matchgroup=hlLevel1 start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/  end=/\<\]\>/ contains=@factorCluster,factorQuotation2,factorArray2
169     syn region factorQuotation2 contained matchgroup=hlLevel2 start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/  end=/\<\]\>/ contains=@factorCluster,factorQuotation3,factorArray3
170     syn region factorQuotation3 contained matchgroup=hlLevel3 start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/  end=/\<\]\>/ contains=@factorCluster,factorQuotation4,factorArray4
171     syn region factorQuotation4 contained matchgroup=hlLevel4 start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/  end=/\<\]\>/ contains=@factorCluster,factorQuotation5,factorArray5
172     syn region factorQuotation5 contained matchgroup=hlLevel5 start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/  end=/\<\]\>/ contains=@factorCluster,factorQuotation6,factorArray6
173     syn region factorQuotation6 contained matchgroup=hlLevel6 start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/  end=/\<\]\>/ contains=@factorCluster,factorQuotation7,factorArray7
174     syn region factorQuotation7 contained matchgroup=hlLevel7 start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/  end=/\<\]\>/ contains=@factorCluster,factorQuotation8,factorArray8
175     syn region factorQuotation8 contained matchgroup=hlLevel8 start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/  end=/\<\]\>/ contains=@factorCluster,factorQuotation9,factorArray9
176     syn region factorQuotation9 contained matchgroup=hlLevel9 start=/\<\(\(\('\|\$\|\)\[\)\|\[\(let\||\)\)\>/  end=/\<\]\>/ contains=@factorCluster,factorQuotation0,factorArray0
177 endif
178
179 if exists("g:factor_norainbow")
180     syn region factorArray    matchgroup=factorDelimiter start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/  matchgroup=factorDelimiter end=/\<}\>/ contains=ALL
181 else
182     syn region factorArray0           matchgroup=hlLevel0 start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray1,factorQuotation1
183     syn region factorArray1 contained matchgroup=hlLevel1 start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray2,factorQuotation2
184     syn region factorArray2 contained matchgroup=hlLevel2 start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray3,factorQuotation3
185     syn region factorArray3 contained matchgroup=hlLevel3 start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray4,factorQuotation4
186     syn region factorArray4 contained matchgroup=hlLevel4 start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray5,factorQuotation5
187     syn region factorArray5 contained matchgroup=hlLevel5 start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray6,factorQuotation6
188     syn region factorArray6 contained matchgroup=hlLevel6 start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray7,factorQuotation7
189     syn region factorArray7 contained matchgroup=hlLevel7 start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray8,factorQuotation8
190     syn region factorArray8 contained matchgroup=hlLevel8 start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray9,factorQuotation9
191     syn region factorArray9 contained matchgroup=hlLevel9 start=/\<\(\$\|[-a-zA-Z0-9]\+\)\?{\>/ end=/\<}\>/ contains=@factorCluster,factorArray0,factorQuotation0
192 endif
193
194 syn match factorBracketErr /\<\]\>/
195 syn match factorBracketErr /\<}\>/
196
197 syn sync lines=100
198
199 if version >= 508 || !exists("did_factor_syn_inits")
200     if version <= 508
201         let did_factor_syn_inits = 1
202         command -nargs=+ HiLink hi link <args>
203     else
204         command -nargs=+ HiLink hi def link <args>
205     endif
206
207     HiLink factorComment                Comment
208     HiLink factorStackEffect            Typedef
209     HiLink factorLiteralStackEffect     Typedef
210     HiLink factorTodo                   Todo
211     HiLink factorInclude                Include
212     HiLink factorRepeat                 Repeat
213     HiLink factorConditional            Conditional
214     HiLink factorKeyword                Keyword
215     HiLink factorCallQuotation          Keyword
216     HiLink factorExecute                Keyword
217     HiLink factorCallNextMethod         Keyword
218     HiLink factorOperator               Operator
219     HiLink factorFrySpecifier           Operator
220     HiLink factorBoolean                Boolean
221     HiLink factorBreakpoint             Debug
222     HiLink factorDefnDelims             Typedef
223     HiLink factorMethodDelims           Typedef
224     HiLink factorGenericDelims          Typedef
225     HiLink factorGenericNDelims         Typedef
226     HiLink factorConstructor            Typedef
227     HiLink factorConstructor2           Typedef
228     HiLink factorPrivate                Special
229     HiLink factorPrivateDefnDelims      Special
230     HiLink factorPrivateMethodDelims    Special
231     HiLink factorPGenericDelims         Special
232     HiLink factorPGenericNDelims        Special
233     HiLink factorString                 String
234     HiLink factorTriString              String
235     HiLink factorSbuf                   String
236     HiLink factorMultiStringContents    String
237     HiLink factorMultiStringDelims      Typedef
238     HiLink factorBracketErr             Error
239     HiLink factorComplex                Number
240     HiLink factorRatio                  Number
241     HiLink factorBinary                 Number
242     HiLink factorBinErr                 Error
243     HiLink factorHex                    Number
244     HiLink factorHexErr                 Error
245     HiLink factorNan                    Number
246     HiLink factorOctal                  Number
247     HiLink factorOctErr                 Error
248     HiLink factorFloat                  Float
249     HiLink factorInt                    Number
250     HiLink factorUsing                  Include
251     HiLink factorQualified              Include
252     HiLink factorQualifiedWith          Include
253     HiLink factorExclude                Include
254     HiLink factorFrom                   Include
255     HiLink factorRename                 Include
256     HiLink factorUse                    Include
257     HiLink factorUnuse                  Include
258     HiLink factorIn                     Define
259     HiLink factorChar                   Character
260     HiLink factorDelimiter              Delimiter
261     HiLink factorBackslash              Special
262     HiLink factorLiteral                Special
263     HiLink factorLiteralBlock           Special
264     HiLink factorDeclaration            Typedef
265     HiLink factorSymbol                 Define
266     HiLink factorSymbols                Define
267     HiLink factorConstant               Define
268     HiLink factorAlias                  Define
269     HiLink factorSingleton              Define
270     HiLink factorSingletons             Define
271     HiLink factorMixin                  Typedef
272     HiLink factorInstance               Typedef
273     HiLink factorHook                   Typedef
274     HiLink factorMain                   Define
275     HiLink factorPostpone               Define
276     HiLink factorDefer                  Define
277     HiLink factorForget                 Define
278     HiLink factorAlien                  Define
279     HiLink factorSlot                   Define
280     HiLink factorIntersection           Typedef
281     HiLink factorTuple                  Typedef
282     HiLink factorUnion                  Typedef
283     HiLink factorStruct                 Typedef
284
285     if &bg == "dark"
286         hi   hlLevel0 ctermfg=red         guifg=red1
287         hi   hlLevel1 ctermfg=yellow      guifg=orange1
288         hi   hlLevel2 ctermfg=green       guifg=yellow1
289         hi   hlLevel3 ctermfg=cyan        guifg=greenyellow
290         hi   hlLevel4 ctermfg=magenta     guifg=green1
291         hi   hlLevel5 ctermfg=red         guifg=springgreen1
292         hi   hlLevel6 ctermfg=yellow      guifg=cyan1
293         hi   hlLevel7 ctermfg=green       guifg=slateblue1
294         hi   hlLevel8 ctermfg=cyan        guifg=magenta1
295         hi   hlLevel9 ctermfg=magenta     guifg=purple1
296     else
297         hi   hlLevel0 ctermfg=red         guifg=red3
298         hi   hlLevel1 ctermfg=darkyellow  guifg=orangered3
299         hi   hlLevel2 ctermfg=darkgreen   guifg=orange2
300         hi   hlLevel3 ctermfg=blue        guifg=yellow3
301         hi   hlLevel4 ctermfg=darkmagenta guifg=olivedrab4
302         hi   hlLevel5 ctermfg=red         guifg=green4
303         hi   hlLevel6 ctermfg=darkyellow  guifg=paleturquoise3
304         hi   hlLevel7 ctermfg=darkgreen   guifg=deepskyblue4
305         hi   hlLevel8 ctermfg=blue        guifg=darkslateblue
306         hi   hlLevel9 ctermfg=darkmagenta guifg=darkviolet
307     endif
308
309     delcommand HiLink
310 endif
311
312 let b:current_syntax = "factor"
313
314 set sw=4
315 set sts=4
316 set expandtab
317 set autoindent " annoying?
318
319 " vim: syntax=vim