summaryrefslogtreecommitdiffstats
path: root/genvim.txr
blob: 28b30f785b3f4e3e2e0d58f5f0391bbbb214ba62 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
@(next "match.c")
@(skip)
static void dir_tables_init(void)
{
@(collect)
  sethash(@nil, @{txr-sym}_s,@(skip)
@(until)
}
@(end)
@(bind lib "share/txr/stdlib")
@(next @(open-files ^(#*"eval.c rand.c signal.c stream.c gc.c glob.c"
                      #*"syslog.c filter.c txr.c arith.c unwind.c cadr.c"
                      ,*#`sysif.c @lib/place.tl @lib/ifa.tl @lib/ver.tl`
                      ,*#`@lib/cadr.tl @lib/with-resources.tl`
                      ,*#`@lib/txr-case.tl`)))
@(collect)
@  (block)
@    (cases)
@/.*system_package.*/
@      (accept)
@    (or)
  reg_@/op|mac/(@{txl-sym-nostar}_star_s,@(skip)
@      (bind txl-sym `@{txl-sym-nostar}*`)
@    (or)
  reg_@/op|mac/(@{txl-sym}_s,@(skip)
@    (or)
  reg_@/op|mac|fun/(@(skip)intern(lit("@{txl-sym}")@(skip)
@    (or)
  reg_fun(@{txl-sym}_s,@(skip)
@    (or)
  reg_var@/l?/(@{txl-sym-special}_s,@(skip)
@      (bind txl-sym `*@{txl-sym-special}*`)
@    (or)
  @/ *reg_varl?/(@(skip)intern(lit("@{txl-sym}")@(skip)
@    (or)
@/ *\((defun|defvarl?|defmacro)/ @{txl-sym} @(skip)
@    (end)
@    (set txl-sym @(regsub #/_/ #\- txl-sym))
@  (end)
@(end)
@(do (set [txr-sym 0..0] '("rep" "end" "and" "or"
                           "catch" "finally"
                           "until" "last"
                           "if" "else" "elif"
                           "include")))
@(do (set [txl-sym 0..0] '("macro-time" "macrolet" "symacrolet")))
@(set (txr-sym txl-sym) (@(sort (uniq txr-sym)) @(sort (uniq txl-sym))))
@(bind bs "\\\\")
@(bind hex "0-9A-Fa-f")
@(bind at "\\(@[ \\t]*\\)")
@(bind alpha "A-Za-z_")
@(bind alnum "A-Za-z_0-9")
@(bind dig "0-9")
@(bind oct "0-7")
@(bind chesc `abtnvfre@bs \\n`)
@(bind glyph `!$%&*+\\-<=>?@{bs}_~`)
@(define generate (txr-p))
@  (output @(if txr-p "txr.vim" "tl.vim") :named out)
" VIM Syntax file for txr
" Kaz Kylheku <kaz@@kylheku.com>

" INSTALL-HOWTO:
"
" 1. Create the directory .vim/syntax in your home directory and
"    put the files txr.vim and txl.vim into this directory.
" 2. In your .vimrc, add this command to associate *.txr and *.tl
"    files with the txr and txl filetypes:
"    :au BufRead,BufNewFile *.txr set filetype=txr | set lisp
"    :au BufRead,BufNewFile *.tl set filetype=txl | set lisp
"
" If you want syntax highlighting to be on automatically (for any language)
" you need to add ":syntax on" in your .vimrc also. But you knew that already!
"
" This file is generated by the genvim.txr script in the TXR source tree.

syn case match
syn spell toplevel

setlocal iskeyword=a-z,A-Z,48-57,!,$,&,*,+,-,<,=,>,?,\\,_,~,/
@  (rep) @{txl-sym}@(mod 0 4)@\nsyn keyword txl_keyword contained @{txl-sym}@(end)
@  (end)
@  (if txr-p)
@    (output :continue out)
@      (rep) @{txr-sym}@(mod 0 4)@\nsyn keyword txr_keyword contained @{txr-sym}@(end)
syn match txr_error "@at[*]\?[\t ]*."
syn match txr_atat "@at@@"
syn match txr_comment "@at[#;].*"
syn match txr_contin "@at\\$"
syn match txr_char "@at\\."
syn match txr_error "@at\\[xo]"
syn match txr_char "@at\\x[@hex]\+;\?"
syn match txr_char "@at\\[@oct]\+;\?"
syn match txr_regdir "@at/\(\\/\|[^/]\|\\\n\)*/"
syn match txr_hashbang "^#!.*"
@    (end)
@  (end)
@  (output :continue out)
syn match txr_nested_error "[^\t ]\+" contained
syn match txr_variable "@at[*]\?[ \t]*[@alpha][@alnum]*"
syn match txr_splicevar "@@[ \t,*@@]*[@alpha][@alnum]*"
syn match txr_metanum "@@\+[0-9]\+"
syn match txr_badesc "\\." contained
syn match txr_escat "\\@@" contained
syn match txr_stresc "\\[@chesc"`']" contained
syn match txr_numesc "\\x[@hex]\+;\?" contained
syn match txr_numesc "\\[@oct]\+;\?" contained
syn match txr_regesc "\\[@chesc/sSdDwW()\|.*?+~&%\[\]\-]" contained

syn match txr_chr "#\\x[@hex]\+"@(if txr-p " contained")
syn match txr_chr "#\\o[@oct]\+"@(if txr-p " contained")
syn match txr_chr "#\\[^ \t\n@alnum]"@(if txr-p " contained")
syn match txr_chr "#\\[@alnum]\+"@(if txr-p " contained")
syn match txr_ncomment ";.*"@(if txr-p " contained")

syn match txr_dot "\." contained
syn match txr_num "#x[+\-]\?[@hex]\+"@(if txr-p " contained")
syn match txr_num "#o[+\-]\?[@oct]\+"@(if txr-p " contained")
syn match txr_num "#b[+\-]\?[01]\+"@(if txr-p " contained")
syn match txr_ident "[@alnum@glyph]*[@alpha@glyph^][@alnum@glyph^]*" contained
syn match txl_ident "[:@@][@alnum@glyph^/]\+"@(if txr-p " contained")
syn match txr_braced_ident "[:][@alnum@glyph^/]\+" contained
syn match txl_ident "[@alnum@glyph/]*[@alpha@glyph^/#][@alnum@glyph^/#]*"@(if txr-p " contained")
syn match txr_num "[+\-]\?[@dig]\+\([^@alnum@glyph^/#]\|\n\)"me=e-1@(if txr-p " contained")
syn match txr_badnum "[+\-]\?[@dig]*[.][@dig]\+\([eE][+\-]\?[@dig]\+\)\?[@alpha@glyph^/#]\+"@(if txr-p " contained")
syn match txr_num "[+\-]\?[@dig]*[.][@dig]\+\([eE][+\-]\?[@dig]\+\)\?\([^@alnum@glyph^/#]\|\n\)"me=e-1@(if txr-p " contained")
syn match txr_num "[+\-]\?[@dig]\+\([eE][+\-]\?[@dig]\+\)\([^@alnum@glyph^/#]\|\n\)"me=e-1@(if txr-p " contained")
syn match txl_ident ":"@(if txr-p " contained")
syn match txl_splice "[ \t,]\|,[*]"@(if txr-p " contained")

syn match txr_unquote "," contained
syn match txr_splice ",\*" contained
syn match txr_quote "'" contained
syn match txr_quote "\^" contained
syn match txr_dotdot "\.\." contained
syn match txr_metaat "@@" contained

syn region txr_bracevar matchgroup=Delimiter start="@@[ \t]*[*]\?{" matchgroup=Delimiter end="}" contains=txr_num,txl_ident,txl_splice,txl_metanum,txr_metaat,txr_braced_ident,txr_string,txr_list,txr_bracket,txr_mlist,txr_mbracket,txr_regex,txr_quasilit,txr_chr,txl_splice,txr_nested_error
@  (end)
@  (if txr-p)
@    (output :continue out)
syn region txr_directive matchgroup=Delimiter start="@@[ \t]*(" matchgroup=Delimiter end=")" contains=txr_keyword,txr_string,txr_list,txr_bracket,txr_mlist,txr_mbracket,txr_quasilit,txr_num,txr_badnum,txl_ident,txl_regex,txr_string,txr_chr,txr_quote,txr_unquote,txr_splice,txr_dot,txr_dotdot,txr_metaat,txr_ncomment,txr_nested_error
@    (end)
@  (end)
@  (output :continue out)
syn region txr_list @(if txr-p "contained ")matchgroup=Delimiter start="#\?H\?(" matchgroup=Delimiter end=")" contains=txl_keyword,txr_string,txl_regex,txr_num,txr_badnum,txl_ident,txr_metanum,txr_list,txr_bracket,txr_mlist,txr_mbracket,txr_quasilit,txr_chr,txr_quote,txr_unquote,txr_splice,txr_dot,txr_dotdot,txr_metaat,txr_ncomment,txr_nested_error
syn region txr_bracket @(if txr-p "contained ")matchgroup=Delimiter start="\[" matchgroup=Delimiter end="\]" contains=txl_keyword,txr_string,txl_regex,txr_num,txr_badnum,txl_ident,txr_metanum,txr_list,txr_bracket,txr_mlist,txr_mbracket,txr_quasilit,txr_chr,txr_quote,txr_unquote,txr_splice,txr_dot,txr_dotdot,txr_metaat,txr_ncomment,txr_nested_error
syn region txr_mlist @(if txr-p "contained ")matchgroup=Delimiter start="@@[ \t^',]*(" matchgroup=Delimiter end=")" contains=txl_keyword,txr_string,txl_regex,txr_num,txr_badnum,txl_ident,txr_metanum,txr_list,txr_bracket,txr_mlist,txr_mbracket,txr_quasilit,txr_chr,txr_quote,txr_unquote,txr_splice,txr_dot,txr_dotdot,txr_metaat,txr_ncomment,txr_nested_error
syn region txr_mbracket matchgroup=Delimiter start="@@[ \t^',]*\[" matchgroup=Delimiter end="\]" contains=txl_keyword,txr_string,txl_regex,txr_num,txr_badnum,txl_ident,txr_metanum,txr_list,txr_bracket,txr_mlist,txr_mbracket,txr_quasilit,txr_chr,txr_quote,txr_unquote,txr_splice,txr_dot,txr_dotdot,txr_metaat,txr_ncomment,txr_nested_error
syn region txr_string @(if txr-p "contained ")start=+#\?\*\?"+ end=+["\n]+ contains=txr_stresc,txr_numesc,txr_badesc
syn region txr_quasilit @(if txr-p "contained ")start=+#\?\*\?`+ end=+[`\n]+ contains=txr_splicevar,txr_metanum,txr_bracevar,txr_mlist,txr_mbracket,txr_escat,txr_stresc,txr_numesc,txr_badesc
syn region txr_regex @(if txr-p "contained ")start="/" end="[/\n]" contains=txr_regesc,txr_numesc,txr_badesc
syn region txl_regex @(if txr-p "contained ")start="#/" end="[/\n]" contains=txr_regesc,txr_numesc,txr_badesc

hi def link txr_at Special
hi def link txr_atstar Special
hi def link txr_atat Special
hi def link txr_comment Comment
hi def link txr_ncomment Comment
hi def link txr_hashbang Preproc
hi def link txr_contin Preproc
hi def link txr_char String
hi def link txr_keyword Keyword
hi def link txl_keyword Type
hi def link txr_string String
hi def link txr_chr String
hi def link txr_quasilit String
hi def link txr_regex String
hi def link txl_regex String
hi def link txr_regdir String
hi def link txr_variable Identifier
hi def link txr_splicevar Identifier
hi def link txr_metanum Identifier
hi def link txr_escat Special
hi def link txr_stresc Special
hi def link txr_numesc Special
hi def link txr_regesc Special
hi def link txr_badesc Error
hi def link txr_ident Identifier
hi def link txl_ident Identifier
hi def link txr_num Number
hi def link txr_badnum Error
hi def link txr_quote Special
hi def link txr_unquote Special
hi def link txr_splice Special
hi def link txr_dot Special
hi def link txr_dotdot Special
hi def link txr_metaat Special
hi def link txr_munqspl Special
hi def link txl_splice Special
hi def link txr_error Error
hi def link txr_nested_error Error

let b:current_syntax = "lisp"
@  (end)
@(end)
@(generate t)
@(generate nil)