7
|
1 " Vim syntax file
|
|
2 " Language: Monk (See-Beyond Technologies)
|
|
3 " Maintainer: Mike Litherland <litherm@ccf.org>
|
3312
|
4 " Last Change: 2012 Feb 03 by Thilo Six
|
7
|
5
|
|
6 " This syntax file is good enough for my needs, but others
|
|
7 " may desire more features. Suggestions and bug reports
|
|
8 " are solicited by the author (above).
|
|
9
|
|
10 " Originally based on the Scheme syntax file by:
|
|
11
|
|
12 " Maintainer: Dirk van Deun <dvandeun@poboxes.com>
|
|
13 " Last Change: April 30, 1998
|
|
14
|
|
15 " In fact it's almost identical. :)
|
|
16
|
|
17 " The original author's notes:
|
|
18 " This script incorrectly recognizes some junk input as numerals:
|
|
19 " parsing the complete system of Scheme numerals using the pattern
|
|
20 " language is practically impossible: I did a lax approximation.
|
|
21
|
|
22 " Initializing:
|
|
23
|
|
24 " For version 5.x: Clear all syntax items
|
|
25 " For version 6.x: Quit when a syntax file was already loaded
|
|
26 if version < 600
|
|
27 syntax clear
|
|
28 elseif exists("b:current_syntax")
|
|
29 finish
|
|
30 endif
|
|
31
|
3312
|
32 let s:cpo_save = &cpo
|
|
33 set cpo&vim
|
|
34
|
7
|
35 syn case ignore
|
|
36
|
|
37 " Fascist highlighting: everything that doesn't fit the rules is an error...
|
|
38
|
|
39 syn match monkError oneline ![^ \t()";]*!
|
|
40 syn match monkError oneline ")"
|
|
41
|
|
42 " Quoted and backquoted stuff
|
|
43
|
|
44 syn region monkQuoted matchgroup=Delimiter start="['`]" end=![ \t()";]!me=e-1 contains=ALLBUT,monkStruc,monkSyntax,monkFunc
|
|
45
|
|
46 syn region monkQuoted matchgroup=Delimiter start="['`](" matchgroup=Delimiter end=")" contains=ALLBUT,monkStruc,monkSyntax,monkFunc
|
|
47 syn region monkQuoted matchgroup=Delimiter start="['`]#(" matchgroup=Delimiter end=")" contains=ALLBUT,monkStruc,monkSyntax,monkFunc
|
|
48
|
|
49 syn region monkStrucRestricted matchgroup=Delimiter start="(" matchgroup=Delimiter end=")" contains=ALLBUT,monkStruc,monkSyntax,monkFunc
|
|
50 syn region monkStrucRestricted matchgroup=Delimiter start="#(" matchgroup=Delimiter end=")" contains=ALLBUT,monkStruc,monkSyntax,monkFunc
|
|
51
|
|
52 syn region monkUnquote matchgroup=Delimiter start="," end=![ \t()";]!me=e-1 contains=ALLBUT,monkStruc,monkSyntax,monkFunc
|
|
53 syn region monkUnquote matchgroup=Delimiter start=",@" end=![ \t()";]!me=e-1 contains=ALLBUT,monkStruc,monkSyntax,monkFunc
|
|
54
|
|
55 syn region monkUnquote matchgroup=Delimiter start=",(" end=")" contains=ALLBUT,monkStruc,monkSyntax,monkFunc
|
|
56 syn region monkUnquote matchgroup=Delimiter start=",@(" end=")" contains=ALLBUT,monkStruc,monkSyntax,monkFunc
|
|
57
|
|
58 syn region monkUnquote matchgroup=Delimiter start=",#(" end=")" contains=ALLBUT,monkStruc,monkSyntax,monkFunc
|
|
59 syn region monkUnquote matchgroup=Delimiter start=",@#(" end=")" contains=ALLBUT,monkStruc,monkSyntax,monkFunc
|
|
60
|
|
61 " R5RS Scheme Functions and Syntax:
|
|
62
|
|
63 if version < 600
|
|
64 set iskeyword=33,35-39,42-58,60-90,94,95,97-122,126,_
|
|
65 else
|
|
66 setlocal iskeyword=33,35-39,42-58,60-90,94,95,97-122,126,_
|
|
67 endif
|
|
68
|
|
69 syn keyword monkSyntax lambda and or if cond case define let let* letrec
|
|
70 syn keyword monkSyntax begin do delay set! else =>
|
|
71 syn keyword monkSyntax quote quasiquote unquote unquote-splicing
|
|
72 syn keyword monkSyntax define-syntax let-syntax letrec-syntax syntax-rules
|
|
73
|
|
74 syn keyword monkFunc not boolean? eq? eqv? equal? pair? cons car cdr set-car!
|
|
75 syn keyword monkFunc set-cdr! caar cadr cdar cddr caaar caadr cadar caddr
|
|
76 syn keyword monkFunc cdaar cdadr cddar cdddr caaaar caaadr caadar caaddr
|
|
77 syn keyword monkFunc cadaar cadadr caddar cadddr cdaaar cdaadr cdadar cdaddr
|
|
78 syn keyword monkFunc cddaar cddadr cdddar cddddr null? list? list length
|
|
79 syn keyword monkFunc append reverse list-ref memq memv member assq assv assoc
|
|
80 syn keyword monkFunc symbol? symbol->string string->symbol number? complex?
|
|
81 syn keyword monkFunc real? rational? integer? exact? inexact? = < > <= >=
|
|
82 syn keyword monkFunc zero? positive? negative? odd? even? max min + * - / abs
|
|
83 syn keyword monkFunc quotient remainder modulo gcd lcm numerator denominator
|
|
84 syn keyword monkFunc floor ceiling truncate round rationalize exp log sin cos
|
|
85 syn keyword monkFunc tan asin acos atan sqrt expt make-rectangular make-polar
|
|
86 syn keyword monkFunc real-part imag-part magnitude angle exact->inexact
|
|
87 syn keyword monkFunc inexact->exact number->string string->number char=?
|
|
88 syn keyword monkFunc char-ci=? char<? char-ci<? char>? char-ci>? char<=?
|
|
89 syn keyword monkFunc char-ci<=? char>=? char-ci>=? char-alphabetic? char?
|
|
90 syn keyword monkFunc char-numeric? char-whitespace? char-upper-case?
|
|
91 syn keyword monkFunc char-lower-case?
|
|
92 syn keyword monkFunc char->integer integer->char char-upcase char-downcase
|
|
93 syn keyword monkFunc string? make-string string string-length string-ref
|
|
94 syn keyword monkFunc string-set! string=? string-ci=? string<? string-ci<?
|
|
95 syn keyword monkFunc string>? string-ci>? string<=? string-ci<=? string>=?
|
|
96 syn keyword monkFunc string-ci>=? substring string-append vector? make-vector
|
|
97 syn keyword monkFunc vector vector-length vector-ref vector-set! procedure?
|
|
98 syn keyword monkFunc apply map for-each call-with-current-continuation
|
|
99 syn keyword monkFunc call-with-input-file call-with-output-file input-port?
|
|
100 syn keyword monkFunc output-port? current-input-port current-output-port
|
|
101 syn keyword monkFunc open-input-file open-output-file close-input-port
|
|
102 syn keyword monkFunc close-output-port eof-object? read read-char peek-char
|
|
103 syn keyword monkFunc write display newline write-char call/cc
|
|
104 syn keyword monkFunc list-tail string->list list->string string-copy
|
|
105 syn keyword monkFunc string-fill! vector->list list->vector vector-fill!
|
|
106 syn keyword monkFunc force with-input-from-file with-output-to-file
|
|
107 syn keyword monkFunc char-ready? load transcript-on transcript-off eval
|
|
108 syn keyword monkFunc dynamic-wind port? values call-with-values
|
|
109 syn keyword monkFunc monk-report-environment null-environment
|
|
110 syn keyword monkFunc interaction-environment
|
|
111
|
|
112 " Keywords specific to STC's implementation
|
|
113
|
|
114 syn keyword monkFunc $event-clear $event-parse $event->string $make-event-map
|
|
115 syn keyword monkFunc $resolve-event-definition change-pattern copy copy-strip
|
|
116 syn keyword monkFunc count-data-children count-map-children count-rep data-map
|
|
117 syn keyword monkFunc duplicate duplicate-strip file-check file-lookup get
|
|
118 syn keyword monkFunc insert list-lookup node-has-data? not-verify path?
|
|
119 syn keyword monkFunc path-defined-as-repeating? path-nodeclear path-nodedepth
|
|
120 syn keyword monkFunc path-nodename path-nodeparentname path->string path-valid?
|
|
121 syn keyword monkFunc regex string->path timestamp uniqueid verify
|
|
122
|
|
123 " Keywords from the Monk function library (from e*Gate 4.1 programmers ref)
|
|
124 syn keyword monkFunc allcap? capitalize char-punctuation? char-substitute
|
|
125 syn keyword monkFunc char-to-char conv count-used-children degc->degf
|
|
126 syn keyword monkFunc diff-two-dates display-error empty-string? fail_id
|
|
127 syn keyword monkFunc fail_id_if fail_translation fail_translation_if
|
|
128 syn keyword monkFunc find-get-after find-get-before get-timestamp julian-date?
|
|
129 syn keyword monkFunc julian->standard leap-year? map-string not-empty-string?
|
|
130 syn keyword monkFunc standard-date? standard->julian string-begins-with?
|
|
131 syn keyword monkFunc string-contains? string-ends-with? string-search-from-left
|
|
132 syn keyword monkFunc string-search-from-right string->ssn strip-punct
|
|
133 syn keyword monkFunc strip-string substring=? symbol-table-get symbol-table-put
|
|
134 syn keyword monkFunc trim-string-left trim-string-right valid-decimal?
|
|
135 syn keyword monkFunc valid-integer? verify-type
|
|
136
|
|
137 " Writing out the complete description of Scheme numerals without
|
|
138 " using variables is a day's work for a trained secretary...
|
|
139 " This is a useful lax approximation:
|
|
140
|
|
141 syn match monkNumber oneline "[-#+0-9.][-#+/0-9a-f@i.boxesfdl]*"
|
|
142 syn match monkError oneline ![-#+0-9.][-#+/0-9a-f@i.boxesfdl]*[^-#+/0-9a-f@i.boxesfdl \t()";][^ \t()";]*!
|
|
143
|
|
144 syn match monkOther oneline ![+-][ \t()";]!me=e-1
|
|
145 syn match monkOther oneline ![+-]$!
|
|
146 " ... so that a single + or -, inside a quoted context, would not be
|
|
147 " interpreted as a number (outside such contexts, it's a monkFunc)
|
|
148
|
|
149 syn match monkDelimiter oneline !\.[ \t()";]!me=e-1
|
|
150 syn match monkDelimiter oneline !\.$!
|
|
151 " ... and a single dot is not a number but a delimiter
|
|
152
|
|
153 " Simple literals:
|
|
154
|
|
155 syn match monkBoolean oneline "#[tf]"
|
|
156 syn match monkError oneline !#[tf][^ \t()";]\+!
|
|
157
|
|
158 syn match monkChar oneline "#\\"
|
|
159 syn match monkChar oneline "#\\."
|
|
160 syn match monkError oneline !#\\.[^ \t()";]\+!
|
|
161 syn match monkChar oneline "#\\space"
|
|
162 syn match monkError oneline !#\\space[^ \t()";]\+!
|
|
163 syn match monkChar oneline "#\\newline"
|
|
164 syn match monkError oneline !#\\newline[^ \t()";]\+!
|
|
165
|
|
166 " This keeps all other stuff unhighlighted, except *stuff* and <stuff>:
|
|
167
|
|
168 syn match monkOther oneline ,[a-z!$%&*/:<=>?^_~][-a-z!$%&*/:<=>?^_~0-9+.@]*,
|
|
169 syn match monkError oneline ,[a-z!$%&*/:<=>?^_~][-a-z!$%&*/:<=>?^_~0-9+.@]*[^-a-z!$%&*/:<=>?^_~0-9+.@ \t()";]\+[^ \t()";]*,
|
|
170
|
|
171 syn match monkOther oneline "\.\.\."
|
|
172 syn match monkError oneline !\.\.\.[^ \t()";]\+!
|
|
173 " ... a special identifier
|
|
174
|
|
175 syn match monkConstant oneline ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]*\*[ \t()";],me=e-1
|
|
176 syn match monkConstant oneline ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]*\*$,
|
|
177 syn match monkError oneline ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]*\*[^-a-z!$%&*/:<=>?^_~0-9+.@ \t()";]\+[^ \t()";]*,
|
|
178
|
|
179 syn match monkConstant oneline ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>[ \t()";],me=e-1
|
|
180 syn match monkConstant oneline ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>$,
|
|
181 syn match monkError oneline ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>[^-a-z!$%&*/:<=>?^_~0-9+.@ \t()";]\+[^ \t()";]*,
|
|
182
|
|
183 " Monk input and output structures
|
|
184 syn match monkSyntax oneline "\(\~input\|\[I\]->\)[^ \t]*"
|
|
185 syn match monkFunc oneline "\(\~output\|\[O\]->\)[^ \t]*"
|
|
186
|
|
187 " Non-quoted lists, and strings:
|
|
188
|
|
189 syn region monkStruc matchgroup=Delimiter start="(" matchgroup=Delimiter end=")" contains=ALL
|
|
190 syn region monkStruc matchgroup=Delimiter start="#(" matchgroup=Delimiter end=")" contains=ALL
|
|
191
|
|
192 syn region monkString start=+"+ skip=+\\[\\"]+ end=+"+
|
|
193
|
|
194 " Comments:
|
|
195
|
|
196 syn match monkComment ";.*$"
|
|
197
|
|
198 " Synchronization and the wrapping up...
|
|
199
|
|
200 syn sync match matchPlace grouphere NONE "^[^ \t]"
|
|
201 " ... i.e. synchronize on a line that starts at the left margin
|
|
202
|
|
203 " Define the default highlighting.
|
|
204 " For version 5.7 and earlier: only when not done already
|
|
205 " For version 5.8 and later: only when an item doesn't have highlighting yet
|
|
206 if version >= 508 || !exists("did_monk_syntax_inits")
|
|
207 if version < 508
|
|
208 let did_monk_syntax_inits = 1
|
|
209 command -nargs=+ HiLink hi link <args>
|
|
210 else
|
|
211 command -nargs=+ HiLink hi def link <args>
|
|
212 endif
|
|
213
|
|
214 HiLink monkSyntax Statement
|
|
215 HiLink monkFunc Function
|
|
216
|
|
217 HiLink monkString String
|
|
218 HiLink monkChar Character
|
|
219 HiLink monkNumber Number
|
|
220 HiLink monkBoolean Boolean
|
|
221
|
|
222 HiLink monkDelimiter Delimiter
|
|
223 HiLink monkConstant Constant
|
|
224
|
|
225 HiLink monkComment Comment
|
|
226 HiLink monkError Error
|
|
227
|
|
228 delcommand HiLink
|
|
229 endif
|
|
230
|
|
231 let b:current_syntax = "monk"
|
3312
|
232
|
|
233 let &cpo = s:cpo_save
|
|
234 unlet s:cpo_save
|