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