xref: /vim-8.2.3635/runtime/syntax/monk.vim (revision 5f1920ad)
1" Vim syntax file
2" Language: Monk (See-Beyond Technologies)
3" Maintainer: Mike Litherland <[email protected]>
4" Last Change: 2012 Feb 03 by Thilo Six
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 <[email protected]>
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" quit when a syntax file was already loaded
25if exists("b:current_syntax")
26  finish
27endif
28
29let s:cpo_save = &cpo
30set cpo&vim
31
32syn 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
60setlocal iskeyword=33,35-39,42-58,60-90,94,95,97-122,126,_
61
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.][-#+/[email protected]]*"
135syn match	monkError	oneline    ![-#+0-9.][-#+/[email protected]]*[^-#+/[email protected] \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.
197" Only when an item doesn't have highlighting yet
198
199hi def link monkSyntax		Statement
200hi def link monkFunc		Function
201
202hi def link monkString		String
203hi def link monkChar		Character
204hi def link monkNumber		Number
205hi def link monkBoolean		Boolean
206
207hi def link monkDelimiter	Delimiter
208hi def link monkConstant	Constant
209
210hi def link monkComment		Comment
211hi def link monkError		Error
212
213
214let b:current_syntax = "monk"
215
216let &cpo = s:cpo_save
217unlet s:cpo_save
218