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