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