xref: /vim-8.2.3635/runtime/syntax/monk.vim (revision f37506f6)
1071d4279SBram Moolenaar" Vim syntax file
2071d4279SBram Moolenaar" Language: Monk (See-Beyond Technologies)
3071d4279SBram Moolenaar" Maintainer: Mike Litherland <[email protected]>
4b8ff1fb5SBram Moolenaar" Last Change: 2012 Feb 03 by Thilo Six
5071d4279SBram Moolenaar
6071d4279SBram Moolenaar" This syntax file is good enough for my needs, but others
7071d4279SBram Moolenaar" may desire more features.  Suggestions and bug reports
8071d4279SBram Moolenaar" are solicited by the author (above).
9071d4279SBram Moolenaar
10071d4279SBram Moolenaar" Originally based on the Scheme syntax file by:
11071d4279SBram Moolenaar
12071d4279SBram Moolenaar" Maintainer:	Dirk van Deun <[email protected]>
13071d4279SBram Moolenaar" Last Change:	April 30, 1998
14071d4279SBram Moolenaar
15071d4279SBram Moolenaar" In fact it's almost identical. :)
16071d4279SBram Moolenaar
17071d4279SBram Moolenaar" The original author's notes:
18071d4279SBram Moolenaar" This script incorrectly recognizes some junk input as numerals:
19071d4279SBram Moolenaar" parsing the complete system of Scheme numerals using the pattern
20071d4279SBram Moolenaar" language is practically impossible: I did a lax approximation.
21071d4279SBram Moolenaar
22071d4279SBram Moolenaar" Initializing:
23071d4279SBram Moolenaar
2489bcfda6SBram Moolenaar" quit when a syntax file was already loaded
2589bcfda6SBram Moolenaarif exists("b:current_syntax")
26071d4279SBram Moolenaar  finish
27071d4279SBram Moolenaarendif
28071d4279SBram Moolenaar
29b8ff1fb5SBram Moolenaarlet s:cpo_save = &cpo
30b8ff1fb5SBram Moolenaarset cpo&vim
31b8ff1fb5SBram Moolenaar
32071d4279SBram Moolenaarsyn case ignore
33071d4279SBram Moolenaar
34071d4279SBram Moolenaar" Fascist highlighting: everything that doesn't fit the rules is an error...
35071d4279SBram Moolenaar
36071d4279SBram Moolenaarsyn match	monkError	oneline    ![^ \t()";]*!
37071d4279SBram Moolenaarsyn match	monkError	oneline    ")"
38071d4279SBram Moolenaar
39071d4279SBram Moolenaar" Quoted and backquoted stuff
40071d4279SBram Moolenaar
41071d4279SBram Moolenaarsyn region monkQuoted matchgroup=Delimiter start="['`]" end=![ \t()";]!me=e-1 contains=ALLBUT,monkStruc,monkSyntax,monkFunc
42071d4279SBram Moolenaar
43071d4279SBram Moolenaarsyn region monkQuoted matchgroup=Delimiter start="['`](" matchgroup=Delimiter end=")" contains=ALLBUT,monkStruc,monkSyntax,monkFunc
44071d4279SBram Moolenaarsyn region monkQuoted matchgroup=Delimiter start="['`]#(" matchgroup=Delimiter end=")" contains=ALLBUT,monkStruc,monkSyntax,monkFunc
45071d4279SBram Moolenaar
46071d4279SBram Moolenaarsyn region monkStrucRestricted matchgroup=Delimiter start="(" matchgroup=Delimiter end=")" contains=ALLBUT,monkStruc,monkSyntax,monkFunc
47071d4279SBram Moolenaarsyn region monkStrucRestricted matchgroup=Delimiter start="#(" matchgroup=Delimiter end=")" contains=ALLBUT,monkStruc,monkSyntax,monkFunc
48071d4279SBram Moolenaar
49071d4279SBram Moolenaarsyn region monkUnquote matchgroup=Delimiter start="," end=![ \t()";]!me=e-1 contains=ALLBUT,monkStruc,monkSyntax,monkFunc
50071d4279SBram Moolenaarsyn region monkUnquote matchgroup=Delimiter start=",@" end=![ \t()";]!me=e-1 contains=ALLBUT,monkStruc,monkSyntax,monkFunc
51071d4279SBram Moolenaar
52071d4279SBram Moolenaarsyn region monkUnquote matchgroup=Delimiter start=",(" end=")" contains=ALLBUT,monkStruc,monkSyntax,monkFunc
53071d4279SBram Moolenaarsyn region monkUnquote matchgroup=Delimiter start=",@(" end=")" contains=ALLBUT,monkStruc,monkSyntax,monkFunc
54071d4279SBram Moolenaar
55071d4279SBram Moolenaarsyn region monkUnquote matchgroup=Delimiter start=",#(" end=")" contains=ALLBUT,monkStruc,monkSyntax,monkFunc
56071d4279SBram Moolenaarsyn region monkUnquote matchgroup=Delimiter start=",@#(" end=")" contains=ALLBUT,monkStruc,monkSyntax,monkFunc
57071d4279SBram Moolenaar
58071d4279SBram Moolenaar" R5RS Scheme Functions and Syntax:
59071d4279SBram Moolenaar
60071d4279SBram Moolenaarsetlocal iskeyword=33,35-39,42-58,60-90,94,95,97-122,126,_
61071d4279SBram Moolenaar
62071d4279SBram Moolenaarsyn keyword monkSyntax lambda and or if cond case define let let* letrec
63071d4279SBram Moolenaarsyn keyword monkSyntax begin do delay set! else =>
64071d4279SBram Moolenaarsyn keyword monkSyntax quote quasiquote unquote unquote-splicing
65071d4279SBram Moolenaarsyn keyword monkSyntax define-syntax let-syntax letrec-syntax syntax-rules
66071d4279SBram Moolenaar
67071d4279SBram Moolenaarsyn keyword monkFunc not boolean? eq? eqv? equal? pair? cons car cdr set-car!
68071d4279SBram Moolenaarsyn keyword monkFunc set-cdr! caar cadr cdar cddr caaar caadr cadar caddr
69071d4279SBram Moolenaarsyn keyword monkFunc cdaar cdadr cddar cdddr caaaar caaadr caadar caaddr
70071d4279SBram Moolenaarsyn keyword monkFunc cadaar cadadr caddar cadddr cdaaar cdaadr cdadar cdaddr
71071d4279SBram Moolenaarsyn keyword monkFunc cddaar cddadr cdddar cddddr null? list? list length
72071d4279SBram Moolenaarsyn keyword monkFunc append reverse list-ref memq memv member assq assv assoc
73071d4279SBram Moolenaarsyn keyword monkFunc symbol? symbol->string string->symbol number? complex?
74071d4279SBram Moolenaarsyn keyword monkFunc real? rational? integer? exact? inexact? = < > <= >=
75071d4279SBram Moolenaarsyn keyword monkFunc zero? positive? negative? odd? even? max min + * - / abs
76071d4279SBram Moolenaarsyn keyword monkFunc quotient remainder modulo gcd lcm numerator denominator
77071d4279SBram Moolenaarsyn keyword monkFunc floor ceiling truncate round rationalize exp log sin cos
78071d4279SBram Moolenaarsyn keyword monkFunc tan asin acos atan sqrt expt make-rectangular make-polar
79071d4279SBram Moolenaarsyn keyword monkFunc real-part imag-part magnitude angle exact->inexact
80071d4279SBram Moolenaarsyn keyword monkFunc inexact->exact number->string string->number char=?
81071d4279SBram Moolenaarsyn keyword monkFunc char-ci=? char<? char-ci<? char>? char-ci>? char<=?
82071d4279SBram Moolenaarsyn keyword monkFunc char-ci<=? char>=? char-ci>=? char-alphabetic? char?
83071d4279SBram Moolenaarsyn keyword monkFunc char-numeric? char-whitespace? char-upper-case?
84071d4279SBram Moolenaarsyn keyword monkFunc char-lower-case?
85071d4279SBram Moolenaarsyn keyword monkFunc char->integer integer->char char-upcase char-downcase
86071d4279SBram Moolenaarsyn keyword monkFunc string? make-string string string-length string-ref
87071d4279SBram Moolenaarsyn keyword monkFunc string-set! string=? string-ci=? string<? string-ci<?
88071d4279SBram Moolenaarsyn keyword monkFunc string>? string-ci>? string<=? string-ci<=? string>=?
89071d4279SBram Moolenaarsyn keyword monkFunc string-ci>=? substring string-append vector? make-vector
90071d4279SBram Moolenaarsyn keyword monkFunc vector vector-length vector-ref vector-set! procedure?
91071d4279SBram Moolenaarsyn keyword monkFunc apply map for-each call-with-current-continuation
92071d4279SBram Moolenaarsyn keyword monkFunc call-with-input-file call-with-output-file input-port?
93071d4279SBram Moolenaarsyn keyword monkFunc output-port? current-input-port current-output-port
94071d4279SBram Moolenaarsyn keyword monkFunc open-input-file open-output-file close-input-port
95071d4279SBram Moolenaarsyn keyword monkFunc close-output-port eof-object? read read-char peek-char
96071d4279SBram Moolenaarsyn keyword monkFunc write display newline write-char call/cc
97071d4279SBram Moolenaarsyn keyword monkFunc list-tail string->list list->string string-copy
98071d4279SBram Moolenaarsyn keyword monkFunc string-fill! vector->list list->vector vector-fill!
99071d4279SBram Moolenaarsyn keyword monkFunc force with-input-from-file with-output-to-file
100071d4279SBram Moolenaarsyn keyword monkFunc char-ready? load transcript-on transcript-off eval
101071d4279SBram Moolenaarsyn keyword monkFunc dynamic-wind port? values call-with-values
102071d4279SBram Moolenaarsyn keyword monkFunc monk-report-environment null-environment
103071d4279SBram Moolenaarsyn keyword monkFunc interaction-environment
104071d4279SBram Moolenaar
105071d4279SBram Moolenaar" Keywords specific to STC's implementation
106071d4279SBram Moolenaar
107071d4279SBram Moolenaarsyn keyword monkFunc $event-clear $event-parse $event->string $make-event-map
108071d4279SBram Moolenaarsyn keyword monkFunc $resolve-event-definition change-pattern copy copy-strip
109071d4279SBram Moolenaarsyn keyword monkFunc count-data-children count-map-children count-rep data-map
110071d4279SBram Moolenaarsyn keyword monkFunc duplicate duplicate-strip file-check file-lookup get
111071d4279SBram Moolenaarsyn keyword monkFunc insert list-lookup node-has-data? not-verify path?
112071d4279SBram Moolenaarsyn keyword monkFunc path-defined-as-repeating? path-nodeclear path-nodedepth
113071d4279SBram Moolenaarsyn keyword monkFunc path-nodename path-nodeparentname path->string path-valid?
114071d4279SBram Moolenaarsyn keyword monkFunc regex string->path timestamp uniqueid verify
115071d4279SBram Moolenaar
116071d4279SBram Moolenaar" Keywords from the Monk function library (from e*Gate 4.1 programmers ref)
117071d4279SBram Moolenaarsyn keyword monkFunc allcap? capitalize char-punctuation? char-substitute
118071d4279SBram Moolenaarsyn keyword monkFunc char-to-char conv count-used-children degc->degf
119071d4279SBram Moolenaarsyn keyword monkFunc diff-two-dates display-error empty-string? fail_id
120071d4279SBram Moolenaarsyn keyword monkFunc fail_id_if fail_translation fail_translation_if
121071d4279SBram Moolenaarsyn keyword monkFunc find-get-after find-get-before get-timestamp julian-date?
122071d4279SBram Moolenaarsyn keyword monkFunc julian->standard leap-year? map-string not-empty-string?
123071d4279SBram Moolenaarsyn keyword monkFunc standard-date? standard->julian string-begins-with?
124071d4279SBram Moolenaarsyn keyword monkFunc string-contains? string-ends-with? string-search-from-left
125071d4279SBram Moolenaarsyn keyword monkFunc string-search-from-right string->ssn strip-punct
126071d4279SBram Moolenaarsyn keyword monkFunc strip-string substring=? symbol-table-get symbol-table-put
127071d4279SBram Moolenaarsyn keyword monkFunc trim-string-left trim-string-right valid-decimal?
128071d4279SBram Moolenaarsyn keyword monkFunc valid-integer? verify-type
129071d4279SBram Moolenaar
130071d4279SBram Moolenaar" Writing out the complete description of Scheme numerals without
131071d4279SBram Moolenaar" using variables is a day's work for a trained secretary...
132071d4279SBram Moolenaar" This is a useful lax approximation:
133071d4279SBram Moolenaar
134071d4279SBram Moolenaarsyn match	monkNumber	oneline    "[-#+0-9.][-#+/[email protected]]*"
135071d4279SBram Moolenaarsyn match	monkError	oneline    ![-#+0-9.][-#+/[email protected]]*[^-#+/[email protected] \t()";][^ \t()";]*!
136071d4279SBram Moolenaar
137071d4279SBram Moolenaarsyn match	monkOther	oneline    ![+-][ \t()";]!me=e-1
138071d4279SBram Moolenaarsyn match	monkOther	oneline    ![+-]$!
139071d4279SBram Moolenaar" ... so that a single + or -, inside a quoted context, would not be
140071d4279SBram Moolenaar" interpreted as a number (outside such contexts, it's a monkFunc)
141071d4279SBram Moolenaar
142071d4279SBram Moolenaarsyn match	monkDelimiter	oneline    !\.[ \t()";]!me=e-1
143071d4279SBram Moolenaarsyn match	monkDelimiter	oneline    !\.$!
144071d4279SBram Moolenaar" ... and a single dot is not a number but a delimiter
145071d4279SBram Moolenaar
146071d4279SBram Moolenaar" Simple literals:
147071d4279SBram Moolenaar
148071d4279SBram Moolenaarsyn match	monkBoolean	oneline    "#[tf]"
149071d4279SBram Moolenaarsyn match	monkError	oneline    !#[tf][^ \t()";]\+!
150071d4279SBram Moolenaar
151071d4279SBram Moolenaarsyn match	monkChar	oneline    "#\\"
152071d4279SBram Moolenaarsyn match	monkChar	oneline    "#\\."
153071d4279SBram Moolenaarsyn match	monkError	oneline    !#\\.[^ \t()";]\+!
154071d4279SBram Moolenaarsyn match	monkChar	oneline    "#\\space"
155071d4279SBram Moolenaarsyn match	monkError	oneline    !#\\space[^ \t()";]\+!
156071d4279SBram Moolenaarsyn match	monkChar	oneline    "#\\newline"
157071d4279SBram Moolenaarsyn match	monkError	oneline    !#\\newline[^ \t()";]\+!
158071d4279SBram Moolenaar
159071d4279SBram Moolenaar" This keeps all other stuff unhighlighted, except *stuff* and <stuff>:
160071d4279SBram Moolenaar
161071d4279SBram Moolenaarsyn match	monkOther	oneline    ,[a-z!$%&*/:<=>?^_~][-a-z!$%&*/:<=>?^_~0-9+.@]*,
162071d4279SBram Moolenaarsyn match	monkError	oneline    ,[a-z!$%&*/:<=>?^_~][-a-z!$%&*/:<=>?^_~0-9+.@]*[^-a-z!$%&*/:<=>?^_~0-9+.@ \t()";]\+[^ \t()";]*,
163071d4279SBram Moolenaar
164071d4279SBram Moolenaarsyn match	monkOther	oneline    "\.\.\."
165071d4279SBram Moolenaarsyn match	monkError	oneline    !\.\.\.[^ \t()";]\+!
166071d4279SBram Moolenaar" ... a special identifier
167071d4279SBram Moolenaar
168071d4279SBram Moolenaarsyn match	monkConstant	oneline    ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]*\*[ \t()";],me=e-1
169071d4279SBram Moolenaarsyn match	monkConstant	oneline    ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]*\*$,
170071d4279SBram Moolenaarsyn match	monkError	oneline    ,\*[-a-z!$%&*/:<=>?^_~0-9+.@]*\*[^-a-z!$%&*/:<=>?^_~0-9+.@ \t()";]\+[^ \t()";]*,
171071d4279SBram Moolenaar
172071d4279SBram Moolenaarsyn match	monkConstant	oneline    ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>[ \t()";],me=e-1
173071d4279SBram Moolenaarsyn match	monkConstant	oneline    ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>$,
174071d4279SBram Moolenaarsyn match	monkError	oneline    ,<[-a-z!$%&*/:<=>?^_~0-9+.@]*>[^-a-z!$%&*/:<=>?^_~0-9+.@ \t()";]\+[^ \t()";]*,
175071d4279SBram Moolenaar
176071d4279SBram Moolenaar" Monk input and output structures
177071d4279SBram Moolenaarsyn match	monkSyntax	oneline    "\(\~input\|\[I\]->\)[^ \t]*"
178071d4279SBram Moolenaarsyn match	monkFunc	oneline    "\(\~output\|\[O\]->\)[^ \t]*"
179071d4279SBram Moolenaar
180071d4279SBram Moolenaar" Non-quoted lists, and strings:
181071d4279SBram Moolenaar
182071d4279SBram Moolenaarsyn region monkStruc matchgroup=Delimiter start="(" matchgroup=Delimiter end=")" contains=ALL
183071d4279SBram Moolenaarsyn region monkStruc matchgroup=Delimiter start="#(" matchgroup=Delimiter end=")" contains=ALL
184071d4279SBram Moolenaar
185071d4279SBram Moolenaarsyn region	monkString	start=+"+  skip=+\\[\\"]+ end=+"+
186071d4279SBram Moolenaar
187071d4279SBram Moolenaar" Comments:
188071d4279SBram Moolenaar
189071d4279SBram Moolenaarsyn match	monkComment	";.*$"
190071d4279SBram Moolenaar
191071d4279SBram Moolenaar" Synchronization and the wrapping up...
192071d4279SBram Moolenaar
193071d4279SBram Moolenaarsyn sync match matchPlace grouphere NONE "^[^ \t]"
194071d4279SBram Moolenaar" ... i.e. synchronize on a line that starts at the left margin
195071d4279SBram Moolenaar
196071d4279SBram Moolenaar" Define the default highlighting.
19789bcfda6SBram Moolenaar" Only when an item doesn't have highlighting yet
198071d4279SBram Moolenaar
199*f37506f6SBram Moolenaarhi def link monkSyntax		Statement
200*f37506f6SBram Moolenaarhi def link monkFunc		Function
201071d4279SBram Moolenaar
202*f37506f6SBram Moolenaarhi def link monkString		String
203*f37506f6SBram Moolenaarhi def link monkChar		Character
204*f37506f6SBram Moolenaarhi def link monkNumber		Number
205*f37506f6SBram Moolenaarhi def link monkBoolean		Boolean
206071d4279SBram Moolenaar
207*f37506f6SBram Moolenaarhi def link monkDelimiter	Delimiter
208*f37506f6SBram Moolenaarhi def link monkConstant	Constant
209071d4279SBram Moolenaar
210*f37506f6SBram Moolenaarhi def link monkComment		Comment
211*f37506f6SBram Moolenaarhi def link monkError		Error
212071d4279SBram Moolenaar
213071d4279SBram Moolenaar
214071d4279SBram Moolenaarlet b:current_syntax = "monk"
215b8ff1fb5SBram Moolenaar
216b8ff1fb5SBram Moolenaarlet &cpo = s:cpo_save
217b8ff1fb5SBram Moolenaarunlet s:cpo_save
218