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